0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

利用CRC模塊加速校驗(yàn)碼的計(jì)算

冬至配餃子 ? 來源:兆易創(chuàng)新GD32 MCU ? 作者:寒冰1988 ? 2022-09-22 17:25 ? 次閱讀

CRC的基礎(chǔ)概念

CRC(Cyclic Redundancy Check, 循環(huán)冗余校驗(yàn))是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或計(jì)算機(jī)文件等數(shù)據(jù)產(chǎn)生簡短固定位數(shù)校驗(yàn)碼的一種信道編碼技術(shù),主要用來檢測或校驗(yàn)數(shù)據(jù)傳輸或者保存后可能出現(xiàn)的錯(cuò)誤。它是利用除法及余數(shù)的原理來作錯(cuò)誤偵測的。

嵌入式領(lǐng)域,針對一些不嚴(yán)苛的情況下,可以用來校驗(yàn)待升級(jí)固件或接收到數(shù)據(jù)的完整性,根據(jù)寬度的不同,常用的有CRC4/CRC8/CRC16/CRC32等。當(dāng)打包固件或者發(fā)送數(shù)據(jù)時(shí),可按照如下結(jié)構(gòu)進(jìn)行,接收方收到數(shù)據(jù)以后針對DATA區(qū)重新計(jì)算CRC,然后與數(shù)據(jù)包自帶的CRC對比,從而判斷數(shù)據(jù)是否正確。

poYBAGMsIYGAOXmzAABM1EVdJ6o675.png

GD32F310G硬件CRC介紹

GD32F310G自帶硬件CRC模塊,相對軟件CRC的計(jì)算,利用SOC自帶的CRC模塊可以減少代碼的體積,同時(shí)提高計(jì)算的效率。GD32F310G的CRC模塊的主要特性如下:

poYBAGMsIZqASpjHAACpmE1ExBI235.png

該模塊在使用方式上與友商的類似,本文基于官方DEMO的基礎(chǔ)上通過增添代碼實(shí)現(xiàn)CRC32的計(jì)算,展現(xiàn)一下GD32F310G自帶CRC硬件模塊的使用。

開發(fā)環(huán)境

硬件平臺(tái)

GD32F310G-START開發(fā)板

軟件平臺(tái)

Windows10

Keil-MDK 5.34

GD32F3x0_Firmware_Library_V2.2.0

參考資料

GD32F310xx-數(shù)據(jù)手冊-Rev1.1

GD32F3x0-用戶手冊-Rev2.5

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

軟件實(shí)現(xiàn)

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);
    }
}

結(jié)果展示

如下圖為GD32F310執(zhí)行的截圖,實(shí)例代碼SingleWord的CRC32=0xDF8A8A2B。

pYYBAGMsIbSAVqb0AACoHs2GrS0977.png

CRC的工具有很多種,此處利用CRC_calc在線工具作為校驗(yàn)GD32的結(jié)果是否正確。根據(jù)GD32F310G提供CRC相關(guān)信息,按照下圖配置計(jì)算:

poYBAGMsIcuAD4-lAADXYcwThDI514.png

通過對比可知兩者一致。

后記

