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

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

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

利用CRC模塊加速校驗碼的計算

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

CRC的基礎(chǔ)概念

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

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

poYBAGMsIYGAOXmzAABM1EVdJ6o675.png

GD32F310G硬件CRC介紹

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

poYBAGMsIZqASpjHAACpmE1ExBI235.png

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

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

硬件平臺

GD32F310G-START開發(fā)板

軟件平臺

Windows10

Keil-MDK 5.34

GD32F3x0_Firmware_Library_V2.2.0

參考資料

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

GD32F3x0-用戶手冊-Rev2.5

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

軟件實現(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í)行的截圖,實例代碼SingleWord的CRC32=0xDF8A8A2B。

pYYBAGMsIbSAVqb0AACoHs2GrS0977.png

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

poYBAGMsIcuAD4-lAADXYcwThDI514.png

通過對比可知兩者一致。

后記

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



審核編輯:劉清

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

    關(guān)注

    0

    文章

    15

    瀏覽量

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

    關(guān)注

    2

    文章

    34

    瀏覽量

    9728
  • GD32
    +關(guān)注

    關(guān)注

    7

    文章

    418

    瀏覽量

    24976
收藏 0人收藏

    評論

    相關(guān)推薦

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

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

    實用資料——CRC校驗碼生成算法

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

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

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

    CRC16的計算校驗碼的方式有哪幾種?

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

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

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

    奇偶校驗碼,奇偶校驗碼原理是什么?

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

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

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

    CRC-16校驗碼生成

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

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

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

    薦讀:基于FPGA 的CRC校驗碼生成器

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

    CRC計算工具CRC校驗碼計算器應(yīng)用程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是CRC計算工具CRC校驗碼計算器應(yīng)用程序免費下載。
    發(fā)表于 07-01 08:00 ?136次下載
    <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>器應(yīng)用程序免費下載

    CRC校驗碼的C語言程序免費下載

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

    CRC校驗碼并行計算的FPGA實現(xiàn)

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

    工控常用LRC XOR累加和CRC校驗工具校驗碼自動生成軟件多計算方式

    CRC校驗工具 校驗碼自動生成軟件支持十幾種CRC計算方式,包括MODBUS協(xié)議的CRC-16
    的頭像 發(fā)表于 11-25 14:27 ?4101次閱讀
    工控常用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實現(xiàn)方式

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

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品