2.1协议结构如下:
帧头 0xA5 (8byte) | 包头数据 (16byte) | 数据域 (Nbyte) | 包校验 (2byte) | 帧尾 0x5A (1byte) |
以下为协议中各项数据的说明:
1. 帧头由 8 个字节的 0xA5 组成,帧尾由一个字节的 0x5A 组成。帧头采用 8 个帧头,是为了防止 0xA5 丢失导致数据接收错误。在接收数据时, 只要接收到一个 0xA5 就可认为接收到了帧头, 然后等待下一个不是 0xA5 的数据, 该数据为该帧的第一个有效数据。
2、包头数据包含本包数据的一些属性, 其定义参考包头数据格式定义。
3、数据域为用户协议层数据, 参考数据域定义。
4、包校验为包头数据和数据域的 CRC16 校验值, CRC16 校验算法参考附录。
2.2 协议的分层
协议采用分层模式,分为协议层和物理传输层两层,其中数据域属于协议层数据。物理传输层
又分为 PHY0 和 PHY1 两层,其中 PHY1 层数据结构如下:
包头数据(16byte) | 数据域(Nbyte) | 包校验(2byte) |
PHY1 层实现数据域的封包操作,它为数据域增加包头,并计算包数据的校验值。
PHY0 层数据结构为:
帧头(8byte) | PHY1 层数据(N + 18byte) | 帧尾(1byte) |
PHY0 层为 PHY1 层数据增加帧头和帧尾,并对 PHY1 层数据进行转义(参考字符转义)。
数据流向示意图:
在发送端,协议层数据先提交到 PHY1 层,对数据域进行封包操作。然后 PHY1 层数据提交到 PHY0 层,对 PHY1 层数据进行字符转义并增加帧头帧尾,最后数据经过物理底层发送出去。
在接收端,控制器将物理底层接收到的数据发送到 PHY0 层, PHY0 层去除帧头帧尾,并对数 据进行反转义,然后将数据提交到 PHY1 层。 PHY1 层将判断包数据的正确性,并去除包头和包校 验值,向协议层提交有用数据。