BOOT ROM 初始化内容、启动设备、镜像烧写
目录
- 1 启动方式
- 1.1 串行下载
- 1.2 内部 BOOT 模式
- 1.3 BOOT ROM 初始化内容
- 2 启动设备
- 3 镜像烧写
- 3.1 IVT 和 Boot Data 数据
- 3.2 DCD 数据
- 4 结束
I.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、NAND Flash、QSPI Flash等启动
1 启动方式
在 I.MX6U 芯片上电以后,根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式,BOOT_MODE[1:0]有两种方式更改:
① 改写 eFUSE(熔丝),只能修改一次
② 修改相应的 GPIO 高低电平(默认为0,引脚BOOT_MODE1 和 BOOT_MODE0 )
共有四种 BOOT 模式,一般情况下只会用到串行下载和内部BOOT模式
1.1 串行下载
通过 USB 或者UART 将代码下载到板子上的外置存储设备中,使用 OTG1这个USB口向开发板上的 SD/EMMC、NAND 等存储设备下载代码,需要用到 NXP 提供的软件(通过串口将boot、内核镜像、设备树、文件系统下载到SD/EMMC、NAND等存储设备上)
1.2 内部 BOOT 模式
芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),初始化参数在烧录的bin 文件前面添加的数据头,然后从 boot 设备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR
1.3 BOOT ROM 初始化内容
① 初始化时钟,内核时钟(主频): 396Mhz
② 使能mmu和cache
内部 boot ROM 为了加快执行速度会打开 MMU 和 Cache,下载镜像的时候 L1 ICache 会打开,验证镜像的时候 L1 DCache、L2 Cache 和 MMU 都会打开。一旦镜像验证完成,boot ROM就会关闭 L1 DCache、L2 Cache 和 MMU
③ 从SD/EMMC、NAND将代码复制到指定的RAM中
④ 重置中断向量表
中断向量偏移会被设置到 boot ROM 的起始位置,当 boot ROM 启动了用户代码以后就可以重新设置中断向量偏移了。一般是重新设置到我们用户代码的开始地方
2 启动设备
- 接到 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
两种方式更改:
① 改写 eFUSE(熔丝),只能修改一次
② 通过配置24个 IO 来实现选择:
BOOT_CFG1[7:0]、BOOT_CFG2[7:0]、BOOT_CFG4[7:0]
通过上图可以知道,24个配置 IO分别对应的是LCD 的 24 根数据线 LCD_DATA0~LCDDATA23,当启动完成以后这 24 个 IO 就可以作为 LCD 的数据线使用;这 24 根线和 BOOT_MODE1、BOOT_MODE0 共同组成了 I.MX6U的启动选择引脚
大部分的 IO 都是接地,BOOT_CFG4[7:0]这 8 个 IO 都 10K 电阻下拉接地,可以先不关注 BOOT_CFG4[7:0]
在拨码开关中,除 了 BOOT_MODE1 和 BOOT_MODE0 ,还有LCD_DATA3~ LCDDATA7、LCD_DATA11 这 6 个 IO,其中LCD_DATA11 就是 BOOT_CFG2[3],LCD_DATA3~ LCD_DATA7 就是 BOOT_CFG1[3]~ BOOT_CFG1[7]
总结如下:8个拨码开关中对应的设备选择
3 镜像烧写
.bin 文件不能直接在 I.MX6U 运行,需要在.bin 文件前面添加一些头信息构成满足 I.MX6U 需求的最终可烧写文件,构成如下:
- Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息在 ROM中按照固定的地址存放着
- Boot data,启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等
- Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置
- 用户代码可执行文件,比如 led.bin
1、 .bin 通过imxdownload生成 .imx(.imx = IVT + Boot data + DCD + .bin)
2、内部 Boot ROM 将 .imx 拷贝到 DDR ,用户代码从链接地址地址开始,比如 0X87800000 ,.imx 在 DDR 中的起始地址为:(链接地址 - 3KB )比如0X87800000-3072=0X877FF400
3.1 IVT 和 Boot Data 数据
IVT 包含了镜像程序的入口点、指向 DCD 的指针和一些用作其它用途的指针,不同的启动设备内部 Boot ROM 要求 IVT的存放位置不同(IVT在最前面,相当于要求 load.imx 在烧写的时候应该烧写到存储设备的指定位置去)
以 SD/EMMC 为例,IVT 偏移为 1Kbyte,IVT + Boot data + DCD 的总大小为 4KByte - 1KByte = 3KByte
① IVT 数据格式
header(头)格式如下:
Tag 为一个字节长度,固定为 0XD1,Length 是两个字节,保存着 IVT 长度,为大端格式,也就是高字节保存在低内存中。最后的 Version 是一个字节,为 0X40 或者0X41
② Boot Data 的数据格式
3.2 DCD 数据
DCD 就是 I.MX6U 寄存器地址和对应的配置信息集合,Boot ROM 会使用这些寄存器地址和配置集合来初始化相应的寄存器,比如开启某些外设的时钟、初始化 DDR 等等
DCD 区域不能超过 1768Byte,区域结构如下:
其header 和 IVT 的 header 类似,结构如图
其中 Tag 是单字节,固定为 0XD2,Length 为两个字节,表示 DCD 区域的大小,包含 header,同样是大端模式,Version 是单字节,固定为 0X40 或者 0X41
CMD 就是要初始化的寄存器地址和相应的寄存器值,CMD 命令格式如下:
Tag 为一个字节,固定为 0XCC。Length 是两个字节,包含写如的命令数据的长度,包含 header,同样是大端模式。Parameter 为一个字节,这个字节的每个位含义如图
bytes 表示是目标位置宽度,单位为 byte,可以选择 1、2、和 4 字节。flags是命令控制标志位
Address 和 Vlalue/Mask 就是要初始化的寄存器地址和相应的寄存器值,注意采用的是大端模式
复位以后,I.MX6U 片内的所有寄存器都会复位为默认值,但是这些默认值往往不是我们想要的值,而且有些外设我们必须在使用之前初始化它。使用DCD(Device Config Data)即可解决此问题
总结:
DCD 里面的初始化配置主要包括三方面
①、设置 CCGR0~CCGR6 这 7 个外设时钟使能寄存器,默认打开所有的外设时钟
②、配置 DDR3 所用的所有 IO
③、配置 MMDC 控制器,初始化 DDR3 I.MX6U MMDC 控制器简介
4 结束
如有错误,还望指正
BOOT ROM 初始化内容、启动设备、镜像烧写相关推荐
- Android 8.1 【FriendlyARM】编译环境搭建与镜像烧写
NanoPC-T4 不仅是世界上最小的全功能接口 RK3399 一体化主板, 而且是一款完全开源的高性能计算平台.它的尺寸只有 100x64mm,标配4GB LPDDR3 内存和 16GB 闪存, 板 ...
- 迅为I.MX6ULL开发板镜像烧写
.1 l mfgtool 烧写镜像 烧写镜像 开发板出厂前默认已经烧写了镜像,如果用户需要重新烧写镜像,可以参考本章. NXP 官方提供了 Windows 的上位机烧写工具 mfgtool,迅为电子在 ...
- OpenHarmony--Hi3516DV300设备版本烧写
本文单独介绍下Hi3516DV300板子,使用Hitool烧写工具烧写lite版本(L1-小型系统)和inux版本(L2-标准系统),和烧写完板子起不来时,配置启动参数操作参考. 目录 一.烧写工具 ...
- 海思入门笔记二:HiBurn工具实现镜像烧写
这里写自定义目录标题 海思入门笔记:HiBurn工具实现镜像烧写 第一步:裸板可使用串口先烧录boot(速度慢) 第二步:已烧好boot的板子,可使用USB快速烧录 海思入门笔记:HiBurn工具实现 ...
- (十七)NVIDIA Jetson Xavier NX——镜像烧写
转载自:https://zhuanlan.zhihu.com/p/370701948 (十七)NVIDIA Jetson Xavier NX--镜像烧写 梦里寻梦 Future has arrived ...
- Tir-Hi3559AV100镜像烧写
Tir-Hi3559AV100镜像烧写 参考:https://blog.csdn.net/tirvideo/article/details/86573097 天睿提供的烧写镜像Hi3559AV100镜 ...
- esp8266~启动模式和烧写错误
1. error magic! backup boot failed 在使用8266时遇到了如下错误: 找个一早上在群里面发问,原来是烧写工具配置时出错了,flashsize莫名的选错了! 2Mb = ...
- 如何将镜像烧写至iNand(fastboot命令的源码分析)
以下内容源于网络资源的学习与整理,如有侵权请告知删除. 参考博客 u-boot sdfuse命令烧录分析----从SD卡加载内核_white_bugs的博客-CSDN博客 一.将镜像文件烧写至iNan ...
- linux镜像烧写,基于TMS320C6678的Linux镜像烧写演示
1.串口调试软件配置 配置前请使用Micro USB线连接调试串口和电脑终端. 安装调试终端软件 推荐使用SecureCRT调试终端软件,安装包路径:"光盘资料/Tools/VanDyke. ...
最新文章
- db2安装包v10.5_LINUX安装db2V10.5步骤
- LeetCode 2 两数相加
- Python 网络爬虫 001 (科普) 网络爬虫简介
- kafka 在阿里云部署
- mysql优化之--skip-name-resolve
- HTML5与HTML4的区别
- FusionCharts參数中文说明
- iOS_24_画画板(含取色板)
- 实现DDD领域驱动设计: Part 4
- JavaScript ECMA
- 计算机网络主观论述题,《计算机网络》论述题
- 暑期训练日志----2018.8.25
- Confluence 6 配置草稿保存的时间
- IV值区间与预测能力关系
- 11010011计算机二进制,11010011B二进制转换成十进制,八进制,十六进制是多少?
- Office之word如何去除尾注的横线?
- 阿里高级外包你待得住吗?
- 3-10 Pandas的数据规整
- 2021年这些高频面试知识点最后再发一次,跳槽薪资翻倍
- 易经卦象基本类别与其类象运用思路
热门文章
- 谈谈一只菜鸟转行Erlang游戏服务端的经历(希望大佬指导,也希望我的经历能给一些还未毕业的同学或者正在迷茫自己工作内容的同学一些感触)
- 北大计算机图灵班,北大2019“图灵班”计划招60人,在北大什么条件才能进图灵班?...
- html表格翻页简单,利用jQuery实现一个简单的表格上下翻页效果
- 罗切斯特大学读计算机博士,2020年罗切斯特大学博士申请条件
- HMACSHA加密方法
- ZoomKeeper
- NoSQL-Mongodb基本操作和复制集(一)
- 安焦的caoz和幻影的众人 过招
- Excel无法完全显示超过11位数的数字?超简单方法1秒教给你!
- 相亲交友v6.7.7