大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设

  关于 i.MXRT1xxx 系列芯片 BootROM 中集成的 DCD 功能这个话题,痞子衡早就想写了,但是一直没有动笔,毕竟这个话题比较生涩,单独讲会比较枯燥。最近痞子衡在支持一个 i.MXRT1170 客户,需要在客户板卡上跑其应用代码的压力测试,但是客户因为保密的缘故仅提供了应用可执行文件,而我们又需要在客户应用里额外加一些配置代码做测试,测试过程中会涉及多次断电上电,如果挂外部调试器去做额外配置又太繁琐,这时候 DCD 功能就派上用场了。

  • Note:文中贴图、代码主要以 i.MXRT1170 为例,其余 i.MXRT1xxx 系列原理类似。

一、DCD是什么及其应用场景

  DCD 是 Device Configuration Data 缩写,这是 i.MXRT1xxx 系列芯片 BootROM 里带的一个附加功能,主要用于 App 启动前系统外设的用户定制化配置。我们知道 i.MXRT1xxx 系列芯片上电永远都是 BootROM 代码先执行,然后由 BootROM 再去加载 App 执行。如果希望在 App 执行前系统就已经被配置到指定状态(即不需要在 App 里去做这方面系统设置),那就需要借助 DCD 功能,你只需要按格式将 DCD 数据放到 Boot Device 指定偏移处即可,BootROM 会自动去解析执行。

  翻看芯片参考手册 Device Configuration Data (DCD) 章节,你会发现 DCD 数据设计特别简单,它总共支持三类命令: Write data(Tag 是 0xCC)、Check data(Tag 是 0xCF)、NOP(Tag 是 0xC0),这三类命令就是为了读写芯片外设寄存器而设计的,我们需要做的就是组合这三类命令完成指定外设模块寄存器的设置序列。任意打开一个 RT1170 SDK 示例工程,都会包含 dcd.c/h 文件(仅当工程选项预编译宏里有 XIP_BOOT_HEADER_DCD_ENABLE=1 才会被使能)。

  随便摘其中两句分析下,第一句表明是 Write data 命令的 *address = val_msk 动作合集,第二句是执行 *((uint32_t *)0x40CC0200) = 0x00000703,也就是 CCM->CLOCK_ROOT[kCLOCK_Root_Semc].CONTROL = 0x703。

/* #1.1-129, command header bytes for merged 'Write - value' command */
0xCC, 0x04, 0x0C, 0x04,
/* #1.1, command: write_value, address: CCM_CLOCK_ROOT4_CONTROL, value: 0x703, size: 4 */
0x40, 0xCC, 0x02, 0x00, 0x00, 0x00, 0x07, 0x03,

  接着这个示例 dcd.c 内容继续聊,这其实是配置芯片 SEMC 外设去初始化外部 SDRAM 的全部序列。有了这个 DCD 设置,那么 App 里就可以不用管外部 SDRAM 初始化工作了,直接读写访问 SDRAM 完成相应应用业务功能即可,这也是 DCD 的典型应用场景。如果应用代码直接是全部在 SDRAM 执行,在不设计用户二级 Bootloader 做加载的情况下,DCD 是必选的解决方案。

