同步RS485场景下HDLC协议编码相关技术问询
HDLC over RS485 问题解答
问题1:FCS(0xC8A1)是否正确?
正确。按照HDLC标准的CRC-CCITT 16位算法(初始值0xFFFF,多项式0x1021),对地址0x01、控制0x02、数据0x03,0x04,0xFF,0x05,0x06,0x07的序列计算,得到的CRC结果确实是0xC8A1。
问题2:哪个HDLC数据包选项正确?
选项一正确。HDLC帧结构固定为标志(0x7E) + 地址 + 控制 + 数据 + FCS + 标志,数据字段必须保持原给定顺序,选项二的数据部分被反转,违反协议要求;选项一的数据顺序正确,FCS按计算的字节顺序(高位字节0xC8在前,低位字节0xA1在后)放置,符合帧结构规范。
问题3:比特填充前的正确比特流是哪个?
选项一正确。HDLC同步传输采用**高位优先(MSB first)**的比特发送规则,每个字节的比特流从最高位到最低位排列:
0x01对应00000001,0x02对应00000010,以此类推;- FCS
0xC8A1对应11001000 10100001。
选项二将所有比特反转,是低位优先的排列,不符合HDLC的比特发送逻辑。
问题4:给出的比特填充结果是否正确?
不正确。HDLC比特填充规则是:在标志字段外的比特流中,每连续出现5个1,插入1个0。原比特流中仅0xFF(比特流11111111)包含连续5个1,只需在第5个1后插入1个0,仅添加1个0即可。而给出的填充结果添加了2个0,且后续比特拆分逻辑错误,因此结果不符合要求。
问题5:给出的比特填充后发送顺序是否正确?
不正确。原因有两点:
- 填充后的比特流本身错误(如问题4所述,多添加了0比特);
- 正确的HDLC发送序列应为:先发送标志
0x7E,再发送填充后的地址、控制、数据、FCS字节序列,最后发送标志0x7E。给出的字节序列基于错误的填充结果,因此不符合协议要求。
内容的提问来源于stack exchange,提问作者rostonik
相关产品推荐
相关产品推荐

