打印

在搞HDLC同步通信时遇到CRC问题

[复制链接]
2867|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mackay|  楼主 | 2009-4-15 17:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
mackay|  楼主 | 2009-4-16 18:12 | 只看该作者

我自己回答了,当作抛砖引玉

HDLC,是1bit,1bit发过去的,每一BYTE是8位(我现在使用的是8位),低位先发。CRC我使用的是CRC CCITT—1,这个“-1”的意思是CRC的初值为0Xffff。
我是使用z85c30作为HDLC的收发,CRC的计算从地址帧到信息帧计算。由于每一BYTE是低位先发,所以计算的时候,要把每一个BYTE的低位高位反过来,也就是说原来的D7变为D0,D0变为D7,D6变为D1,依次类推。0x80变为0X01等。计算出来的CRC,要每位取反。下面我是我发的一个数组。
80,01,13,30,00,
00,00,00,00,00,
00,00,00,00,00,
00,00,00,03,10,
31,00,00,00,00,
00,00,00
按照每位翻转后计算出来的CRC是0X7E62.
但这样发出去是不行的,还要将这个结果取反后
是0x894D
如果用示波器看的话,就是这个结果但要把这个CRC发出去,肯定死翘翘的,还要把这个拆分为MSB何LSB。然后将他们各高低位翻转过来,得出要发出去的CRC
这个CRC是0x91b2.
为什么我不用这个芯片上的硬件计算出来的CRC,因为我初始化不好,他发出来的结果不适合,所以关了。
我写到这里写完了,请问一下各位有谁有现成的将一个BYTE的各位翻转的程序啊?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

15

帖子

0

粉丝