0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用CRC模块加速校验码的计算

冬至配饺子 来源:兆易创新GD32 MCU 作者:寒冰1988 2022-09-22 17:25 次阅读

CRC的基础概念

CRC(Cyclic Redundancy Check, 循环冗余校验)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码威廉希尔官方网站 ,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。

嵌入式领域,针对一些不严苛的情况下,可以用来校验待升级固件或接收到数据的完整性,根据宽度的不同,常用的有CRC4/CRC8/CRC16/CRC32等。当打包固件或者发送数据时,可按照如下结构进行,接收方收到数据以后针对DATA区重新计算CRC,然后与数据包自带的CRC对比,从而判断数据是否正确。

poYBAGMsIYGAOXmzAABM1EVdJ6o675.png

GD32F310G硬件CRC介绍

GD32F310G自带硬件CRC模块,相对软件CRC的计算,利用SOC自带的CRC模块可以减少代码的体积,同时提高计算的效率。GD32F310G的CRC模块的主要特性如下:

poYBAGMsIZqASpjHAACpmE1ExBI235.png

该模块在使用方式上与友商的类似,本文基于官方DEMO的基础上通过增添代码实现CRC32的计算,展现一下GD32F310G自带CRC硬件模块的使用。

开发环境

硬件平台

GD32F310G-START开发板

软件平台

Windows10

Keil-MDK 5.34

GD32F3x0_Firmware_Library_V2.2.0

参考资料

GD32F310xx-数据手册-Rev1.1

GD32F3x0-用户手册-Rev2.5

GD32F3x0-固件库使用指南-Rev1.2

软件实现

int main(void)
{
    uint32_t crc32;
    uint32_t single_data = 0x12345678;
    uint32_t multiple_data[8] = {
        0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08
    };

    systick_config();
    
    rcu_periph_clock_enable(RCU_CRC);
    crc_deinit();
    crc_data_register_reset();
    
    crc32 = crc_single_data_calculate(single_data, INPUT_FORMAT_WORD);
    crc_data_register_reset();
    
    crc32 = crc_block_data_calculate(multiple_data, 8, INPUT_FORMAT_WORD);
    crc_data_register_reset();

    while(1) {
        /* insert 500 ms delay */
        delay_1ms(500);
    }
}

结果展示

如下图为GD32F310执行的截图,实例代码SingleWord的CRC32=0xDF8A8A2B。

pYYBAGMsIbSAVqb0AACoHs2GrS0977.png

CRC的工具有很多种,此处利用CRC_calc在线工具作为校验GD32的结果是否正确。根据GD32F310G提供CRC相关信息,按照下图配置计算:

poYBAGMsIcuAD4-lAADXYcwThDI514.png

通过对比可知两者一致。

后记

CRC模块是GD32F310G中的一个特色模块,通过该模块相关功能的实现,熟悉了GD32的开发流程和开发环境。因为疫情的原因,订购的PCM5102模组刚到货,目前遇到几个问题还在调试中,等问题解决了再跟大家分享。



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • CRC算法
    +关注

    关注

    0

    文章

    15

    浏览量

    8849
  • 信道编码
    +关注

    关注

    2

    文章

    31

    浏览量

    9551
  • GD32
    +关注

    关注

    7

    文章

    403

    浏览量

    24330
