chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

AS32系列MCU芯片中CRC計(jì)算模塊的應(yīng)用介紹

安芯 ? 來(lái)源:jf_29981791 ? 作者:jf_29981791 ? 2025-11-21 15:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

單片機(jī)驅(qū)動(dòng)的電子系統(tǒng)中,從智能傳感器、家電控制模塊到工業(yè)可編程邏輯控制器PLC)、汽車(chē)電子控制單元(ECU),數(shù)據(jù)傳輸與存儲(chǔ)的完整性直接決定系統(tǒng)可靠性——單字節(jié)數(shù)據(jù)錯(cuò)誤可能引發(fā)傳感器信號(hào)誤判、執(zhí)行器動(dòng)作異常甚至整個(gè)控制系統(tǒng)宕機(jī)。循環(huán)冗余校驗(yàn)(CRC)作為一種高效的錯(cuò)誤檢測(cè)技術(shù),如同數(shù)據(jù)傳輸與存儲(chǔ)過(guò)程中的"安全校驗(yàn)屏障",持續(xù)保障MCU與外部設(shè)備交互數(shù)據(jù)的準(zhǔn)確性。本文將系統(tǒng)闡述國(guó)科安芯推出的AS32系列MCU芯片中的CRC計(jì)算單元的基本功能、實(shí)現(xiàn)方式及其典型應(yīng)用場(chǎng)景。

圖片 1.png

一、CRC計(jì)算單元的基本****功能

CRC的核心是一種基于多項(xiàng)式運(yùn)算的 錯(cuò)誤檢測(cè)算法 ,其基本原理為:將待校驗(yàn)數(shù)據(jù)序列視為二進(jìn)制多項(xiàng)式D(x),選取一個(gè)預(yù)先定義的生成多項(xiàng)式G(x)(通常由協(xié)議標(biāo)準(zhǔn)規(guī)定),通過(guò)模2除法運(yùn)算計(jì)算D(x)×x^k與G(x)的余數(shù)R(x),該余數(shù)即為CRC校驗(yàn)碼(k為生成多項(xiàng)式的最高次冪)。數(shù)據(jù)發(fā)送端將原始數(shù)據(jù)與CRC校驗(yàn)碼一同傳輸,接收端采用相同的生成多項(xiàng)式對(duì)接收數(shù)據(jù)進(jìn)行運(yùn)算,若運(yùn)算結(jié)果與接收的CRC校驗(yàn)碼一致,則判定數(shù)據(jù)傳輸無(wú)誤;若不一致,則表明數(shù)據(jù)存在干擾或篡改,需啟動(dòng)重傳或錯(cuò)誤處理機(jī)制。

AS32系列MCU芯片的CRC計(jì)算模塊是保障數(shù)據(jù)完整性的核心外設(shè),其設(shè)計(jì)遵循主流MCU 的CRC 架構(gòu),典型功能包括:

①支持CRC-7/CRC-8/CRC-16/CRC-32 多種標(biāo)準(zhǔn)校驗(yàn)?zāi)J剑?/p>

②可編程生成多項(xiàng)式(如CRC-32 支持0x04C11DB7 標(biāo)準(zhǔn)多項(xiàng)式,CRC-16 支持 0x8005/0x3D65等);

③支持輸入/ 輸出數(shù)據(jù)反轉(zhuǎn)(RefIn/RefOut)、異或值(XOROut)配置;

④輸入緩沖器可避免計(jì)算期間發(fā)生總線阻塞;

圖片 2.png

在MCU應(yīng)用場(chǎng)景中,常用的CRC校驗(yàn)規(guī)格包括 CRC8(8位校驗(yàn)碼)、CRC16(16位校驗(yàn)碼)及CRC32(32位校驗(yàn)碼) 。校驗(yàn)碼位數(shù)與錯(cuò)誤檢測(cè)能力正相關(guān)——位數(shù)越多,對(duì)隨機(jī)錯(cuò)誤和突發(fā)錯(cuò)誤的檢測(cè)率越高,但相應(yīng)的硬件資源占用開(kāi)銷(xiāo)也隨之增加。

