技术标签: Linux学习 linux 物联网 嵌入式
一、硬件启动方式选择

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

BOOT_MODE0和BOOT_MODE1这两个是两个IO来控制的。选择从USB启动还是内部BOOT启动。如果要烧写系统到开发板中可以选择从USB下载,下载到SD卡、EMMC、NAND等外置存储设备中。烧写完成设置从内部BOOT启动,然后从相应的外置存储中启动。
BOOT_MODE[1:0] BOOT Type
00 Boot From Fuses(从FUSE启动)
01 Serial Downloader(串行下载器)
10 Internal Boot(内部启动)
11 Reserved(保留)

①、串行下载器
  当 BOOT_MODE1 为 0,BOOT_MODE0 为 1 的时候此模式使能,串行下载的意思就是可以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1 这个 USB口向开发板上的 SD/EMMC、NAND 等存储设备下载代码。
②、内部BOOT启动
  当 BOOT_MODE1 为 1,BOOT_MODE0 为 0 的时候此模式使能,在此模式下,芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设 备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR。
2、启动设备选择

当 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。
  上面高亮部分为常用设备。
  如何选择启动设备?
  通过BOOT_CFG选择,有BOOT_CFG1\2\4,每个8位。BOOT_CFG是由LCD_DATA0~23来设置的。在ALPHA开发板上,大部分都默认通过47k电阻下拉接地。BOOT_CFG4的8根线全部接地。
  BOOT_CFG2的8根线全部接地,除了BOOT_CFG2[3] (LCD DATA11),此位用来选择SD卡启动接口。为 0 时从 SDHC1 上的 SD/EMMC 启动,为 1 时从SDHC2 上的 SD/EMMC 启动。

  BOOT_CFG1的0、1、2都是顶死的,3、4、5、6、7是可以设置的。



  I.MX6U-ALPHA 开发板从 SD 卡、EMMC、NAND 启动的时候拨码开关各个位设置方式如表:
1 2 3 4 5 6 7 8 启动设备
0 1 X X X X X X 串行下载,可以通过 USB 烧写镜像文件
1 0 0 0 0 0 1 0 SD 卡启动
1 0 1 0 0 1 1 0 EMMC启动
1 0 0 0 1 0 0 1 NAND FLASH 启动
二、启动头文件

学习 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。
  可以看出最终烧写到 I.MX6U 中的程序其组成为:IVT+Boot data+DCD+.bin。load.imx 在用户代码前面又有 3KByte 的 IVT+Boot Data+DCD 数据,下面会讲为什么是 3KByte,因此 load.imx 在 DDR 中的起始地址就是 0X87800000-3072=0X877FF400。
1、Boot Rom做的事情

设置内核时钟为396MHz。使能MMU(Memory Management Unit内存管理单元)和caches,使能L1 data cache、L2 cache 和MMU,目的是加速启动。
2、IVT和Boot Data数据

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

  以 SD/EMMC 为例,IVT 偏移为 1Kbyte,IVT+Boot data+DCD 的总大小为 4KByte(初始负荷区域大小Initial Load Region Size)- 1KByte=3KByte。假如 SD/EMMC 每个扇区为 512 字节,那么 load.imx 应该从第三个扇区开始烧写,前两个扇区要留出来。load.imx 从第 3KByte 开始才是真正的.bin 文件。

Bin文件前面要添加头文件。可以得到,我们烧写到SD卡中的 load.imx 文件在SD卡中的起始地址是 0x400,也就是1024。否则会损坏SD卡。
  头部文件大小3KB,加上偏移的1KB,一共有4KB,因此在SD卡中Bin文件起始地址为4096。
  IVT(Image vector table图像矢量表)大小为 32B/4=8条
3、DCD数据

Device configuration data,DCD(设备配置信息)配置6ULL内部寄存器。
首先,将CCGR0-CCGR6全部写为0xFFFFFFFF,表示打开所有外设时钟,然后就是DDR初始化参数。设置DDR控制器,也就是初始化DDR。
4、其他的数据

检查数据命令、NOP命令、解锁命令。这些其实也是属于DCD。

【本文属于转载】,版权声明,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接。
原文链接:https://blog.csdn.net/qq_45649126/article/details/107972777

