NXP的I.MX6U系列SoC启动流程

1、前言

NXP家的I.MX6U系列的SoC支持多种启动方式以及启动设备,使用该系列SoC的用户可以根据自己的实际情况,选择合适的启动方式和启动设备,例如,可以从Nnad Flash、eMMC和SDCard等不同设备中启动,从不同的启动设备中启动,启动要求一般都不同。

2、I.MX6UL启动方式

以I.MX6UL这款SoC为例,启动引导过程是从上电复位(POR)开始的,此硬件复位逻辑强制ARM内核从芯片上的Boot ROM开始执行,Boot ROM代码通过内部寄存器BOOT_MODE[1:0]的状态以及eFUSE和GPIO设置的状态,以确定芯片的启动方式和启动设备。

Boot ROM的主要特性包括:

  • 支持各种启动设备启动
  • 串行下载支持(USB OTG和UART)
  • 支持设备配置数据(DCD)和PLUGIN
  • 基于数字签名和加密的高保正启动(HAB)
  • 从低功耗唤醒

Boot ROM支持以下的启动设备:

  • NOR Flash
  • NAND Flash
  • OneNAND Flash
  • SD/MMC
  • SPI Flash和EEPROM
  • QSPI Flash

对于I.MX6U系列的SoC而言,有4种启动模式,这4种启动模式是由BOOT_MODE[1:0]进行控制的,其实就是芯片上的BOOT_MODE1和BOOT_MODE0这两个引脚,启动方式配置如下:
在这里插入图片描述
当BOOT_MODE[1:0]=01的时候,启动方式为Serial Downloader,芯片处于该模式的时候,用户可以通过USB接口进行固件下载,当BOOT_MODE[1:0]=10的时候,启动方式为Internal Boot,此时,Boot ROM代码将会读取DCD数据初始化DDR,并从启动设备,例如Nand Flash种拷贝启动镜像文件,从而引导启动,这两种启动方式是用户用得最多的。

3、Boot ROM设备初始化

对于I.MX6UL这款SoC而言,当用户配置BOOT_MODE[1:0]=10的时候,为Internel Boot启动模式,SoC将会执行Boot ROM代码,首先会进行SoC的时钟初始化,Boot ROM代码设置的系统时钟如下
在这里插入图片描述
从图中可以知道,当BT_FREQ为0的时候,ARM PLL=396MHz,也就是主频为396MHz,System PLL=528MHz等,另外,Boot ROM为了加快执行速度还会打开MMU和Cache,中断向量偏移还会被设置到Boot ROM的起始位置,当用户代码启动以后可以重新设置中断向量偏移。

整个Boot ROM的启动流程,如下所示:
在这里插入图片描述
电源开启后,芯片首先进行复位并且执行Boot ROM中的代码,开始检查CPU的ID号,随后检查Reset的状态,如果是正常复位的话,检查芯片的启动模式(通过fuses或者GPIO配置),如果是内部启动模式的话,将会从启动设备中下载初始化启动镜像,并且进行镜像验证,如果镜像验证通过的话,将会将启动镜像进行执行,从而引导芯片正常启动。

对于I.MX6UL芯片,Boot ROM设备初始化下的内部ROM和RAM的内存映射如下:
在这里插入图片描述
Boot ROM代码的启动引导较复杂,关于整个启动流程的更详细过程,可以参考相关芯片的参考手册

4、I.MX6UL启动设备选择

当I.MX6UL芯片的BOOT_MODE[1:0]=10时候,也就是从Internal Boot模式启动时,可以从下面的启动设备中启动:

  • 接到EIM接口的CS0上的16bit的NOR Flash或者OneNAND Flash
  • 接到GPMI接口上的MLC/SLC NAND Flash,NAND Flash页大小支持2KB、4KB和8KB,8bit宽
  • QSPI Flash
  • 接到USDHC接口上的SD/MMC/eMMC等设备
  • 接到SPI接口的EEPROM

对于这些启动设备的选择,可以通过eFUSE或者GPIO进行配置,接下来,我们需要了解的是如何通过GPIO进行这些启动设备的选择,和启动模式的选择类似,启动设备是通过BOOT_CFG1[7:0]、BOOT_CFG2[7:0]和BOOT_CFG4[7:0]这24个IO进行配置的,并且这些IO口对应着LCD的24根数据线LCD1_DATA00~LCD1_DATA23,引导启动完成以后,这24个IO口就可以作为LCD的数据线使用了,启动设备选择引脚如下所示:
在这里插入图片描述
启动设备的选择引脚非常多,但是在实际开发的时候,需要调整的只有BOOT_CFG1[7:4],其它的引脚根据实际需要接高电平或者低电平即可,通过芯片的参考手册可以知道,这几个IO口的配置和对应的启动设备如下所示:
在这里插入图片描述
例如,当配置BOOT_CFG1[7:4]=1xxx的时候,启动设备将选择为Nand Flash,Boot ROM代码将会从该启动设备中读取下载启动镜像,从而将系统进行启动。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
i.MX6U SPL和u-boot是嵌入式系统中的两个重要组件,用于启动ARM架构的i.MX6U处理器。SPL(Secondary Program Loader)是首先加载到处理器的一段代码,其主要功能是初始化内存控制器和一些必要的外设,然后通过加载u-boot来完成系统的启动。 SPL可以理解为一个小型的操作系统,其大小通常在几十到几百KB之间,由于其能力有限,因此只能完成初始化和加载u-boot的任务。SPL会配置处理器的时钟、内存和外设等硬件资源,以便后续的操作系统能够正常运行。在i.MX6U处理器上,SPL还可以提供一些额外的功能,如从网络或外部存储设备加载u-boot。 u-boot是一个开源的引导加载器,在ARM嵌入式系统中广泛应用。它负责加载操作系统内核和文件系统,并提供丰富的命令行接口,用于系统的配置和调试。u-boot可以通过串口、网络和外部存储设备等多种方式进行通信,从而实现系统的启动和调试。 i.MX6U SPL和u-boot常常一起使用,以实现系统的启动和初始化。首先,SPL会被加载到处理器的内存中,并执行初始化操作和加载u-boot。接下来,u-boot会被加载到内存中,并根据配置文件的设置启动操作系统或加载文件系统。 总结来说,i.MX6U SPL和u-boot是i.MX6U处理器启动过程中不可或缺的两个组件,其中SPL负责初始化和加载u-boot,而u-boot则负责加载操作系统和提供系统配置和调试的功能。这两个组件的协同工作确保了i.MX6U处理器能够正常启动和运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值