二、AS32系列MCU芯片****中CRC校驗(yàn)的實(shí)現(xiàn)方式
圖片 3.png

1. 內(nèi)置的“校驗(yàn)加速器”

這是一個(gè)獨(dú)立的數(shù)字邏輯電路,專門(mén)負(fù)責(zé)CRC運(yùn)算,不需要CPU干預(yù)。開(kāi)發(fā)者只需通過(guò)寄存器配置多項(xiàng)式、初始值等參數(shù),再把數(shù)據(jù)地址傳給模塊,硬件就會(huì)自動(dòng)計(jì)算并輸出結(jié)果。

優(yōu)點(diǎn) :速度極快(4 個(gè) APB 時(shí)鐘周期完成32位CRC計(jì)算)、輸入緩沖器中可立即寫(xiě)入第二個(gè)數(shù)據(jù),無(wú)需因之前的CRC 計(jì)算而等待任何等待狀態(tài);

缺點(diǎn) :依賴MCU硬件,參數(shù)配置需嚴(yán)格遵循芯片手冊(cè)。

適合場(chǎng)景:高速通信CAN、USB、以太網(wǎng))、大數(shù)據(jù)存儲(chǔ)(Flash、SD卡)、實(shí)時(shí)控制系統(tǒng)(工業(yè)電機(jī)、汽車(chē)電子)等對(duì)性能要求高的場(chǎng)景。

2.CRC****單元的使用方法

2.1 軟件配置

關(guān)鍵術(shù)語(yǔ)說(shuō)明:

CRC_Size:指參與 CRC 計(jì)算的數(shù)據(jù)長(zhǎng)度,單位通常為字節(jié)(需根據(jù)實(shí)際硬件配置確認(rèn));CRC_OXOR: 用于對(duì)最終 CRC 結(jié)果進(jìn)行異或操作;OReverse(Output Reverse):輸出數(shù)據(jù)反轉(zhuǎn)(如將 32 位結(jié)果的 bit31 與 bit0 交換);IReverse(Input Reverse):輸入數(shù)據(jù)反轉(zhuǎn)(包括位反轉(zhuǎn)、半字反轉(zhuǎn)、全字反轉(zhuǎn));POLYSIZE:多項(xiàng)式寬度類(lèi)型,常見(jiàn)值(CRC-7/CRC-8/CRC-16/CRC-32);CRC_INIT:CRC 計(jì)算的初始值;CRC_Poly:CRC 多項(xiàng)式系數(shù);CRC_XOR:異或值。

/* Initializes the CRC */
void CRC_Config(uint32_t SIZE,uint32_t OXOR_State,uint32_t OREVERSE_State,uint32_t IReverse_State,uint32_t PolySize, uint32_t INIT,uint32_t Poly,uint32_t XOR)**
{
CRC_Reset();
CRC_StructInit(&CRC_InitStructure);

CRC_InitStructure.CRC_Size = SIZE;
CRC_InitStructure.CRC_OXOR = OXOR_State;
CRC_InitStructure.CRC_OReverse = OREVERSE_State;
CRC_InitStructure.CRC_IReverse = IReverse_State;
CRC_InitStructure.CRC_PolySize = PolySize;
CRC_InitStructure.CRC_INIT = INIT;
CRC_InitStructure.CRC_Poly = Poly;
CRC_InitStructure.CRC_XOR = XOR;
CRC_Init(&CRC_InitStructure);

}

2.2功能調(diào)用

針對(duì)于不同數(shù)據(jù)寬度的數(shù)據(jù)塊,可選擇對(duì)應(yīng)的函數(shù)進(jìn)行CRC計(jì)算。

/*

 * Function:        CRC_CalcCRC

 * Description:     Computes the 32-bit CRC of a given data word.

 * Param:           Data: data word to compute its CRC.

 * Return:          32-bit CRC.

 */

uint32_t CRC_CalcCRC(uint32_t Data)

{

    /* Write the data to the CRC Data register */

    CRC- >DR = Data;

 

    /* Return the CRC value */

    ****return**** CRC- >DR;

}

 

