includeu003cstdio.hu003e#includeu003cstdint.hu003euint8_tcrc8(uint8_t*data,uint8_tlen){uint8_tcrc=0;for(inti=0;iu003clen;i){crc^=data;for(intj=0;ju003c8;j){if(crcu00260x80){crc=(crcu003cu003c1)^0x07;}else{crcu003cu003c=1;}}}returncrc;}intmain(){uint8_tdata={0x01。
0x03,0x04,0x05};uint8_tlen=sizeof(data)/sizeof(data);uint8_texpected_crc=0x8d;uint8_tactual_crc=crc8(data,len);printf(“Data:”);for(inti=0;iu003clen;i){printf(“x”,
1、CRC校验的校验电路实现
以下以CRC8x8+x5+x4+1为例说明,其它可以以此类推一个简单的RTL解释,是上文“生成方法”的Verilog描述moduleCRC8(EN,data,crc);parameterWIDTH12;inputEN;output[7:0]crc;input[WIDTH1:0]data;reg[7:0]crc;wire[7:0]poly8h31;//x8+x5+x4+1>0x131,
8h00};endelsebeginfor(lenWIDTH+8;len>0;lenlen1b1)beginif(crc_reg[WIDTH1+8])begincrc_reg[WIDTH1+8:WIDTH]crc_reg[WIDTH1+8:WIDTH]^poly;crc_regcrc_reg<<1b1;endelsec。
2、如何校验CRC值
作二进制除法。1、发送数据比特序列为(10比特)。2、生成多项式比特序列为10011(5比特,K4),X的指数就是代表第几位为1,而且1X的0次方。3、将发送数据比特序列乘以2的K(由2可知K为4),那么产生的乘积为。4、将乘积用生成多项式比特序列去除,按模二算法得到余数1110。模二算法就是两数相减不产生借位,011。
RC校验原理看起来比较复杂,因为大多数书上基本上是以二进制的多项式形式来说明的。其实很简单的问题,其根本思想就是先在要发送的帧后面附加一个数(这个就是用来校验的校验码,但要注意,这里的数也是二进制序列的,下同),生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(注意,这里不是直接采用二进制除法,而是采用一种称之为“模2除法”)。
3、crc校验查表法表格放在哪里
非易失性存储器,程序代码和内存中。在一些嵌入式系统等资源有限的环境下,为了节约内存空间,可以将CRC表格存储在程序代码中并在运行时生成,也可以将CRC表格存储在非易失性存储器中,如Flash、EEPROM等。如果您使用的是PC等计算机系统,可以将CRC表格存储在内存中,以提高CRC值的计算效率。