痞子衡嵌入式:使用i.MXRT10xx系列内部DCP引擎核算CRC32值时需注意数据长度对齐
咱们好,我是痞子衡,是正派搞技能的痞子。今日痞子衡给咱们介绍的是运用i.MXRT10xx系列内部DCP引擎核算CRC32值时需注意数据长度对齐。
MCU 开发里常常需求 CRC 校验来查看数据完整性,CRC 校验既能够纯软件完成也能够凭借 MCU 片内外设硬件完成。大部分 MCU 里一般都会包括一个独自的硬件 CRC 外设,可是在 i.MXRT 四位数系列里,翻看参阅手册,咱们却找不到名为 CRC 的外设,莫非这么一款高性能 MCU 不支撑硬件 CRC?当然不是!这个功用藏在一个更强壮的数学核算引擎外设里。
- Note:在 i.MXRT10xx 系列上这个引擎是 DCP,在 i.MXRT11xx 系列上这个引擎晋级为 CAAM。
关于 DCP 引擎运用,痞子衡写过一篇文章 《DCP核算Hash值时需特别处理L1 D-Cache》。最近官方社区里有人发问,当待校验 CRC 数据长度是 4 字节整数倍时,DCP 核算成果和一些在线网站上的核算成果保持共同(多项式和装备设置共同),可是当数据长度不是 4 字节对齐时,两者成果就不共同了,这是怎么回事?今日咱们来聊一聊:
一、DCP关于CRC支撑
翻看任何一个 i.MXRT10xx 系列的参阅手册,仅在 System Security 章节有一小段关于 DCP 特性描绘,里边讲了能支撑 CRC32,可是关于多项式装备信息没有提及。
已然手册没触及太多,那直接撸代码吧,能够参阅 SDK\boards\evkmimxrt10xx\driver_examples\dcp 例程,相关代码满足简略抄写如下。代码里仅 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字节)
m_handle.swapConfig = kDCP_NoSwap;
status = DCP_HASH(DCP, &m_handle, kDCP_Crc32, srcBuf, srcLen, res, &resLen);
这儿痞子衡就不持续卖关子了,DCP 固定支撑的便是经典的 CRC32-MPEG2,其参数如下:
二、DCP-CRC32关于数据对齐处理
关于 CRC32-MPEG2 算法完成细节可在 IEEE 802 规范手册里找到,原则上其关于源数据长度是没有对齐要求的,但在详细硬件完成上,不同硬件可能会添加结尾数据对齐处理。
痞子衡找了一块 RT1020-EVK 开发板跑了一下 SDK\boards\evkmimxrt1020\driver_examples\dcp 例程,只对例程做了简略修正如下,从测验成果来看,发现 DCP 对源数据做了结尾 4 字节对齐处理(用 0x00 填充)。
DCP 这个数据对齐处理特性阐明能在哪里找到呢?咱们知道 DCP 是跟芯片安全特性相关的,i.MX RT 芯片除了有一般参阅手册(RM)之外,还有一个安全参阅手册(SRM),在 SRM 里边会进一步介绍芯片安全相关的外设。在恩智浦官网 i.MXRT 产品主页进入详细型号,切换到 Secure Files 选项(这儿需求账号登录,而且请求拜访权限,可联络 FAE 签 NDA),如果有拜访权限,便能够下载 SRM:
在 SRM 里咱们看到了 DCP CRC32 关于数据对齐处理战略,与板级测验成果符合:
文章最初说 i.MXRT11xx 系列里的 CAAM 模块是 i.MXRT10xx 里 DCP 的晋级,咱们仅从 CRC 支撑方面可见一斑,CAAM 关于 CRC 的支撑更丰厚,除了经典算法,还支撑用户自定义参数(这就比较像传统 MCU 里的独自 CRC 外设):
至此,运用i.MXRT10xx系列内部DCP引擎核算CRC32值时需注意数据长度对齐痞子衡便介绍结束了,掌声在哪里~~~
欢迎订阅
文章会一起发布到我的 博客园主页、CSDN主页、知乎主页、微信大众号 平台上。
微信查找"痞子衡嵌入式"或许扫描下面二维码,就能够在手机上第一时间看了哦。