I.MX 6ULL用户手册摘选内容

目录

一、I.MX 6ULL介绍

二、I.MX 6ULL内存映射

三、i.MX 6UL的启动流程

3.1 复位

3.2 检查CPU的ID

3.3 检查复位类型

3.4 检查启动模式

3.5 加载初始启动程序映像

3.6 校验映像

3.7 执行映像

四、ARM 工作模式与内核寄存器

4.1 ARM 工作模式简介

4.2 ARM 内核寄存器


一、I.MX 6ULL介绍

i.MX 6ULL处理器采用NXP的ARM Cortex-A7内核

该处理器可连接DDR3、DDR3L、LPDDR2(单通道)DRAM存储器件。

二、I.MX 6ULL内存映射

内存映射从0000 0000 ~ FFFF FFFF,即4GB内存大小。

对以上四点进行描述:

1、DDR 映射区域。DDR作为i.MX6U的主内存区域,它被映射在 0x8000 0000 地址处,最大空间为 2G,实际可用大小与选择的 DDR 芯片容量有关。

2、QSPI1 映射区域,i.MX6UL可以外接串行 norfash,norfahs 映射到 0x6000 000 起始地址处。因为开发板已经使用了容量更大的 EMMC 或 nand fash作为主存储器,所以配套开发板并没有外接norFlash。

3、EIM 外扩存储器映射区域。i.MX6UL 可以通过 EIM 总线外扩存储器。

