CRC的基礎概念
CRC(Cyclic Redundancy Check, 循環冗余校驗)是一種根據網絡數據包或計算機文件等數據產生簡短固定位數校驗碼的一種信道編碼技術,主要用來檢測或校驗數據傳輸或者保存后可能出現的錯誤。它是利用除法及余數的原理來作錯誤偵測的。
在嵌入式領域,針對一些不嚴苛的情況下,可以用來校驗待升級固件或接收到數據的完整性,根據寬度的不同,常用的有CRC4/CRC8/CRC16/CRC32等。當打包固件或者發送數據時,可按照如下結構進行,接收方收到數據以后針對DATA區重新計算CRC,然后與數據包自帶的CRC對比,從而判斷數據是否正確。
GD32F310G硬件CRC介紹
GD32F310G自帶硬件CRC模塊,相對軟件CRC的計算,利用SOC自帶的CRC模塊可以減少代碼的體積,同時提高計算的效率。GD32F310G的CRC模塊的主要特性如下:
該模塊在使用方式上與友商的類似,本文基于官方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。
CRC的工具有很多種,此處利用CRC_calc在線工具作為校驗GD32的結果是否正確。根據GD32F310G提供CRC相關信息,按照下圖配置計算:
通過對比可知兩者一致。
后記
CRC模塊是GD32F310G中的一個特色模塊,通過該模塊相關功能的實現,熟悉了GD32的開發流程和開發環境。因為疫情的原因,訂購的PCM5102模組剛到貨,目前遇到幾個問題還在調試中,等問題解決了再跟大家分享。
審核編輯:劉清
-
CRC算法
+關注
關注
0文章
15瀏覽量
8887 -
信道編碼
+關注
關注
2文章
34瀏覽量
9600 -
GD32
+關注
關注
7文章
413瀏覽量
24469
發布評論請先 登錄
相關推薦
評論