/*

 * Function:        CRC_CalcWordBlockCRC

 * Description:     Computes the 32-bit CRC of a given buffer of data word(32-bit).

 * Param:           pBuffer: pointer to the buffer containing the data to be computed.

 *                  BufferLength: length of the buffer to be computed.

 * Return:          32-bit CRC.

 */

uint32_t CRC_CalcWordBlockCRC(uint32_t *pBuffer, uint32_t BufferLength)

{

    uint32_t index = 0;

 

     ****for**** (index = 0; index < BufferLength; index++)

    {

        CRC- >DR = pBuffer[index];

    }

 

    ****return**** (CRC- >DR);

}

 

/*

 * Function:        CRC_CalcHalfBlockCRC

 * Description:     Computes the 16-bit CRC of a given buffer of data halfword(16-bit).

 * Param:           pBuffer: pointer to the buffer containing the data to be computed.

 *                  BufferLength: length of the buffer to be computed.

 * Return:          32-bit CRC.

 */

uint32_t CRC_CalcHalfBlockCRC(uint16_t *pBuffer, uint32_t BufferLength)

{

    uint32_t index = 0;

 

     ****for**** (index = 0; index < BufferLength; index++)

    {

        CRC- >DR = pBuffer[index];

    }

 

    ****return**** (CRC- >DR);

}

 

/*

 * Function:        CRC_CalcByteBlockCRC

 * Description:     Computes the 8-bit CRC of a given buffer of data byte(8-bit).

 * Param:           pBuffer: pointer to the buffer containing the data to be computed.

 *                  BufferLength: length of the buffer to be computed.

 * Return:          32-bit CRC.

 */

uint32_t CRC_CalcByteBlockCRC(uint8_t *pBuffer, uint32_t BufferLength)

{

    uint32_t index = 0;

 

     ****for**** (index = 0; index < BufferLength; index++)

    {

        CRC- >DR = pBuffer[index];

    }

 

    ****return**** (CRC- >DR);

}

、MCU****中CRC的4個(gè)典型應(yīng)用場(chǎng)景

從日常家電到工業(yè)設(shè)備,CRC的身影無(wú)處不在:

? 傳感器數(shù)據(jù)校驗(yàn) :溫濕度傳感器通過(guò)單總線發(fā)送數(shù)據(jù)時(shí),末尾會(huì)帶1字節(jié)CRC8校驗(yàn)碼,用硬件CRC快速驗(yàn)證,避免因電磁干擾導(dǎo)致“25℃”變成“85℃”的誤判問(wèn)題;

? 工業(yè)通信協(xié)議 :MODBUS-RTU協(xié)議規(guī)定,每個(gè)指令幀末尾必須附加2字節(jié)CRC16校驗(yàn)碼,通過(guò)硬件CRC實(shí)時(shí)驗(yàn)證,確保控制指令準(zhǔn)確傳遞到變頻器、伺服電機(jī);

? Flash存儲(chǔ)校驗(yàn) :用戶配置數(shù)據(jù)(如家電的亮度、音量參數(shù))存在Flash時(shí),會(huì)同時(shí)存儲(chǔ)數(shù)據(jù)的CRC值;讀取時(shí)用硬件CRC校驗(yàn),防止Flash擦寫(xiě)次數(shù)過(guò)多導(dǎo)致數(shù)據(jù)出錯(cuò);

? 汽車(chē)電子控制 :汽車(chē)行業(yè)在與氣囊、ABS系統(tǒng)通信時(shí),需要用CRC32校驗(yàn)關(guān)鍵數(shù)據(jù),一旦檢測(cè)到錯(cuò)誤立即觸發(fā)安全機(jī)制,避免事故風(fēng)險(xiǎn)。
、開(kāi)發(fā)中用CRC的3個(gè)“避坑指南”

