我必须计算一个校验和,但我对硬件编程非常新闻......
医生说:所有串行命令均为12字节命令包格式
将数据包的前11个字节的值(校验和字节除外)求和,然后除以0x0100(256)。这将创建一个1字节的移位。此移位的剩余值是校验和字节。
在字传输期间,传输高字值,然后传输低字值
命令示例:
0x00 0x05 0x0000 0x0000 0x0000 0x0000 0x00 Chksum
我在python中有这段代码:
ser = serial.Serial('/dev/ttyUSB0', 115200,parity='N',timeout=1)
ser.open()
ser.write(chr(0x00)) # channel 1 byte (alway the same)
ser.write(chr(0x05)) # command 1 byte
ser.write(chr(0x00)) # param1 2 bytes (byte low)
ser.write(chr(0x00)) # param1 2 bytes (byte hight)
ser.write(chr(0x00)) # param2 2 bytes (byte low)
ser.write(chr(0x00)) # param2 2 bytes (byte hight)
ser.write(chr(0x00)) # lwExtraData 2 bytes (byte low)
ser.write(chr(0x00)) # lwExtraData 2 bytes (byte hight)
ser.write(chr(0x00)) # hwExtraData 2 bytes (byte low)
ser.write(chr(0x00)) # hwExtraData 2 bytes (byte hight)
ser.write(chr(0x00)) # ErrorCode 1 byte
我如何计算我的校验和?如果我总结我有5但我怎么分开?????
答案 0 :(得分:2)
除以0x100
(使用//
代替/
以阻止产生浮动值的真正除法)
checksum = sum_of_11_bytes // 0x100
或移位1个字节(8位)
checksum = sum_of_11_bytes >> 8