【问题标题】:Checksum serial message校验和串行消息
【发布时间】:2013-09-14 13:55:54
【问题描述】:

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

医生说:

  • 所有串口命令均为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 但我怎么能划分?????

【问题讨论】:

    标签: python hardware


    【解决方案1】:

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

    checksum = sum_of_11_bytes // 0x100
    

    或移位 1 个字节(8 位)

    checksum = sum_of_11_bytes >> 8
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-24
      • 2015-07-03
      • 1970-01-01
      • 2011-11-05
      • 2015-06-05
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多