crc参数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
因为不仅仅是生成项POLY会影响到CRC值,还有很多参数会影响到最终的CRC值!
CRC计算,需要有CRC参数模型,比如CRC32的参数模型是:
Name : "CRC-32"
Width : 32
Poly : 04C11DB7
Init : FFFFFFFF
RefIn : True
RefOut : True
XorOut : FFFFFFFF
解释:
NAME
名称
WIDTH
宽度,即CRC比特数
POLY
生成项的简写。
以16进制表示,即是0x04C11DB7。
忽略了最高位的"1",即完整的生成项是0x104C11DB7。
重要的一点是,这是“未颠倒”的生成项!前面说过,“颠倒的”生成项是0xEDB88320。
INIT
这是算法开始时寄存器的初始化预置值,十六进制表示。
这个值可以直接赋值给“直驱表法”算法中的寄存器,作为寄存器的初始值!
而对于“驱动表法”算法及“直接计算法”,寄存器的初始值必须是0!前面几次循环先将待测数据移入到寄存器中,当寄存器装满后,再用这个初始化预置值去XOR寄存器,这样寄存器就被这个值初始化了!
这点很重要!!如果在“驱动表法”算法开始时,寄存器的初始值不为0,那么寄存器中的值就会相当于是待测数据了,这样算出的CRC结果就不对了!我们的目的是用预置值去初始化寄存器,而不是将预置值作为待测数据去处理!
REFIN
这个值是真TRUE或假FALSE。
如果这个值是FALSE,表示待测数据的每个字节都不用“颠倒”,即BIT7仍是作为最高位,BIT0作为最低位。
如果这个值是TRUE,表示待测数据的每个字节都要先“颠倒”,即BIT7作为最低位,BIT0作为最高位。
REFOUT
这个值是真TRUE或假FALSE。
如果这个值是FALSE,表示计算结束后,寄存器中的值直接进入XOROUT处理即可。
如果这个值是TRUE,表示计算结束后,寄存器中的值要先“颠倒”,再进入XOROUT 处理。
注意,这是将整个寄存器的值颠倒,因为寄存器的各个字节合起来表达了一个值,如果只是对各个字节各自颠倒,那结果值就错误了。
XOROUT
这是W位长的16进制数值。
这个值与经REFOUT后的寄存器的值相XOR,得到的值就是最终正式的CRC值!。