打印

有关CRC校验,我们常用的CRC是哪一种

[复制链接]
2029|17
手机看帖
扫描二维码
随时随地手机跟帖
沙发
songchenping| | 2017-8-31 08:11 | 只看该作者
看CRC多少呢。8?16?or 32?

使用特权

评论回复
板凳
nobleliom| | 2017-8-31 10:15 | 只看该作者
常用的应该是是CRC32吧

使用特权

评论回复
地板
会飞的大白| | 2017-8-31 10:23 | 只看该作者
应该8位机用的是CRC8,16位机用的是CRC16,32位机用的是CRC32吧

使用特权

评论回复
5
cpu51| | 2017-8-31 12:15 | 只看该作者
不对
我们常用的是CRC16

使用特权

评论回复
6
cpu51| | 2017-8-31 12:21 | 只看该作者
无论用8位机还是16位32位机,都采用CRCR16,或CRC32算法, 这只是一种算法而已,与单片机位数无关。然后还与采用多项式有关。

使用特权

评论回复
7
墙上的咖啡| | 2017-8-31 12:25 | 只看该作者
常用的就是CRC16和CRC32了

使用特权

评论回复
8
大白农| | 2017-8-31 12:47 | 只看该作者
有什么软件可以测试我使用的CRC算法是否OK呢?

使用特权

评论回复
9
hello牟| | 2017-8-31 15:15 | 只看该作者
如何用c实现CRC的算法呢?

使用特权

评论回复
10
merry_zsp| | 2017-8-31 15:20 | 只看该作者
大白农 发表于 2017-8-31 12:47
有什么软件可以测试我使用的CRC算法是否OK呢?

一般都是用查表法是实现CRC的校验的

使用特权

评论回复
11
hotpower| | 2017-8-31 16:09 | 只看该作者

使用特权

评论回复
12
新人求带| | 2017-8-31 16:45 | 只看该作者
Modbus中常用的是哪种CRC校验呢?

使用特权

评论回复
13
在路上的程序猿| | 2017-8-31 16:51 | 只看该作者
Modbus一般采用CRC16校验,特征多项式取0xA001。你可以用标准的CRC16算法代码,不过要更改特征多项式

使用特权

评论回复
14
gaoxiansheng| | 2017-8-31 18:00 | 只看该作者
有个问题,CRC校验为什么能够保证数据的准确性?

使用特权

评论回复
15
lt1231| | 2017-8-31 18:04 | 只看该作者
gaoxiansheng 发表于 2017-8-31 18:00
有个问题,CRC校验为什么能够保证数据的准确性?

CRC校验码的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个校验用的监督码(既CRC码)r位,并附在信息后边,构成一个新的二进制码序列数共(k+ r)位,最后发送出去。在接收端,则根据信息码和CRC码之间所遵循的规则进行检验,以确定传送中是否出错。  在数据存储和数据通讯领域,CRC无处不在:著名的通讯协议X.25的FCS(帧检错序列)采用的是CRC. CCITT,ARJ、LHA等压缩工具软件采用的是CRC32,磁盘驱动器的读写采用了CRC16,通用的图像存储格式GIF、TIFF等也都用CRC作为检错手段。  CRC的本质是模-2除法的余数,采用的除数不同,CRC的类型也就不一样。通常,CRC的除数用生成多项式来表示。最常用的CRC码的生成多项式有CRC16,CRC32.  以CRC16为例,16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(既乘以2^16)后,再除以一个多项式,最后所得到的余数既是 CRC码,如下式所示,其中K(X)表示n位的二进制序列数,G(X)为多项式,Q(X)为整数,R(X)是余数(既CRC码)。  K(X)>>16=G(x)Q(x)+R(x)  求CRC码所采用模2加减运算法则,既是不带进位和借位的按位加减,这种加减运算实际上就是逻辑上的异或运算,加法和减法等价,乘法和除法运算与普通代数式的乘除法运算是一样,符合同样的规律。生成CRC码的多项式如下,其中CRC-16和CRC-CCITT产生16位的CRC码,而CRC-32则产生的是32位的CRC码  接收方将接收到的二进制序列数(包括信息码和CRC码)除以多项式,如果余数为0,则说明传输中无错误发生,否则说明传输有误,关于其原理这里不再多述。用软件计算CRC码时,接收方可以将接收到的信息码求CRC码,比较结果和接收到的CRC码是否相同。

使用特权

评论回复
16
liutongda| | 2017-8-31 19:03 | 只看该作者
计算机网络CRC检验中为什么选择16或32位效验码,效率最高?

使用特权

评论回复
17
myidear| | 2017-8-31 19:07 | 只看该作者
liutongda 发表于 2017-8-31 19:03
计算机网络CRC检验中为什么选择16或32位效验码,效率最高?

我猜这样的运算速度最快吧

使用特权

评论回复
18
ahhsyf| | 2017-8-31 19:45 | 只看该作者
liutongda 发表于 2017-8-31 19:03
计算机网络CRC检验中为什么选择16或32位效验码,效率最高?

CRC计算与普通的除法计算有所不同。普通的除法计算是借位相减的,而CRC计算则是异或运算。任何一个除法运算都需要选取一个除数,在CRC运算中我们称之为poly,而宽度W就是poly最高位的位置。比如poly 1001的W是3,而不是4。注意最高位总是1,当你选定一个宽度,那么你只需要选择低W各位的值。假如我们想计算一个位串的CRC码,并要保证每一位都要被处理,因此我们需要在目标位串后面加上W个0。因为异或运算单片机有专门的指令,所以会比较快。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

103

帖子

0

粉丝