GD32使用CRC的操作方法

GD32的CRC(循环冗余校验)计算单元使用一个固定的多项式发生器从一个 32 位的数据字中产生 CRC 码。

在众多的应用中,基于 CRC 的技术还常用来验证数据传输或存储的完整性。

CRC主要特性

  1. 32位数据输入/输出寄存器。对于32位的输入数据,从数据输入到得出计算结果,需要4AHB的时钟周期;
  2. 配有与计算无关的独立8位寄存器,可以供其他任何外设使用;
  3. 使用 CRC-32 (以太网)多项式: 0x4C11DB7

X32 + X26 + X23 + X22 + X16 + X12 + X11 + X10 +X8 + X7 + X5 + X4 + X2+ X +1

32CRC多项式与以太网CRC计算多项式相同。

输入/输出数据的反转

GD32F1x0/GD32F2x0/GD32E23x支持输入数据和输出数据的反转(默认设置是不反转)。

  1. 对输入数据的位反转操作可以设置为按字节/半字/字为单元进行操作。

例如输入数据为 0x1A2B3C4D

  1. 每个字节内逐位反转,结果是 0x58D43CB2
  2. 每半字内逐位反转,结果是 0xD458B23C
  3. 每个字长内逐位反转,结果是 0xB23CD458
  1. 对输出数据的位反转
  1. 例如输出数据为 0x11223344,反转后为 0x22CC4488

CRC程序配置

  1. 以GD32F10x为例,配置代码如下:

因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进行异或可以得到运算结果。

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

需要注意:keil所生成的bin文件,一般按照小端模式存储(低字节在前,高字节在后),然而使用CRC工具计算其默认是大端模式,且更改面板上的高低字节在前无用,因此需要在keil里将数据转换为大端模式,再进行CRC校验。

下面以接收的8位数据的数组为例,具体配置代码如下:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SKCQTGZX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值