收藏 人收藏

    评论

    相关推荐

    如何在IAR Embedded Workbench中配置生成对应代码区域的CRC校验码

    在运行过程中使用MCU内嵌的CRC硬件模块计算对应代码区域的CRC校验码,并和之前存储的CRC
    的头像 发表于 10-27 11:49 1639次阅读
    如何在IAR Embedded Workbench中配置生成对应代码区域的<b class='flag-5'>CRC</b><b class='flag-5'>校验码</b>

    实用资料——CRC校验码生成算法

    按上述步骤计算完成后,最后得到的CRC寄存器的内容即为CRC校验码,将其附着在原通讯信息帧后进行传输即可。如果用于Modbus协议设备则还需交换高低8位,非Modbus协议设备可以不必
    发表于 01-11 21:10

    CRC校验码算法的研究与实现

    CRC校验码算法的研究与实现
    发表于 08-06 11:09

    CRC16的计算校验码的方式有哪几种?

    CRC16的计算校验码的方式有哪几种?如何使用Delphi编写Modbus RTU CRC16的校验码
    发表于 11-03 07:20

    循环冗余校验码---CRC

    循环冗余校验码---CRC   二进制信息位串沿一条信号线逐位在部件之间或计算机之间传送称为串行传送。CRC(Cyclic Redund
    发表于 10-13 16:52 7176次阅读
    循环冗余<b class='flag-5'>校验码</b>---<b class='flag-5'>CRC</b><b class='flag-5'>码</b>

    奇偶校验码,奇偶校验码原理是什么?

    奇偶校验码,奇偶校验码原理是什么? 奇偶校验码是奇校验码和偶校验码的统称,是一种最基本的检错码。它是由n-1位信息元和1位
    发表于 03-17 17:39 6.3w次阅读

    CRC校验码算法的研究与实现

    为了提高实际通信中检查信号传输错误的能力,提高和推广CRC校验威廉希尔官方网站 ,本论文用逻辑代数知识、按模运算、代数知识和C语言编程工具设计了几种具体实用的CRC校验码
    发表于 05-28 15:41 0次下载

    CRC-16校验码生成

    C#编写的CRC校验码生成小程序,简洁明了,如果有需要的话,大家可以下载了。
    发表于 05-06 15:06 8次下载

    crc循环冗余校验码算法

     循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或电脑文件等数据产生简短固定位数校验码的一种散列函数,主要用来检测或校验数据传输或者保存后
    发表于 12-04 10:11 2.3w次阅读
    <b class='flag-5'>crc</b>循环冗余<b class='flag-5'>校验码</b>算法

    荐读:基于FPGA 的CRC校验码生成器

    大家好,又到了每日学习的时间了,今天我们来聊一聊基于FPGA 的CRC校验码生成器。下面咱们就来具体看看,欢迎大家一起交流学习。 1.概述 CRC即Cyclic Redundancy Check
    的头像 发表于 06-13 11:18 6496次阅读
    荐读:基于FPGA 的<b class='flag-5'>CRC</b><b class='flag-5'>校验码</b>生成器

    CRC计算工具CRC校验码计算器应用程序免费下载

    本文档的主要内容详细介绍的是CRC计算工具CRC校验码计算器应用程序免费下载。
    发表于 07-01 08:00 135次下载
    <b class='flag-5'>CRC</b><b class='flag-5'>计算</b>工具<b class='flag-5'>CRC</b><b class='flag-5'>校验码</b><b class='flag-5'>计算</b>器应用程序免费下载

    CRC校验码的C语言程序免费下载

    本文档的主要内容详细介绍的是CRC校验码的C语言程序免费下载。
    发表于 04-22 08:00 27次下载
    <b class='flag-5'>CRC</b><b class='flag-5'>校验码</b>的C语言程序免费下载

    CRC校验码并行计算的FPGA实现

    用软件实现 CRC 校验码计算很难满足高速数据通信的要求 ,基于硬件的实现方法中 ,有串行经典算法 LFSR 电路 以及由软件算法推导出来的其它各种并行计算方法。以经典的LFSR 电路
    发表于 03-28 09:34 30次下载
    <b class='flag-5'>CRC</b><b class='flag-5'>校验码</b>并行<b class='flag-5'>计算</b>的FPGA实现

    工控常用LRC XOR累加和CRC校验工具校验码自动生成软件多计算方式

    CRC校验工具 校验码自动生成软件支持十几种CRC计算方式,包括MODBUS协议的CRC-16
    的头像 发表于 11-25 14:27 3451次阅读
    工控常用LRC XOR累加和<b class='flag-5'>CRC</b><b class='flag-5'>校验</b>工具<b class='flag-5'>校验码</b>自动生成软件多<b class='flag-5'>计算</b>方式

    CRC校验码的多种Verilog实现方式

    CRC循环冗余校验码(Cyclic Redundancy Check),检错码。
    的头像 发表于 06-21 15:03 3389次阅读
    <b class='flag-5'>CRC</b><b class='flag-5'>校验码</b>的多种Verilog实现方式