什么是CRC和CRC检验?

本文详细介绍了CRC(循环冗余检查)的基本概念及其工作原理。CRC是一种数据传输检错功能,通过对数据进行多项式计算并附加到帧尾部来实现。文章还解释了CRC校验的多项式编码方法,并说明了其检错能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

名词解释

CRC(循环冗余检查)--一种数据传输检错功能,对数据进行多项式计算,并将得到的和数附在帧的后面。接收设备也执行类似的算法。

什么是CRC校验?

CRC校验采用多项式编码方法。
被处理的数据块可以看作是一个二进制多项式,例如,10110101可以看作是2^7+2^5+2^4+2^2+2^0,多项式乘除法运算过程与普通代数多项式的乘除法相同。多项式的加减法运算以2为模,加减时不进,错位,和逻辑异或运算一致。
采用CRC校验时,发送方和接收方用同一个生成多项式g(x),并且g(x)的首位和最后一位的系数必须为1。CRC的处理方法是:发送方以g(x)去除t(x),得到余数作为CRC校验码。校验时,以计算的校正结果是否为0为据,判断数据帧是否出错。
CRC校验可以100%地检测出所有奇数个随机错误和长度小于等于k(k为g(x)的阶数)的突发错误。所以CRC的生成多项式的阶数越高,那么误判的概率就越小。
CCITT 建议:2048 kbit/s的PCM基群设备采用CRC-4方案,使用的CRC校验采用16位CRC校验。在IBM的同步数据链路控制规程SDLC的帧校验序列FCS 中,使用CRC-16。g(x)的位数越高,检错能力就越强。由于CRC-32的可靠性,把CRC-32用于重要数据传输十分合适,所以在通信、计算机等领域运用十分广泛。在一些UART通信控制芯片(如MC6582、Intel8273和Z80-SIO)内,都采用了CRC校验码进行差错控制;以太网卡芯片、MPEG解码芯片中,也采用CRC-32进行差错控制。
CRC(Cyclic Redundancy Check,循环冗余校验)是一种用于检测数据传输或存储中错误的技术。其原理基于多项式除法,通过生成一个冗余校验码来检测数据错误。以下是CRC校验的基本原理步骤: 1. **选择生成多项式**:首先,选择一个预定义的生成多项式G(x),这个多项式通常由标准规定,比如CRC-32使用的多项式为`0x04C11DB7`。 2. **数据表示**:将需要传输的数据表示为一个二进制多项式D(x),其中每个比特位对应多项式中的一个系数。例如,数据`1101`可以表示为`x^3 + x^2 + 0x + 1`。 3. **添加零位**:为了进行多项式除法,需要在数据多项式后面添加r个零位,这里的r是生成多项式的阶数。例如,如果生成多项式是4阶的,则需要在数据末尾添加4个零。 4. **多项式除法**:使用扩展的欧几里得算法,将添加了零位的数据多项式除以生成多项式,得到余数R(x)。这个余数就是CRC校验码。 5. **附加校验码**:将计算出的CRC校验码附加到原始数据的末尾,形成一个新的数据帧,这个数据帧包含了原始数据CRC校验码。 6. **接收端验证**:接收方收到数据后,会使用相同的生成多项式对整个数据帧(包括原始数据CRC校验码)进行除法操作。如果余数为零,则认为数据没有错误;如果不为零,则表明数据在传输过程中出现了错误。 CRC校验能够有效地检测出多种类型的错误,包括单个比特错误、双比特错误以及奇数个比特错误等。由于其实现简单且效率高,CRC校验被广泛应用于网络通信、存储设备其他需要数据完整性检查的领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值