技术文档和资料_CRC校验方法

2019-04-14 21:15发布

  相关的概念:需要知道 读者也许熟悉整数算术中有关模数的概念。例如采用 12 小时的时钟,就是一个我们每天都用来指 示时间的模数为 12 的系统。如果在 11: 00 上加 2 小时,就得到了时间 1: 00 。模 2 C 模数为 2) 算术 采用的是两个没有借位或进位的二进制操作数,其操作结果同样也是一个二进制数,并且也是模 2 算 术体系中的一个数。由于该体系中数的加法形成闭包(自封闭) ,而且具有单位元素,数学家称这种模 2 体系构成一个代数域 Calgebraic field) 。 模 2 的加法运算的规则如下:   例 2-28 求 10010112 除以 10112 的商和余数。 1011)1001011  1. 把除数直接写在被除数的第一位的下面。 001001  2. 对这些数字的执行模 2 加法。 3. 从被除数上取后面各个位,使得余下部分的第一个1可以与除数中的第一个1对齐。 4. 根据步骤 1 重新写下除数。  5. 按步骤 2 进行相加。 0010      6. 再取下被除数的另一位。 00101    7. 这时, 1012 已经不够被 1011 2 来除,所以就是余数。 得到的商为 1010 2 。  模 2 域的算术运算也具有多项式的形式,就如同整数域中有类似的算术多项式一样。如前所述, 位置计数系统采昂的是一种递增基数指数辱的形式来表示数字。例如, 10112=l*2 3 十O*2 2 +1 *2 1 十 1 *2 0  取 X= 2 ,则二进制数 1011 2 可以简写成如下的多项式形式: 1 *X 3 十O*X 2 十 1* X l 十 1*X 0       而对于例 2-28 中的除法运算就变成了如下的多项式运算: X6+X3 十 X+1 X3+X十 1  
  CRC的计算和使用方法 经过了上面的背景知识介绍,现在来讨论怎样构建循环冗余码校验体系 (CRC) 。下面通过举例来 加以说明。 1.假设信息字节为 1 =  1001011 2  (可以使用任意大小的字节数来组成信息块)。 2. 发送器和接收器都对某个任意的二进制位组合模式达成协议,例如 , p  =  10112  (如果二进制 的位组合模式的开始和结束位都是1,则运行效果最好)。 3. 将 I 左移,左移的位数为 P 的位数减 1 位,就产生了一个新的 I =  1001011000 2 。 4. 用 I 做被除数 , p 做除数,进行模 2 除法(如同例 2-28 中所做的一样)。略去商只留下余数为 1002 。实际上,这个余数就是 CRC 体系要求的校验和。 5. 把余数加到 I 中,就组成要发送的信息 M: 1.001011000 2 +  100 2 = 1001011100 2  6. 信息接收器将采用相反的过程来对 M进行解码和校验。 M应该可以被 P 严格整除: 1010100  1011)  1001011100  1011  001001  1011  0010  001011  0000  当结果的余数不为 O 时,表示在 M 的传送过程中有一个错误发生。当采用大指数幕的互质多项式 时,这种检测方法的效果最好。下面是广泛应用于这种检测方法中 4 个标准多项式。 • CRC-CCITT  (ITU-T)  : X16 十X12+X5+1 • CRC-12: X12 + Xl1十 X3+X2+X+1 • CRC-16  CANSD  :X16+X15+X2 十1 • CRC-32: X32 十X26 +  X23 + X22 十 X16 + X12 + X11 + XIO 十X8 十X7+X5 十X4+X+1   如果是4字节方式32位系统,需要采用CRC-32编码格式进行CRC,使用的除数多项式就是CRC-32的格式,进行模2计算
  CRC-CCITT、 CRC-12 和 CRC-16 都是对成对字节进行操作的,而 CRC-32 则用于 4 字节方式,比 较适合于 32 位字工作的系统。事实证明,采用这些多项式的 CRC 方法可以检测出超过 99.-8% 的全部 的单位的错误。 CRC 可以采用查找错误表的方法来进行操作,而不必对字节的每一位都计算余数。将各种可能输 入的位组合模式产生的余数表直接"烧录"到通信和存储电子设备中。这样一来,只需要一次查找就 可以得到余数,而不必进行 16 个或 32 个循环周期的除法运算。很显然,这种方法的使用取决于对检 测速度需求和采用更复杂控制电路所带来的成本问题的平衡。