参考:Linux之ARM(IMX6U)裸机之I.MX6ULL启动方式详解
作者:一只青木呀
发布时间: 2020-08-09 16:32:07
网址:https://blog.csdn.net/weixin_45309916/article/details/107891591

目录

  • 启动方式的选择
    • ①.串行下载模式
    • ②.内部BOOT模式
  • 启动设备的选择
    • 启动设备的类型
    • 正点开发板启动设备的底板原理图(如何对应核心板)
    • 最终拨码开关选择启动方式

启动方式的选择

BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式:

  • 一种是改写 eFUSE(熔丝),修改 eFUSE 的方式只能修改一次,后面就不能再修改了,所以我们不使用。
  • 另一种是修改相应的 GPIO 高低电平,我们使用的是通过修改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 模式配置如表所示:

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

①.串行下载模式

当 BOOT_MODE1 为 0, BOOT_MODE0 为 1 的时候此模式使能。串行下载的意思就是可以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1 这个 USB口向开发板上的 SD/EMMC、 NAND 等存储设备下载代码。我们需要将 BOOT_MODE1 拨到“OFF”,将 BOOT_MODE0 拨到“ON”。这个下载是需要用到 NXP 提供的一个软件,一般用来最终量产的时候将代码烧写到外置存储设备中的。【自己理解:下面的BOOT方式更加智能,只需选择好启动设备后会执行内部的BOOT ROM代码,帮我们初始化硬件等操作。这里的串行方式要我们自己去写初始化时钟、中断向量表等。后面讲主频和中断向量表的时候就是我们手动去一一实现的】

②.内部BOOT模式

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

启动设备的选择

前提是设置MODE1和MODE0是从内部BOOT启动的,也就是MODE1=1,MODE0=0时才要选择启动设备。

启动设备的类型

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

  • ①、接到 EIM 接口的 CS0 (片选0)上的 16 位 NOR Flash。
  • ②、接到 EIM 接口的 CS0 (片选0)上的 OneNAND Flash。
  • ③、接到 GPMI 接口上的 MLC/SLC NAND Flash, NAND Flash 页大小支持 2KByte、 4KByte和 8KByte, 8 位宽。
  • ④、 Quad SPI Flash
  • ⑤、接到 USDHC 接口上的 SD/MMC/eSD/SDXC/EMMC 等设备。
  • ⑥、 SPI 接口的 EEPROM。

正点开发板启动设备的底板原理图(如何对应核心板)

这些启动设备如何选择呢?通过BOOT_CFG选择

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] (每个8位)这 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 含义在原理图的左侧已经贴出来了,如图:

BOOT_CFG2全部接地,除了BOOT_CFG[3],此位用来选择SD卡启动接口(6ull不止插一个SD卡)。

打开正点原子 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_CFG1[0] ~ BOOT_CFG1[2]都是定死的,BOOT_CFG1[3] ~ BOOT_CFG1[7]是可以设置的。

最终拨码开关选择启动方式

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

