难以理解校验和算法
Trouble Understanding a Checksum Algorithm
BM62 蓝牙模块协议
我只是有一个简单的问题,关于校验和算法如何适用于特定蓝牙模块 (BM62)。上图解释了UART协议,也解释了checksum规则,但是我不太理解它是如何工作的,图片中的例子给出的checksum值似乎猜不出来。
这个想法似乎是你需要想出 CHKSUM
这样 LENH
+ LENL
+ OPCODE
+ PARAM
+ CHKSUM
的最低有效字节为 0。因此,让我们以 8 位(或模 256)进行求和:
LENH
+ LENL
+ OPCODE
+ PARAM
+ CHKSUM
= 0
CHKSUM
= -(LENH
+ LENL
+ OPCODE
+ PARAM
)
IOW,CHKSUM
= -(0 + 2 + 1 + 0) = -3 = 0xFD。 (请记住,所有这些都是在 8 位中完成的)。
您可以验证 CHKSUM
是否满足要求(您现在正在以 16 位执行所有操作):
0 + 2 + 1 + 0 + 0xFD = 0x100
并且最低有效字节为 0。如果我们也以 8 位执行此操作,我们将得到 0 而不是 0x100,这也是检查正确性的有效方法。
BM62 蓝牙模块协议
我只是有一个简单的问题,关于校验和算法如何适用于特定蓝牙模块 (BM62)。上图解释了UART协议,也解释了checksum规则,但是我不太理解它是如何工作的,图片中的例子给出的checksum值似乎猜不出来。
这个想法似乎是你需要想出 CHKSUM
这样 LENH
+ LENL
+ OPCODE
+ PARAM
+ CHKSUM
的最低有效字节为 0。因此,让我们以 8 位(或模 256)进行求和:
LENH
+ LENL
+ OPCODE
+ PARAM
+ CHKSUM
= 0
CHKSUM
= -(LENH
+ LENL
+ OPCODE
+ PARAM
)
IOW,CHKSUM
= -(0 + 2 + 1 + 0) = -3 = 0xFD。 (请记住,所有这些都是在 8 位中完成的)。
您可以验证 CHKSUM
是否满足要求(您现在正在以 16 位执行所有操作):
0 + 2 + 1 + 0 + 0xFD = 0x100
并且最低有效字节为 0。如果我们也以 8 位执行此操作,我们将得到 0 而不是 0x100,这也是检查正确性的有效方法。