在为各种项目编写了几种不同的自定义串行协议之后,我开始对每次重新发明轮子感到沮丧。我不断继续为每个项目开发定制解决方案,而是一直在寻找更通用的解决方案。我想知道是否有人知道符合以下要求的串行协议(或更好的实现):
速度不是太大的问题,我们愿意放弃一些速度,以满足其他一些需求。但是,我们希望尽量减少所需资源的数量。
我即将开始实施一个带有搭载ACK的滑动窗口协议,而且没有选择性重复,但是想到也许有人可以省去我的麻烦。有谁知道我可以利用的现有项目?或者也许是一个更好的策略?
更新
我认真考虑过TCP / IP实现,但我真的希望能有更轻量级的东西。 TCP / IP的许多功能对于我正在尝试做的事情来说都是过度的。我愿意(不情愿地)接受我想要的功能可能不包含在较轻的协议中。
更新2
感谢关于CAN的提示。我过去看过它,将来可能会用它。我真的很喜欢这个库来处理确认,缓冲,重试等。我想我更需要网络/传输层而不是数据链路/物理层。
更新3
所以听起来这个领域的最新技术是:
如果您遇到这个问题,请随时发布更多答案。
答案 0 :(得分:12)
还有LAP/D(链接访问协议,D-Channel)。
Uyless Black的“Data Link Protocols”总是在我的书架附近 - 你可能会在那里找到一些有用的材料(甚至仔细阅读TOC和研究不同的协议)
答案 1 :(得分:5)
我猜一个合理的起点可能是uIP。
(由于原始链接已死,因此添加Wikipedia article on µIP。)
答案 2 :(得分:5)
CAN符合您的一些标准:
如前所述,它的定义相当低级,因此仍需要完成将其转换为满足您需求的完整协议的工作。但是,很多工作都是在硬件上完成的,这对各种应用程序非常有用。
答案 3 :(得分:1)
答案 4 :(得分:1)
你会考虑MODBUS协议吗?它是面向主/从的,因此从属设备无法启动传输,但是实现轻量级,免费且高级工具支持良好。你应该掌握他们的术语/如保持寄存器,输入寄存器,输出线圈等。
Phy级别可以是RS232,RS485,以太网......
答案 5 :(得分:1)
看看微控制器互联网(MIN):
https://github.com/min-protocol/min
受CAN的启发,但使用标准UART硬件,使用Fletcher的校验和和帧格式检查错误检测和字节填充以标记帧头。