Edit online

功能描述

Read time: 2 minute(s)

CRC 校验算法配置

CRC 校验算法的配置流程如下:
  1. 通过 CRC _INIT 寄存器配置 CRC 初始值。

  2. 通过 CRC _XOROUT 寄存器配置 CRC 结果异或值,输出结果前会与该值进行异或。

  3. 选择硬件取数的方式处理数据。

    硬件取数以 Word 为单位进行取数,当尾端数据长度不足一个 Word 时,硬件会自动补零。

  4. 通过寄存器配置是否反转输入数据,反转方式选择如下:
    • Byte In Word 每个 Word 里的 Byte 进行逆序处理。由于硬件以 Word 为单位取数,高位在前低位在后。所以使用需要注意,如需以 Byte 从低到高顺序运算,需要配置该反转。

    • Bit In Word 每个 Word 里的 Bit 进行逆序处理。

    • Bit In Byte 每个 Byte 里的 Bit 进行逆序处理,

    三种反转方式的优先级为 Byte In Word > Bit In Word > Bit In Byte。

  5. 通过寄存器配置是否反转输出数据,反转方式选择如下:
    • Bit In Word 每个 Word 里的 Bit 进行逆序处理。

注: 关于输入输出反转运算的详细说明,可查看 CRC 算法的反转运算说明


1. CRC 使用流程

CRC 算法的反转运算说明

CRC 算法涉及的反转运算的详细说明如下图所示:



2. Bit In Byte 反转


3. Bit In Word 反转


4. Byte In Word 反转

CRC 硬件运算流程

CRC 硬件运算流程如下所示:
  1. 按照配置,选择对输入数据进行输入反转或不反转。
  2. 设置 CRC 初始值。

    CRC 初始值为当前值,当前值长度固定为 32 bit。

  3. 将输入数据的第 n 个 Byte 与当前值进行异或,从第一个 Byte 开始。
  4. 检查当前值最低 bit 是否为 1,并将该值向右移一位,末位丢弃,高位补零。
  5. 如果最低 bit 为 0,重复 4 步;否则,将当前值与 0xEDB88320 进行异或。
  6. 重复 45 步,直到总共完成了 8 次移位。至此,输入数据的第一个 Byte 处理完毕。
  7. 重复 4 - 6 步,对输入数据的下一个 Byte 进行相同的处理,直至所有数据全部处理完毕。
  8. 所有数据处理完毕后,当前值按照配置进行输出反转或不反转。
  9. 将经过上面所有步骤处理后的当前值与结果异或值进行异或运算得出的即为最终的 CRC 校验码。

    图示如下:



SUM 校验

SUM 校验指的是把所需校验的数据段以 32 bits 为单位进行累加运算,并将累加结果保留低 32 位输出。尾端数据如不足 32 bits 则进行高位补零。

SUM 算法描述:

  1. 以 32 bits 为单位按顺序依次对数据进行累加和。
  2. 如第 32 bits 遇到需要进位的情况时,该次累加结束后丢弃进位得来的第 33 bits,下次加法运算依旧以 32 bits 进行。
  3. 最终运算结果即为保留低 32 位的累加结果。