dwlovework 发表于 2011-12-22 10:08:20

求助:关于Zmodem 通信协议里面的CRC校验问题,大牛们进来指点下啊

背景:需要用电脑上的超级终端通过串口接受和发送文件。使用Zmodem协议

我用超级终端发送或接受文件,用串口助手就收数据(为了看超级终端发送的命令),有2条

1)下发命令(ZRQINIT):72 7A 0D 2A 2A 18 42 30 30 30 30 30 30 30 30 30 30 30 30 30 30 0D 8A 11
2)启动接受(ZRINIT):2A 2A 18 42 30 31 30 30 30 30 30 30 32 33 62 65 35 30 0D 8A 11
3)开始发送文件信息(ZFILE):2A 18 41 04 00 00 00 01 99 27 55 53 45 52 49 4E 46 4F 2E 64 62 66 00 39 30 32 20 31 31 36 36
                           37 33 32 32 32 31 32 20 30 20 30 20 31 20 39 30 32 00 18 6B A9 55 11

下面对上面的指令解释下 (1)和(2)都是16进制表头,(3)发送的文件信息是USERINFO.dbf,大小902,为2进制的报头
把上面的命令(1)和(2)整理如下:
1)ZPAD ZPAD ZDEL B   //表头 ZPAD:2A(*)、ZDEL(0x18)B(0x42)
00               //命令类型后面的数据在0D之前的都是以16进制字符发送的。和上面对比的就可以看出来
00 00 00 00 00   //ZF3~ZF0
00 00            //CRC,高位低位
0D 8A 11
2)ZPAD ZPAD ZDEL B//表头 ZPAD:2A(*)、ZDEL(0x18)B(0x42)
01                //命令类型
00 00 00 00 23    //ZF3~ZF0
BE 50             //CRC,高位低位
0D 8A 11
3)发送文件信息是二进制报头
ZPAD ZDEL A       //表头 ZPAD:2A(*)、ZDEL(0x18)A(0x41)
04                //命令类型
00 00 00 01       //ZF3~ZF0
99 27             //CRC,高位低位

额,解释的挺长的。现在的问题就是我怎么也把那些CRC的值算不出来。所以请问下大牛们,这个CRC是怎么算出来的,在Zmodem协议里面

comway 发表于 2011-12-22 11:56:12

原来做过,都忘了

dwlovework 发表于 2011-12-22 18:33:08

回复【1楼】comway 移动狗
-----------------------------------------------------------------------

额。。。我搞了两天了。数据子包的校验就是不对。报头的校验可以了

xuhailun 发表于 2012-8-4 01:59:50

后面18不参与校验就可以了。
页: [1]
查看完整版本: 求助:关于Zmodem 通信协议里面的CRC校验问题,大牛们进来指点下啊