前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章)

M-Arch(番外5)GD32L233评测-CRC(附 史上解释CRC最清楚的文章)

作者头像
滚神大人
发布2022-03-22 12:06:53
9020
发布2022-03-22 12:06:53
举报
文章被收录于专栏:趣Python趣Python

前言

GD32L233支持硬件CRC,超赞。

跟GD32F450相比,它可以支持计算7/8/16/32位的CRC校验码,而不仅仅是32位的校验码。

这有什么好处呢?

懂CRC的都知道,0x34和0x00000034的校验码是不一样的,这不仅仅是计算结果不一样,计算复杂度也不是一个等级的。

0x34和0x00000034的CRC32计算过程

据说能看懂这个图的年薪只能到百万,-_-

我曾经写过一篇解释CRC的文章,可以围观一把:史上解释CRC最清楚的文章

在线CRC网址:在线CRC[1]


GD32L233的CRC是CRC32。

  • 对应的标准是:CRC32/MPEG-2
  • 多项式是:x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 + x5 + x4 + x2 + x + 1,即:0x04C11DB7
  • 初始值是:0xFFFFFFFF
  • 输入数据反转:false
  • 输出数据反转:false
  • 结果异或值是:0x00000000

这个在官方的用户手册上没有写,建议官方把它加上去。

代码

由于GD32L233的支持不同位的CRC码,所以它的接口不一样:

代码语言:javascript
复制
uint32_t crc_single_data_calculate(uint32_t sdata, uint8_t data_format)

GD32F450是:

代码语言:javascript
复制
uint32_t crc_single_data_calculate(uint32_t sdata)

需要注意的是:

每次计算完crc后需要调用crc_data_register_reset复位寄存器。

测试过程比较简单:

代码语言:javascript
复制
static void crc_test(void)
{
#ifdef CRC_TEST
    uint32_t data = 0xabcd1234;
#if defined(GD32) || defined(STM32)
    uint32_t crc_data = crc_single_data_calculate(data);
    crc_data_register_reset();
#endif
#if defined(GD32M0)
    uint32_t crc_data[3];
    crc_data[0] = crc_single_data_calculate(data, INPUT_FORMAT_WORD);
    crc_data_register_reset();
    crc_data[1] = crc_single_data_calculate(data, INPUT_FORMAT_HALFWORD);
    crc_data_register_reset();
    crc_data[2] = crc_single_data_calculate(data, INPUT_FORMAT_BYTE);
    crc_data_register_reset();
#endif
#ifdef STM32
    printf("STM32: crc32 of 0x%X = 0x%X\r\n", data, crc_data);
#endif
#if defined(GD32)
    printf("GD32: crc32 of 0x%X = 0x%X\r\n", data, crc_data);
#endif
#if defined(GD32M0)
    printf("GD32: crc32 of 0x%X = [32]0x%X [16]0x%X [8]0x%X\r\n", data, crc_data[0], crc_data[1], crc_data[2]);
#endif
#endif
}

不同位数的计算结果对比:

数据

CRC

34

893EA4F8

1234

77227A2D

ABCD1234

F7018A40

00000034

0032C637

测试结果

1秒打印一次。

CRC测试结果

参考资料

[1]

在线CRC: http://www.ip33.com/crc.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 趣Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 代码
  • 测试结果
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档