ARM裸机开发:I.MX6U 启动方式

发布者:PeacefulSoul最新更新时间:2024-09-02 来源: cnblogs关键字:ARM  裸机开发  I  启动方式 手机看文章 扫描二维码
随时随地手机看文章

一、硬件平台:

正点原子I.MX6U阿尔法开发板

_533488159_IMG_20210803_235508_1628006109000_xg_0

二、启动方式选择

I.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、NAND Flash、QSPI Flash 等启动。用户可以根据实际情况,选择合适的启动设备。

芯片上电以后,芯片会根据 BOOT_MODE[1:0] 的设置来选择 BOOT 方式, BOOT_MODE[1:0] 的值有两者控制方式

  1. eFUSE(熔丝) 控制电平:修改 eFUSE 的方式通过熔断对应的熔丝修改电平,该方式只能修改一次(不推荐)

  2. 修改 BOOT_MODE[1:0] 对应的 GPIO 高低电平来选择启动方式

I.MX6U 使用的是控制 IO 电平来控制启动方式,原理图上位置如下:

20211023214859

BOOT_MODE[1:0] 与启动方式关系:

BOOT_MODE[1:0]BOOT 类型
00从FUSE 启动
01串行下载
10内部BOOT 模式
11保留

一般我们使用 01 和 10 启动方式

2.1 串行下载

BOOT_MODE[1:0] 为 01;

串行下载:可以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,比如载串行下载模式下,我们可以使用 OTG1 这个 USB 口向开发板上的 SD/EMMC、NAND 等存储设备下载代码

2.2 内部BOOT模式

BOOT_MODE[1:0] 为 10;

此模式下,芯片会执 行内部的 boot ROM 代码,这段 boot ROM 代码会进行部分硬件初始化,然后从 boot 设 备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中, 一般是 DDR

2.3 BOOT ROM初始化内容

在内部 BOOT 模式下,芯片执行 BOOT ROM 初始化内容,BOOT ROM 如何执行呢?

首先 BOOT ROM 代码先初始化时钟,按下下图初始化各个时钟总线的分配器

20211023220743

同时内部 boot ROM 为了加快执行速度会打开 MMU(内存管理单元) 和 Cache(缓存),下载镜像的时候 L1 ICache(1级指令缓存) 会打 开,验证镜像的时候 L1 DCache、L2 Cache 和 MMU 都会打开。一旦镜像验证完成,boot ROM 就会关闭 L1 DCache、L2 Cache 和 MMU

之后中断向量偏移会被设置到 boot ROM 的起始位置,当 boot ROM 启动了用户代码以后就可以重新设置中断向量偏移了

2.4 内部BOOT启动设备

当 BOOT_MODE 设置为内部 BOOT 模式以后,可以从以下设备中启动:

  • 接到 EIM 接口的 CS0 上的 16 位 NOR Flash

  • 接到 EIM 接口的 CS0 上的 NAND Flash

  • 接到 GPMI 接口上的 MLC/SLC NAND Flash,NAND Flash 页大小支持 2KByte、4KByte 和 8KByte,8 位宽。

  • Quad SPI Flash。

  • 接到 USDHC 接口上的 SD/MMC/eSD/SDXC/eMMC 等设备。

  • SPI 接口的 EEPROM

关于启动设备的选择,I.MX 6U 同样提供了 eFUSE 和 GPIO 量种配置方式,常用的是 GPIO 选择启动设备

启动设备是通过 BOOT_CFG1[7:0]、BOOT_CFG2[7:0]和 BOOT_CFG4[7:0]这 24 个配置 IO,这 24 个配置 IO 刚好对应着 LCD 的 24 根数据线 LCD_DATA0~LCDDATA23,当启动完成以后这 24 个 IO 就可以 作为 LCD 的数据线使用。这 24 根线和 BOOT_MODE1、BOOT_MODE0 共同组成了 I.MX6U 的启动选择引脚

虽然有 24 个 IO,但是实际需要调整的只有那几个 IO,其它的 IO 全部下拉 接地即可,如下图,大部分 IO 一直保持下拉接地,只有几个 IO (BOOT_CFG2[7:0]和 BOOT_CFG1[7:0])需要我们关注:

20211023223523

IO 与启动设备的关系如下图:

20211023223713

各个模式间切换时,许多 IO 是基本保持不变的,所以进一步简化,只需要 LCD_DATA3 ~ LCDDATA7、LCD_DATA11 这 6 个 IO 也被引出来了,其中 LCD_DATA11 就 是 BOOT_CFG2[3],LCD_DATA3~LCD_DATA7 就是 BOOT_CFG1[3]~BOOT_CFG1[7]

20211023223928

对应的设备模式如下:

20211023224114

所以 I.MX6U 开发板从 SD 卡、EMMC、NAND 启动 的时候拨码开关各个位设置方式如表

image.png

三、镜像烧写

学习 STM32 的时候我们可以直接将编译生成的.bin 文件烧写到 STM32 内部 flash 里面,但 I.MX6U 不能直接烧写编译生成的.bin 文件,我们需要在.bin 文件前面添加一些头信息构成 满足 I.MX6U 需求的最终可烧写文件