CRC模塊是GD32F310G中的一個(gè)特色模塊,通過該模塊相關(guān)功能的實(shí)現(xiàn),熟悉了GD32的開發(fā)流程和開發(fā)環(huán)境。因?yàn)橐咔榈脑?,訂購的PCM5102模組剛到貨,目前遇到幾個(gè)問題還在調(diào)試中,等問題解決了再跟大家分享。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • CRC算法
    +關(guān)注

    關(guān)注

    0

    文章

    15

    瀏覽量

    8841
  • 信道編碼
    +關(guān)注

    關(guān)注

    2

    文章

    31

    瀏覽量

    9519
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    403

    瀏覽量

    24058
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何在IAR Embedded Workbench中配置生成對應(yīng)代碼區(qū)域的CRC校驗(yàn)碼

    在運(yùn)行過程中使用MCU內(nèi)嵌的CRC硬件模塊計(jì)算對應(yīng)代碼區(qū)域的CRC校驗(yàn)碼,并和之前存儲(chǔ)的CRC
    的頭像 發(fā)表于 10-27 11:49 ?1394次閱讀
    如何在IAR Embedded Workbench中配置生成對應(yīng)代碼區(qū)域的<b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)碼</b>

    實(shí)用資料——CRC校驗(yàn)碼生成算法

    按上述步驟計(jì)算完成后,最后得到的CRC寄存器的內(nèi)容即為CRC校驗(yàn)碼,將其附著在原通訊信息幀后進(jìn)行傳輸即可。如果用于Modbus協(xié)議設(shè)備則還需交換高低8位,非Modbus協(xié)議設(shè)備可以不必
    發(fā)表于 01-11 21:10

    CRC校驗(yàn)碼算法的研究與實(shí)現(xiàn)

    CRC校驗(yàn)碼算法的研究與實(shí)現(xiàn)
    發(fā)表于 08-06 11:09

    CRC16的計(jì)算校驗(yàn)碼的方式有哪幾種?

    CRC16的計(jì)算校驗(yàn)碼的方式有哪幾種?如何使用Delphi編寫Modbus RTU CRC16的校驗(yàn)碼?
    發(fā)表于 11-03 07:20

    循環(huán)冗余校驗(yàn)碼---CRC

    循環(huán)冗余校驗(yàn)碼---CRC   二進(jìn)制信息位串沿一條信號(hào)線逐位在部件之間或計(jì)算機(jī)之間傳送稱為串行傳送。CRC(Cyclic Redund
    發(fā)表于 10-13 16:52 ?7143次閱讀
    循環(huán)冗余<b class='flag-5'>校驗(yàn)碼</b>---<b class='flag-5'>CRC</b><b class='flag-5'>碼</b>

    奇偶校驗(yàn)碼,奇偶校驗(yàn)碼原理是什么?

    奇偶校驗(yàn)碼,奇偶校驗(yàn)碼原理是什么? 奇偶校驗(yàn)碼是奇校驗(yàn)碼和偶校驗(yàn)碼的統(tǒng)稱,是一種最基本的檢錯(cuò)碼。它是由n-1位信息元和1位
    發(fā)表于 03-17 17:39 ?6.3w次閱讀

    CRC校驗(yàn)碼算法的研究與實(shí)現(xiàn)

    為了提高實(shí)際通信中檢查信號(hào)傳輸錯(cuò)誤的能力,提高和推廣CRC校驗(yàn)技術(shù),本論文用邏輯代數(shù)知識(shí)、按模運(yùn)算、代數(shù)知識(shí)和C語言編程工具設(shè)計(jì)了幾種具體實(shí)用的CRC校驗(yàn)碼
    發(fā)表于 05-28 15:41 ?0次下載

    CRC-16校驗(yàn)碼生成

    C#編寫的CRC校驗(yàn)碼生成小程序,簡潔明了,如果有需要的話,大家可以下載了。
    發(fā)表于 05-06 15:06 ?8次下載

    crc循環(huán)冗余校驗(yàn)碼算法

     循環(huán)冗余校驗(yàn)(Cyclic Redundancy Check, CRC)是一種根據(jù)網(wǎng)絡(luò)數(shù)據(jù)包或電腦文件等數(shù)據(jù)產(chǎn)生簡短固定位數(shù)校驗(yàn)碼的一種散列函數(shù),主要用來檢測或校驗(yàn)數(shù)據(jù)傳輸或者保存后
    發(fā)表于 12-04 10:11 ?2.3w次閱讀
    <b class='flag-5'>crc</b>循環(huán)冗余<b class='flag-5'>校驗(yàn)碼</b>算法

    薦讀:基于FPGA 的CRC校驗(yàn)碼生成器

    大家好,又到了每日學(xué)習(xí)的時(shí)間了,今天我們來聊一聊基于FPGA 的CRC校驗(yàn)碼生成器。下面咱們就來具體看看,歡迎大家一起交流學(xué)習(xí)。 1.概述 CRC即Cyclic Redundancy Check
    的頭像 發(fā)表于 06-13 11:18 ?6436次閱讀
    薦讀:基于FPGA 的<b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)碼</b>生成器

    CRC計(jì)算工具CRC校驗(yàn)碼計(jì)算器應(yīng)用程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是CRC計(jì)算工具CRC校驗(yàn)碼計(jì)算器應(yīng)用程序免費(fèi)下載。
    發(fā)表于 07-01 08:00 ?133次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>計(jì)算</b>工具<b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)碼</b><b class='flag-5'>計(jì)算</b>器應(yīng)用程序免費(fèi)下載

    CRC校驗(yàn)碼的C語言程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是CRC校驗(yàn)碼的C語言程序免費(fèi)下載。
    發(fā)表于 04-22 08:00 ?27次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)碼</b>的C語言程序免費(fèi)下載

    CRC校驗(yàn)碼并行計(jì)算的FPGA實(shí)現(xiàn)

    用軟件實(shí)現(xiàn) CRC 校驗(yàn)碼計(jì)算很難滿足高速數(shù)據(jù)通信的要求 ,基于硬件的實(shí)現(xiàn)方法中 ,有串行經(jīng)典算法 LFSR 電路 以及由軟件算法推導(dǎo)出來的其它各種并行計(jì)算方法。以經(jīng)典的LFSR 電路
    發(fā)表于 03-28 09:34 ?30次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)碼</b>并行<b class='flag-5'>計(jì)算</b>的FPGA實(shí)現(xiàn)

    工控常用LRC XOR累加和CRC校驗(yàn)工具校驗(yàn)碼自動(dòng)生成軟件多計(jì)算方式

    CRC校驗(yàn)工具 校驗(yàn)碼自動(dòng)生成軟件支持十幾種CRC計(jì)算方式,包括MODBUS協(xié)議的CRC-16
    的頭像 發(fā)表于 11-25 14:27 ?3247次閱讀
    工控常用LRC XOR累加和<b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)</b>工具<b class='flag-5'>校驗(yàn)碼</b>自動(dòng)生成軟件多<b class='flag-5'>計(jì)算</b>方式

    CRC校驗(yàn)碼的多種Verilog實(shí)現(xiàn)方式

    CRC循環(huán)冗余校驗(yàn)碼(Cyclic Redundancy Check),檢錯(cuò)碼。
    的頭像 發(fā)表于 06-21 15:03 ?3280次閱讀
    <b class='flag-5'>CRC</b><b class='flag-5'>校驗(yàn)碼</b>的多種Verilog實(shí)現(xiàn)方式