嵌入式设备的良好串行通信协议/堆栈?

Gab*_*abe 38 c embedded serial-port protocols firmware

在为各种项目编写了几种不同的自定义串行协议之后,我开始对每次重新发明轮子感到沮丧.我不断继续为每个项目开发定制解决方案,而是一直在寻找更通用的解决方案.我想知道是否有人知道满足以下要求的串行协议(或更好的实现):

  • 支持多种设备.我们希望能够支持RS485总线.
  • 保证交货.某种确认机制,以及一些简单的错误检测(CRC16可能很好).
  • 不是主/从.理想情况下,从设备可以异步发送数据.这主要是出于审美原因,轮询每个奴隶的概念对我来说感觉不对.
  • OS独立性.理想情况下,它根本不依赖于抢占式多任务环境.如果我能得到其他东西,我愿意承认这一点.
  • ANSI C.我们需要能够为几种不同的体系结构编译它.

速度不是太大的问题,我们愿意放弃一些速度,以满足其他一些需求.但是,我们希望尽量减少所需资源的数量.

我即将开始实施带有搭载ACK的滑动窗口协议,而且没有选择性重复,但是想到也许有人可以省去我的麻烦.有谁知道我可以利用的现有项目?或者也许是更好的策略?

更新
我认真考虑过TCP/IP实现,但我真的希望能有更轻量级的东西.TCP/IP的许多功能对于我正在尝试的内容来说都是过度的.我愿意(不情愿地)接受我想要的功能可能不包含在较轻的协议中.

更新2
感谢您关于CAN的提示.我过去看过它,将来可能会用它.我真的很喜欢这个库来处理确认,缓冲,重试等.我想我更需要网络/传输层而不是数据链路/物理层.

更新3
所以听起来这个领域的最新技术是:

  • 精简的TCP/IP堆栈.可能从lwIPuIP开始.
  • 基于CAN的实现,它可能很大程度上依赖于CAN总线,因此在其他物理层上没有用处.像CAN Festival这样的东西可以帮助你.
  • HDLC或SDLC实现(如此).这可能就是我们要走的路线.

如果您遇到这个问题,请随时发布更多答案.

Dan*_*Dan 12

您考虑过HDLC还是SDLC

还有LAP/D(链路访问协议,D信道).

Uyless Black的" 数据链接协议 "总是在我的书架附近 - 你也可能在那里找到一些有用的资料(甚至仔细阅读TOC并研究不同的协议)


Jav*_*ier 5

我猜一个合理的起点可能是uIP.

(在原始链接已经死亡的情况下,在μIP上添加维基百科文章.)

  • @Javier链接已经死了 (3认同)

Ste*_*off 5

CAN符合您的许多标准:

  • 支持多种设备:它支持一条总线上的大量设备.但是,它与RS485不兼容.
  • 保证交付:物理层使用比特填充和CRC,所有这些都在越来越多的现代嵌入式处理器上以硬件实现.如果你需要acknlowedgement,你需要自己添加它.
  • 不是主/从:没有主人或奴隶; 所有设备都可以随时传输.处理器硬件处理仲裁和争用.
  • 操作系统独立性:不适用; 这是一辆低级巴士.你最重要的是取决于你.
  • ANSI C:同样,不适用.
  • 速度:通常,最高可达1 Mbps至40 m; 您可以根据自己的应用选择自己的速度.

如上所述,它的定义相当低级,因此仍需要完成将其转换为满足您需求的完整协议.但是,很多工作都是在硬件上完成的,这对于各种应用程序非常有用.