0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

利用i.MX RT1xxx系列ROM集成的DCD功能可轻松配置指定外设

恩智浦MCU加油站 来源:恩智浦MCU加油站 2023-04-20 15:54 次阅读

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

注:文中贴图、代码主要以i.MX RT1170为例,其余i.MX RT1xxx系列原理类似。

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

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

翻看芯片参考手册Device Configuration Data(DCD)章节,你会发现DCD数据设计特别简单,它总共支持三类命令:Writedata(Tag是0xCC)、Checkdata(Tag是0xCF)、NOP(Tag是0xC0),这三类命令就是为了读写芯片外设寄存器而设计的,我们需要做的,就是组合这三类命令,完成指定外设模块寄存器的设置序列。

任意打开一个RT1170 SDK示例工程,都会包含dcd.c/h文件(仅当工程选项预编译宏里有XIP_BOOT_HEADER_DCD_ENABLE=1才会被使能)。

12548202-df50-11ed-bfe3-dac502259ad0.png

随便摘其中两句分析下,第一句表明是Writedata命令的*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是必选的解决方案。

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

现在回到客户的实际案例,客户RT1170板卡上用了一颗来自MXIC的OctalFlash,代码是执行在Flash上,现在我们需要测试不同FlexSPI1->DLLACR[SLVDLYTARGET]设置下的工作情况,而我们手头仅有客户可执行文件。 将客户可执行文件下载进板卡,并设置启动模式为从Flash启动(2'b10),然后挂上JLINK调试器读取FlexSPI1->DLLACR寄存器值(该寄存器地址是0x400cc0c0),得到0x00400079,其中SLVDLYTARGET是默认的理想值4'b1111,这个值是BootROM自动配置的,我们无法通过FDCB启动头来更改设置。

127e0fc8-df50-11ed-bfe3-dac502259ad0.png

为了做压力测试,我们需要更改不同的FlexSPI1->DLLACR[SLVDLYTARGET]值,比如将其设为4'b1000,这时候可以借助DCD来实现,我们直接使用MCUBootUtility工具(需要使用v4.1.1版本及以上)来使能DCD。 下载地址:https://github.com/JayHeng/NXP-MCUBootUtility/archive/refs/tags/v4.1.1.zip 将客户板卡启动模式改为SerialDownload(2'b01),插上UART/USB下载线,打开MCUBootUtility工具,在DCD设置界面里启用"UseDCDdescription"选项,并在动作框里直接输入下面语句(这里直接是类C语法,会被工具自动转成DCD数据),然后连接、下载。 *(uint32_t*)0x400cc0c0=0x00400041;

12968832-df50-11ed-bfe3-dac502259ad0.png

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

12a9bad8-df50-11ed-bfe3-dac502259ad0.png

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

看起来DCD特别强大,那么它能帮助操作Arm 4GB系统空间里的全部地址吗?答案是否定的,出于安全考虑,BootROM里做了地址限制,我们仅能用DCD操作如下指定的一些外设(不同i.MX RT系列有所不同): 12bdb2b8-df50-11ed-bfe3-dac502259ad0.png
也就是说,寄存器地址落在这个区间的外设,可以通过DCD配置,其它的则不可以。

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    30

    文章

    5028

    浏览量

    117723
  • ROM
    ROM
    +关注

    关注

    4

    文章

    524

    浏览量

    84812
  • 调试器
    +关注

    关注

    1

    文章

    288

    浏览量

    23409
  • SDK
    SDK
    +关注

    关注

    3

    文章

    966

    浏览量

    44703
  • DCD
    DCD
    +关注

    关注

    0

    文章

    6

    浏览量

    2357

原文标题:利用i.MX RT1xxx系列ROM集成的DCD功能可轻松配置指定外设

