通常我们在涉及到传输指令或者命令行的时候,为了保证数据传输的正确性和准确性,会涉及到校验码的问题,而我们通常会采用CRC校验,CRC是比较常用的对命令行和指令行的校验方法,一般会放在指令的后面,用以核对数据的正确性。
其实如果是比较简单的指令或者不是传输准确性要求不高的数据,可以用简单的异或进行校验。
通俗点讲,CRC校验采用的是异或的方法,选择好了比较的位数(8位或者16位),采用每一位相同为0,不同为1 的标准去一一计算就好了。但是其计算的流程不是简单的数据异或,一般分为一下几步:
1 预留一个16位的寄存器为0xFFFF,该寄存器为CRC寄存器
2 将要发送的数据的第一个8bit数据与CRC寄存器的低八位进行异或,高八位保持不变
3 将得到的CRC寄存器的值右移一位,高位用0代替,并检查移出位
4 如果移出位为0,重复第3步,继续右移一位
5 如果移出位为1,CRC寄存器与多项式进行异或(A001:1010 0000 0000 0001);
6 重复右移直至移动了8位,第一个8位的数据的处理就完成了
7 重复用上一个CRC的结果与数据信息中下一个字节进行相同的处理
8 将该通讯信息帧所有字节按上述步骤计算完成后,得到的16位CRC寄存器的高、低字节进行交换,得到CRC码
最后,至于是高8位在前,还是低8位在前,就看需求了,代码的实现是灵活的,网上也有网页能帮你计算,CRC(循环冗余校验)在线计算_ip33.com,如果不想自己算,可以去这个网站,输入你要计算的数据帧,一键就能帮你算出来。