CRC校验的最底层原理是什么?
CRC最基础的运算就是移位运算和异或运算。
由于硬件可以完成CRC运算,即固化CRC算法,故实际运算又被分成左移或右移运算,即CRC成员中的“CRC方向”。
CRC的成员有:
CRCn:常见的有CRC4,CRC8,CRC16,CRC32,CRC64。
权值:即多项式poly,它是CRC运算中的“密钥”,即算法的核心。
由于上面说过CRC算法分为左移或右移运算,故当左移运算时,权值的最低位D0为“1”时,CRC可逆,否则CRC不可逆。
当右移运算时,权值的最高位Dn-1为“1”时,CRC可逆。否则CRC不可逆。
通俗地说,多项式中含“+1”或“+X0”时,CRC可逆。否则CRC不可逆。
CRC方向:开始已经论述,分为左移或右移运算。
CRC初值:即CRC运算的初始值init,它只对第一个CRC待校验数据作用,并与其满足交换律。
CRC出值:即CRC运算过程结束后,它对最后一个运算过程的中间结果异或后的输出值xorout。
CRC结果:即CRC运算的最终校验和。
CRC表格:与CRC初值或CRC出值无关,并对连续的待校验数据(例如00-0xFF)进行CRC运算的校验和结果流。
CRC简写式:它包含了CRCn,CRC权值,CRC方向,CRC初值和CRC出值。它是CRC运算中最为完整的表述。
CRC算法:它至少有五种算法:
1.CRC移位算法。它没有CRC表格,主要是对CRC权值的移位和异或运算,故相对速度最慢。
2.CRC大表和单表算法,其中大表内有256个查表数据单元。只有一个CRC表格。
3.CRC小表和单表算法,其中小表内只有16个查表数据单元。只有一个CRC表格。它比大表算法慢一倍。
4.CRC大表和双表组合算法,它比算法2多了一个CRC表格,但数据宽度降低一倍,运算速度比算法2稍慢。它是低位数MCU的最佳选择。
5.CRC小表和双表组合算法,它比算法3多了一个CRC表格,但数据宽度降低一倍,运算速度比算法3稍慢。它是低位数MCU的最佳选择。
学习CRC最底层原理可以从以上5种算法中看出,特别是从移位算法中搞清楚CRC的基本原理和运算。
下图中的HotCRC计算器就可以自动生成任意CRC权值(CRC表格)的5种C语言表格和源码。
而且可以根据学习的要求生成更为详细带有调试信息的源码。
Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有