i.MX RT开发笔记-04 | i.MX RT1062启动方式
Posted Mculover666
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了i.MX RT开发笔记-04 | i.MX RT1062启动方式相关的知识,希望对你有一定的参考价值。
系列文章目录
- i.MX RT开发笔记-01 | 初识 i.MX RT1062 跨界MCU
- i.MX RT开发笔记-02 | i.MX RT1062开发环境搭建(MDK芯片包、NXP SDK详解)
- i.MX RT开发笔记-03 | 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 RT1xxx系列MCU启动那些事(1)- Boot简介
- 恩智浦i.MX RT1xxx系列MCU启动那些事(2)- Boot配置(BOOT Pin/eFUSE)
- 恩智浦i.MX RT1xxx系列MCU启动那些事(3)- Serial Downloader模式(sdphost/MfgTool)
- 恩智浦i.MX RT1xxx系列MCU启动那些事(4)- Flashloader初体验(blhost)
- 恩智浦i.MX RT1xxx系列MCU启动那些事(5)- 再聊eFUSE及其烧写方法
- 恩智浦i.MX RT1xxx系列MCU启动那些事(6)- Bootable image格式与加载(elftosb/.bd)
- 恩智浦i.MX RT1xxx系列MCU启动那些事(8)- 从Raw NAND启动
- 恩智浦i.MX RT1xxx系列MCU启动那些事(9)- 从Parallel NOR启动
- 恩智浦i.MX RT1xxx系列MCU启动那些事(11.A)- FlexSPI NOR启动时间(RT1170)
- 恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1015/1020/1050)
- 恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1060/1064(SIP))
- 恩智浦i.MX RT1xxx系列MCU启动那些事(11.B)- FlexSPI NOR连接方式大全(RT1010)
- 恩智浦i.MX RT1xxx系列MCU启动那些事(13)- 从Serial(1-bit SPI) EEPROM/NOR恢复启动
- 恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)
下面这张启动方式比较图就来源于大佬的博客:
以上是关于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