性无码一区二区三区在线观看,少妇被爽到高潮在线观看,午夜精品一区二区三区,无码中文字幕人妻在线一区二区三区,无码精品国产一区二区三区免费

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

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

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

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

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

一、DCP對于CRC支持

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

既然手冊沒涉及太多,那直接擼代碼吧,可以參考 SDK\boards\evkmimxrt10xx\driver_examples\dcp 例程,相關代碼足夠簡單抄錄如下。代碼里僅 m_handle.swapConfig 設置會改變 CRC 計算結果(因為對源數(shù)據做了 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 計算結果(res - 4字節(jié))
m_handle.swapConfig = kDCP_NoSwap;
status = DCP_HASH(DCP, &m_handle, kDCP_Crc32, srcBuf, srcLen, res, &resLen);

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

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

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

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

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

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

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

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

聲明:本內容為作者獨立觀點,不代表電子星球立場。未經允許不得轉載。授權事宜與稿件投訴,請聯(lián)系:editor@netbroad.com
覺得內容不錯的朋友,別忘了一鍵三連哦!
贊 7
收藏 9
關注 41
成為作者 賺取收益
全部留言
0/200
成為第一個和作者交流的人吧