I.MX6U 的最终可烧写文件组成如下:

  • Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息在 ROM 中按照固定的地址存放着

  • Boot data,启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等

  • Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置

  • 用户代码可执行文件,比如 led.bin

所以烧写文件的最终组成为: IVT + Boot data + DCD + usr.bin;其中 IVT + Boot data + DCD 大小为3KB

IVT 包含了镜像程序的入口点、指向 DCD 的指 针和一些用作其它用途的指针。内部 Boot ROM 要求 IVT 应该放到指定的位置,不同的启动设备位置不同,而 IVT 在整个 load.imx 的最前面,其实就相当于要求 imx 文件在烧写的时候应该烧写到存储设备的指定位置去。整个位置都是相对于存储设备的起始地址的偏移

20211024122618

3.1 IVT + Boot data 存放内容:

20211024123412

header:

20211024123520

Tag 为一个字节长度,固定为 0XD1,Length 是两个字节,保存着 IVT 长度,大端格式(高字节保存在低地址)最后的 Version 是一个字节,为 0X40 或者 0X41

entry:入口地址,也就是镜像第一行指令所在的位置。 0X87800000 就是我们的链接地址

reserved1:保留位

dcd:DCD 地址,镜像地址为 0X87800000,IVT+Boot Data+DCD 整个大小为 3KByte。因此 .imx 文件的起始地址就是 0X87800000-0XC00=0X877FF400

Boot Data:boot 地址,header 里面已经设置了 IVT 大小是 32 个 字节,其结构如下:

20211024123650

  • start 整个 load.imx 的起始地址,包括前面 1KByte 的地址偏移。

  • length 镜像大小,这里设置 2MByte。镜像大小不能超过 2MByte。

  • plugin 插件

self: IVT 复制到 DDR 中以后的首地址

csf: CSF 地址

reserved2:保留,未使用

3.2 DCD数据

复位以后,I.MX6U 片内的所有寄存器都会复位为默认值,但是这些默认值往往不是我们想要的值,有些外设我们必须在使用之前初始化它。为此 I.MX6U 提出了一个 DCD (Device Config Data) 的概念,和 IVT、Boot Data 一样,DCD 也是添加到 load.imx 里面的,紧跟在 IVT 和 Boot Data 后面,IVT 里面也指定了 DCD 的位置。

DCD 其实就是 I.MX6U 寄存器地址和对应的配置信息集合,Boot ROM 会使用这些寄存器地址和配置集合来初始化相应的寄存器,比如 开启某些外设的时钟、初始化 DDR 等等。DCD 区域不能超过 1768Byte !

DCD 里面的初始化配置主要包括三方面:

  1. 设置 CCGR0~CCGR6 这 7 个外设时钟使能寄存器,默认打开所有的外设时钟

  2. 配置 DDR3 所用的所有 IO

  3. 配置 MMDC 控制器,初始化 DDR3


关键字:ARM  裸机开发  I  启动方式 引用地址:ARM裸机开发:I.MX6U 启动方式

上一篇:ARM裸机开发:C语言点亮LED
下一篇:s3c2410 MMU

推荐阅读最新更新时间:2024-11-09 10:23

