一个良好的串行通信协议/堆栈为嵌入式设备? [关闭](A good serial communi

2019-07-30 13:05发布

写各个项目的几个不同的自定义串行协议之后,我开始变得沮丧重新发明每一次车轮。 代替继续开发定制的解决方案,为每一个项目,我一直在寻找一个更通用的解决方案。 我不知道是否有人串行协议的知道(或更好,但实现)符合下列要求:

  • 支持多个设备。 我们希望能够支持一个RS485总线。
  • 保证交货。 某种确认机制,以及一些简单的错误检测(CRC16可能是罚款)。
  • 不主/从。 理想情况下,从(S)将能够异步发送数据。 这是大多只是为了美观的原因,每个从感觉不对我投票的概念。
  • OS独立。 理想的情况下它不会在所有依赖于抢占式多任务环境。 我愿意承认这一点,如果我能得到其他的东西。
  • ANSI C.我们需要能够编译几个不同的架构。

速度不是太大的问题的,我们愿意放弃一些速度,以满足部分其他需求。 我们希望,然而,像最大限度地减少所需的资源量。

我即将开始实施与捎带ACK和没有选择的重复滑动窗口协议,但认为也许有人能救我的麻烦。 有谁知道现有的项目,我可以利用的? 或者也许是更好的策略?

UPDATE
我已经认真考虑一个TCP / IP实现,但真的很希望更多的东西轻巧。 许多TCP / IP的特点是矫枉过正我想要做的事。 我愿意接受(吝啬),也许我只想要的功能不包括在打火机协议。

更新2
感谢您对CAN提示。 我在过去看了一下,可能会使用它的未来。 我真的想库来处理确认,缓冲,重试次数等,虽然。 我想我更想找一个网络/传输层而不是数据链路/物理层。

更新3
所以,它听起来就像艺术在这方面的状态是:

  • 一个下调的TCP / IP协议栈。 也许开始喜欢的东西了lwIP或uIP的 。
  • 基于CAN实现,它很可能会在很大程度上依赖CAN总线上的,所以它不会对其他的物理层有用。 喜欢的东西CAN节可以沿途帮助。
  • 一个HDLC或SDLC实现(像这个 )。 这可能是我们走的路线。

请随时免费的,如果你遇到了这个问题发表更多的答案。

Answer 1:

你有没有考虑HDLC或SDLC ?

还有LAP / d (链路访问协议,d-频道)。

Uyless黑的“ 数据链路协议 ”始终是附近在我的书架-你可能会发现有一些有用的材料太多(甚至细读TOC及研究不同的协议)



Answer 2:

CAN满足了一些您的标准:

  • 支持多种设备:它支持一个总线上的大量设备。 这不是,但是,与485兼容。
  • 保证传输:物理层采用位填充和CRC,所有这些在硬件实现上,越来越多的现代嵌入式处理器。 如果你需要acknlowedgement,你需要添加在上面自己。
  • 不主/从:没有主站或从站; 所有设备都可以随时发送他们想要的。 处理器硬件与仲裁和争用的交易。
  • OS独立性:不适用; 这是一个低级别的总线。 你把最重要的是什么,完全由你。
  • ANSI C:同样,不适用。
  • 速度:通常,高达1 Mbps高达40米; 你可以选择你自己的速度为您的应用程序。

如前所述,它的定义是相当低的水平,所以还有一些工作要做,以使之成为一个完整的协议,以满足您的需求。 然而,事实上,有很多的工作在硬件为你做它做出各种各样的应用中非常有用。



Answer 3:

我猜一个合理的出发点可能是uIP的 。

(添加上μIP维基百科的文章 ,因为原来的链接已经死了。)



Answer 4:

看看现场总线 。

如果你不希望主/从,我认为你应该做的仲裁与硬件( CANBUS检测 , FlexRay的 )。



Answer 5:

你会考虑MODBUS协议? 这是主/从导向,即从无法启动的转移,但在其他方面是轻量级的实施,自由,高水平的工具很好的支持。 你应该控制一下他们的术语把握/像保持寄存器,输入寄存器,输出线圈等)。

PHY级可能是RS232,RS485,以太网...



Answer 6:

看看微控制器互联网络(MIN):

https://github.com/min-protocol/min

通过CAN但使用标准UART硬件启发,以用于误差检测和弗莱彻的校验和帧格式检查字节填充以标记一个帧头。



文章来源: A good serial communications protocol/stack for embedded devices? [closed]