CRC16校验码查表法的原理是什么?

CRC16校验码查表法的原理是什么?,第1张

基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设要发送的信息用多项式C(X)表示,将C(x)左移R位(可表示成C(x)*xR),这样C(x)的右边就会空出R位,这就是校验码的位置。用 C(x)*xR 除以生成多项式G(x)得到的余数就是校验码。

任意一个由二进制位串组成的代码都可以和一个系数仅为‘0’和‘1’取值的多项式一一对应。例如:代码1010111对应的多项式为x6+x4+x2+x+1,而多项式为x5+x3+x2+x+1对应的代码101111。

生成多项式:G(X)=X^8+X^2+X+1转化为100000111 =0x1070

#define POLY(0x1070U <<3)

u8 crc8(u16 data)

{

int i

for(i = 0i <8i++) {

if (data &0x8000)

data = data ^ POLY

data = data <<1

}

return (u8)(data >>8)

}

是否可以解决您的问题?

先看些资料(可通过网络搜索),稍微了解CRC校验原理。其实该CRC校验的过程就是异或、移位、取余数。

目前CRC校验有直接计算和查表法。这两种方法我都用梯形图(编程语言: RSLOGIX 500 )实现过。

直接计算会让PLC的执行时间将变得很长,特别是当传输数据量大的时候,因为每个字节的每个位都要进行一次计算。

推荐用查表法,PLC执行快,一个字节查表一次,计算一次。至于算法可百度搜索,很多用C语言实现的,想办法把它转为梯形图实现就可以了,其实也并不需要知道它的原理。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存