## I.MX6ULL学习笔记一I.MX启动方式相关推荐

  1. i.MX6ULL学习笔记--字符设备驱动程序

    i.MX6ULL学习笔记--字符设备驱动程序 简介 1.驱动的配置过程 1.1设备号 1.2哈希表-chrdevs 1.3哈希表-obj_map->probes 1.4文件操作接口 1.5简单了 ...

  2. TS学习笔记04 JS创建对象的方式

    TS学习笔记04 JS创建对象的方式 ​ 首先我们回顾下JS中创建对象的方式 ​ 比如说我按照下面的创建了两个对象分别为stu1和stu2,比如说我现在想给这两个对象都添加一个新的方法,但是这两个对象 ...

  3. 学习笔记_使用二进制的方式修改图片

    学习笔记_使用二进制的方式修改图片 1.学习目标 2.学习工具 3.开始操作 3.1 了解图片是怎样用二进制表示的 3.2 开始操作 4.参考文档 1.学习目标 掌握使用二进制的方式修改图片 了解BM ...

  4. Flutter学习笔记之-圆形头像实现方式

    Flutter学习笔记之-圆形头像实现方式 开发中如何实现类似圆形图片 Container+BoxDecoration来实现圆角图像 class DemoWidget extends Stateles ...

  5. Windows phone 8 学习笔记(4) 应用的启动

    Windows phone 8 的应用除了可以直接从开始菜单以及应用列表中打开外,还可以通过其他的方式打开.照片中心.音乐+视频中心提供扩展支持应用从此启动.另外,我们还可以通过文件关联.URI关联的 ...

  6. Hyperledger Fabric学习笔记(三)- 启动网络并测试一个Fabcar的demo

    参考文章:https://blog.csdn.net/jambeau/article/details/107551208 前言:文章底下的$GOPATH即为~/go,也就是当前用户下的go目录,比如我 ...

  7. [学习笔记] ES6的数组遍历方式 for, forEach,for...in, for...of

    javascript ES6有如果要遍历一个数组,我们有多个方式可以进行. 下面我们来分析一下各自的利弊. for循环 const langs = ['java', 'php', 'c++', 'py ...

  8. Android学习笔记36:使用SQLite方式存储数据

    在Android中一共提供了5种数据存储方式,分别为: (1)Files:通过FileInputStream和FileOutputStream对文件进行操作.具体使用方法可以参阅博文<Andro ...

  9. I.MX启动方式和头部

    1. 启动方式 2. 头部信息 编译好的bin文件烧写到SD卡中,需要加一些头部文件,才可以执行. Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息 ...

最新文章

  1. 皮克斯首款VR体验《寻梦环游记》登陆 Oculus Rift
  2. Spring Cloud实战小贴士:Zuul的饥饿加载(eager-load)使用
  3. Table——高淇JAVA300讲笔记之Guava
  4. java怎么修改会员信息_JavaWeb用户信息管理系统-修改用户操作的实现
  5. 基于Boost::beast模块的同步WebSocket客户端
  6. SQLServer约束介绍
  7. 【LeetCode笔记】剑指 Offer 56 . 数组中数字出现的次数(Java、位运算)
  8. 复旦提出GaitSet算法,步态识别的重大突破!
  9. 事业单位的生活是怎么样的?
  10. mysql sha1prng_为啥POST过来的
  11. UE4粒子渲染不出来解决方法
  12. 串口传输文件练习与点阵汉字的字模读取与显示
  13. 导弹跟踪问题 计算机模拟,计算机模拟版本3[整理版.ppt
  14. Azkaban的安装
  15. 金笛邮件服务器解析中小企业对自建邮件系统的误区
  16. MAC常用进入文件夹剪贴粘贴打开文件夹快捷键
  17. 打怪小游戏 勇者打恶龙1.1
  18. Centos 7 环境下将修改后的MAC地址永久保存
  19. 网络虚拟化技术与NFV
  20. 肾功能及早期肾损伤的检查题库【1】

热门文章

  1. 中科大日常交流英语期末考试话题汇总
  2. 大数据舆情分析软件实时监控,TOOM大数据处理与舆情监控简介
  3. 分享 70 个你可能会用到的正则表达式
  4. word中图形或文本框的组合问题
  5. bugly的全量更新与热更新
  6. AllCMS黔科聚信—企业信息化一站式解决方案
  7. H3C交换机配置堆叠
  8. 英语四级单选测试软件,英语四级单选选择
  9. 实验05:算法设计策略的比较与选择
  10. 作为移动支付行业引领者,爱贝面临着哪些挑战?