HDLC编码协议

HDLC encoding protocol

提问人:rostonik 提问时间:9/26/2023 最后编辑:rostonik 更新时间:9/27/2023 访问量:107

问:

我将不得不在同步 RS485 上使用 HDLC 协议,但我不太了解编码算法。

例如,如果我有以下条件:

  • 地址:0x01(1 字节)
  • 控制:0x02(1 字节)
  • 数据:[0]0x03 [1]0x04 [2]0xFF [3]0x05 [4]0x06 [5]0x07(6 字节)
  • FCS:0xC8A1(2字节)(计算CRC-CCITT 16位HDLC)

1) FCS是否正确(0xC8A1)?(我计算了地址、控制和数据的 FCS:“0x01 0x02 0x03 0x04 0xFF 0x05 0x06 0x07”)

2) 哪个HDLC数据包正确?

  • “0x7E 0x01 0x02 0x03 0x04 0xFF 0x05 0x06 0x07 C8 A1 0x7E”
  • “0x7E 0x01 0x02 0x07 0x06 0x05 0xFF 0x04 0x03 A1 C8 0x7E“ (反向数据)

3) 在应用“钻头填充法”之前,惠特是“钻头列车”吗?(参考上面的第一个例子)

  • 00000001 00000010 00000011 00000100 11111111 00000101 00000110 00000111 11001000 10100001
  • 10000000 01000000 11000000 00000011 11111111 10100000 01100000 11100000 00010011 10000101(反转所有位)

4)对于“位填充法”从左边开始是否正确?:(参考上面的第一个例子)

  • 00000001 00000010 00000011 00000100 11111111 00000101 00000110 00000111 11001000 10100001
  • 结果:00000001 00000010 00000011 00000100 11111011 10000010 10000011 00000011 11100010 00101000 01000000(增加了两个 0 位(之后 5 1bit) 并添加 0 位以完成右侧的字节)

5) 在 RS485 上发送数据的顺序是否正确?(参考上面第一个例子,在位填充之后)

  • 00000001 00000010 00000011 00000100 11111011 10000010 10000011 00000011 11100010 00101000 01000000

    [0]0x7E [1]0x01 [2]0x02 [3]0x03 [4]0x04 [5]0xFB [6]0x82 [7]0x83 [8]0x03 [9]0xE2 [10]0x28 [11]0x40 [12]0x7E

谢谢

编码 串行端口 校验和 网络协议 RS485

评论


答: 暂无答案