一、CRC校验码的产生原理
循环冗余编码(CRC)是二进制通信系统中一种常用的差错检测方法,它是通过在原始数据后面添加冗余校验码来实现检测差错的目的。CRC编码的基本原理就是:CRC可由原始数据流的二进制去除以一称作为生成多项式的常数,将得到的商抛弃,余数加到原始数据流二进制数的后面得到,在接收端,用接收的数据再去除以该生成多项式,如果余数为0则校验通过,否则校验不通过。
这里我们采用CRC16编码作为典型例子进行讲解,首先我们先讲解一下二进制数的多项式表示,二进制数可以表示成多项式的系数,如10 0100 0101用多项式就可以表示成:。另外,在CRC校验码的生成过程中需要用到除法操作,那么对于非常大的数字时,用数字逻辑来实现除法操作既消耗资源且操作麻烦,所以我们就需要将除数二进制数按照前面所讲解的规则转换为多项式,然后利用该多项式借助线性移位寄存器来实现复杂的除法操作。
国际上对于不同类型的CRC校验编码是有相应的国际标准的,比如CRC8,CRC16,在这些标准中对除数(或者叫做生成多项式)都有明确的规定,我们只需要查阅相关标准手册,然后根据相应的生成多项式编码实现不同类型的CRC校验码,这里以CRC16为例,CRC16的生成多项式可以表示为: