在为各种项目编写了几种不同的自定义串行协议后,我开始对每次重新发明轮子感到沮丧。为了避免为每个项目继续开发自定义解决方案,我一直在寻找更通用的解决方案。我想知道是否有人知道一个串行协议(最好是实现)符合以下要求:
- 支持多个设备。我们希望能够支持RS485总线。
- 保证传输。某种确认机制和一些简单的错误检测(CRC16可能足够了)。
- 非主从结构。理想情况下,从属设备能够异步发送数据。这主要只是为了美学原因,轮询每个从属设备的概念对我来说并不合适。
- 操作系统独立。理想情况下,它不会完全依赖于抢占式多任务环境。如果能获得其他功能,我愿意让步。
- ANSI C。我们需要能够将其编译为几个不同的体系结构。
速度并不是太大的问题,我们愿意放弃一些速度以满足其他需求。然而,我们希望尽量减少所需资源的量。
我即将开始实施带有猪包确认和无选择重复的滑动窗口协议,但认为也许有人可以省去我的麻烦。有人知道我可以利用的现有项目吗?或者有更好的策略吗?
更新
我已经认真考虑了TCP/IP实现,但是真的希望有一些更轻量级的东西。对于我想做的事情来说,TCP/IP的许多功能都过剩了。虽然我不情愿地接受,但我愿意承认也许我想要的功能在更轻量级的协议中并不包括。
更新2
感谢CAN的提示。我过去看过它,将来可能会使用它。不过,我真的希望库能处理确认、缓冲、重试等。我想我更多地是在寻找网络/传输层而不是数据链路/物理层。
更新3
据了解,在这个领域的最新技术是:
- 精简版的TCP/IP协议栈。可能以lwIP或uIP为基础。
- 基于CAN协议的实现,它可能会严重依赖CAN总线,因此在其他物理层上不会有用。类似CAN Festival可以帮助开发。
- 一个HDLC或SDLC实现(比如这个)。这可能是我们要采取的方案。
如果您发现更多答案,请随时发布。