CRC8,CRC16,CRC32校验笼包粑粑不可靠靠的概率有多高

21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 4367|回复: 4
CRC8、CRC16、CRC32分别能最大计算多少位的校验码?
&&已结帖(20)
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
主题帖子积分
专家等级:结帖率:88%
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
例如CRC16最大能校验多少字节?8个8位的字节能校验,总不能100多的字节也能校验吧??
满意回复+20
只能说对多少个比特或字节的错误可以检验出来,对输入信息长度并没有限制
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
主题帖子积分
专家等级:结帖率:88%
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
主题帖子积分
实习生, 积分 24, 距离下一级还需 26 积分
实习生, 积分 24, 距离下一级还需 26 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 24, 距离下一级还需 26 积分
实习生, 积分 24, 距离下一级还需 26 积分
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性
主题帖子积分
待业青年, 积分 -20, 距离下一级还需 20 积分
待业青年, 积分 -20, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
待业青年, 积分 -20, 距离下一级还需 20 积分
待业青年, 积分 -20, 距离下一级还需 20 积分
只能说对多少个比特或字节的错误可以检验出来,对输入信息长度并没有限制
主题帖子积分
初级技术员, 积分 79, 距离下一级还需 21 积分
初级技术员, 积分 79, 距离下一级还需 21 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 79, 距离下一级还需 21 积分
初级技术员, 积分 79, 距离下一级还需 21 积分
涓涓之细流
发帖类勋章
时间类勋章
技术高手奖章
人才类勋章
技术新星奖章
人才类勋章
时间类勋章
热门推荐 /3匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 4369|回复: 4
CRC8、CRC16、CRC32分别能最大计算多少位的校验码?
&&已结帖(20)
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
主题帖子积分
专家等级:结帖率:88%
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
例如CRC16最大能校验多少字节?8个8位的字节能校验,总不能100多的字节也能校验吧??
满意回复+20
只能说对多少个比特或字节的错误可以检验出来,对输入信息长度并没有限制
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
主题帖子积分
专家等级:结帖率:88%
主题帖子积分
高级技术员, 积分 501, 距离下一级还需 499 积分
高级技术员, 积分 501, 距离下一级还需 499 积分
主题帖子积分
实习生, 积分 24, 距离下一级还需 26 积分
实习生, 积分 24, 距离下一级还需 26 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 24, 距离下一级还需 26 积分
实习生, 积分 24, 距离下一级还需 26 积分
CRC即循环冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性
主题帖子积分
待业青年, 积分 -20, 距离下一级还需 20 积分
待业青年, 积分 -20, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
待业青年, 积分 -20, 距离下一级还需 20 积分
待业青年, 积分 -20, 距离下一级还需 20 积分
只能说对多少个比特或字节的错误可以检验出来,对输入信息长度并没有限制
主题帖子积分
初级技术员, 积分 79, 距离下一级还需 21 积分
初级技术员, 积分 79, 距离下一级还需 21 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
初级技术员, 积分 79, 距离下一级还需 21 积分
初级技术员, 积分 79, 距离下一级还需 21 积分
涓涓之细流
发帖类勋章
时间类勋章
技术高手奖章
人才类勋章
技术新星奖章
人才类勋章
时间类勋章
热门推荐 /3算法(11)
CRC32太大了,CRC8觉得强度不够,折中选择CRC16校验.
&&& 线性编码理论。在发送端传送的K位二进制数据,以一定规则产生一个校验监督码(或者叫监督矩阵)r位,并负载信息后,构成一个新的二进制码序列共(K+R)位。最后发送出去。在接收端根据信息吗和CRC码禁言,是否出错。
& CRC16监督式(美国标准):G(X)=X^16+X^15+X2+1
&CRC16监督式(欧洲标准):G(X)=X16+X12+X5+1
一般多数采用CCITT推荐的欧标格式:00001&
16位的CRC码产生的规则是先把要发送的信息元左移16位(乘以2^16),再除以监督式,最后得到的是CRC码。再把CRC码附在信息元后面,一起发送出去。
&&& B(X).2^16/G(X)=Q(X)+R(X)/G(X)
& Q(X)是商,R(X)是余数。模2加减法就是不带进位借位的加减法相当异或,乘除法和普通数学乘除法一致。例如:
&& 信息码:1011,监督元:G(X)X^8+X^5+X^4+1&& CRC8校验& 下面是除法运算:
所以CRC 8 监督元:
发送的K+r位码:0
接收端接收到的信息码除以监督元,如果R(X)为0,说明传输无误。
&假设接收到跟发送一致。验证
&&&&&&&&&&&&&&&&&&&&& 0
所以接收正确无误
实际通信中发送数据是多字节,比如发送地址、控制、信息、校验。所以必须按多字节去计算CRC码。
B(X)=Bn(X)*2^8n+Bn-1(X)*2^8(n-1)+....+B1(X)*2^8+B0(X)
CRC16时候,上式两端还要乘以2^16,即左移16位。把繁琐的计算过程省略,其实只要记住本 字节的CRC码等于上一字节的余式的CRC码的低 8位左移8位后,再加上上一字节CRC右移8位(也就是取高8位)和本字节之和(异或)所求的的CRC码 。 但是我们不可能这样每部就去计算,单片机是承受不了的,而且占据大量任务,给实时通信打折扣。所以一般我们会把8位二进制序列数从0~255的CRC全部计算出来,放在表里,扔到EEPROM或者 FLASH中固存。
unsigned int crc_table [256]={&&&&&&&&&&&&&& /* CRC 余式表 */
&&& 0x1, 0x3, 0xa5, 0x60c6, 0x70e7,
&&& 0x9, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
&&& 0x0, 0x2, 0x52b5, 0xf7, 0x62d6,
&&& 0x8, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
&&& 0x3, 0x1, 0x64e6, 0x74c7, 0x44a4, 0x5485,
&&& 0xa56a, 0xb54b, 0x9, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
&&& 0x2, 0x0, 0x76d7, 0x66f6, 0xb4,
&&& 0xb75b, 0xa77a, 0x8, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
&&& 0x48c4, 0x58e5, 0xa7, 0x1, 0x3,
&&& 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x9, 0xa90a, 0xb92b,
&&& 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
&&& 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
&&& 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
&&& 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
&&& 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
&&& 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
&&& 0xa9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
&&& 0xa1, 0x30c2, 0x20e3, 0x5, 0x7,
&&& 0x83b9, 0xfb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
&&& 0x02b1, 0xf3, 0x32d2, 0x4, 0x6,
&&& 0xb5ea, 0xa5cb, 0x95a8, 0xe, 0xe54f, 0xd52c, 0xc50d,
&&& 0x34e2, 0x24c3, 0x14a0, 0x6, 0x4, 0x4405,
&&& 0xa7db, 0xb7fa, 0xb8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
&&& 0x26d3, 0x36f2, 0xb0, 0x6, 0x4,
&&& 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
&&& 0x5, 0x7, 0x18c0, 0x08e1, 0xa3,
&&& 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
&&& 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
&&& 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
&&& 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
&&& 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
&&& 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
table[0]是0的CRC,table[1]是1的CRC 1021(G(X)也是11021,这个地方我看了很久),table[2]是0010的CRC.
&01 0000 1
&01 0000 1
&01 0000 1
&&&&&&& 10
&&&&&&& 10
&&&&&&&&&&&&
程序里面,ptr是指向发送邮箱的首字节地址。LEN是邮箱的大小,即发送的字节数。
unsigned short do_crc_table(unsigned char *ptr,int len)
&& while(len--!=0)&
&&&&&& da=(uchar) (crc/256) //存储CRC的高8位
&&&&&& crc&&8;//左移8位,相当于CRC的低8位乘以2^8
&&&&&& crc^= crc_table [da^*ptr];&&&&&&&&& ptr++;
&&&&& //高8位和当前字节相加后再查表求的CRC,再加上以前的CRC
&& return(crc);
&& 还有一种函数:
unsigned short CRC_16( unsigned char * aData, unsigned long aSize )
&&& unsigned long&
&&& unsigned short nAccum = 0;
&&& for ( i = 0; i & aS i++ )
&&&&&&& nAccum = ( nAccum && 8 ) ^ ( unsigned short )Table_CRC[( nAccum && 8 ) ^ *aData++];
&&& return nA
&&&&&& unsigned long result_CRC;
&&&&&& unsigned char test[512]={0xD8,0x31,32,33,34,35,36,37,38,39};
&&&&&& unsigned long i=&0&;
&&&&&& result_CRC=CRC_16(test,10);
&&&&&& printf(&0X%04lxL/n&,result_CRC);
计算出来的校验值放在最后两个字节里,将其发送出去,接收端对所有的数据进行相同的校验,如校验值为 0 ,则认为其数据没有出错。这个是按高位到低位的发送顺序时使用的校验方法。(切忌高低不要搞错了)
CRC表一般不要计算了,网络上都有,是通用的了。如果你要计算,可以按下面函数实现:
CRC表的生成函数
void init_crc_table(void)&
int&& i,&&&
&&&&&& long&& int&&&
&&& for&& (i&& =&& 0;&& i&& &&& 256;&& i++)&
&&&&&&& k = 0xC0C1;&
&&&&&&& for (j = 1; j & 256; j &&= 1)&
&&&&&&&&&&& if (i & j)
&&&&&&&&&&&&&&& crc_table[i] ^=
&&&&&&&&&&& k = (k && 1) ^ 0x4003;
&&&&&&& }&
接受端可以将接收到的信息码求CRC码,跟接收的CRC比较如果相等,就正确。
还有一种方法,就是把接收的码元除以监督元G(X),如果R(X)为0,则正确通信。
原文地址:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:217204次
积分:3614
积分:3614
排名:第9246名
原创:42篇
转载:706篇
评论:10条
(2)(1)(13)(9)(18)(32)(3)(19)(38)(26)(12)(20)(30)(47)(90)(79)(75)(65)(45)(37)(44)(18)(12)(5)(6)(1)(1)CRC16校验,最全面的CRC16校验文章 - 电子工程世界网
在电子工程世界为您找到如下关于“CRC16校验”的新闻
CRC16校验资料下载
ModebusCRC16校验、CRC16校验、累加和校验、异或校验,ModebusLRC计算工具,是工程师调试单片机串口的好助手工具。2、软件特点1、 支持Windows 9x / 2000 / XP / 2003 / Vista / Win7系统;2、 绿色软件,不需安装。运行解压软件,将压缩包解压到指定目录即可。卸载时只需将程序目录删除;3、 支持常用的110 ~ 921600bps波特率;4...
CRC16校验程序,用于校验串行通讯数据包的完整性。在研华亚当模块及PC/104系统上验证使用过。...
crc16校验子程序,采用查表法计算。对于汇编开发人员比较有益。...
CRC16串行通讯校验算法,经过验证无误...
用于串口校验的CRC16...
查表型crc16校验算法,c源码...
PIC24H环境下编译的CRC16校验,用于MODBUS系统。...
代码以两种方法实现crc16校验,可用于单片机通信等方面。...
一个很好的TI msp430/cc430单片机CRC16校验码计算器,输入待校验数据,直接计算出校验码,目前网上几乎没有TI的校验码工具
使用说明:
软件旨在计算TI公司MSP430和CC430单片机CRC校验码,在输入数据框内输入十六进制数据串(如\&7E 0F 5A\&不区分大小写)计算该数据串校验码。
您在使用过程中遇到任何问题请联系作者,十分感谢...
Modbus串行通讯的CRC16校验和计算方法...
CRC16校验相关帖子
•错误的任何两位(无论相隔多远,哪一列,等等)
•错误位的任意奇数(无论他们在哪里)
•错误的宽爆的校验和本身
示出了具有的SOP , CRC16和一个例子包
长度字段启用,并显示标准的ACK包。
分享资料CYRF6936-40LFXC...
任何一个位
•错误的任何两位(无论相隔多远,哪一列,等等)
•错误位的任意奇数(无论他们在哪里)
•错误的宽爆的校验和本身
示出了具有的SOP , CRC16和一个例子包
长度字段启用,并显示标准的ACK包。
CYRF6936-40LFXC功能资料...
代码里看到有3个常量CRC16_POLY,CRC16_INIT_REM和CRC16_FINAL_XOR不知道是什么用途
在有些计算CRC的函数中会作为参数传递
crc16 = crc16MakeBitwise(CRC16_INIT_REM, CRC16_POLY, msg, length);
请问这三个是做什么用的?能随意修改吗?
[C] 纯文本查看 复制代码// CRC-16: x16...
并方便用于指令串尾加入和验证crc16/32校验 这样才有可能应用于实际工程
[url=home.php?mod=space&uid=573537]@dcexpert[/url] 有没办法加入这一状态机? 或者有何办法读到这个中断? micropython是可以读取STM32的常用寄存器的。需要先import stm模块,然后就可以读取寄存器了
设备有的端点数量最大为16个。
5、帧号域(FRAM),11位,每一个帧都有一个特定的帧号,帧号域最大容量0x800,对于同步传输有重要意义(同步传输为四种传输类型之一,请看下面)。
6、数据域(DATA):长度为0~1023字节,在不同的传输类型中,数据域的长度各不相同,但必须为整数个字节的长度
7、校验域(CRC):对令牌包和数据包(对于包的分类请看下面)中非PID域进行校验的一种方法...
& & & & check=CRC16(sdataB,11);//CRC校验,check是16位,故应右移8位
& & & & sdataB[11]=(check&&8)&(0x00FF);
& & & & sdataB[12]=check&amp...
25MIPS,但由于有灵活的多通道DMA,能够与Timer联动,实现数据的自动搬移而不干扰到CPU,这极大的增强了MCU的数据吞吐能力,使主频不再成为瓶颈,而完成对FM0近乎实时的解码。另外,硬件的CRC16模块让MCU只需要操作寄存器就可以完成数据校验。利用DMA和CRC16的实时解码过程如图4所示: 图 4. DMA自动数据搬移的解码方式 数据接收过程中,Timer每2uS或者4uS捕获到一个...
只能达到25MIPS,但由于有灵活的多通道DMA,能够与Timer联动,实现数据的自动搬移而不干扰到CPU,这极大的增强了MCU的数据吞吐能力,使主频不再成为瓶颈,而完成对FM0近乎实时的解码。另外,硬件的CRC16模块让MCU只需要操作寄存器就可以完成数据校验。利用DMA和CRC16的实时解码过程如图4所示:图 4. DMA自动数据搬移的解码方式数据接收过程中,Timer每2uS或者4uS捕获到...
等收到一帧数据的时候进行CRC16校验,还是收到一个字节就进行校验呢?谢谢! CRC16校验 都行啊,那个无所谓,问题是你的帧怎么区分 收到一帧数据进行校验啊,你能怎么对一个字节进行校验?我是帧校验的。。。:) 一般是先验证帧长度,长度对了,自己用crc计算出校验码,再跟帧里面的校验码对比,一样的话就是校验通过了 你都说了是一帧啊,收完了一帧后才能CRC的,要不CRC结果不对的...
地址,然后发送数据的方式完成数据通信和传输。
3、校验:这里采用crc校验。
/******************************************************
*Name& & :&&crc16
*Function:&&crc校验16位
*Params&&:&&nbsp...
CRC16校验视频
你可能感兴趣的标签
热门资源推荐}

我要回帖

更多关于 crc校验出错概率 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信