4、启动引导程序(Boo位于起始地址 0x0000 0000 处。我们知道芯片上电后(或硬件复位)会自动从“0”地址处开始执行。

简单来说:

i.MX6UL支持将多种存储器映射到 4G 的地址空间,我们只使用了 DDR 作为 i.MX6UL 的主内存区域,起始地址为 0x8000 0000 ,大小由实际使用的 DDR 芯片决定。

三、i.MX 6UL的启动流程

i.MX 6UL的启动流程由下图所示:

一般启动流程为以下几步:

1、复位

2、检查CPU的ID

3、检查复位类型

4、检查启动模式

5、加载初始启动程序映像

6、校验映像

7、执行映像

3.1 复位

系统上电或硬件复位。

3.2 检查CPU的ID

系统上电或硬件复位后,CPU 从0x0000 0000地址开始执行 Boot ROM 代码。Boot ROM 代码首先会检査 CPU的ID。这一步官方手册中也没有过多介绍,我们默认检测通过。

3.3 检查复位类型

两种情况:正常的硬件复位、从低功耗模式唤醒。

3.4 检查启动模式

启动模式引脚设置(选定BOOT_MODE[1:0] = 10B ,i.MX6UL 将会从“内部”启动):

BOOT_MODE[1:0]启动类型
00熔断器启动
01串行加载
10内部启动
11保留

具体从那种“内部”设备启动,由 BOOT_CFG1[7:4] 决定。

内部启动设备表如下:

BOOT_CFG1[7:4]内部启动设备
0000NOR/OneNAND(EIM)
0001QSPI(nor flash启动)
0011Serial ROM (SPI)
010xSD/eSD/SDXC(SD卡启动)
011xMMC/eMMC(emmc启动)
1xxxRaW NAND(nand flash启动)

3.5 加载初始启动程序映像

Boot ROM 代码并不能立即加载启动映像,因为我们的代码保存在芯片外部存储设备,从这些存储设备读数据之前首先要进行初始化。

Boot ROM 程序根据保存在芯片中的默认配置信息配置这些存储器接口。大多数情况下并不能发挥外设的最大性能,还需要使用 DCD(Device Confifiguration Data)进行二次配置。

DCD 地址信息保存在 IVT(Image Vector Table) 中,Boot ROM 通过读取 IVT 得到 DCD 地址信息。

简单来说:启动方式确定后 Boot ROM 需要从固定地址读取 IVT。

IVT 地址偏移表如下:

启动设备类型映像向量表偏移初始加载区域大小
NOR4 Kbyte = 0x1000 bytes整个映像大小
OneNAND256 bytes = 0x100 bytes1 Kbyte
SD/MMMC/eSD/eMMC/SDXC1 Kbyte = 0x400 bytes4 Kbyte
SPI EEPROM1 Kbyte = 0x400 bytes4 Kbyte

以 eMMC 为例,如果从eMMC启动,那么 IVT 位于 eMMC 的 0x400 偏移地址处。

初始化完成后,Boot ROM 便可以加载我们编写的程序。

3.6 校验映像

使用 HAB 校验,可以防止攻击者修改可编程内存中的代码或数据区域。

3.7 执行映像

以 eMMC 启动为例,在执行跳转之前 Boot ROM 已经将代码从 eMMC 加载到了 DDR,所以直接跳转到程序的入口地址即可。

四、ARM 工作模式与内核寄存器

4.1 ARM 工作模式简介

在 Cortex-M3 或者 M4 内核的的芯片中,工作模式分为特权模式和非特权模式。

        特权模式下 CPU 完全控制芯片。

        非特权模式下不能操作某些特殊的寄存器。

在 i.MX 6U 处理器中,将 CPU 工作模式进一步细分,支持九种工作模式下表所示。

处理器模式编码特权等级执行(Implemented)安全状态
User10000PL0AlwaysBoth
FIQ10001PL1AlwaysBoth
IRQ10010PL1AlwaysBoth
Supervisor10011PL1AlwaysBoth
Monitor10110PL1With Security ExtensionsSecure only
Abort10111PL1AlwaysBoth

Hyp

11010PL2With Security ExtensionsNon-secure only
Undefined11011PL1AlwaysBoth
System11111PL1AlwaysBoth

User 用户模式:用户模式是相对于 Linux 系统来说的,有 Linux 的情况下 Linxu 应用程序运行在 User 模式,i.MX 6U 特权等级从低到高被分为3个等级(PL0~PL2),用户模式属于PL0。用户模式下的执行有时被描述为“无特权执行”,对系统来说 User 是安全的,User 程序不会破坏系统。

FIQ 快速中断模式:当发生 FIQ 中断后 CPU 就会进入 FIQ 模式。

IRQ 中断模式:当发生 IRQ 中断后 CPU 会进人中断模式。

Supervisor 管理模式:相比于User 用户模式,管理模式权限更高在。在该模式下我们可以操作所有的寄存器。系统上电(复位)后CPU默认处于该模式,我们的裸机程序也是运行在管理模式。

Monitor mode 监听模式:就像后台服务,这个模式主要用来安全扩展模式,只用于安全。

Abont mode 终止模式:CPU读取数据错误或者预取错误发生时将会进入终止模式。终止模式可以认为系统“挂了”。

Hyp mode 超级的监视模式:它主要用于一些虚拟化的扩展。

Undefined mode 未定义指令异常模式:当 CPU加载到一个无法识别的指令后将会进入该模式,同Abont mode 终止模式一样,是不正常的。

System 系统模式:以系统模式执行的软件在 PL1 处执行。系统模式具有与User 用户模式相同的可用寄存器。

4.2 ARM 内核寄存器

外设寄存器与内核寄存器的区别:

        外设寄存器本质是单片机(处理器)地址空间中的一块内存区域,CPU 不能直接在内存中进行数据运算。

        与外设寄存器不同,内核寄存器并没有“地址”的概念,每款 CPU 的内核寄存是固定的。

i.MX 6 内核寄存器分类:32 位通用寄存器 R0~R12、SP(栈指针寄存器)、LR(链接寄存器)、PC(程序计数寄存器)和 PSR(程序状态寄存器)。

SP 栈指针寄存器:指向当前堆栈的顶部地址,用于管理函数调用时的局部变量、参数和返回地址。ARM 架构中通常使用 R13 作为 SP。

LR 链接寄存器:函数调用或异常处理下,保存函数调用后的返回地址(即 BL 或 BLX 指令的下一条指令地址)。对应 R14

PC 程序计数寄存器:指向下一条要执行的指令地址。对应 R15

R0~R12 通用寄存器:用于存储临时数据、函数参数、局部变量等。所有工作模式共用 R0~R7。 在 FIQ 模式有自己的 R8~R12,其他工作模式共用 R8~R12。

PSR 程序状态寄存器:保存当前程序的状态信息,包括条件标志、执行模式和中断控制位。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值