痞子衡嵌入式:利用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主页、知乎主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:利用i.MXRT10xx系列内部DCP引擎计算CRC32值时需注意数据对齐的更多相关文章
- 痞子衡嵌入式:利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache. 关于i.MXRT1xxx系列内部通用数据协处 ...
- 痞子衡嵌入式:探讨i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题. 前段时间有客户在官方社区反映 i.MXRT1170 下 ...
- 痞子衡嵌入式:恩智浦LPC系列MCU开发那些事 - 索引
大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是恩智浦LPC系列微控制器相关知识. 恩智浦半导体最早于2003年便开始推出LPC系列MCU,但早期的产品LPC2000/3000系列属 ...
- 痞子衡嵌入式:利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列ROM中的FlexSPI驱动API实现IAP. 痞子衡的技术交流群里经常有群友提问: i.MXRT中的FlexSPI驱动 ...
- 痞子衡嵌入式:浅谈i.MXRT10xx系列MCU外接24MHz晶振的作用
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT10xx系列MCU外接24MHz晶振的作用. 痞子衡之前写过一篇关于时钟引脚的文章 <i.MXRT1xxx系列MCU时 ...
- 痞子衡嵌入式:恩智浦经典LPC系列MCU内部Flash IAP驱动入门
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦经典LPC系列MCU内部Flash IAP驱动. LPC 系列 MCU 是恩智浦公司于 2003 年开始推出的非常具有代表性的产品 ...
- 痞子衡嵌入式:利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设. 关于 i.MXRT1xxx 系列芯片 BootROM 中集成的 ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1160/1170)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRT1160/1170两款MCU的FlexSPI NOR启动的连接方式. 这个 i.MXRT FlexSPI NOR 启动 ...
- 痞子衡嵌入式:浅谈i.MXRT1xxx系列MCU时钟相关功能引脚的作用
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1xxx系列MCU时钟相关功能引脚作用. 如果我们从一颗 MCU 芯片的引脚分类来看芯片功能,大概可以分为三大类:电源.时钟 ...
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(4)- OTP及其烧写方法
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的OTP. 在i.MXRTxxx启动系列第二篇文章 Boot配置(ISP Pin, OTP) 里痞子 ...
随机推荐
- 如何调用openai的TTS模型
这是24年1月份写的了,调用代码大概率有变动,仅供参考. 1 什么是OpenAI的TTS模型 OpenAI的TTS模型是一种文本到语音(Text-to-Speech)模型,它可以将给定的文本转换为自然 ...
- (零) React Native 项目开发拾遗
一位离职的前端同事,最近接了个 React Native 的活儿,遇到许多搞不定的问题,于是找到我帮忙"补课"(没有系统的学习 React Native,也不具备原生 Androi ...
- 关于高清显示屏下canvas绘制模糊问题探索处理
一般场景 我们看下,我们在高清显示屏下,实现这样一个内容,里面填充颜色及文字.第一种是用普通div元素的方式绘制,第二种就是用canvas的方式来绘制,示例效果如下: 从图上我们可以看出,普通div的 ...
- vue-router的History 模式常用的三种配置方式(去掉地址栏中的#号)
第一种:nginx配置 conf主要的配置代码: http { # nginx负载均衡配置 upstream dynamic_balance { #ip_hash; server 192.168.10 ...
- 推荐3款卓越的 .NET 开源搜索组件库
前言 最近有不少同学提问:.NET有哪些开源的搜索组件库可以推荐的吗?,今天大姚给大家推荐3款卓越的 .NET 开源搜索组件库,希望可以帮助到有需要的同学. Elasticsearch .NET El ...
- MyBatis——案例——查询-单条件查询-动态条件查询
单条件查询-动态条件查询(choose(when,otherwise)) 从多个条件中选择一个 choose(when,otherwise) 选择,类似于java中的Switch语句(w ...
- Excel表格重复项特殊标注
事件起因: 某不知名同事,需要将Excel表格中的重复选项特殊标注出来,故研究了一下 解决办法: 在Excel表格中,如果需要特殊标注重复项时候,可以参考以下办法 选项excel表格行/列 - 开 ...
- Nacos 开启鉴权设置
Nacos 开启鉴权设置 # 开启鉴权 nacos.core.auth.enabled=true nacos.core.auth.system.type=nacos # 开启鉴权之后,你可以自定义用于 ...
- 【VMware VCF】使用 SoS 实用程序检查 VCF 环境的运行状态以及收集组件的日志信息。
VMware Cloud Foundation 解决方案中有一个叫 Supportability and Serviceability(SoS)可支持性和可维护性的实用程序,可能你在初始构建 VCF ...
- UEFI原理与编程(三)
1 开发UEFI服务 本质Protocol 就是包含属性和函数指针的结构体,功能上来说就是提供者和使用者对服务的一种约定. 2 开发UEFI驱动 一个设备/总线驱动程序在安装时首要找到对应的硬件设备( ...