Serial port 通过串行总线设计命令和数据协议

Serial port 通过串行总线设计命令和数据协议,serial-port,protocols,Serial Port,Protocols,我需要(设计?)一个协议,用于微处理器驱动的数据记录器和PC(或类似设备)之间通过串行连接进行通信。没有控制线,设备/PC唯一能知道它们是否连接的方法是通过它们接收的数据。连接可能随时中断并重新建立。串行连接是全双工的。(8n1) 问题是使用什么样的数据包、握手码或类似的方式。微处理器的能力非常有限,因此协议需要尽可能简单。但是数据记录器将具有许多功能,例如调度日志记录、下载日志、设置采样率等,这些功能可能同时处于活动状态 我臃肿的版本是这样的:对于数据记录器和PC,固定的数据包大小为16字节,

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

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

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

我非常感谢对这种方法的任何评论,并欢迎任何其他建议以及一般性意见

观察:我想我必须自己滚动,因为我需要它尽可能轻。我将从答案中建议的协议中提取一些细节,以及我发现的其他一些,

您可以使用Google的作为数据交换格式(如果您使用的是C,也可以查看该项目)。这是一种格式,非常适合此类任务。

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

有关zmodem的详细信息:


c源代码属于公共领域。

微控制器互连网络(MIN)就是为了这个目的而设计的:微小的8位微控制器与其他东西对话

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


我希望你能找到一些东西,但大多数时候我都是用自己的。不幸的是,微控制器上的代码需要非常有限,因此序列化库变得太重。除了协议缓冲区不做任何校验和之外,如果您通过RS232或(甚至更糟的)某些无线连接说话,这可能会很有用。