IMXRT 的Boot模式

本篇文章参考NXP技术博客整理总结,为个人学习笔记,如有错误欢迎在评论区指正,谢谢。

NXP的IMXRT系列单片机,血统来自i.mx处理器系列,除RT1064外,均没有内置flash,因此启动的boot配置相比一般单片机来说稍微复杂。

IMXRT内部有96KB的ROM,用于存储官方的BOOTROM(这部分是出厂固化好的,用户无法操作),单片机上电后,会执行官方的BOOTROM程序,官方BOOTROM程序中支持串口、USB下载程序、从指定存储器中运行程序等功能。那么单片机的BOOTROM如何判断用户想要使用哪种功能呢?

BOOTROM通过芯片内部的寄存器SRC->SBMR2[25:24]来确定程序分支。而寄存器SRC->SBMR2[25:24]来自POR_B pin上沿时被自动采样的BOOT_MODE[1:0] pin状态。(注意:如果改变了BOOT_MODE[1:0] pins的输入状态而使用RESET_B pin去软复位,Boot行为并不会改变,因为SRC->SBMR2[25:24]值并未改变)。

下表是BOOT_MODE相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。

芯片SRC_BOOT_MODE0SRC_BOOT_MODE1SRC_POR_BSRC_REST_B
i.MXRT117xGPIO_LPSR_02GPIO_LPSR_03POR_BONOFF
i.MXRT1064GPIO_AD_B0_04GPIO_AD_B0_05POR_BONOFF
i.MXRT106xGPIO_AD_B0_04GPIO_AD_B0_05POR_BONOFF
i.MXRT105xGPIO_AD_B0_04GPIO_AD_B0_05POR_BONOFF
i.MXRT1021GPIO_EMC_16GPIO_EMC_17POR_BONOFF
i.MXRT1015GPIO_EMC_16GPIO_EMC_17POR_BONOFF
i.MXRT1011GPIO_SD_04GPIO_SD_03POR_BONOFF

BOOTMODE有两位,因此单片机的BOOTROM程序可以有四种分支模式。

BOOT_MODE[1:0]模式
00Boot From Fuses
01Serial Downloader
10Internal Boot
11保留

关于这四种模式分别的作用,引用NXP的技术痞子衡的博文

  • Serial Downloader模式(UART/USB-HID)
      Serial Downloader模式顾名思义即串行下载模式,在这种模式下,BootROM通过指定的USB或者UART口来接收来自Host(恩智浦提供了上位机工具sdphost.exe或者mfgtool或者MCUBootUtility)的Application数据,并将数据存储在SRAM中执行,这种模式其实就是从SRAM启动,但是如果用这种模式去Boot Application缺点很明显,每次上电都需要将Application重新下载进SRAM,无法做到脱机自动Boot,所以显然这种模式的主要目的并不是从SRAM启动Application,那它到底有什么用?
      其实Serial Downloader模式主要是用来从SRAM中启动Flashloader,恩智浦官方提供了Flashloader程序,Flashloader程序可以用来将你的Application下载进i.MXRT1xxx支持的所有外部非易失性存储器中,为后续从外部存储器启动做准备。除此以外Serial Downloader模式还可以用来查看Fuse值。

  • Boot From Fuses模式
      Boot From Fuses模式从名字来看其实会让人误解,这个模式并不是从Fuse里加载Application启动的意思,而是根据Fuse里的一些Boot配置值来决定从哪个外部存储器Boot。Fuse是i.MXRT1xxx里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分配置信息和Boot相关。
      在参考手册Fusemap这一章节,可以看到完整的Fuse Map表,其中偏移0x460处的32bit配置数据的bit4是BT_FUSE_SEL,这个bit至关重要,决定了Boot From Fuses模式的主要行为,具体表现如下:

      BT_FUSE_SEL=0:表明所有外部存储器中均没有Application,此时Boot From Fuses模式等同于Serial Downloader模式。
      BT_FUSE_SEL=1:表明有外部存储器中存在有效Application,此时BootROM会根据Fuse中其他Boot配置信息进一步选择指定的外部存储器(Boot Device)去Boot。
    

  • Internal Boot模式(Serial NOR/NAND、Parallel NOR/NAND、SD/eMMC、1bit Recovery SPI NOR)
      Internal Boot模式其实跟Boot From Fuses模式(BT_FUSE_SEL=1时)很类似,只是这个模式下BT_FUSE_SEL的意义有点不同,具体表现如下:

      BT_FUSE_SEL=0:BootROM根据BOOT_CFG[x:0] pins和Fuse中Boot配置综合决定Boot Device,其中BOOT_CFG[x:0] pins的配置会覆盖Fuse中意义相同的Boot配置信息。
      BT_FUSE_SEL=1:BootROM完全根据Fuse中Boot配置信息选择指定的Boot Device去Boot。
    

设置完BOOT模式后,如果我们boot模式选择从外部存储器中启动(IMXRT没有用户可用的内部ROM,只可以从内部RAM启动或者外部存储器启动)那么外部存储器用哪种外部存储器呢?我们可以通过更改BOOT_CFG[x:0] pins输入状态来选择外部存储器,这部分BOOT_CFG配置在Fuse里也同样存在,但是使用BOOT_CFG[x:0]来更改Boot配置更加灵活,因为Fuse是OTP,只可以烧录一次。(也可以认为BOOT_CFG[x:0]主要用于产品开发过程中,待产品开发结束后,应直接用Fuse来锁定Boot配置)。

IMXRT支持的外部存储器表

芯片Serial NORSerial NANDParallel NORSLC Raw NANDSD CardeMMC Card1-bit SPI NORSDRAMHyperRAM
i.MXRT117x支持支持-支持支持支持支持支持支持
i.MXRT1064支持---支持支持支持支持支持
i.MXRT106x支持支持支持支持支持支持支持支持支持
i.MXRT105x支持支持支持支持支持支持支持支持支持
i.MXRT1021支持支持支持支持支持支持支持支持支持
i.MXRT1015支持支持----支持-支持
i.MXRT1011支持-------支持

下表是BOOT_CFG相关pinout信息,可在参考手册的External Signals and Pin Multiplexing章节中找到。
  i.MXRT117x pinout:
在这里插入图片描述

i.MXRT105x / i.MXRT106x / i.MXRT1064 pinout:
在这里插入图片描述

i.MXRT102x / i.MXRT1015 pinout:
在这里插入图片描述

i.MXRT1011 pinout:
在这里插入图片描述

BOOT_CFG[x:0] pin(在RT105x/RT106x上是12bit,在RT102x上是10bit)跟Boot Device选择相关的是BOOT_CFG[7:4]这4个bit,对应Fuse里是偏移0x450处32bit配置数据里的bit4-7(BOOT_CFG1[7:4])。

BOOT_CFG1[7:4]用于选择具体Boot Device,无论是RT105x/RT106x还是RT102x,它们支持的外部存储器种类是一样的,但是这里的具体配置值两个芯片上稍稍有些区别(主要是SD和SEMC NAND不一样)。

下表是BOOT_CFG1[7:4]具体配置值信息,可在参考手册的Fusemap章节中找到。
  i.MXRT117x device selection:
  在这里插入图片描述
  i.MXRT1064 device selection:
  在这里插入图片描述
  i.MXRT105x / i.MXRT106x device selection:
  在这里插入图片描述
  i.MXRT102x device selection:
  在这里插入图片描述
  i.MXRT1015 device selection:
  在这里插入图片描述

确定完外部存储区类型后,我们要配置外部存储器属性,假设我们选择了Serial NOR FLASH,但是Serial NOR只是一类FLASH的统称,市面上有非常多的Serial NOR芯片,每个芯片特性可能不完全一样,那么BootROM怎么知道这些不同的Serial NOR芯片的特性呢?还是通过BOOT_CFG[x:0] pin和Fuse来指定。

BOOT_CFG[x:0] pin其实是跟Fuse里是偏移0x450处32bit配置数据里的bit0-x是对应的。

BOOT_CFG[7:0] pin对应的是Fuse BOOT_CFG1[7:0]
BOOT_CFG[x:8] pin对应的是Fuse BOOT_CFG2[x-8:0]
  前面讲过BOOT_CFG1[7:4]是用来确定Boot Device类型的,其余bit就是用来配置当前选择的Boot Device的具体信息,因此不同的Boot Device,这些bit的意义是不一样的,这里不再具体介绍,有需要请自行参考参考手册的Fusemap章节中可见所有bit具体定义。

参考博客 https://www.cnblogs.com/henjay724/

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值