企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
基于上述的出发点,我们可以把协议定义如下: ![](https://img.kancloud.cn/3d/c4/3dc4637f5df3c92dde095753c231fe97_850x160.png =600x) ### 这样的协议基本能够满足大部分的应用场景了;访问控制也可以在细化为控制段和数据段,比如第一个字节表示控制信息,第二个字节存储数据。 ### 同时需要说明的还有字节序的问题,也就是大端序还是小端序的问题,这里我们推荐使用大端序,所谓的**大小端序**,其实就是字节排列的顺序高低位的问题,比如0x12AB这个数据是16位,2个字节,大端序表示:0x12 0xAB,小端序反过来:0xAB 0x12;上下位机通信时保持一致即可。 ### 还有一个需要注意的,串口通信传输的数据本质上是**流式数据**,也就是起始和结束需要我们自行判断处理,最容易出问题的也在这里,经常有读取串口数据,读到了就处理,然而在大数据块的传输下,发现经常会误码或者丢包;这其实是对流式数据理解程度不够导致的,因此我们每次读取串口数据后,都需要对数据进行预处理,得到完整报文再进行应用。 ### 最后补充的是,同异步的问题,串口通信是全双工通信,是典型的异步数据处理逻辑,这个和SPI是有很大区别的,也是为什么主从之间强烈推荐使用串口通信而不是SPI的原因,因为可以做异步处理,提高整体效率,SPI传输快,但需要同步处理,非常麻烦。