摘要
循环冗余校验(CRC)是当今大多数数字设备中必不可少的错误检测技术。它通过以非常高的概率检测意外更改,实现了设备之间可靠的数据传输。本文全面介绍了 CRC 的工作原理、在设备通信中的重要性、实现、优点和局限性。
循环冗余校验(CRC)是数字数据通信和存储设备中使用的一种重要的错误检测技术。它有助于确保设备之间传输的数据或存储在内存中的数据的完整性。让我们来了解一下 CRC 是什么,它在设备中的工作原理,以及为什么它对可靠通信至关重要。
什么是 CRC?
CRC 是一种校验和算法,用于检测原始数据中的意外更改或错误。发送者从数据中计算出 CRC 值,并将其与原始数据一起发送。然后接收者从接收到的数据中重新计算 CRC,并将其与发送者发送的 CRC 进行比较。如果两个值匹配,则数据很可能已被正确传输,没有错误。如果它们不匹配,接收者可以请求重新传输数据。
CRC 的关键优势在于检测诸如传输时的噪声和存储位翻转等常见错误。这允许采取行动来纠正这些错误。CRC 在当今的设备中无处不在——调制解调器、硬盘、路由器都使用 CRC。
为什么 CRC 对设备很重要?
对于像路由器和调制解调器这样传输大量数据的设备来说,由于噪声,传输过程中错误的发生是不可避免的。诸如硬盘等存储设备在从内存读取数据时也经常会出现位错误。如果不检测到错误会导致包括重要数据丢失在内的不利后果。
CRC 提供了一种技术,可以以非常高的概率检测此类错误,使系统能够采取措施纠正它们。这使得数据传输更加可靠。这就是 CRC 被设备间广泛采用的原因。
设备中的 CRC 如何工作?
CRC 值是通过将输入数据视为一个大的二进制数来计算的。该二进制数被预定的“生成多项式”除。除法的余数就是 CRC 值。
例如,考虑输入数据1101
。我们使用简单的多项式x2 + 1
作为生成多项式。将1101
除以x2 + 1
得到余数11
,这是该输入数据的 2 位 CRC 值。
CRC 实现错误检测的关键特性是:
CRC 运算将输入数据视为一个整体数。因此即使更改一比特的数据也会产生不同的 CRC 值。
生成多项式的选择使 CRC 除法对常见的错误模式(如单比特翻转)具有抵抗性。
具体的 CRC 算法和生成多项式根据所需的错误检测能力和实现约束而有所不同。但是基本工作原理仍然相同。
下面是两个常用的 CRC 验证工具。
CRC 计算过程
CRC 计算涉及以下关键步骤:
将输入数据视为一个二进制数。追加 0 比特,数量等于 CRC 宽度。
使用生成多项式对增强后的输入数据进行二进制除法。
除法的余数就是 CRC 值。将其附加到原始数据上。
接收者对接收到的数据(包括 CRC)使用生成多项式进行除法。
如果余数为 0,数据无误。否则检测到错误。
我们来看一个针对输入数据11010011
的 CRC-8 计算示例:
追加 8 个零位,得到 16 位数字
1101001100000000
使用生成多项式
x8 + x7 + x4 + x3 + x + 1
。用其除以增强后的数据。余数是
10011011
。这个 8 位余数就是 CRC 值。传输
11010011 10011011
- 原始数据与追加的 CRC。接收者对接收到的数据除以生成多项式。如果余数为 0,则无误检。否则检测到误差。
CRC 在设备中的优势
在设备中使用 CRC 的主要优势是:
错误检测 - 可以以很高的概率检测随机位翻转等错误。
抗噪声 - 可对传输错误提供保护,抵御噪声干扰。
端到端验证 - 由于 CRC 在接收数据时重新计算,可验证端到端完整性。
无需确认 - CRC 消除了每个数据包确认的开销。
独立操作 - 算术 CRC 可以轻松在硬件/软件中实现。
数据完整性 - 通过检测错误确保只使用正确的数据进行处理。
不同设备中的 CRC
CRC 广泛应用于各种数字设备:
存储 - 硬盘、闪存使用 CRC 检测和纠正位错误。
网络 - 以太网、调制解调器使用 CRC 检查数据包和帧。
无线 - 蓝牙使用 CRC 验证设备之间的无误传输。
卫星 - CRC 对下行遥测数据进行编码,以检查空间辐射错误。
汽车 - CAN 总线使用 CRC 使 ECU 能够检测故障消息。
这展示了 CRC 在保护数据完整性中的通用性和广泛使用。
CRC 的局限性
但是,CRC 也存在一些缺点:
突发错误 - 不擅长检测跨多个比特的突发错误。
恶意错误 - 对故意引入错误以损坏数据的恶意攻击者没有弹性。
校验和冲突 - 不同的输入数据生成相同的 CRC 值的可能性非常低,但存在。
错误校正 - CRC 只能检测而不能纠正错误。要进行更正,需要诸如前向错误校正等技术。
总结
总之,CRC 是当今大多数数字设备中必不可少的错误检测技术。它通过以非常高的概率检测意外更改,实现了设备之间可靠的数据传输。使用 CRC 验证数据的完整性有助于构建健壮的系统,这些系统在检测到错误时可以采取行动。CRC 在不同应用中的无所不在展示了它对设备通信可靠性的重要性。