用好CRC的關(guān)鍵是“細(xì)節(jié)”,這3個(gè)問(wèn)題一定要注意:

  1. 參數(shù)必須“對(duì)齊” :發(fā)送方和接收方的CRC參數(shù)(多項(xiàng)式、初始值、輸入/輸出反轉(zhuǎn)、最終異或值)必須完全一致。比如MODBUS-RTU用CRC16/IBM(多項(xiàng)式0x8005,初始值0xFFFF),若一方用錯(cuò)多項(xiàng)式,校驗(yàn)必失??;
  2. 字節(jié)序別搞反 :多字節(jié)數(shù)據(jù)(如uint32_t)計(jì)算CRC前,要統(tǒng)一字節(jié)序。AS32系列MCU芯片是小端機(jī),把0x12345678存到內(nèi)存是0x78 0x56 0x34 0x12,確保不同設(shè)備間結(jié)果一致;
  3. 硬件配置看手冊(cè) :不同MCU的硬件CRC模塊寄存器略有差異——開(kāi)發(fā)前一定要查芯片手冊(cè),避免配置錯(cuò)誤。

字節(jié)序檢測(cè)方法 :多字節(jié)數(shù)據(jù)CRC計(jì)算前需明確MCU字節(jié)序,可通過(guò)C語(yǔ)言共用體(union)檢測(cè)——利用共用體成員共享內(nèi)存的特性,定義包含多字節(jié)整數(shù)(如uint32_t)和單字節(jié)數(shù)組(uint8_t[4])的共用體,賦值多字節(jié)整數(shù)(如0x12345678)后讀取單字節(jié)數(shù)組首元素:若為0x78則為小端(低字節(jié)存低地址),若為0x12則為大端(高字節(jié)存低地址)。檢測(cè)代碼示例如下:

union
{
uint32_t value;
uint8_t bytes[4];
} endian_test;

endian_test.value = 0x12345678;
if (endian_test.bytes[0] == 0x78)
{
Printf("Little-Endian");
}
else if (endian_test.bytes[0] == 0x12)
{
Printf("Big-Endian");

}

在MCU系統(tǒng)中,CRC不像其他外設(shè)那樣“顯眼”,卻是保障數(shù)據(jù)可靠性的“基礎(chǔ)安全網(wǎng)”。硬件CRC則為高性能、高安全需求“保駕護(hù)航”。理解CRC的原理、選型和應(yīng)用細(xì)節(jié),能讓你的MCU項(xiàng)目更穩(wěn)定、更可靠——畢竟,對(duì)電子設(shè)備來(lái)說(shuō),“數(shù)據(jù)沒(méi)錯(cuò)”是一切功能的前提。

