串口通信协议

来源:互联网 发布:安广网络池州分公司 编辑:程序博客网 时间:2024/04/28 03:30
LZ之前只用了串口做一些简单的数据 收发,话说对于串口通信协议没有好好琢磨。最近因为项目中需要用到MCU与上位机通信来进行调试,有对串口通讯做了一个更深入的研究。
在网络通信中,“包”(Packet)和 “帧”(Frame)的概念相同,均指通信中的一个数据块。对于具体某种通信网络,一般使用术语“帧”。一种网络的帧格式可能与另一种网络不同,通常使用术语“包”来指一般意义的帧。


帧格式:  总字节数+帧命令+帧内容+校验和
串口通讯的一种协议:
PC想MCU发送  命令帧;
命令帧格式: 
帧长度(1Byte):该帧所包含的总字节数
帧命令(1Byte):该帧的功能
(帧)内容:n Byte
校验和:(帧长度、帧命令,内容所有字节的校验和)
MCU向PC发送:   应答帧
格式与命令帧相同。


另外一种常用的帧格式:
帧头+帧长+帧内容+校验和+帧尾。

推荐串口猎人作为上位机调试工具。该调试软件功能强大,设置简单,非常易于使用。


Tips:about parity check~如果a1 ^ a2 ^ a3 ^ ... ^ an的结果是1,则表示a1、a2、a3...an之中1的个数为奇数个,否则为偶数个。这条性质可用于奇偶校验(Parity Check),比如在串口通信过程中,每个字节的数据都计算一个校验位,数据和校验位一起发送出去,这样接收方可以根据校验位粗略地判断接收到的数据是否有误。



注意:
1、一定要首先确定发送的一帧数据是有效的才有意义。否则发送回来的帧本身有问题,无法将数据包做处理,也会遇到各种莫名其妙的问题。
2、发送前一定要检查发送缓冲区是否为空,只有为空时才可能发送成功。
0 0
原创粉丝点击