导航:首页 > 源码编译 > crc16计算法

crc16计算法

发布时间:2024-09-22 05:06:19

❶ CRC-16 计算方法及程序设计

CRC-16算法是一种用于数据传输错误检测的常用校验技术,它基于16位的二进制寄存器对数据帧中的每个字节进行异或运算和位移操作。发送设备在数据帧尾部添加生成的CRC值,接收端则重新计算并与接收到的值对比,确认数据完整无误。具体步骤如下:

1. 初始化16位CRC寄存器为全1(0xFFFFH)。
2. 对数据帧的第一个字节的8位进行异或操作,将结果存回寄存器。
3. 移位操作:将寄存器右移一位,高位补0,低位丢弃并检测。
4. 若低位为1,则寄存器与预设值0xA001进行异或;否则,仅做右移。
5. 重复步骤3和4,直至完成8次移位,处理一个完整的8位字节。
6. 对下一个字节重复此过程,直至处理完所有字节。
7. CRC寄存器的最终值即为CRC校验值。

以示例数据0x03 0x10 0x00 0x01 0x00 0x08为例,通过C语言实现的CRC-16计算过程展示了这个过程。在VHDL语言中,也有类似的进程来接收数据并进行CRC校验,涉及状态机和逻辑运算,确保数据的正确传输和接收。

❷ crc16校验的c语言程序

下面我们以CRC-16为例来说明任意长度数据流的CRC校验码生成过程。我们采用将数据流分成若干个8bit字符,并由低字节到高字节传送的并行方法来求CRC校验码。具体计算过程为:用一个16bit的寄存器来存放CRC校验值,且设定其初值为0x0000;将数据流的第一个8bit与16bit的CRC寄存器的高字节相异或,并将结果存入CRC寄存器高字节;CRC寄存器左移一位,最低1bit补零,同时检查移出的最高1bit,若移出的最高1bit为0,则继续按上述过程左移,若最高1bit为1,则将CRC寄存器中的值与生成多项式码相异或,结果存入CRC寄存器值;继续左移并重复上述处理方法,直到将8bit数据处理完为止,则此时CRC寄存器中的值就是第一个8bit数据对应的CRC校验码;然后将此时CRC寄存器的值作为初值,用同样的处理方法重复上述步骤来处理下一个8bit数据流,直到将所有的8bit字符都处理完后,此刻CRC寄存器中的值即为整个数据流对应的CRC校验码。
下面示出了其计算过程的流程图:

在用C语言编写CRC校验码的实现程序时我们应该注意,生成多项式 对应的十六进制数为0x18005,由于CRC寄存器左移过程中,移出的最高位为1时与 相异或,所以与16bit的CRC寄存器对应的生成多项式的十六进制数可用0x8005表示。下面给出并行处理8bit数据流的C源程序:
unsigned short crc_dsp(unsigned short reg, unsigned char data_crc)
//reg为crc寄存器, data_crc为将要处理的8bit数据流
{
unsigned short msb; //crc寄存器将移出的最高1bit
unsigned short data;
unsigned short gx = 0x8005, i = 0; //i为左移次数, gx为生成多项式

data = (unsigned short)data_crc;
data = data << 8;
reg = reg ^ data;
do
{
msb = reg & 0x8000;
reg = reg << 1;
if(msb == 0x8000)
{
reg = reg ^ gx;
}
i++;
}
while(i < 8);
return (reg);
}
以上为处理每一个8bit数据流的子程序,在计算整个数据流的CRC校验码时,我们只需将CRC_reg的初值置为0x0000,求第一个8bit的CRC值,之后,即可将上次求得的CRC值和本次将要处理的8bit数据作为函数实参传递给上述子程序的形参进行处理即可,最终返回的reg值便是我们所想得到的整个数据流的CRC校验值。

❸ CRC码的计算方法

给信息码补5个0,然后去除多项式,余数就是较验码

❹ 使用半字节查表法之 CRC16 的 code sample

