5.3.2. 功能描述

5.3.2.1. CRC校验

  1. CRC使用

    CRC校验算法可以以Byte为单位,按相应多项式计算生成CRC校验码。为存入存储空间的数据或其他所需校验数据段提供CRC校验码,以便校验数据是否正确。

    • 采用标准CRC-32多项式:0x4C11DB7。

    • 可通过CRC_INIT寄存器配置CRC初始值。

    • 可通过CRC_XOROUT寄存器配置CRC结果异或值,输出结果前会与该值进行异或。

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

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

      2. Bit In Word 每个Word里的Bit进行逆序处理

      3. Bit In Byte 每个Byte里的Bit进行逆序处理

      • 三种反转的优先级为Byte In Word -> Bit In Word -> Bit In Byte

    • 输出数据可通过配置寄存器是否反转,输出数据反转只有一种可选:
      1. Bit In Word 每个Word里的Bit进行逆序处理

    • 三种反转有所不同,以下图进行说明:

    ../../../_images/crcreversal_bit_byte.png
    ../../../_images/crcreversal_bit_word.png
    ../../../_images/crcreversal_byte_word.png

    CRC使用流程如下图所示:

    ../../../_images/crcflow.png
  2. 算法描述

    CRC算法描述:

    ① 输入数据按照配置进行输入反转或不反转

    ② 设置CRC初始值为当前值,当前值长度固定为32bit

    ③ 将输入数据的第n个Byte与当前值进行异或,从第一个Byte开始

    ④ 检查当前值最低bit是否为1,并将该值向右移一位,末位丢弃,高位补零

    ⑤ 如果最低bit为0,重复第④步;否则,将当前值与0xEDB88320进行异或

    ⑥ 重复第④—⑤步,直到总共完成了8次移位。至此,输入数据的第一个Byte处理完毕

    ⑦ 重复第③—⑥步,对输入数据的下一个Byte进行相同的处理,直至所有数据全部处理完毕

    ⑧ 所有数据处理完毕后,当前值按照配置进行输出反转或不反转

    ⑨ 将经过上面所有步骤处理后的当前值与结果异或值进行异或运算得出的即为最终的CRC校验码

    图示如下:

    ../../../_images/crccal.png

5.3.2.2. SUM校验

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

SUM算法描述:

  1. 以32bit为单位按顺序依次对数据进行累加和

  2. 如第32bit遇到需要进位的情况时,该次累加结束后丢弃进位得来的第33bit,下次加法运算依旧以32bit进行。

  3. 最终运算结果即为保留低32位的累加结果。