文章出处:【微信号:NXP_SMART_HARDWARE,微信公众号:恩智浦MCU加油站】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    i.MX RT10xx系列外部晶振相关引脚的作用

    之前写过一篇关于时钟引脚的文章 《i.MX RT1xxx系列MCU时钟相关功能引脚的作用》,里面简单提及了外部晶振相关引脚的作用,但是并没有详细展开。
    的头像 发表于 10-13 09:08 1039次阅读

    i.Mx RT平台内存建议

    哪些超总线存储器被推荐用于NXP的I.MX RT平台。CyPress的超闪存/HyrRAM MCP设备与NXP的I.MX RT系列兼容吗?应
    发表于 09-05 14:33

    i.MXRT1xxx Boot的Serial Downloader模式相关资料分享

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Flashloader。  在上一篇文章 Serial Downloader模式
    发表于 01-26 08:12

    介绍的是i.MX RT1xxx系列MCU的Parallel NOR启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR启动。  上一篇讲i.MXRT1xxx从Raw NA
    发表于 02-22 06:31

    介绍i.MX RT1xxx系列MCU的Raw NAND启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Raw NAND启动。  前面铺垫了七篇启动系列文章,终于该讲具体Boot
    发表于 02-22 07:20

    如何使用sdphost的ROM引导加载程序中区分i.MX RT1062和i.MX RT 1064?

    有什么方法可以通过读取特定寄存器来确定微控制器类型,而不是系列或 UID?我想在使用 sdphost 的 ROM 引导加载程序中区分 i.MX RT1062 和
    发表于 04-27 08:37

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(4)- Flashloader初体验(blhost)...

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Flashloader。  在上一篇文章 Serial Downloader模式
    发表于 12-02 09:36 7次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b><b class='flag-5'>系列</b>MCU启动那些事(4)- Flashloader初体验(blhost)...

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(9)- 从Parallel NOR启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Parallel NOR启动。  上一篇讲i.MXRT1xxx从Raw NA
    发表于 12-28 19:19 8次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b><b class='flag-5'>系列</b>MCU启动那些事(9)- 从Parallel NOR启动

    痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(8)- 从Raw NAND启动

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的Raw NAND启动。  前面铺垫了七篇启动系列文章,终于该讲具体Boot
    发表于 12-28 19:19 10次下载
    痞子衡嵌入式:恩智浦<b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b><b class='flag-5'>系列</b>MCU启动那些事(8)- 从Raw NAND启动

    利用i.MXRT1xxx系列ROM集成DCD功能轻松配置指定外设

    大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是利用i.MXRT1xxx系列ROM集成
    的头像 发表于 04-21 09:40 472次阅读

    i.MX RT1xxx从SD/eMMC启动

    最近在恩智浦官方社区上支持了一个关于i.MX RT从SD卡启动的案例,这让我想起了一年前写过的一篇《i.MX RT600从SD/eMMC启动》,那一篇重点介绍了基于eMMC设备制作程序
    的头像 发表于 05-11 14:34 751次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT1xxx</b>从SD/eMMC启动

    i.MX RT的FlexRAM配置问题

    i.MX RT的FlexRAM配置问题
    的头像 发表于 10-24 15:46 287次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>的FlexRAM<b class='flag-5'>配置</b>问题

    i.MX RT中FlexSPI外设不常用的读选通采样时钟源

    i.MX RT中FlexSPI外设不常用的读选通采样时钟源
    的头像 发表于 10-30 17:44 264次阅读
    <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中FlexSPI<b class='flag-5'>外设</b>不常用的读选通采样时钟源

    理解i.MX RT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值

    理解i.MX RT中FlexSPI外设lookupTable里配置访问行列混合寻址Memory的参数值
    的头像 发表于 10-30 17:23 279次阅读
    理解<b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>中FlexSPI<b class='flag-5'>外设</b>lookupTable里<b class='flag-5'>配置</b>访问行列混合寻址Memory的参数值

    XMCD – i.MX RT11xx系列简单易用的特定外设配置功能

    i.MX RT1160/ RT1170 B0以及后续的RT1180开始,BootROM引入了XMCD新功能,其用途与传统
    的头像 发表于 10-26 09:25 701次阅读
    XMCD – <b class='flag-5'>i.MX</b> <b class='flag-5'>RT</b>11xx<b class='flag-5'>系列</b>简单易用的特定<b class='flag-5'>外设</b><b class='flag-5'>配置</b><b class='flag-5'>功能</b>