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ù)是否正確。
GD32F310G自帶硬件CRC模塊,相對軟件CRC的計(jì)算,利用SOC自帶的CRC模塊可以減少代碼的體積,同時(shí)提高計(jì)算的效率。GD32F310G的CRC模塊的主要特性如下:
該模塊在使用方式上與友商的類似,本文基于官方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。
CRC的工具有很多種,此處利用CRC_calc在線工具作為校驗(yàn)GD32的結(jié)果是否正確。根據(jù)GD32F310G提供CRC相關(guān)信息,按照下圖配置計(jì)算:
通過對比可知兩者一致。
后記
CRC模塊是GD32F310G中的一個(gè)特色模塊,通過該模塊相關(guān)功能的實(shí)現(xiàn),熟悉了GD32的開發(fā)流程和開發(fā)環(huán)境。因?yàn)橐咔榈脑?,訂購的PCM5102模組剛到貨,目前遇到幾個(gè)問題還在調(diào)試中,等問題解決了再跟大家分享。
審核編輯:劉清
-
CRC算法
+關(guān)注
關(guān)注
0文章
15瀏覽量
8841 -
信道編碼
+關(guān)注
關(guān)注
2文章
31瀏覽量
9519 -
GD32
+關(guān)注
關(guān)注
7文章
403瀏覽量
24058
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論