二、以实际客户案例代入DCD使用

  现在回到客户的实际案例,客户 RT1170 板卡上用了一颗来自 MXIC 的 Octal Flash,代码是执行在 Flash 上,现在我们需要测试不同 FlexSPI1->DLLACR[SLVDLYTARGET] 设置下的工作情况,而我们手头仅有客户可执行文件。

  将客户可执行文件下载进板卡,并设置启动模式为从 Flash 启动(2'b10),然后挂上 JLINK 调试器读取 FlexSPI1->DLLACR 寄存器值(该寄存器地址是 0x400cc0c0),得到 0x00400079,其中 SLVDLYTARGET 是默认的理想值 4'b1111,这个值是 BootROM 自动配置的,我们无法通过 FDCB 启动头来更改设置。

  为了做压力测试,我们需要更改不同的 FlexSPI1->DLLACR[SLVDLYTARGET] 值,比如将其设为 4'b1000,这时候可以借助 DCD 来实现,我们直接使用 MCUBootUtility 工具(需要使用 v4.1.1 版本及以上)来使能 DCD。

  将客户板卡启动模式改为 Serial Download (2'b01),插上 UART/USB 下载线,打开 MCUBootUtility 工具,在 DCD 设置界面里启用 "Use DCD description" 选项,并在动作框里直接输入下面语句(这里直接是类 C 语法,会被工具自动转成 DCD 数据),然后连接、下载。

*(uint32_t*)0x400cc0c0 = 0x00400041;

  将板卡设为从 Flash 启动模式后重新上电,挂上 JLINK 再去读取,此时 FlexSPI1->DLLACR 已经是期望的 0x00400041,说明 DCD 功能生效了。这里还有一个注意事项,即 BootROM 利用 FDCB 启动头配置 FlexSPI 外设在前,解析执行 DCD 数据在后,所以我们才能借助 DCD 实现这样的更改测试。

三、DCD能配置全部外设吗?

  看起来 DCD 特别强大,那么它能帮助操作 ARM 4GB 系统空间里的全部地址吗?答案是否定的,出于安全考虑,BootROM 里做了地址限制,我们仅能用 DCD 操作如下指定的一些外设(不同 i.MXRT 系列有所不同):

  至此,利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页CSDN主页知乎主页微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设的更多相关文章

  1. 痞子衡嵌入式:利用i.MXRT1xxx系列ROM提供的FlexSPI driver API可轻松IAP

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT系列ROM中的FlexSPI驱动API实现IAP. 痞子衡的技术交流群里经常有群友提问: i.MXRT中的FlexSPI驱动 ...

  2. 痞子衡嵌入式:串行NOR Flash的DQS信号功能简介

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是串行NOR Flash的DQS信号功能. 串行NOR Flash在嵌入式里的应用相当广泛,既可用作数据存储也可以用作代码(XiP)存储, ...

  3. 痞子衡嵌入式:恩智浦LPC系列MCU开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是恩智浦LPC系列微控制器相关知识. 恩智浦半导体最早于2003年便开始推出LPC系列MCU,但早期的产品LPC2000/3000系列属 ...

  4. 痞子衡嵌入式:开启NXP-MCUBootUtility工具的BEE/OTFAD加密功能 - image_enc

    软件v1.x仅支持BEE加密: 为了便于大家快速验证软件BEE加密功能,特将用于BEE加密的image_enc工具上传至百度网盘,仅用作个人学习用途,违者后果自负. -- 链接: https://pa ...

  5. 痞子衡嵌入式:了解i.MXRTxxx系列ROM API及其与i.MXRT1xxx系列的差异

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM API设计细节. 痞子衡之前写过两篇文章 <利用i.MXRT1xxx系列ROM提供的FlexSPI ...

  6. 痞子衡嵌入式:其实i.MXRT1050,1020,1015系列ROM也提供了FlexSPI driver API

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT1050/1020/1015系列ROM中的FlexSPI驱动API使用. 今天痞子衡去4S店给爱车做保养了,保养一次要等两小 ...

  7. 痞子衡嵌入式:自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是自识别特性(Auto Probe)可以让i.MXRT1060无需FDCB也能从NOR Flash启动. 接着上篇文章 <了解i.M ...

  8. 痞子衡嵌入式:利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是利用i.MXRT1xxx系列内部DCP引擎计算Hash值时需特别处理L1 D-Cache. 关于i.MXRT1xxx系列内部通用数据协处 ...

  9. 痞子衡嵌入式:了解i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中灵活的串行NOR Flash启动硬复位引脚选择. 关于 i.MXRT 系列 BootROM 中串行 NOR ...

  10. 痞子衡嵌入式:深扒i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRTxxx系列ROM中集成的串行NOR Flash启动SW Reset功能及其应用场合. 在串行 NOR Flash 热启动过程 ...

随机推荐

  1. JAVA基础Day1-注释/标识符和关键字/数据类型/类型转换/变量、常量、作用域

    目录 一.注释 二.标识符和关键字 标识符命名需要注意: 三.数据类型 基本数据类型: 拓展: 定义时需要注意: 四.类型转换 字节 五.变量.常量.作用域 变量 变量命名规范 变量作用域 常量 一. ...

  2. 微信小程序ECharts通过调用api接口实现图表的数据可视化

    小程序ECharts使用接口调入数据 首先附上js文件链接:axios.js 提取码:AxIo 将此放到小程序目录下的utils文件夹下 在已经完成图表的js文件中完成以下修改: ①引用axios.j ...

  3. mysql 循环 例子

    mysql 循环生成数据demo: DROP PROCEDURE IF EXISTS test_insert; DELIMITER;; CREATE PROCEDURE test_insert() B ...

  4. cf823div2C

    cf823div2C 题目链接 题目 给你两个字符串\(s_1,s_2\).每次操作可以让\(s_1\)的前k个和\(s_2\)的后k个交换.询问是否可以通过多次上述操作,使得\(s_1=s_2\). ...

  5. git命令2

    git status git status -s git diff git diff --cached --添加到暂存区成为快照 git add -A git add . --删除被git追踪的文件 ...

  6. 艾思软件app开发公司帮您分析:开发一个APP多少钱?

    首先你要知道你所要开发的APP, 是不是已经成熟的相同的产品, 如果有的话那还是建议直接购买, 这种已经能满足你需求的成品APP价格会很便宜, 总成本一般也就1到2万的级别. 如果没有那就需要定制开发 ...

  7. Expression及Equal Demo

    代码参考1: using System; using System.Linq.Expressions; namespace ExpressionDemo { class People { public ...

  8. CatDCGAN项目复现与对抗网络初识

    CatDCGAN项目复现与对抗网络初识 作者 CarpVexing 日期 100521 禁止转载 目录 CatDCGAN项目复现与对抗网络初识 引言 CatDCGAN项目基本信息 复现项目的准备工作 ...

  9. Oracle数据库安装时,安装报错ins_emagent.mk

    安装oracle数据库过程中,通过图形界面安装,出现ins_emagent.mk报错提示 解决方法 修改$ORACLE_HOME/sysman/lib/ins_emagent.mk,将$(MK_EMA ...

  10. WPF中转换与关键帧动画及报错:WPF动画找不到依赖属性:属性未指向路径“(0).(1)[3].(2)”中的 DependencyObject

    WPF中的转换有: // 在二维 x-y 坐标系内围绕指定点按顺时针方向旋转对象. <RotateTransform /> // 在二维 x-y 坐标系中平移(移动)对象. <Tra ...