CRC16查表法原理

Preface

CRC(Cyclic Redundancy Check)是数字通信系统中广泛使用的差错检测技术,本文将探究使用广泛的CRC查表法的原理实现细节,也作为一次学习记录总结。

一、CRC校验原理

CRC校验原理基于模二运算法,相关概念如下所示。

模二加减法

模二加减法是不带借位的运算法,本质上就是异或位运算,如下所示
1 1 0 1
± 1 0 0 1
-----------
0 1 0 0

模二除法

模二除法采用模二减法,被除数除以除数,所得余数作为新的被除数,余数首位为1,商为1,余数首位为0,商为0。

设M是被除数,G是除数,P为商,R为余数。M是报文数据101001,P是多项式x^3 + x ^2+ 1(3-bit CRC),首先将待计算报文LSB位后填充n bit(CRC校验的长度),再将填充后的报文数据与多项式模二除法运算,计算步骤如下:
从MSB bit 开始,每个bit与多项式异或运算的结果参与下一步的异或运算:
第一次:被除数首位为1,除以除数G,商为1;
第二次:新的被除数(余数)首位为1,除以除数G,商为1;
第三次:新的被除数首位为0,除以除数0,商为0;
第四次:新的被除数首位为1,除以除数G,商为1;
第五次:新的被除数首位为0,除以除数0,商为0;
第六次:新的被除数首位为1,除以除数G,商为1;
第六次除法后余数位数小于除数,运算结束。
在这里插入图片描述

二、CRC校验模型参数

多项式:CRC校验中的除数,对于同一个多项式,以x16+x15+x2+1为例,MSB-first code所表示的值为0x8005,LSB-first code所表示的值为0xA001,CRC计算根据需要使用其中一种code。

初始值: CRC校验的初始值,校验完成后的返回值

结果异或值: 与CRC校验结果异或的值

输入反转: CRC校验的输入值是否需要位反转

输出反转:CRC校验的结果值是否需要位反转

以下是不同CRC校验模型的参数(Polinomial使用MSB-first code)
在这里插入图片描述

三、查表法原理

1.计算单字节CRC校验值

以CRC-16/IBM 校验模型为例,多项式为x16+x15+x2+1,待计算数据为0x01,以下是计算CRC的python代码


                
  • 0
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值