多项式除法在进行CRC计算之前是必须重温的基础知识。具体方法可以参考certmaths.ilongman.com/...的ppt文档。在多项式除法中,当面对多项式除以单项式时,我们能利用分配率进行处理;面对多项式除以多项式时,则需要使用长除法。

CRC原理简单来说,就是将待传送的数据M的二进制码序列视为多项式M,预先选定一个r+1 bit的二进制数作为多项式P,进行M除以P操作,得到的商和余数分别记为Q和R(r bit),将余数R附加在信息码M一起发送。在接收端,同样使用M/P获取余数R',并与R进行比较,以验证M的正确性。

多项式除法的详细步骤在进行CRC计算时至关重要。以下是一个具体的例子:假设信息位为1011001,CRC码为4位,校验多项式(生成码)为11001。首先将信息位左移4位得到10110010000,然后除以11001,遵循不借位除法的法则(即异或运算),得到余数1010,即为CRC码。

在CRC的实现方法中,有基本算法、字节查表法、半字节查表法等。本文重点讨论16 bit的CRC实现,具体为CRC16-CCITT,即X16+X12+X5+1,生成码为0x1021。值得注意的是,实际值为0x010121,但由于"最高位一定为1故抛弃"的运算法则,实际使用的是0x1021。

具体实现中,基本算法和字节查表法的例程通常提供,但并未经过验证。半字节查表法则在处理速度和对代码空间的要求上表现出优势,相较于字节查表法(需要512bytes的数组),它对代码空间的要求更低。

在讨论中提到,半字节查表法在微处理器有限的资源下,是较为适合的CRC计算模式。同时,文中还对16 bit的0x1021 CRC码的半字节查表法例程进行了简单的结果验证,以供项目提供比对和参考。需指出的是,这个验证工作是在2010年8月5日通宵工作后完成的,对数学原理的探究较为概括,但最终的CRC16半字节查表法函数得到了简单的验证,具有一定的实用价值。

❺ crc校验码计算方法是什么

已知信息位为1100,生成多项式G(x) = x3+x+1,求CRC码。

M(x) = 1100 M(x)*x3 = 1100000 G(x) = 1011

M(x)*x3 / G(x) = 1110 + 010 /1011 R(x) = 010

CRC码为: M(x)*x 3+R(x)=1100000+010 =1100010

其原理是:CRC码一般在k位信息位之后拼接r位校验位生成。编码步骤如下:

(1)将待编码的k位信息表示成多项式 M(x)。

(2)将 M(x)左移 r 位,得到 M(x)*xr 。

(3)用r+1位的生成多项式G(x)去除M(x)*xr 得到余数R(x)。

(4)将M(x)*xr 与R(x)作模2加,得到CRC码。

(5)crc16计算法扩展阅读:

CRC校验码计算详解:采用CRC进行差错检验,生成多项式为G(X)=X4+X+1,信息码字为10110,则计算出的CRC校验码是:A. 0000 B. 0100 C. 0010 D.1111

符号表示假定:多项式和多项式的系数排列均用相同的符号表示,如

G(X)= X4+X+1

G(X)=10011

已知条件如下:

原码字记做M(X),即:M(X) = 10110

生成多项式记做G(X),即:G(X) = 10011

G(X)的最高阶数记做r,此处r = 4

阅读全文

与crc16计算法相关的资料

热点内容
寻星app怎么找星星 浏览:220
磁盘要加密吗 浏览:459
夕阳风采app怎么下载不了 浏览:438
安卓方舟商店为什么不可用 浏览:638
phpecho字符串 浏览:683
中国银行app怎么关联人 浏览:753
eds是什么服务器 浏览:457
半圆命令键 浏览:444
linux文件系统实现 浏览:853
cadchange命令 浏览:325
电脑图谱源码大全 浏览:755
dos系统下命令 浏览:524
运维狗和程序员 浏览:707
哪个APP看纸牌屋 浏览:556
外卖领券app哪个最好买 浏览:313
linux中文字体包 浏览:753
git命令行建分支 浏览:848
致信服务器地址和端口要怎么找 浏览:983
android图片文件压缩 浏览:894
腾讯云使用云服务器访问外网 浏览:166