校验和串行消息

时间:2013-09-14 05:52:01

标签: python hardware

我必须计算一个校验和,但我对硬件编程非常新闻......

医生说:

  • 所有串行命令均为12字节命令包格式

  • 将数据包的前11个字节的值(校验和字节除外)求和,然后除以0x0100(256)。这将创建一个1字节的移位。此移位的剩余值是校验和字节。

  • 在字传输期间,传输高字值,然后传输低字值

命令示例:

0x00 0x05 0x0000 0x0000 0x0000 0x0000 0x00 Chksum

  • 0x00:频道
  • 0x05:command
  • 0x0000:param1
  • 0x0000:param2
  • 0x0000:lwExtraData
  • 0x0000:hwExtraData
  • 0x00:ErrorCode
  • ????? :check sum

我在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但我怎么分开?????

1 个答案:

答案 0 :(得分:2)

除以0x100(使用//代替/以阻止产生浮动值的真正除法)

checksum = sum_of_11_bytes // 0x100

或移位1个字节(8位)

checksum = sum_of_11_bytes >> 8