CRC(Cyclic Redundancy Check),即循環(huán)冗余校驗(yàn)碼。CRC是數(shù)據(jù)通信領(lǐng)域中最常用的一種查錯(cuò)校驗(yàn)碼,其特征是信息字段和校驗(yàn)字段的長(zhǎng)度可以任意選定。循環(huán)冗余檢查(CRC)是一種數(shù)據(jù)傳輸檢錯(cuò)功能,對(duì)數(shù)據(jù)進(jìn)行多項(xiàng)式計(jì)算,并將得到的結(jié)果附在幀的后面,接收設(shè)備也執(zhí)行類(lèi)似的算法,以保證數(shù)據(jù)傳輸?shù)恼_性和完整性。
常用CRC有以下多種:

點(diǎn)擊查看大圖
網(wǎng)絡(luò)上關(guān)于CRC基礎(chǔ)原理的內(nèi)容比較多,可以搜索關(guān)鍵詞“循環(huán)冗余校驗(yàn)”進(jìn)行查詢(xún)。
瑞薩RA MCU中有硬件CRC計(jì)算單元,采用固定的多項(xiàng)式發(fā)生器來(lái)計(jì)算8位或者32位數(shù)據(jù)的CRC校驗(yàn)值,對(duì)數(shù)據(jù)傳輸或數(shù)據(jù)存儲(chǔ)的一致性、完整性進(jìn)行驗(yàn)證。這篇文章重點(diǎn)介紹RA MCU中的CRC模塊和使用方法。
RA MCU中的CRC 計(jì)算單元規(guī)格如下:

點(diǎn)擊查看大圖
注1. 該函數(shù)不能劃分CRC計(jì)算中使用的數(shù)據(jù)。以8位或32位為單位寫(xiě)入數(shù)據(jù)。
CRC 計(jì)算單元框圖如下:

那么接下來(lái)就是如何使用了,打開(kāi)工程中的configuration.xlm文件,在Stacks窗口中,可以通過(guò)“New Stack → Monitoring → CRC (r_crc)”添加該模塊。該模塊的屬性窗口如下:

