CRC原理及应用

基本概念看这篇文章详述循环冗余校验CRC(C代码)_crc循环冗余校验-优快云博客

CRC模型计算举例看这篇文章最详细的“CRC码原理详解”-优快云博客

有一些疑点,CRC16_ModBus的计算代码是如何通过CRC原理得出的,为什么8005要变成A001,里面的逻辑是什么?如果要自己用代码实现其他CRC计算模型,应该如何编写程序?私以为能搞清原理和代码之间的关系才算真正理解了CRC校验。

还有为什么原始数据必须是以字节为单位。

下面我将补充一些其他CRC模型计算的实例,加深对CRC原理及应用的理解。

补充2字节计算情况:

43 67 即 0100 0011 0110 0111,采用CRC-5/USB(G(x) = x^5 + x^2 + 1)多项式。

s1:根据CRC-5/USB多项式,得到除数二进制:100101

s2:由于REFIN=TRUE,需要翻转输入数据,0100 0011 0110 0111 是直接翻转成 1110 0110 1100 0010 还是按字节翻转成1100 0010 1110 0110,经计算验证,是后者。

s3:由于INIT=0x1F为全1,需要对s2中数据的前CRC位数(高位)(即5-bit)和CRC初值进行异

        或,得到数据:1100 0010 1110 0110 -> 0011 1010 1110 0110

s4:将s3中的数据的最低位补5位0,得到数据:0011 1010 1110 0110 00000

s5:将s4中的数据与多项式二进制(100101),进行模2除法运算

得到余数:10000

s6:由于REFOUT=TRUE,需要将s5中的结果(10000)进行翻转,得到数据:10000—>00001

s7:最后,s6中的值与XOROUT=0x1F进行异或,得到最终的CRC值:11110 即1E

补充3字节时 CRC16_MODBUS模型的计算情况:

计算过程

异或运算网站:

在线二进制按位异或运算计算器-Bejson.com

crc计算网站:

CRC(循环冗余校验)在线计算_ip33.com

ModbusCRC16计算单字节及crc模型详细计算过程:

ModbusCRC16计算单字节-优快云博客

关于各个CRC模型与代码的关系,后续找到了这篇文章可以参考:

手撕CRC校验_c语言手撕crc计算及校验-优快云博客

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值