forgot 发表于 2025-7-7 13:42

CRC校验的原理与应用

原理:
CRC校验将数据视为一个二进制多项式,用一个预先定义好的生成多项式(Generator Polynomial) 进行模2除法,得到的余数作为CRC校验码。
例如:数据多项式 ÷ 生成多项式 = 商 ... 余数 → 余数 = CRC码。
接收方用同样的多项式去除接收到的数据(含CRC),余数为0则认为无错。

特点:
检测能力极强:
能检测所有单比特错误。
能检测所有双比特错误(如果生成多项式选得好)。
能检测奇数个比特错误。
能检测长度小于生成多项式阶数的突发错误(如16位CRC可检测≤16比特的连续错误)。
对长突发错误的检测概率接近 1 - 1/(2^n)(n=CRC位数)。
计算复杂度较高:涉及二进制多项式除法,但可通过查表法(Lookup Table)优化。
长度灵活:常用 CRC-8、CRC-16、CRC-32、CRC-64 等。
无纠错能力:仅检测错误(但可通过算法扩展实现纠错,如CRC用于RAID)。

生成多项式示例:
CRC-16-CCITT: x¹⁶ + x¹² + x⁵ + 1 (0x1021)
CRC-32 (Ethernet, ZIP): x³² + x²⁶ + x²³ + x²² + x¹⁶ + x¹² + x¹¹ + x¹⁰ + x⁸ + x⁷ + x⁵ + x⁴ + x² + x + 1 (0x04C11DB7)

典型应用:
数据链路层协议(如 Ethernet, PPP)。
存储系统(硬盘、SSD、RAID、ZIP/RAR压缩文件)。
无线通信(Wi-Fi, Bluetooth)。
文件系统(如 NTFS、ext4 的元数据校验)。

xiaoqizi 发表于 2025-8-2 19:08

CRC是一种基于多项式计算的错误检测方法

木木guainv 发表于 2025-8-2 21:21

CRC将数据视为一个二进制多项式,并用预先定义好的生成多项式对其进行模2除法运算,得到的余数作为校验码附加在原始数据后面

Jiangxiaopi 发表于 2025-8-3 08:03

常用的有CRC-8、CRC-16、CRC-32等,不同的多项式会影响校验的性能和检测能力

荣陶陶 发表于 2025-8-3 10:40

在待校验数据的末尾添加若干个0,使总长度达到生成多项式的倍数

Zhiniaocun 发表于 2025-8-3 13:04

模2除法:从最高位开始逐位进行异或操作。如果当前位为1,则执行异或;若为0,则直接移至下一位。此过程类似于长除法,但所有加减法均以异或实现

Zuocidian 发表于 2025-8-3 15:17

CRC能检测出多种类型的错误,包括单比特错误、双比特错误以及奇数位翻转等

Puchou 发表于 2025-8-3 17:57

由于采用模2运算,CRC对突发性错误特别敏感

Xiashiqi 发表于 2025-8-3 20:11

如Wi-Fi和LTE协议,在物理层和链路层分别使用CRC来验证控制信息及用户数据的完整性

小海师 发表于 2025-8-3 22:31

在OTA升级过程中,通过CRC校验保证下载的固件包无损坏
页: [1]
查看完整版本: CRC校验的原理与应用