大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设。
关于 i.MXRT1xxx 系列芯片 BootROM 中集成的 DCD 功能这个话题,痞子衡早就想写了,但是一直没有动笔,毕竟这个话题比较生涩,单独讲会比较枯燥。最近痞子衡在支持一个 i.MXRT1170 客户,需要在客户板卡上跑其应用代码的压力测试,但是客户因为保密的缘故仅提供了应用可执行文件,而我们又需要在客户应用里额外加一些配置代码做测试,测试过程中会涉及多次断电上电,如果挂外部调试器去做额外配置又太繁琐,这时候 DCD 功能就派上用场了。
(资料图片)
Note:文中贴图、代码主要以 i.MXRT1170 为例,其余 i.MXRT1xxx 系列原理类似。
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,commandheaderbytesformerged"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 是必选的解决方案。
现在回到客户的实际案例,客户 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。
下载地址:https://github.com/JayHeng/NXP-MCUBootUtility/archive/refs/tags/v4.1.1.zip
将客户板卡启动模式改为 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 特别强大,那么它能帮助操作 ARM 4GB 系统空间里的全部地址吗?答案是否定的,出于安全考虑,BootROM 里做了地址限制,我们仅能用 DCD 操作如下指定的一些外设(不同 i.MXRT 系列有所不同):
至此,利用i.MXRT1xxx系列ROM集成的DCD功能可轻松配置指定外设痞子衡便介绍完毕了,掌声在哪里~~~
标签:
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的...
近来,美国民主共和两党围绕债务上限的党争不断加剧,引发全球对于...
【中国金融案例中心 编译:李锡雯】近日,Nasdaq刊登了加密网络...
1、中国古代:1840年以前中国近代:1840年第一次鸦片战争-1919年五...
预警范围较昨日有明显扩大。
信达证券股份有限公司王舫朝,廖紫苑近期对常熟银行进行研究并发布了...
中新网江苏新闻4月21日电(崔佳明朱灿)“今天的项目就是明天的产业,...
(新华网宁夏频道供图)1 今日,谷雨!2 2023年4月20日16时14分,...
在公积金领域的数字人民币应用新赛道上,苏州率先交出“标准化”答...
肯定很多人,在对昨晚黄金的反弹表现唏嘘不已。。就我知道的,有一...
所以他来到了巴尼亚卢卡公开赛。我过去去过巴尼亚卢卡几次,一次是...
01:50齐鲁网·闪电新闻4月20日讯4月23日是“世界读书日”。每年的这...
日前,位于陵水新村镇疍家渔排上的一处共享渔庄,游客在海面体验桨...
1、“龙有逆鳞”下一句是“触者杀之”。2、就是说,每条龙里边都有...
1、最新广东三A同类院校排名(前二十)1 广东轻工职业技术学院2 广...
努尔基奇谈追梦:我认为被驱逐已经过多了禁赛??这不太对,奇谈,nba...
近日,上海车展宝马MINI展台疑似区别对待访客一事引发网友热议,涉...
王者荣耀是一款PVP的对战有游戏,在游戏中开局会看到玩家头上面的称...
中国卷烟包装纸制造行业通常包含行业材料供应商、卷烟包装纸制造商...
1、《拯救乡土文明》是2008年湖北人民出版社出版的图书,作者是张华...
直播吧4月21日讯曼联在本轮欧联杯0-3惨败塞维利亚,德赫亚表现低迷...
1、《英雄传说:晓之轨迹》是一款角色扮演类游戏。本文关于英雄传说...
[本站新车首发]2023上海车展已经正式拉开了帷幕,在本届车展期间,...
1、我不能理解你养一条埃及燕就能让你对热带鱼饲养完全没精力了,说...
2021年6月,44岁的法国总统马克龙化身追星一族,把美国偶像贾斯汀比...
4月18日,肯尼亚学生在内罗毕大学孔子学院举办的活动上写毛笔字。肯...
近日,有网友在浙江政务服务网站上看到,由杭州市公安局公开的一批...
4月20日北向资金减持7 17万股华软科技。近5个交易日中,获北向资金...
1、在手机设置菜单中点击【通用】;2、点击【传输或还原iPhone】;3...
4月20日,记者从驻马店市公交公司了解到,市公交公司所属公交场站现...