ARM(IMX6U)裸机之I.MX6ULL硬件启动方式的选择相关推荐

  1. 计算机启动方式如何选择USB启动,u盘启动选择什么模式

    u盘装系统近年来可谓风生水起,用u盘装系统的人越来越多,但是在启动项选择这一步很多用户被难倒,几个usb选项让人眼花缭乱,例如usb-hdd.usb-zip,这么多个usb选项不知u盘启动选择什么模式 ...

  2. ## I.MX6ULL学习笔记一I.MX启动方式

    技术标签: Linux学习 linux 物联网 嵌入式 一.硬件启动方式选择 I.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC.NAND Flash.QSPI Flash等启动. ...

  3. 万事开头难 - 介绍IMX6ULL启动方式

    不同开发板,启动方式不一样,今天我们来介绍imx6ull开发板的启动方式,这非常重要.若不了解清楚启动方式,后面的所有开发工作便无从谈起. 本文摘自100ask_imx6ull 开发板 配套学习手册- ...

  4. 韦东山 IMX6ULL和正点原子_万事开头难 - 介绍IMX6ULL启动方式

    不同开发板,启动方式不一样,今天我们来介绍imx6ull开发板的启动方式,这非常重要.若不了解清楚启动方式,后面的所有开发工作便无从谈起. 本文摘自100ask_imx6ull 开发板 配套学习手册- ...

  5. ARM(IMX6U)裸机之I.MX6ULL启动头文件详解(内部BOOT ROM、IVT + Boot data + DCD + led.bin)

    参考:Linux之ARM(IMX6U)裸机之I.MX6ULL镜像烧写以及启动头文件的详解 作者:一只青木呀 发布时间: 2020-08-09 17:10:00 网址:https://blog.csdn ...

  6. ARM嵌入式裸机简单使用

    基于正点原子 ALPHA开发板,长文预警,建议收藏用到之后再查看 文章目录 主频与时钟 I.MX6U系统时钟分析 7路PLL 时钟树 外设如何选择时钟 需要初始化的PLL和PFD I.MX6U系统配置 ...

  7. keil4怎么移植其他人的程序_裸机程序如何驱动硬件?

    任何计算机系统都是软件和硬件的结合体,如果只有硬件而没有软件,则硬件是没有灵魂的躯壳:如果只有软件没有硬件,则软件就是一堆无用的字符.在底层硬件的基础上,操作系统覆盖一层驱动,屏蔽底层硬件的操作,通过 ...

  8. 设备树与驱动的关系_裸机程序如何驱动硬件?

    任何计算机系统都是软件和硬件的结合体,如果只有硬件而没有软件,则硬件是没有灵魂的躯壳:如果只有软件没有硬件,则软件就是一堆无用的字符.在底层硬件的基础上,操作系统覆盖一层驱动,屏蔽底层硬件的操作,通过 ...

  9. 从ARM裸机看驱动之按键中断方式控制LED(二)

    硬件环境:Samsung Cortex-A9 Exynos4412 BSP 软件环境:Linux3.14 =============================================== ...

最新文章

  1. Google下重手了!安卓App广告弹窗被打击
  2. 看这玩意复习你还会挂科?《网络原理篇》
  3. 简单理解线性规划的单纯形算法
  4. c++计算数组均值方差_协方差分析的基本思想和应用前提(上)
  5. 新iPhone背部Logo将改为整体居中:方便用户使用反向充电
  6. Oracle在Linux内核参数的修改
  7. 做数据分析的女孩子,职业发展在哪?数据分析枯燥吗?
  8. pythonyield详解_yield详解
  9. mysql数据库p_PbootCMS Sqlite数据库转Mysql数据库教程
  10. edittext 内容长度
  11. 7层计算机网络体系结构,【计算机网络7层体系结构】
  12. 微步在线云API-python批量检测IP脚本
  13. 数据挖掘十大经典算法--CART: 分类与回归树
  14. 生活细语:送给每一个热爱生活的人[ 收集整理,超强!!!]
  15. HttpClient访问https,设置忽略SSL证书验证
  16. sqlserver 之STUFF的运用
  17. java读取注册表_Java通过CMD方式读取注册表任意键值对代码实践
  18. 名悦集团:汽车二次保养什么时候做
  19. 用Python制作有声小说
  20. 汽车通讯协议学习小结

热门文章

  1. MDN文档基础知识搜集
  2. 5-1 unittest框架使用
  3. jQuery插件备忘
  4. Android多种View动画:EasyAndroidAnimations
  5. Android 反射获取内外置存储卡方法
  6. cp命令的编写——浅谈系统调用
  7. BYZ原创天语w806测评--入手2天,总结优点、缺点.
  8. hello my first blog
  9. PHY以太网自动协商原理
  10. 编程 跳台阶_Java版剑指offer编程题第8题--跳台阶