點(diǎn)擊查看大圖
在應(yīng)用程序中使用CRC模塊的基本例程如下:
void crc_example ()
{
uint32_t length;
uint32_t uint8_calculated_value;
length = sizeof(g_data_8bit) / sizeof(g_data_8bit[0]);
crc_input_t example_input =
{
.p_input_buffer = g_data_8bit,
.num_bytes = length,
.crc_seed = 0,
};
/* Open CRC module with 8 bit polynomial */
R_CRC_Open(&crc_ctrl, &g_crc_test_cfg);
/* 8-bit CRC calculation */
R_CRC_Calculate(&crc_ctrl, &example_input, &uint8_calculated_value);
}
● CRC監(jiān)聽(tīng)功能注
另外CRC單元還具有監(jiān)聽(tīng)功能 ,可以監(jiān)視指定 I/O 寄存器地址的讀取和寫(xiě)入,并自動(dòng)對(duì)寄存器地址讀取和寫(xiě)入的數(shù)據(jù)進(jìn)行CRC計(jì)算。不是對(duì)數(shù)據(jù)塊調(diào)用 R_CRC_Calculate,而是調(diào)用 R_CRC_SnoopEnable 來(lái)開(kāi)始監(jiān)視讀/寫(xiě),并使用 R_CRC_CalculatedValueGet 來(lái)獲取當(dāng)前CRC。
請(qǐng)注意,監(jiān)聽(tīng)模式僅適用于SCI上的發(fā)送/接收操作。
注:并非所有RA MCU的CRC單元都有監(jiān)聽(tīng)功能,RA2A1、RA2L1、RA2E1、RA2E2、RA4M1
、RA4W1、RA6M1、RA6M2、RA6M3、RA6T1、RA6T2的CRC單元有監(jiān)聽(tīng)功能,而RA4M2、RA4M3、RA4T1、RA4E1、RA4E2、RA6M4、RA6M5、RA6T3、RA6E1、RA6E2的CRC單元沒(méi)有監(jiān)聽(tīng)功能,具體請(qǐng)參考各MCU的硬件手冊(cè)。
以下參考代碼展示了CRC監(jiān)聽(tīng)操作:
void crc_snoop_example ()
{
/* Open CRC module with 8 bit polynomial */
R_CRC_Open(&crc_ctrl, &g_crc_test_cfg);
/* Open SCI Driver */
/* Configure Snoop address and enable snoop mode */
R_CRC_SnoopEnable(&crc_ctrl, 0);
/* Perfrom SCI read/Write operation depending on the SCI snoop address configure */
/* Read CRC value */
R_CRC_CalculatedValueGet(&crc_ctrl, &g_crc_buff);
}
在使用CRC32多項(xiàng)式函數(shù)時(shí),CRC模塊會(huì)產(chǎn)生與流行的在線CRC32計(jì)算器相同的結(jié)果,但請(qǐng)務(wù)必記住一些要點(diǎn):
● 在線CRC32計(jì)算器允許輸入任意數(shù)量的字節(jié)。而FSP CRC32 API函數(shù)使用32位。這意味著在線計(jì)算時(shí)必須“填充”為32位。
● 在線CRC32計(jì)算器通常會(huì)先對(duì)輸出取反,然后再將其呈現(xiàn)為結(jié)果。如果需要,由應(yīng)用程序決定是否包含此步驟。
● 在線CRC32計(jì)算器和R_CRC模塊API(CRC32 多項(xiàng)式)都需要使用種子值 0xFFFFFFFF。
● 確保R_CRC CRC32的位方向設(shè)置為L(zhǎng)SB,并且選擇了CRC32而不是CRC32C。
● 一些在線CRC工具將最終結(jié)果與0xFFFFFFFF進(jìn)行異或。
瑞薩RA MCU全系列產(chǎn)品都具有CRC外設(shè)(注意,是全系列都有), 對(duì)CRC的計(jì)算提供硬件支持,為應(yīng)用程序節(jié)省了代碼空間。
-
mcu
+關(guān)注
關(guān)注
147文章
19116瀏覽量
403513 -
瑞薩
+關(guān)注
關(guān)注
38文章
22517瀏覽量
91167 -
crc
+關(guān)注
關(guān)注
0文章
206瀏覽量
30959 -
數(shù)據(jù)通信
+關(guān)注
關(guān)注
2文章
543瀏覽量
35173 -
循環(huán)冗余校驗(yàn)
+關(guān)注
關(guān)注
0文章
8瀏覽量
6777
發(fā)布評(píng)論請(qǐng)先 登錄
瑞薩RA MCU眾測(cè)寶典 | 串口之【RA-Eco-RA2L1】RTC日歷及串口設(shè)置時(shí)間
瑞薩RA MCU眾測(cè)寶典 | 環(huán)境搭建之【RA-Eco-RA4M2】QE工具使用
瑞薩RA MCU眾測(cè)寶典 | 環(huán)境搭建之【RA-Eco-RA4M2】搭建Keil開(kāi)發(fā)環(huán)境
瑞薩電子RA-Eco-RA4M2搭建Keil開(kāi)發(fā)環(huán)境指南
基于瑞薩RA2E1 MCU的LCR數(shù)字電橋項(xiàng)目介紹
瑞薩FPB-RA0E2開(kāi)發(fā)板的批量加載例程
如何搭建瑞薩RA VS code開(kāi)發(fā)環(huán)境
【直播預(yù)告】RT-Thread帶你首發(fā)體驗(yàn):基于瑞薩RA8P1 MCU的Titan Board | 問(wèn)學(xué)直播
基于瑞薩電子RA8D1 MCU的USB和I2S數(shù)字音頻應(yīng)用解決方案
瑞薩RA MCU中CRC模塊的使用方法
評(píng)論