3.标准通讯格式

协议结构如下:

帧头 包头数据 数据域 包校验 帧尾
0xA5(8byte) (14byte) (Nbyte) (2byte) (1byte)

以下为协议中各项数据的说明:

  1. 帧头由 8 个字节的0xA5组成,帧尾由一个字节的0x5A组成。帧头采用8个帧头,是为了防止0xA5丢失导致数据接收错误。在接收数据时,只要接收到一个0xA5就可认为接收到了帧头,然后等待下一个不是0xA5的数据,该数据为该帧的第一个有效数据。
  2. 包头数据包含本包数据的一些属性,其定义参考包头数据格式定义(第四章)。
  3. 数据域为用户协议层数据,参考数据域定义(第五章)。
  4. 包校验为包头数据和数据域的校验值(CRC16 校验算法参考附录)。

3.1协议的分层

协议采用分层模式,分为协议层和物理传输层两层,其中数据域属于协议层数据。物理传输层又分为PHY0和PHY1两层,其中PHY1层数据结构如下:

包头数据 数据域 包校验
14byte Nbyte 2byte

PHY1 层实现数据域的封包操作,它为数据域增加包头,并计算包数据的校验值。

帧头 PHY1层数据 帧尾
8byte Nbyte 1byte

PHY0层为PHY1层数据增加帧头和帧尾,并对PHY1层数据进行转义(参考字符转义)。

3.2数据流向

    在发送端,协议层数据先提交到 PHY1 层,对数据域进行封包操作。然后 PHY1 层报数据提交到PHY0层,对PHY1层数据进行字符转义并增加帧头帧尾,最后数据经过物理底层发送出去。

在接收端,控制器将物理底层接收到的数据发送到PHY0层,PHY0层去除帧头帧尾,并对数据进行反转义,然后将数据提交到PHY1层。PHY1层将判断包数据的正确性,并去除包头和包校验值,向协议层提交有用数据。

3.3字符转义

  • 封帧中遇到0xA5,则将之转义为0xA6,0x02,遇到0xA6,则将之转义为0xA6,0x01。
  • 封帧中遇到 0x5A,则将之转义为0x5B,0x02,如遇到0x5B,则将之转义为0x5B,0x01。
  • 解帧过程如果遇到连续两个字节为0xA6,0x02,则反转义为 0xA5。
  • 解帧过程如果遇到连续两个字节为0xA6,0x01,则反转义为 0xA6。
  • 解帧过程如果遇到连续两个字节为0x5B,0x02,则反转义为 0x5A。
  • 解帧过程如果遇到连续两个字节为0x5B,0x01,则反转义为 0x5B。

注意:封帧过程中,所涉及校验的数据皆是转义之前的数据,所涉及的数据长度皆是转义之前的数据长度。

results matching ""

    No results matching ""