两种MCU间的串行通信协议设计
2.2 软件设计
2.2.1数据帧解析
Cortex-M3侧和C51侧采用同样的数据帧格式,以简化编程的难度,增强程序的可移植性。数据帧由起始标识符、数据长度、类型ID、通信内容、循环冗余校验码构成,如图2所示。本文引用地址:https://www.eepw.com.cn/article/156421.htm
(1)起始标识符
起始标识符的作用主要是用于定界,把不同的数据帧在一连串的数据中分离开来。起始标识符内的数据不能与数据帧中可能出现的任何数据相同,否则会引起歧义,导致定界失败,造成数据错误。在本例中,为2个字节,选用0xFF+0xAA,因为该组合与其他数据具有排他性,不会引起歧义。
(2)数据长度
数据长度的计算方法为,从该位开始,到最后一个数据位结束,也就是CRC校验位之前的一个字节。虽然使用Length位可以表示很长的数据帧,但在应用中应尽量采用短帧,以避免各种干扰因素造成少数数据位出错,导致大量数据无效,影响通信效率。同时,应该设置一个最大发送长度,以便设置超时重传计时器的值。本例采用1个字节,最大帧长为260个字节。
(3)类型ID
根据实际需要,类型ID可以采用1个或多个字节,用于表示该数据帧的作用类型。本例中,采用1个字节,可以表示256种作用类型,例如设备参数帧(如音量)、线路探测帧或应答帧。
(4)通信内容
通信内容与类型ID结合,表达特定意义。相同的Data,但ID不同的话,表达的信息不一样。根据不同的ID,Data的长度可能会有所不同。
(5)循环冗余校验码
循环冗余校验码用于校验接收到的数据是否在传输过程中出错。本例中采用CRC-16算法,占2个字节,对从起始标识符开始到最后一个通信内容位的所有数据进行运算,把得到的结果附在最后。
评论