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

参考: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 启动的时候拨码开关各个位设置方式如表
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/265476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 操作mongo

1.  导包: import pymongo 2.  建立连接 client pymongo.MongoClient("127.0.0.1",27017) 3.  获取数据库 db client["test1"] 4.  获取集合 col db["t2"] 5.  插入数据: col.insert_one({ name:aa , age:2 …

java 混码_kotlin java 混合代码 maven 打包实现

kotlin简介kotlin是一种针对java 平台的新编程语言。kotlin简洁、安全、务实,并且专注于与java代码的互操作性。它几乎可以用在现在java使用的任何地方:服务端开发、android应用等等。kotlin 可以很好地和所有现存的java库和框架一起工作,而且…

w3 protocol

http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

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.net/weixin_45309916/article/details/107895975 目录BOOT R…

oracle日期函数

ORACLE日期函数大全!2009-03-12 14:16:10日期函数 Oracle PL/SQL Oracle的日期函数相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统…

(转)git遇到的问题之“Please make sure you have the correct access rights and the repository exists.”...

对于git的提交一直很小心翼翼,感觉一不小心就会踩到莫名的坑。 这不, 某天commit 就遇到了On branch master nothing to commit (working directory clean) 一查意思。你的分支很干净? 干净?excuse me? 然后git push …

php 数组降维,php 数组去重的方法参考(一维数组去重、二维数组去重)

本文介绍下,对php数组去除重复的方法,包括一维数组的去重、二维数组的去重。有需要的朋友参考下。首先,来看一维数组重复项的去除方法。使用array_unique函数,例如:输出结果:Array ( [0] > apple [1] &g…

ARM(IMX6U)裸机C语言版本LED驱动实验(汇编进入处理器SVC模式、SP堆内存、跳转main函数、链接起始地址)

参考:Linux之ARM(IMX6U)裸机C语言LED驱动实验–驱动编写,编译 作者:一只青木呀 发布时间: 2020-08-11 11:20:17 网址:https://blog.csdn.net/weixin_45309916/article/details/107930284 目录0.简介①、汇编…

IBM TS3200 Drive故障处理方案

一、故障定位1.1.故障信息截图摘要1.2.故障定位通过网线连接带库,进入Web管理模式从右边告警得到信息:Drive Broken Code :F3 02 SCD:5 ; Exception F3 52 –Error 经第二张图片定位,确认Drive 2故障需要更换一块Drive 模块此部件支持热插拔&…

常用模块-01

本节主要内容: 1. 模块的简单认识 2. collections模块 3. time时间模块 4. random模块 5. os模块 6. sys模块 一. 模块的简单认识 什么是模块. 模块就是我们把装有特定功能的代码进行归类的结果. 从代码编写的单位 来看我们的程序, 从小到大的顺序: 一条代码 < 语句块 < …

php7性能原理,php7卓越性能背后的原理有哪些?

喷答主 朱涵俊 说php没法常驻内存的人&#xff0c;是没理解答主的意思&#xff0c;看不下去了我要出来解释一波。本来想发评论下面的结果字数限制。。匿了-------------------技术分割线------------------99%的网站都会用到mvc架构&#xff0c;那php的框架是怎么工作的呢&…

链接脚本的编写( 起始地址、text、data、__bss_start、__bss_end、dis反汇编验证)

目录链接脚本的简介以及简单编写编写本试验的链接脚本链接脚本的简介以及简单编写 链接脚本描述了要链接的文件&#xff0c;以及链接顺序、链接首地址。 在博文ARM&#xff08;IMX6U&#xff09;裸机C语言版本LED驱动实验中&#xff0c;我们在编译过程中使用Makefile 来链接代…

iOS.UITableView.SectionIndex

1. 为tableview中section建立索引来加速tableview的滚动。 http://nshipster.com/uilocalizedindexedcollation/ 2. 获取汉字的首字母转载于:https://www.cnblogs.com/cwgk/p/3417850.html

java 无法加载资源,JavaScript:无法加载资源:服务器响应状态为404(未找到)

我处理 JavaScript 应用程序&#xff0c;该应用程序在 https://localhost:63342/WalletClient/index.html_ijtk4ock08pqsve8hb7b2b34ou3h5 的localhost地址中打开 . 看起来像这样&#xff0c;单击余额按钮时&#xff0c;它应执行以下 Ajax GET 请求并尝试打开新页面 balance.ht…

ARM(IMX6U)裸机模仿STM32驱动开发实验(定义外设结构体)

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机模仿STM32驱动开发格式 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-15 12:11:56 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/108019447 目录0.外设结构体抽象思路1.模…

postgresql数据库去重方法

数据库去重有很多方法&#xff0c;下面列出目前理解与使用的方法 第一种 通过group by分组&#xff0c;然后将分组后的数据写入临时表然后再写入另外的表,对于没有出现再group by后面的field可以用函数max,min提取&#xff0c;效率较高--适合情况&#xff1a;这种情况适合重复率…

关于博主

一所二本院校辍学生。屌丝一枚&#xff0c;曾经搬过砖&#xff0c;怕死于砖头之下遂改学网络。误入歧途&#xff0c; 学***半年&#xff0c;网管做到如今。去网吧报老衲名字保证给你打折。转载于:https://blog.51cto.com/anqyunwei/1323497

php自动报价,使用PHP转换所有类型的智能报价

小编典典您需要这样的内容(假设输入UTF-8&#xff0c;而忽略CJK(中文&#xff0c;日文&#xff0c;韩文))&#xff1a;$chr_map array(// Windows codepage 1252"\xC2\x82" > "", // U0082⇒U201A single low-9 quotation mark"\xC2\x84" &g…

ARM(IMX6U)裸机官方SDK包使用

参考&#xff1a;Linux之ARM&#xff08;IMX6U&#xff09;裸机C语言LED驱动实验–驱动编写,编译 作者&#xff1a;一只青木呀 发布时间&#xff1a; 2020-08-11 11:20:17 网址&#xff1a;https://blog.csdn.net/weixin_45309916/article/details/107930284 目录1、I.MX6ULL 官…

h5是什么 www.php.cn,html meta标签的作用是什么?

什么是htmlmeta标签&#xff1a;htmlmeta标签的定义和用法&#xff1a;元素可提供有关页面的元信息(meta-information)&#xff0c;比如针对搜索引擎和更新频度的描述和关键词。标签位于文档的头部&#xff0c;不包含任何内容。标签的属性定义了与文档相关联的名称/值对。htmlm…