GD32使用CRC的操作方法

时间:2024-03-23 14:41:00

GD32的CRC(循环冗余校验)计算单元使用一个固定的多项式发生器从一个 32 位的数据字中产生 CRC 码。
在众多的应用中,基于 CRC 的技术还常用来验证数据传输或存储的完整性。

CRC主要特性
1> 32位数据输入/输出寄存器。对于32位的输入数据,从数据输入到得出计算结果,需要4个AHB的时钟周期;
2> 配有与计算无关的独立8位寄存器,可以供其他任何外设使用;
3> 使用 CRC-32 (以太网)多项式: 0x4C11DB7
X^32 + X^26 + X^23 + X^22 + X^16 + X^12 + X^11 + X^10 +X^8 + X^7 + X^5 + X^4 + X^2+ X +1
该32位CRC多项式与以太网CRC计算多项式相同。

输入/输出数据的反转
GD32F1x0/GD32F2x0/GD32E23x支持输入数据和输出数据的反转(默认设置是不反转)。
1.对输入数据的位反转操作可以设置为按字节/半字/字为单元进行操作。
例如输入数据为 0x1A2B3C4D
每个字节内逐位反转,结果是 0x58D43CB2
每半字内逐位反转,结果是 0xD458B23C
每个字长内逐位反转,结果是 0xB23CD458
2.对输出数据的位反转
例如输出数据为 0x11223344,反转后为 0x22CC4488

CRC程序配置
1> 以GD32F10x为例,配置代码如下:
GD32使用CRC的操作方法

因GD32使用为CRC-32 (以太网)多项式,和标准的CRC-32运算过程不同。
标准的CRC-32运算采用以下运行方式:首先需要将每次CRC输入的数据反转,然后送给硬件CRC(GD32单片机完成该步骤),进行CRC32/MPEG-2运算,然后将最后运算的结果进行反转,最后再将反转后的数据和0xFFFFFFFF进行异或,才是标准CRC运算的结果。
在CRC在线计算网(http://www.ip33.com/crc.html)可选择CRC32/MPEG-2类型方式:输入数据不反转,进行CRC运算后数据也不反转,最后将数据和0x0000000进行异或可以得到运算结果。
GD32使用CRC的操作方法

2> 因网页工具不支持大量数据/Bin文件的CRC计算,则需要使用离线工具:CRC计算工具V3.3.0-64.exe,具体界面如下图所示。
GD32使用CRC的操作方法

需要注意:keil所生成的bin文件,一般按照小端模式存储(低字节在前,高字节在后),然而使用CRC工具计算其默认是大端模式,且更改面板上的高低字节在前无用,因此需要在keil里将数据转换为大端模式,再进行CRC校验。
下面以接收的8位数据的数组为例,具体配置代码如下:
GD32使用CRC的操作方法