国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

AS32系列MCU芯片中CRC計算模塊的應用介紹

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

掃碼添加小助手

加入工程師交流群

單片機驅動的電子系統中,從智能傳感器、家電控制模塊到工業可編程邏輯控制器PLC)、汽車電子控制單元(ECU),數據傳輸與存儲的完整性直接決定系統可靠性——單字節數據錯誤可能引發傳感器信號誤判、執行器動作異常甚至整個控制系統宕機。循環冗余校驗(CRC)作為一種高效的錯誤檢測技術,如同數據傳輸與存儲過程中的"安全校驗屏障",持續保障MCU與外部設備交互數據的準確性。本文將系統闡述國科安芯推出的AS32系列MCU芯片中的CRC計算單元的基本功能、實現方式及其典型應用場景。

圖片 1.png

一、CRC計算單元的基本****功能

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

AS32系列MCU芯片的CRC計算模塊是保障數據完整性的核心外設,其設計遵循主流MCU 的CRC 架構,典型功能包括:

①支持CRC-7/CRC-8/CRC-16/CRC-32 多種標準校驗模式;

②可編程生成多項式(如CRC-32 支持0x04C11DB7 標準多項式,CRC-16 支持 0x8005/0x3D65等);

③支持輸入/ 輸出數據反轉(RefIn/RefOut)、異或值(XOROut)配置;

④輸入緩沖器可避免計算期間發生總線阻塞;

圖片 2.png

在MCU應用場景中,常用的CRC校驗規格包括 CRC8(8位校驗碼)、CRC16(16位校驗碼)及CRC32(32位校驗碼) 。校驗碼位數與錯誤檢測能力正相關——位數越多,對隨機錯誤和突發錯誤的檢測率越高,但相應的硬件資源占用開銷也隨之增加。

二、AS32系列MCU芯片****中CRC校驗的實現方式
圖片 3.png

1. 內置的“校驗加速器”

這是一個獨立的數字邏輯電路,專門負責CRC運算,不需要CPU干預。開發者只需通過寄存器配置多項式、初始值等參數,再把數據地址傳給模塊,硬件就會自動計算并輸出結果。

優點 :速度極快(4 個 APB 時鐘周期完成32位CRC計算)、輸入緩沖器中可立即寫入第二個數據,無需因之前的CRC 計算而等待任何等待狀態;

缺點 :依賴MCU硬件,參數配置需嚴格遵循芯片手冊。

適合場景:高速通信CANUSB以太網)、大數據存儲(Flash、SD卡)、實時控制系統(工業電機、汽車電子)等對性能要求高的場景。

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

2.1 軟件配置

關鍵術語說明:

CRC_Size:指參與 CRC 計算的數據長度,單位通常為字節(需根據實際硬件配置確認);CRC_OXOR: 用于對最終 CRC 結果進行異或操作;OReverse(Output Reverse):輸出數據反轉(如將 32 位結果的 bit31 與 bit0 交換);IReverse(Input Reverse):輸入數據反轉(包括位反轉、半字反轉、全字反轉);POLYSIZE:多項式寬度類型,常見值(CRC-7/CRC-8/CRC-16/CRC-32);CRC_INIT:CRC 計算的初始值;CRC_Poly:CRC 多項式系數;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功能調用

針對于不同數據寬度的數據塊,可選擇對應的函數進行CRC計算。

/*

 * 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個典型應用場景

從日常家電到工業設備,CRC的身影無處不在:

? 傳感器數據校驗 :溫濕度傳感器通過單總線發送數據時,末尾會帶1字節CRC8校驗碼,用硬件CRC快速驗證,避免因電磁干擾導致“25℃”變成“85℃”的誤判問題;

? 工業通信協議 :MODBUS-RTU協議規定,每個指令幀末尾必須附加2字節CRC16校驗碼,通過硬件CRC實時驗證,確保控制指令準確傳遞到變頻器伺服電機

? Flash存儲校驗 :用戶配置數據(如家電的亮度、音量參數)存在Flash時,會同時存儲數據的CRC值;讀取時用硬件CRC校驗,防止Flash擦寫次數過多導致數據出錯;

? 汽車電子控制 :汽車行業在與氣囊、ABS系統通信時,需要用CRC32校驗關鍵數據,一旦檢測到錯誤立即觸發安全機制,避免事故風險。
、開發中用CRC的3個“避坑指南”

用好CRC的關鍵是“細節”,這3個問題一定要注意:

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

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

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系統中,CRC不像其他外設那樣“顯眼”,卻是保障數據可靠性的“基礎安全網”。硬件CRC則為高性能、高安全需求“保駕護航”。理解CRC的原理、選型和應用細節,能讓你的MCU項目更穩定、更可靠——畢竟,對電子設備來說,“數據沒錯”是一切功能的前提。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 芯片
    +關注

    關注

    462

    文章

    53623

    瀏覽量

    460275
  • mcu
    mcu
    +關注

    關注

    147

    文章

    18669

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    如何在IAR Embedded Workbench中配置生成對應代碼區域的CRC校驗碼

    在“使用IAR Embedded Workbench和MCUCRC模塊來檢查代碼的完整性”一文中,介紹了如何在IAR Embedded Workbench中配置生成對應代碼區域的
    的頭像 發表于 10-27 11:49 ?2961次閱讀
    如何在IAR Embedded Workbench中配置生成對應代碼區域的<b class='flag-5'>CRC</b>校驗碼

    芯源的CRC硬件計算誰用過嗎?MCUCRC你們喜歡用硬件的還是軟件的啊?

    芯源的CRC硬件計算誰用過嗎?MCUCRC你們喜歡用硬件的還是軟件的啊?
    發表于 12-01 08:25

    STM32芯片CRC計算模塊的算法

    本文來自ST官方工程師總結。所有的STM32芯片都內置了一個硬件的CRC計算模塊,可以很方便地應用到需要進行通信的程序中,這個CRC
    發表于 11-22 15:05

    靈動微電子 | MM32SPIN2x 電機專用MCU功能特色——CRC計算單元

    SPIN2x系列MCU中,加入了一個CRC計算單元,使用1個32位數據寄存器作為輸入和輸出,在執行寫操作時輸入CRC
    發表于 01-03 15:15

    STM32系列MCU自帶CRC與標準CRC存在差別

    ??STM32系列MCU自帶CRC與標準CRC存在差別,大多情況下,應用程序與STM32通信往往需要用到CRC校驗時,如固件升級、通信可靠性
    發表于 08-11 08:49

    ST MCU芯片中的UID簡析

    ST MCU芯片中的絕大部分都內置一串96位唯一標識碼【unique ID】。時不時有人問起這個東西,尤其最近感,覺詢問它的人甚是熱鬧。這里跟大家一起簡單分享下。上面說了ST MCU芯片中
    發表于 11-26 07:32

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

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

    74系列芯片中文資料下載

    74系列芯片中文資料下載  
    發表于 12-17 22:54 ?8326次下載

    STM32L4循環冗余校驗模塊(CRC)介紹

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

    74系列芯片中文資料下載

    74系列芯片中文資料下載
    發表于 10-13 09:58 ?72次下載
     74<b class='flag-5'>系列</b><b class='flag-5'>芯片中</b>文資料下載

    CRC計算工具CRC校驗碼計算器應用程序免費下載

    本文檔的主要內容詳細介紹的是CRC計算工具CRC校驗碼計算器應用程序免費下載。
    發表于 07-01 08:00 ?139次下載
    <b class='flag-5'>CRC</b><b class='flag-5'>計算</b>工具<b class='flag-5'>CRC</b>校驗碼<b class='flag-5'>計算</b>器應用程序免費下載

    CRC校驗 、STM32中CRC計算單元、 CRC應用

    CRC校驗、STM32中CRC計算單元、CRC應用
    的頭像 發表于 03-04 13:54 ?7215次閱讀

    如何擦除mcu芯片中的灰塵

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

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

    瑞薩RA單片機硬件CRC計算單元采用固定的多項式發生器來計算8位或者32位數據的CRC校驗值,對數據傳輸或數據存儲的一致性、完整性進行驗證。這篇文章重點
    發表于 02-26 11:45 ?1971次閱讀
    RA <b class='flag-5'>MCU</b>中的<b class='flag-5'>CRC</b><b class='flag-5'>模塊</b>和使用方法

    FreeRTOS 在 AS32系列RISC-V 架構MCU電機驅動中的應用實踐與優化

    一、AS32系列 RISC-V MCU與 FreeRTOS 融合的電機驅動架構解析 1.1 硬件層: AS32系列 架構的優勢 在電機驅動系
    的頭像 發表于 11-13 23:33 ?586次閱讀