0

我必须计算一个校验和,但我对硬件编程很感兴趣......

医生说:

  • 所有串口指令均为12字节指令包格式

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

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

命令示例:

0x00 0x05 0x0000 0x0000 0x0000 0x0000 0x00 校验和

  • 0x00 : 频道
  • 0x05 : 命令
  • 0x0000 : 参数 1
  • 0x0000:参数2
  • 0x0000 : lwExtraData
  • 0x0000 : hwExtraData
  • 0x00 : 错误代码
  • ???: 校验和

我在 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 但我怎么能除 ?????

4

1 回答 1

2

除以0x100(使用//而不是/防止产生浮点值的真正除法)

checksum = sum_of_11_bytes // 0x100

或移位 1 个字节(8 位)

checksum = sum_of_11_bytes >> 8
于 2013-09-14T05:55:54.343 回答