提问人:rostonik 提问时间:9/26/2023 最后编辑:rostonik 更新时间:9/27/2023 访问量:107
HDLC编码协议
HDLC encoding protocol
问:
我将不得不在同步 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
谢谢
答: 暂无答案
评论