CRC校验码概述
冗余编码是在二进制通信系统中常用的差错检测方法,它是通过在原始数据后加冗余校验码来检测差错,冗余位越多,检测出传输错误的几率越大。循环冗余编码(Cyclic Redundancy Codes,简称CRC)是一种常见的冗余编码,CRC校验的基本原理是:CRC可由一称为生成多项式的常数去除该数据流的二进制数值而得,商数被放弃,余数作为冗余编码追加到数据流尾,产生新的数据流进行发送。在接收端,新的数据流被同一常数去除,检查余数是否为零。如果余数为零,就认为传输正确,否则就认为传输中已发生差错,该数据流重发。
CRC校验码的生成
CRC检验码的生成主要包含以下过程:
第一步:展开多项式得到CRC除数。
第二步:原始数据末端加零。除数的位数减一为CRC校验码的位数,假设除数的位数为5,则校验码的位数为4,对被除数也就是需要传递的信息的数后面加上校验码的位数的0,如果校验码的位数为4,则在被除数后面直接加上4个0
第三步:执行除法操作,将加上4个0的被除数作为新的被除数,除以我们定义的除数,除法操作完成后,会得到两个结果:一个是商,另一个是余数。(注意:除法运算采用异或运算)
得到的余数即使我们要的 CRC 校验码
总的来说,可以理解为输入为需要传输的数据和多项式(除数),得到的输出为CRC校验码。
这里推荐看一个视频CRC校验
根据多项式画出电路图
在除数中位置为1的地方插入异或。当输入数据输入完后,最后寄存器中保存的结果即为校验码。