加入星計劃,您可以享受以下權益:

  • 創(chuàng)作內容快速變現
  • 行業(yè)影響力擴散
  • 作品版權保護
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、DCP對于CRC支持
    • 二、DCP-CRC32關于數據對齊處理
  • 相關推薦
  • 電子產業(yè)圖譜
申請入駐 產業(yè)圖譜

MCU里硬件CRC對數據長度對齊有要求?

11/21 13:40
1019
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

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

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

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

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

一、DCP對于CRC支持

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

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

#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?計算結果(res?-?4字節(jié))
m_handle.swapConfig?=?kDCP_NoSwap;
status?=?DCP_HASH(DCP,?&m_handle,?kDCP_Crc32,?srcBuf,?srcLen,?res,?&resLen);

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

二、DCP-CRC32關于數據對齊處理

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

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

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

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

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

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

相關推薦

電子產業(yè)圖譜

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