Ceva 加入 Arm Total Design 加速开发面向基础设施和非地面网络卫星的端到端 5G SoC
Ceva PentaG-RAN与Arm Neoverse计算子系统相结合,降低5G SoC开发成本并缩短上市时间,从而使双方客户受益 帮助智能边缘设备更可靠、更高效地连接、感知和推断数据的全球领先硅产品和软件IP授权许可厂商 Ceva公司宣布加入Arm Total Design ,旨在加速开发基于Arm® Neoverse™计算子系统(CSS)和Ceva PentaG-RAN 5G平台的端到端5G定制SoC,用于包括5G基站、Open RAN设备和5G非地面网络(NTN)卫星在内的无线基础设施。 Neoverse CSS 是经过优化、集成和验证的平台,能够以更低成本和更快上市时间实现定制硅片设计。 它与Ceva
[网络通信]
Ceva 加入 <font color='red'>Arm</font> Total Design  加速<font color='red'>开发</font>面向基础设施和非地面网络卫星的端到端 5G SoC
arm9x25交叉编译IPTABLES问题与解决
iptables 版本选择 1.4.0, 高版本出现没有入口函数问题, 稍后解决。 下载地址: http://www.netfilter.org/projects/iptables/downloads.html 选择源码iptables-1.4.0.tar.bz2。 解压缩命令:tar -xjvf iptables-1.4.0.tar.bz2. 编译命令:make CC=arm-none-linux-gnueabi-gcc RANLIB=arm-none-linux-gnueabi-ranlib AR=arm-none-linux-gnueabi-ar LD=arm-none-linux-gnueabi-ld
[单片机]
Arm Neoverse CSS N3 助力快速实现出色能效
突破传统基础设施 从云到边缘,Arm Neoverse 正凭借出色的性能、效率、设计灵活性和总体拥有成本 (TCO) 优势,革新传统基础设施芯片领域。 云和超大规模服务运营商正不断增大计算密度。随着 Microsoft Cobalt、阿里巴巴的倚天 710、AmpereOne等配置 128 核或以上的 CPU 设计进入市场,单个封装可实现的性能更强,且下一代的目标还将远高于 128 核。 随着 CPU 性能逐步提高,市场对人工智能 (AI)、网络和加密加速器等专用计算的需求也随之持续增长。这显然需要将这些加速器集成在一起,才能更有效地提高性能和效率,与此同时,还需实现模块化设计,以便将加速器与不同的通用计算引擎进
[嵌入式]
<font color='red'>Arm</font> Neoverse CSS N3 助力快速实现出色能效
基于ARM9和DM9000芯片解决UDP协议的通信问题
引 言 随着嵌入式技术和网络技术的迅速发展,以太网接口在嵌入式系统中的应用越来越广泛。以太网通信速度快。通用,可直接与Internet 相连接,提供更大范围的远程访问。目前在工控嵌入式领域,网络通信通常采用UDP 和TCP 协议.UDP 与TCP 相比,UDP 使用非连接的。不可靠的通信方式,因此网络传输速度快,实时性相对较好。文中设计实用S3C2440.以太网控制器DM9000 和经过自行裁剪的TCP / IP 协议栈,构成嵌入式系统的以太网接口,实现UDP 通信。 1 系统的硬件介绍 该系统采用优龙科技公司YLP2440 作为开发的硬件系统,YLP2440 采用三星S3C2440A 作为CPU,最高主频400MHz,带有6
[单片机]
基于<font color='red'>ARM</font>9和DM9000芯片解决UDP协议的通信问题
ARM芯片的时钟系统详解(S5PV210芯片)
1、时钟介绍 时钟是同步工作系统的同步节拍,时钟的快慢就是我们常说的工作频率,以赫兹(HZ)为单位。时钟系统指导器件的运行,我们分析器件的工作特性时,常常会看器件的时序图,时序图中的时钟周期就是时钟系统来决定的。 2、时钟来源 2.1、 三种时钟配置 1、外部直接输入时钟信号,SoC有个引脚用来输入外部时钟信号,用的很少。 2、外部晶振+内部时钟发生器产生时钟,大部分低频单片机都是这么工作的。 3、外部晶振+内部时钟发生器+内部PLL产生高频时钟+内部分频器分频得到各种频率的时钟。 2.2、S5PV210的时钟来源 S5PV210的时钟来源属于第三种,也可以说复杂的Soc都是第三种,因为复杂Soc的内部器件是很多的,具体原
[单片机]
<font color='red'>ARM</font>芯片的时钟系统详解(S5PV210芯片)
STM32MP1开发板连线与启动方式
连线要点 跳线要点 错误排查 连接虚拟机的要点 手动允许连接ST-Link 手动允许连接DFU 每次掉电与上电连接会丢失:可以在虚拟机里自动设置 在Linux开发环境中查看与开发板的连接 USB:STMicroelectronics STM Device in DFU Mode;Linux Foundation Multifunction Composite Gadget;STMicroeletronics(ST-Link) STM32MP1 DK1与DK2资源比较 板载重要的参考资源 DDR PMIC Flash 其他启动方式的参考资源
[单片机]
STM32MP1<font color='red'>开发</font>板连线与<font color='red'>启动</font><font color='red'>方式</font>
传奇芯片架构师Jim Keller离职后,AMD取消了K12 ARM CPU项目
据外媒WccfTech消息,传奇芯片架构师JimKeller在一次会议上表示,在他离开前雇主AMD后,他的K12ARMCPU项目被“愚蠢地取消”了。 据报道,“计算的未来”会议由印度科学研究所计算机科学与自动化系举办,在会议上,JimKeller简要概述了他之前从事的各种项目以及芯片设计的基础知识。    JimKeller表示,当他在AMD时,他从事Zen1的开发工作,并制定了Zen2和Zen3的计划。    如上图所示,AMD曾在PPT上宣布过K12ARMCPU 项目,该系列处理器原定于2017年上市,针对密集服务器、嵌入式细分市场。据JimKeller透露,K12ARMCPU项目实际上是在他离开AMD公司后被某些产品
[家用电子]
传奇芯片架构师Jim Keller离职后,AMD取消了K12 <font color='red'>ARM</font> CPU项目
Linux内核可能最终逐步取消对英特尔i486 CPU的支持
Linus Torvalds支持可能从Linux内核中取消英特尔486(i486)处理器支持的想法。在十年前Linux内核放弃对i386的支持后,i486一直是Linux内核主线的最低x86处理器支持。最近一次试图取消对i486的支持的提法来自Linus Torvalds本人,他表达了可能需要x86 32位CPU支持 cmpxchg8b 的想法,这指的是Pentium CPU及以后的CPU。 也许我们应该咬紧牙关,说我们只支持带有 cmpxchg8b 的x86-32(即奔腾及更高版本)。大多数(所有)Linux发行版已经启用了X86_PAE,这使得X86_CMPXCHG64成为基本要求的一部分。我并不相信现在大多数发行版
[嵌入式]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved