Linux之ARM(IMX6U)裸机之I.MX6ULL启动方式详解

发布者:VS821001最新更新时间:2021-10-29 来源: eefocus关键字:Linux  ARM  I  MX6ULL  启动方式 手机看文章 扫描二维码
随时随地手机看文章

1.启动方式选择

BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就不能再修改了,所以我们不使用。我们使用的是通过修改 BOOT_MODE[1:0]对应的 GPIO 高低电平来选择启动方式,所有的开发板都使用的这种方式, I.MX6U 有一个 BOOT_MODE1 引脚和BOOT_MODE0 引脚,这两个引脚对应这 BOOT_MODE[1:0]。 I.MX6U-ALPHA 开发板的这两个引脚原理图如图

在这里插入图片描述
在这里插入图片描述

其中 BOOT_MODE1 和 BOOT_MODE0 在芯片内部是有 100KΩ下拉电阻的,所以默认是0。 BOOT_MODE1 和 BOOT_MODE0 这两个引脚我们也接到了底板的拨码开关上,这样我们就可以通过拨码开关来控制 BOOT_MODE1 和 BOOT_MODE0 的高低电平。以 BOOT_MODE1为例,当我们把 BOOT_CFG 的第一个开关拨到“ON”的时候,就相当于 BOOT_MODE1 引脚通过 R88 这个 10K 电阻接到了 3.3V 电源,芯片内部的 BOOT_MODE1 又是 100K 下拉电阻接地,因此此时 BOOT_MODE1 的电压就是 100/(10+100)*3.3V= 3V,这是个高电平, 因此BOOT_CFG 的中的 8 个开关拨到“ON”就是高电平,拨到“OFF”就是低电平。


而 I.MX6U 有四个 BOOT 模式,这四个 BOOT 模式由 BOOT_MODE[1:0]来控制,也就是BOOT_MODE1 和 BOOT_MODE0 这两 IO, BOOT 模式配置如表所示:

image.png

①.串行下载

当 BOOT_MODE1 为 0, BOOT_MODE0 为 1 的时候此模式使能,串行下载的意思就是可以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1 这个 USB口向开发板上的 SD/EMMC、 NAND 等存储设备下载代码。我们需要将 BOOT_MODE1 拨到“OFF”,将 BOOT_MODE0 拨到“ON”。这个下载是需要用到 NXP 提供的一个软件,一般用来最终量产的时候将代码烧写到外置存储设备中的


②.内部BOOT模式

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


2.BOOT ROM得初始化内容

当我们设置 BOOT 模式为“内部 BOOT 模式”以后, I.MX6U 内部的 boot ROM 代码就会执行,这个 boot ROM 代码都会做什么处理呢?首先肯定是初始化时钟, boot ROM 设置的系统时钟如图

BT_FREQ 模式为 0,可以看到, boot ROM 会将 I.MX6U 的内核时钟设置为396MHz, 也就是主频为 396Mhz。 System PLL=528Mhz, USB PLL=480MHz, AHB=132MHz,IPG=66MHz。


内部 boot ROM 为了加快执行速度会打开 MMU 和 Cache,下载镜像的时候 L1 ICache 会打开,验证镜像的时候 L1 DCache、 L2 Cache 和 MMU 都会打开。一旦镜像验证完成, boot ROM就会关闭 L1 DCache、 L2 Cache 和 MMU。


中断向量偏移会被设置到 boot ROM 的起始位置,当 boot ROM 启动了用户代码以后就可以重新设置中断向量偏移了。一般是重新设置到我们用户代码的开始地方


3.选择启动设备

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

①、接到 EIM 接口的 CS0 上的 16 位 NOR Flash。

②、接到 EIM 接口的 CS0 上的 OneNAND Flash。

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

④、 Quad SPI Flash。

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

⑥、 SPI 接口的 EEPROM

这些启动设备如何选择呢? I.MX6U 同样提供了 eFUSE 和 GPIO 配置两种, eFUSE 就不讲解了。我们重点看如何通过 GPIO 来选择启动设备,因为所有的 I.MX6U 开发板都是通过 GPIO来配置启动设备的。正如启动模式由BOOT_MODE[1:0]来选择一样,启动设备是通过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 全部下拉接地即可,也就是设置为 0。打开 I.MX6U-ALPHA 开发板的核心板原理图,这 24 个 IO 的默认设置如图

大部分的 IO 都接地了,只有几个 IO 接高,尤其是 BOOT_CFG4[7:0]这 8 个 IO 都 10K 电阻下拉接地,所以我们压根就不需要去关注 BOOT_CFG4[7:0]。我们需要重点关注的就只剩下了 BOOT_CFG2[7:0]和 BOOT_CFG1[7:0]这 16 个 IO。这 16 个配置 IO 含义在原理图的左侧已经贴出来了,如图

在这里插入图片描述

打开 I.MX6U-ALPHA 开发板的底板原理图,底板上启动设备选择拨码开关原理图如图

除 了 BOOT_MODE1 和 BOOT_MODE0 必 须 引 出 来 ,LCD_DATA3~LCDDATA7、 LCD_DATA11 这 6 个 IO 也被引出来了,可以通过拨码开关来设置其对应的高低电平,拨码开关拨到“ON”就是 1,拨到“OFF”就是 0。其中 LCD_DATA11 就是 BOOT_CFG2[3], LCD_DATA3~LCD_DATA7 就是 BOOT_CFG1[3]~BOOT_CFG1[7],这 6 个IO 的配置含义如表

在这里插入图片描述

BOOT IO 含义, I.MX6U-ALPHA 开发板从 SD 卡、 EMMC、 NAND 启动的时候拨码开关各个位设置方式如表

image.png


关键字:Linux  ARM  I  MX6ULL  启动方式 引用地址:Linux之ARM(IMX6U)裸机之I.MX6ULL启动方式详解

上一篇:Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写及启动头文件的详解
下一篇:Linux之ARM(IMX6U)裸机汇编LED驱动实验--烧写bin文件到SD卡运行

推荐阅读最新更新时间:2024-11-09 00:01

内嵌ARM核的FPGA芯片EPXA10及其在图像驱动和处理方面的应用
摘要:介绍了内嵌ARM核的FPGA芯片EPXA10的主功能特点、内部结构及工作方式,通过其在图像驱动和处理方面的应用,体现了EPX10逻辑控制实现简单、对大量数据做简单处理速度快以及软件编程灵活的特点。 关键词:ARM FPGA EPXA10 图像驱动 图像处理 随着亚微米技术的发展,FPGA芯片密度不断增加,并以强大的并行计算能力和方便灵活的动态可重构性,被广泛地应用于各个领域。但是在复杂复法的实现上,FPGA却远没有32位RISC处理器灵活方便,所以在设计具有复杂算法和控制逻辑的系统时,往往需要RISC和FPGA结合使用。这样,电路设计的难度也就相应大大增加。随着第四代EDA开发工具的使用,特别是在IP核产业的迅猛发展下产生的S
[半导体设计/制造]
基于嵌入式 Linux的键盘驱动设计
1 键盘驱动程序的设计 随着电子信息技术飞速发展,嵌入式系统构成的各种设备得到了广泛的应用, 嵌入式 Linux是一种开放源码、 软实时、 多任务的操作系统,是开发嵌入式产品的优秀操作系统平台,其中键盘是人机界面中人类监控计算机重要数据输入设备。实现键盘有两种方法:一种是采用现有的一些芯片实现键盘扫描;二是用软件实现键盘扫描。目前许多芯片可用来实现键盘扫描,但是键盘扫描的软件实现方法有助于缩减系统的重复开发成本, 而只需很少的 CPU 开销。嵌入式控制器的功能很强,可以充分利用这一资源。本课题提出的键盘方案是以嵌入式 Linux和 PXA255为软硬件平台, 通过测试,表明其具有良好的稳定性和实时性。 2 矩阵式键盘的结构与工
[单片机]
基于嵌入式 <font color='red'>Linux</font>的键盘驱动设计
安装交叉编译器arm-linux-gcc
(一)交叉编译器简介 在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码,这个编译过程就叫交叉编译.简单地说,就是在一个平台上生成另一个平台上的可执行代码. (二)体系结构与操作系统 (1)常见的体系结构有ARM结构、x86结构等. (2)常见的操作系统有linux,windows等. (3)同一个体系结构可以运行不同操作系统,如x86上可以运行Linux、Windows等,在ARM上可以运行Linux、WinCE. (4)同一个操作系统可以在不同的体系结构上运行,比如Linux可以运行在x86上,也可以运行在ARM上. (5)同样的程序不可能运行在多个平台上,比如Windows下应用程序不能在Linux下运行.
[单片机]
Atmel 在AT91SAM3中使用ARM32位RISC
爱特梅尔公司 (Atmel® Corporation) 宣布在其领先市场的 AT91SAM ARM 微处器下一代产品中使用 ARM® Cortex™-M3 32 位 RISC 处理器。这一举措重申了爱特梅尔对 ARM 架构的承诺,补充了 ARM7TDMI® 、 ARM926EJ-S™ 及 ARM1176JZ-S™ 处理器的授权许可。 爱特梅尔计划推出的 AT91SAM3 闪存 MCU 系列,将结合 Cortex-M3 处理器与 AT91SAM 系列微控制器领先市场的优秀系统实现特性,这包括了多层内部总线,这是专为系统外设与分布式外设数据控制器
[新品]
ARM9在高精度生化分析仪温度控制系统中的应用
1 引言 ARM9越来越广泛的应用于各种生物电子仪器中,全自动生化分析仪是一个典型的应用。生化分析仪检测分析过程中温度对检测结果具有很大的影响,被检样品和试剂只有在指定的温度下检测才能保证生化检验结果的可靠性。生化分析仪的温控系统往往具有非线性、时滞性等特点,应用常规PID控制达不到理想的效果。本系统以ARM9处理器作为控制系统核心,实现模糊自整定PID控制算法。经测试,该系统精度高,稳定性好,响应快,反应盘控温于现行的标准检测温度37℃,控温精度为土0.1℃,显示精度为±0.01℃,完全满足临床使用要求。 2 系统总体设计及主要硬件实现 2.1 系统总体设计 系统结构如图1所示。系统主要由测温器件、A
[单片机]
SMARC2.0—评估NXP i.MX 8 QuadMax处理器的最佳利器
提供标准和定制化嵌入式计算机主板与模块的领导厂商-德国康佳特科技, 推出基于全新恩智浦i.MX 8 QuadMax 处理器家族的SMARC2.0 快速启用套件。该套件提供开发人员快速评估恩智浦i.MX 8系列处理器所需的全部物件,特别是人工智能视觉应用开发人员更可受益于内建的MIPI接口和可选的预配置软件支持。 德国康佳特产品总监Martin Danzer 解释到: “ 高度集成的工业物联网(IIoT),工业和嵌入式视觉应用的开发商可以使用基于恩智浦i.MX 8的 SMARC2.0模块快速轻松的转移到下一代技术水平,因为他们可以立即将信用卡大小的现成模块集成到既有的应用中。该入门套件是我们完整的i.MX 8产品与服务生
[嵌入式]
SMARC2.0—评估NXP <font color='red'>i</font>.MX 8 QuadMax处理器的最佳利器
布局基础设施业务,ARM开辟新战线
由于过去10年晶体管的微缩,数据中心服务器中和台式机中、笔记本电脑中的处理器架构之间的差距越来越大。三种截然不同的工作负载的需求意味着你不能只修剪服务器处理器以制作适合客户端的东西,也不能使用台式机或笔记本电脑芯片,加上一些额外的存储器和I/O把它变成服务器引擎。 这就是为什么Arm控股(Arm Holdings,软银的子公司,控制着主导智能手机的Arm处理器架构,并正试图将触角伸进数据中心)将其处理器产品线一分为二的主要原因。至少对我们来说,Arm似乎还想让服务器芯片合作伙伴更容易地组装出复杂而有竞争力的设计,而无需在独特的IP上投入数千万美元。 为什么Calxeda会破产?为什么Broadcom离开,高通或许紧随其后?
[半导体设计/制造]
布局基础设施业务,<font color='red'>ARM</font>开辟新战线
arm学习笔记四(arm伪指令)
arm伪指令 符号定义伪指令 定义arm汇编程序中的变量、对变量赋值以及定义寄存器的别名 定义全局变量 gbla(全局数字变量,初始化值为0) GBLA 全局变量名 示例代码如下: GBLA Test1;定义全局数字变量test1 Test1 SETA 0x123;将该变量赋值为0x123 gbll(全局逻辑变量,初始化为F) GBLL 全局变量名 示例代码如下: GBLL Test2;定义全局逻辑变量test2 Test2 SETL {TRUE};将变量赋值为真 bgls(全局字符串变量,初始化为空) GBLS 全局变量名 示例代码如下: GBLS Test3;定义全局字符串变量test3 Test3 SETS
[单片机]
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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