審核編輯 黃宇

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

    關(guān)注

    463

    文章

    54014

    瀏覽量

    466289
  • mcu
    mcu
    +關(guān)注

    關(guān)注

    147

    文章

    18929

    瀏覽量

    398456
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

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

    在“使用IAR Embedded Workbench和MCUCRC模塊來(lái)檢查代碼的完整性”一文中,介紹了如何在IAR Embedded Workbench中配置生成對(duì)應(yīng)代碼區(qū)域的
    的頭像 發(fā)表于 10-27 11:49 ?3170次閱讀
    如何在IAR Embedded Workbench中配置生成對(duì)應(yīng)代碼區(qū)域的<b class='flag-5'>CRC</b>校驗(yàn)碼

    芯源的CRC硬件計(jì)算誰(shuí)用過(guò)嗎?MCUCRC你們喜歡用硬件的還是軟件的啊?

    芯源的CRC硬件計(jì)算誰(shuí)用過(guò)嗎?MCUCRC你們喜歡用硬件的還是軟件的?。?/div>
    發(fā)表于 12-01 08:25

    STM32芯片CRC計(jì)算模塊的算法

    本文來(lái)自ST官方工程師總結(jié)。所有的STM32芯片都內(nèi)置了一個(gè)硬件的CRC計(jì)算模塊,可以很方便地應(yīng)用到需要進(jìn)行通信的程序中,這個(gè)CRC
    發(fā)表于 11-22 15:05

    靈動(dòng)微電子 | MM32SPIN2x 電機(jī)專用MCU功能特色——CRC計(jì)算單元

    SPIN2x系列MCU中,加入了一個(gè)CRC計(jì)算單元,使用1個(gè)32位數(shù)據(jù)寄存器作為輸入和輸出,在執(zhí)行寫(xiě)操作時(shí)輸入CRC
    發(fā)表于 01-03 15:15

    STM32系列MCU自帶CRC與標(biāo)準(zhǔn)CRC存在差別

    ??STM32系列MCU自帶CRC與標(biāo)準(zhǔn)CRC存在差別,大多情況下,應(yīng)用程序與STM32通信往往需要用到CRC校驗(yàn)時(shí),如固件升級(jí)、通信可靠性
    發(fā)表于 08-11 08:49

    ST MCU芯片中的UID簡(jiǎn)析

    ST MCU芯片中的絕大部分都內(nèi)置一串96位唯一標(biāo)識(shí)碼【unique ID】。時(shí)不時(shí)有人問(wèn)起這個(gè)東西,尤其最近感,覺(jué)詢問(wèn)它的人甚是熱鬧。這里跟大家一起簡(jiǎn)單分享下。上面說(shuō)了ST MCU芯片中
    發(fā)表于 11-26 07:32

    如何將程序下載到芯昇科技MCU芯片中

    方便用戶更好使用本款MCU,本文將介紹如何通過(guò)串口工具和JFLASH兩種方式,將程序下載到CM32M101A中。串口下載CMIOT MCU Download Tool是專為CM32M101A
    發(fā)表于 02-26 18:03

    74系列芯片中文資料下載

    74系列芯片中文資料下載  
    發(fā)表于 12-17 22:54 ?8327次下載

    STM32L4循環(huán)冗余校驗(yàn)模塊(CRC)介紹

    STM32L4循環(huán)冗余校驗(yàn)模塊(CRC)介紹 有興趣的可以參考下
    發(fā)表于 12-25 10:38 ?27次下載

    74系列芯片中文資料下載

    74系列芯片中文資料下載
    發(fā)表于 10-13 09:58 ?72次下載
     74<b class='flag-5'>系列</b><b class='flag-5'>芯片中</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 ?139次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>計(jì)算</b>工具<b class='flag-5'>CRC</b>校驗(yàn)碼<b class='flag-5'>計(jì)算</b>器應(yīng)用程序免費(fèi)下載

    CRC校驗(yàn) 、STM32中CRC計(jì)算單元、 CRC應(yīng)用

    CRC校驗(yàn)、STM32中CRC計(jì)算單元、CRC應(yīng)用
    的頭像 發(fā)表于 03-04 13:54 ?7479次閱讀

    如何擦除mcu芯片中的灰塵

    擦除MCU芯片中的灰塵可能是一個(gè)非常敏感和復(fù)雜的過(guò)程。對(duì)于這個(gè)問(wèn)題,有幾個(gè)關(guān)鍵因素需要考慮,包括清潔工具的選擇、清潔過(guò)程的正確步驟以及潛在的風(fēng)險(xiǎn)和預(yù)防措施。在本文中,我將詳細(xì)介紹如何擦除MCU
    的頭像 發(fā)表于 12-29 10:27 ?3632次閱讀

    RA MCU中的CRC模塊和使用方法

    瑞薩RA單片機(jī)硬件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)
    發(fā)表于 02-26 11:45 ?2158次閱讀
    RA <b class='flag-5'>MCU</b>中的<b class='flag-5'>CRC</b><b class='flag-5'>模塊</b>和使用方法

    FreeRTOS 在 AS32系列RISC-V 架構(gòu)MCU電機(jī)驅(qū)動(dòng)中的應(yīng)用實(shí)踐與優(yōu)化

    一、AS32系列 RISC-V MCU與 FreeRTOS 融合的電機(jī)驅(qū)動(dòng)架構(gòu)解析 1.1 硬件層: AS32系列 架構(gòu)的優(yōu)勢(shì) 在電機(jī)驅(qū)動(dòng)系
    的頭像 發(fā)表于 11-13 23:33 ?846次閱讀