• 正文
    • 一、DCP對于CRC支持
    • 二、DCP-CRC32關(guān)于數(shù)據(jù)對齊處理
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

MCU里硬件CRC對數(shù)據(jù)長度對齊有要求?

2024/11/21
2393
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是利用i.MXRT10xx系列內(nèi)部DCP引擎計算CRC32值時需注意數(shù)據(jù)長度對齊

MCU 開發(fā)里常常需要 CRC 校驗來檢查數(shù)據(jù)完整性,CRC 校驗既可以純軟件實現(xiàn)也可以借助 MCU 片內(nèi)外設(shè)硬件實現(xiàn)。大部分 MCU 里通常都會包含一個單獨的硬件 CRC 外設(shè),但是在 i.MXRT 四位數(shù)系列里,翻看參考手冊,我們卻找不到名為 CRC 的外設(shè),難道這么一款高性能 MCU 不支持硬件 CRC?當然不是!這個功能藏在一個更強大的數(shù)學(xué)計算引擎外設(shè)里。

    Note:在 i.MXRT10xx 系列上這個引擎是 DCP,在 i.MXRT11xx 系列上這個引擎升級為 CAAM。

關(guān)于 DCP 引擎使用,痞子衡寫過一篇文章 《DCP計算Hash值時需特別處理L1 D-Cache》。最近官方社區(qū)里有人提問,當待校驗 CRC 數(shù)據(jù)長度是 4 字節(jié)整數(shù)倍時,DCP 計算結(jié)果和一些在線網(wǎng)站上的計算結(jié)果保持一致(多項式和配置設(shè)置一致),但是當數(shù)據(jù)長度不是 4 字節(jié)對齊時,兩者結(jié)果就不一致了,這是怎么回事?今天咱們來聊一聊:

一、DCP對于CRC支持

翻看任何一個 i.MXRT10xx 系列的參考手冊,僅在 System Security 章節(jié)有一小段關(guān)于 DCP 特性描述,里面講了能支持 CRC32,但是關(guān)于多項式配置信息沒有提及。

既然手冊沒涉及太多,那直接擼代碼吧,可以參考 SDKboardsevkmimxrt10xxdriver_examplesdcp 例程,相關(guān)代碼足夠簡單抄錄如下。代碼里僅 m_handle.swapConfig 設(shè)置會改變 CRC 計算結(jié)果(因為對源數(shù)據(jù)做了 swap 處理),除此以外并未提供其他 CRC 多項式參數(shù)配置,因此可以基本認定 DCP 支持的是一個固定參數(shù)模式的 CRC32 算法分支,用戶無法更改參數(shù)。

#include?"fsl_dcp.h"

dcp_config_t?dcpConfig;
DCP_GetDefaultConfig(&dcpConfig);
DCP_Init(DCP,?&dcpConfig);

dcp_handle_t?m_handle;
m_handle.channel????=?kDCP_Channel0;
m_handle.keySlot????=?kDCP_KeySlot0;
//?僅這里換成?kDCP_InputByteSwap?會影響?CRC?計算結(jié)果(res?-?4字節(jié))
m_handle.swapConfig?=?kDCP_NoSwap;
status?=?DCP_HASH(DCP,?&m_handle,?kDCP_Crc32,?srcBuf,?srcLen,?res,?&resLen);

這里痞子衡就不繼續(xù)賣關(guān)子了,DCP 固定支持的就是經(jīng)典的 CRC32-MPEG2,其參數(shù)如下:

二、DCP-CRC32關(guān)于數(shù)據(jù)對齊處理

關(guān)于 CRC32-MPEG2 算法實現(xiàn)細節(jié)可在 IEEE 802 標準手冊里找到,原則上其對于源數(shù)據(jù)長度是沒有對齊要求的,但在具體硬件實現(xiàn)上,不同硬件可能會增加末尾數(shù)據(jù)對齊處理。

痞子衡找了一塊 RT1020-EVK 開發(fā)板跑了一下 SDKboardsevkmimxrt1020driver_examplesdcp 例程,只對例程做了簡單修改如下,從測試結(jié)果來看,發(fā)現(xiàn) DCP 對源數(shù)據(jù)做了末尾 4 字節(jié)對齊處理(用 0x00 填充)。

DCP 這個數(shù)據(jù)對齊處理特性說明能在哪里找到呢?我們知道 DCP 是跟芯片安全特性相關(guān)的,i.MX RT 芯片除了有普通參考手冊(RM)之外,還有一個安全參考手冊(SRM),在 SRM 里面會進一步介紹芯片安全相關(guān)的外設(shè)。在恩智浦官網(wǎng) i.MXRT 產(chǎn)品主頁進入具體型號,切換到 Secure Files 選項(這里需要賬號登錄,并且申請訪問權(quán)限,可聯(lián)系 FAE 簽 NDA),如果有訪問權(quán)限,便可以下載 SRM:

在 SRM 里我們看到了 DCP CRC32 對于數(shù)據(jù)對齊處理策略,與板級測試結(jié)果吻合:

文章開頭說 i.MXRT11xx 系列里的 CAAM 模塊是 i.MXRT10xx 里 DCP 的升級,我們僅從 CRC 支持方面可見一斑,CAAM 對于 CRC 的支持更豐富,除了經(jīng)典算法,還支持用戶自定義參數(shù)(這就比較像傳統(tǒng) MCU 里的單獨 CRC 外設(shè)):

至此,利用i.MXRT10xx系列內(nèi)部DCP引擎計算CRC32值時需注意數(shù)據(jù)長度對齊痞子衡便介紹完畢了,掌聲在哪里~~~

相關(guān)推薦

登錄即可解鎖
  • 海量技術(shù)文章
  • 設(shè)計資源下載
  • 產(chǎn)業(yè)鏈客戶資源
  • 寫文章/發(fā)需求
立即登錄

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門,擔任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會定期分享嵌入式相關(guān)文章