i.MX RT开发笔记-04 | i.MX RT1062启动方式

Posted Mculover666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i.MX RT开发笔记-04 | i.MX RT1062启动方式相关的知识,希望对你有一定的参考价值。

系列文章目录

一、启动代码(Boot ROM和Boot Code)

Boot ROM是RT1062芯片内部128KB的存储空间(ROMCP):


Boot ROM中存放的代码称为Boot Code(启动代码),启动代码已经固化在Boot ROM中,用户无法进行修改使用,主要完成以下事情:

  • 预先完成硬件初始化操作(用于访问外部存储器设备)
  • 从用户选择的启动设备中加载程序镜像
  • 预先使用HAB库进行程序镜像验证(BOOT安全启动设置)
  • 跳转到一个程序镜像中的地址,开始执行用户程序

如果在上述过程中出错,则启动代码跳转到串行下载模式,等待用户下载镜像。

二、启动模式选择(Boot Mode)

RT1062有四个启动模式,如下表,具体使用哪种启动模式通过内部寄存器 BOOT_MODE 中的值来选择,如图:


RT1062芯片上电之后永远会执行Boot ROM中存放的启动代码,只不过在 PRT_B 信号的上边沿(上电时),芯片对BOOT_MODE0引脚和BOOT_MODE1引脚采样,获得 BOOT_MODE 寄存器的初始值,通过该寄存器决定启动代码下一步的行为

  • Boot From Fuses:根据Fuses中的配置来选择外部存储器
  • Serial Downloader:开始等待用户通过串口/USB接口下载程序
  • Internal Boot:继续执行启动代码,并根据用户GPIO引脚配置来选择外部存储器

在采样完成之后,BOOT_MODE0和BOOT_MODE1引脚的电平不会对BOOT_MODE寄存器的值产生影响。

关于这三种启动模式,痞子衡大佬讲的非常清楚,下面引用大佬博客的内容:

① Fuse是i.MXRT1xxx里一块特殊的存储区域,用于存放全部芯片配置信息,其中有一部分配置信息和Boot相关,其中偏移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模式其实跟Boot From Fuses模式(BT_FUSE_SEL=1时)很类似,只是这个模式下BT_FUSE_SEL的意义有点不同,具体表现如下:

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

我们可以通过更改BOOT_CFG[x:0] 引脚输入状态来切换Boot配置,这部分Boot配置在Fuse里也同样存在,但是使用BOOT_CFG[x:0]来更改Boot配置显然比烧写Fuse更方便快捷(也可以认为BOOT_CFG[x:0]主要用于产品开发过程中,待产品开发结束后,应直接用Fuse来锁定Boot配置)

三、外部启动设备配置(Boot Devices)

1. 外部启动设备配置

RT1602支持的外部启动设备非常多,如下:

  • 串行Nor Flash:使用FlexSPI接口(默认)-
  • 串行Nand Flash:使用FlexSPI接口
  • 并行Nor Flash:使用SEMC接口(Smart Exernal Memory Controller),支持16bit位宽
  • Nand Flash:使用SEMC接口,支持 8bit/16bit 位宽
  • SD/MMC/eSD/SDXC/eMMC 4.4:使用uSDHC接口,支持大容量卡
  • 串行Nor Flash/EEPROM:使用LPSPI接口

用户通过设置 BOOT_CFG1[7:4] 的值来选择使用哪种类型的设备,如图:

2. 启动设备属性配置

在访问每种外部存储器设备时,都需要配置一些基本参数,比如位宽、工作频率、访问时序等必要参数,RT1062针对每种存储器设备都提供了配置方式。该部分内容较多,可以在参考手册中查看。

比如当我们选择外部存储器为串行 Nor Flash时,可以用GPIO引脚配置的选项如下


而另外一些属性设置只能通过软件去修改,无法通过GPIO设置,如下:

四、启动相关GPIO引脚

RT1062芯片中,在Fuse中用于启动相关的一些配置项可以通过外部GPIO引脚来配置,引脚对应表如图所示:

五、总结

i.MX RT1xxx 系列跨界处理器的启动方式其实都差不多,由于没有内部Flash,所以芯片内置了一段ROM空间固化启动代码,由启动代码完成多种多样的启动方式。

启动代码最主要的功能是加载代码到内部SRAM中或者外部SRAM/SDRAM中跳转过去开始执行,而要加载的代码就来源于外部存储器,比如SPI Flash(Nor Flash)、Nand Flash、SD卡等。

除了这种方式外,启动代码还支持通过串口/USB接口接收PC端上位机工具(mfgtool、MCUBootUtility)发送的程序镜像,并将接收的程序存储到SRAM中开始执行。

关于 i.MX RT系列启动方式更加详细的描述,请阅读 NXP 痞子衡大佬的文章。

下面这张启动方式比较图就来源于大佬的博客:

以上是关于i.MX RT开发笔记-04 | i.MX RT1062启动方式的主要内容,如果未能解决你的问题,请参考以下文章

i.MX RT开发笔记-08 | i.MX RT1062嵌套中断向量控制器NVIC(按键中断检测)

i.MX RT开发笔记-03 | i.MX RT1062地址空间映射

痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1160/1170)...

i.MX RT开发笔记-01 | 初识 i.MX RT1062 跨界MCU

i.MX RT开发笔记-02 | i.MX RT1062开发环境搭建(MDK芯片包NXP SDK详解)

i.MX RT开发笔记-05 | 新建 MDK 不同版本工程(SRAM调试版本Nor Flash下载版本)