通过串行设计命令和数据的协议

时间:2011-06-22 15:14:46

标签: serial-port protocols

我需要(设计?)用于通过串行连接在微处理器驱动的数据记录器和PC(或类似物)之间进行通信的协议。没有控制线,设备/ PC可以知道它们连接的唯一方式是它们接收的数据。连接可能随时被破坏并重新建立。串行连接是全双工的。 (8N1)

问题在于使用什么类型的数据包,握手代码等。微处理器的能力非常有限,因此协议需要尽可能简单。但是数据记录器将具有许多功能,例如调度记录,下载日志,设置采样率等,这些功能可能同时处于活动状态。

我臃肿的版本会是这样的:对于数据记录器和PC,固定包大小为16字节,带有简单的1字节校验和,可能在开头/结尾有一个0x00字节,以简化数据包的识别,以及一个字节表示数据包中的数据类型(命令/设置/日志数据/实时馈送值等)。为了同步,可以由PC发送唯一的“hello / reset”数据包(例如所有零),然后返回设备检测到该数据包以确认同步。

我很感激对此方法的任何评论,并欢迎任何其他建议以及一般性意见。

观察:我认为我必须自己动手,因为我需要尽可能轻量化。我将从答案中建议的协议以及我发现的其他一些内容中获取点点滴滴...... SlipPPPHLDC

3 个答案:

答案 0 :(得分:8)

您可以使用Google的Protocol Buffers作为数据交换格式(如果您正在使用C,还可以查看C bindings项目)。它是very efficient格式,非常适合此类任务。

答案 1 :(得分:3)

微控制器互连网络(MIN)就是为此目的而设计的:微型8位微控制器与其他产品进行通信。

代码是MIT许可的,有嵌入式C和Python实现:

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

答案 2 :(得分:1)

我不会尝试从头开始创造一些东西,也许你可以重用过去的东西,如ZMODEM或其中一个表兄弟?你提到的大多数问题都已经解决了,可能还有很多其他的情况你还没有。

有关zmodem的详细信息: http://www.techfest.com/hardware/modem/zmodem.htm

c源代码属于公共领域。