请教,如何在串口通讯编程中如何加入CRC检验程序

请教,如何在串口通讯编程中如何加入CRC检验程序,第1张

串口通讯中,发送的是字符串或者说是字节数组。接收或发送的总字节数已知,一般最后一个或两个字节为CRC校验字节。你可以做一个子函数,以该字节数组作为函数变量,返回值为CRC校嫌陆验字节。对于发送数据,将返回的校验字节放在发送字节仿早的最后,然后发送即可;对于接收数据校验,则将子函数返回的校验字节与接收到备者雀的校验字节比较,相等即校验通过,不相等则校验失败。

CRC校验码的获取有两种方法,可以用查表法,也可以用多项式法计算。

************************************************************

crc16校验程序:功能:接收字节crc校验,纳尘返回校验值 unsigned int CRC_16(unsigned int puiCRCWord,unsigned char pucChechingChar) 形参: pucChechingChar需要校验数据

puiCRCWord 校验后的数据

*************************************************************/

unsigned int CRC_16(unsigned int puiCRCWord, unsigned char pucChechingChar){

unsigned char data luc

puiCRCWord ^= pucChechingChar

for( luc = 8luc >0luc--){

if( puiCRCWord &0x0001){

puiCRCWord >>则差= 1

puiCRCWord ^= 0xA001

}

else

puiCRCWord >孙茄皮>= 1

}

return puiCRCWord}

实现方法:最简单的校验就是把原始数据和待比较数据直接进行比较,看是否完全一样这种方法是最安全最空唯准确的。同时也是效率最低的。

应用例子:龙珠cpu在线调试工具bbug.exe。它和龙珠cpu间通讯时,bbug发送一个字节cpu返回收到的字节,bbug确认是刚才发送字节后才继续发送下一个字节的。 实现方法:在数据存储和传输中,字节中额外增加一个比特位,用来检验错误。校验位可以通过数据位异或计算出来。

应用例子:单片机串口通讯有一模式就是8位数据通讯,另加第9位用于放校验值。

bcc异或校验法(block check character)

实现方法:很多迅者基于串口的通讯都用这种既简单又相当准确的方法。它就是把所有数据都和一个指定的初始值(通常是0)异或一次,最后的结果就是校验值,通常把它附在通讯数据的最后一起发送出去。接收方收到数据后自己也计算一次异或和校验值,如果和收到的校验值一致就说明收到的数据是完整的。

校验值计算的代码类似于:

unsigned uCRC=0//校验初始值

for(int i=0i<DataLenthi++) uCRC^=Data[i]

适用范围:适用于大多数要求不高的数据通讯。

应用例子:ic卡接口通讯、很多单片机系统斗昌培的串口通讯都使用。 (Cyclic Redundancy Check)

实现方法:这是利用除法及余数的原理来进行错误检测的


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12558626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存