
crc8校验程序和校验检查软件的实现。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
CRC8校验的原理如下:程序和检验软件 CRC,即循环冗余校验码(Cyclic Redundancy Check),是一种在数据通信领域中广泛应用的一种差错校验码。其关键特点在于信息字段和校验字段的长度可以根据需求灵活调整。CRC校验的核心思想可以概括为:为了确保接收端能够准确判断接收到的数据是否正确,我们会在原始信息字段后添加一个校验数据字段,即CRC校验码。在发送端,根据预定的规则(称为“生成多项式”)来计算一个r位的校验码(CRC码),并将其与原始信息字段组合成一个新的二进制码序列,该序列的总长度为k+r位,然后进行发送。在接收端,则根据发送时使用的规则(与生成多项式完全一致)对数据进行检验。具体而言,采用计算机的模二除法进行运算,其中除数和被除数(即生成多项式)之间进行异或运算。异或运算时,除数和被除数的高位需要对齐,并进行按位异或运算。如果最终的结果能够被除尽,则表明传输的数据是正确的;否则,传输过程中出现了错误。
CRC8是一种特殊的CRC校验码形式,其生成的CRC校验码长度为1字节。其生成多项式通常设定为g(x)=x8+x5+x4+1, 相当于 g(x) = 1•x8 + 0•x7 + 0•x6 + 1•x5 + 1•x4 + 0•x3 + 0•x2 + 0•x1 + 1•x0, 最终对应的二进制数为100110001.
接下来介绍 CRC8 算法的具体步骤:首先,给定一个信息字段代码 (例如:00000001 00000010),对应生成一个生成多项式 g(x) = x8+ x5+ x4+1, 其二进制表示为 100110001. 现在我们针对2字节数据 0x01 02 计算 CRC8校验码并将其附加到数据后面 (例如: `# #` 代表8位CRC)。先计算 x8m(x) = x^16 + x^9 ,对应的二进制数为 `1` `⁰⁰⁰⁰⁰⁰¹⁰` `⁰⁰⁰⁰⁰⁰⁰⁰` 。这个结果实际上就是将信息字段代码左移8位. 然后用 x8m(x)得到的二进制数对生成多项式g(x)进行模二运算, 余数就是所需要的 CRC8校验码. 例如:
`¹⁰⁰⁰⁰⁰¹₀` `⁰⁰⁰°°°°` ^ `¹₀₀₁₁₀₀₀₁`
= `¹₀₀₁₁₀₀₁¹` `¹°°°°°°°`
继续进行模二运算:
`¹₀₀₁₁₀₀₁¹` `¹°°°°°°°` ^ `¹₀₀₁₁₀₀₀₁`
= `¹ºººººººººº²´´´´´´´´ ´´´ ´ ´ ´ ´ ´ ¹ ° ° ° ° ° ° ° ¹ ¹ ²³⁴⁵⁶⁷⁸⁹
...最终得到余数 ¹0010110 (即 96) 作为 CRC8校验码. 因此经过 CRC8 校验后的完整数据是 ٠١٠٢٩٦.
此外, 在 DS18B20 中, CRC 的应用也十分常见. 首先, DS18B20 的八字节序列号的最后一位是前七个字节的 CRC 代码, 用于保证序列号的唯一性和正确性;其次, DS18B20 的内部九字节的高速温度存储器中, 第九个字节是前八个字节的 CRC 校验码, 用于确保温度数据的准确性. DS18B2O 中的 CRC 生成方法与常规方法有所不同, 它采用逆序 CRC 信息单元编码算法. 该算法由 DS18B2O 中的多项式寄存器通过移位寄存器以及异或门对输入的多项式寄存器的每一位二进制数进行一系列运算得到最终的CRC代码. 具体过程可以参考 Maxim 公司提供的 DS18B2O 应用笔记 Note27 . 下面列举两种 DS18B2O 的 C 程序实现方式。
全部评论 (0)


