imx6ull(0):烧录、启动

article/2025/7/13 7:49:02

参考内容:

i.MX6ULL Applications Processors for Industrial Products

i.MX6ULLApplicationsProcessorReferenceManual

正点原子 I.MX6U嵌入式Linux驱动开发指南

以及 广大工程师们在互联网上分享的学习笔记(一样东西学的人多的时候所带来的优势)

例如这里我用的野火的板子但是看的原子的资料,在csdn就遇到一个老哥和我一样的情况:Mars.CN-CSDN博客

一、启动模式

这里做个类比,以下情况应该mcu开发者都遇到过,例如用51单片机的时候,有个io口(EA)来选择是从内部的rom启动程序,还是从外部的rom启动,stm32f103也有类似的引脚:boot0和boot1,可用来决定复位后从主闪存(就平时开发烧录进去的位置,地址)或者系统存储区启动。

imx6ull这里也一样,这里对应相关硬件引脚和对应的启动模式可查看官方的这个文档:

官方的文档内容比较多这里不贴上来,里面介绍了各种启动模式(不仅仅是启动模式,例如是emmc的话还包括emmc位宽,emmc模式,使用哪个总线这些,可以当作启动模式+配置,相关的引脚达25个)对应引脚应该是什么电平状态,硬件工程师根据自己的需求设计了自己的启动电路,这里以原子的资料为例子(其他家的也有自己的启动电路):

这是两个boot mode引脚对应的作用,例如想使用烧录模式则需要设置为01,而启动(非efuse)则是对应的10,结合下面这个图,该图则是正点原子的拨码开关对应的功能图:

其中1和2对应的就是上面两个boot mode引脚,这里不纠结太多,对应我买野火的板子则只需要参考野火的拨码开关对应的功能图即可。

二、烧录程序

这里学习为目的,所以个人选择一种最简单最快的方式:从sd卡启动的方式,只需要把我需要的程序烧录到sd卡里然后拨码开关拨到从sd卡启动,也尝试过野火资料里使用官方的烧录工具但是坚持了一天后发现还是原子资料里的烧录方式香,这里为了快速上手都图个快和方便,后面烧录uboot的时候就使用这个方式。

详细工具使用参考原子文档第八章:

三、启动流程

了解对于后面理解uboot的执行流程有一些帮助,毕业前后那会看韦老师的资料用的s3c2440,该主控在设置为nand flash启动的时候,上电时会自动将 nand flash 中前 4KB 的数据拷贝到该片内 sram执行,也就是说它的boot程序第一阶段是从sram里执行,用到了外部dram还需要在这部分代码里去配置,因为4k的空间肯定是不够执行完用户的boot程序,所以还需要将nand flash里的boot程序拷贝到外部dram,然后程序再从dram里启动,这个s3c2440的uboot里代码重定位的过程,但是imx6ull的uboot里重定位是将uboot从DDR起始部分的位置重定位到DDR最靠近结束地址的位置,也就是说imx6ull的uboot启动的时候就是在DDR里启动的,用户程序没有在内部ram里执行过,那就是说是内部rom程序把uboot固件拷贝到DDR里运行,所以这里问题会有问题:

1、程序是烧录在外部存储介质里如emmc、sd卡之类里面,内部rom怎么知道从哪里搬运固件?

2、DDR又是怎么被初始化,又怎么知道拷贝的固件多大?

第一个问题前面启动模式里已经回答了,通过一些引脚的电平确定了使用的外部存储介质,包括它们的初始化设置。

第二个问题则是在uboot的固件头里面,如果编译出来的uboot程序直接烧录进去是起不来的,这里用的原子提供的一个烧录工具则做了这个事情,个人倾向于用这个比野火资料里提供的原厂工具简单多了。

这里参考原子文档第八章:

固件头的内容主要有:

1.IVT:

这个header是IVT这个字段的大小信息,内容主要为:

entry:入口地址,也就是uboot固件里的程序的第一行指令的执行地址,即链接地址,有这个就知道运行的时候从哪个地址开始执行。

dcd:dcd字段的绝对地址。

boot data:boot data字段的绝对地址。

self:uboot固件被拷贝到DDR里后的IVT的地址。

csf:如上图描述secure boot用到。

2.boot data

start:固件头起始地址,也就是编译出来的这个固件加了固件头后的起始地址。

length:固件的大小,这里个人认为就是根据这个大小来决定拷贝多少固件到内存里。

plugin:暂时不知道做什么用的可能是额外执行的固件。

3.DCD:Device configuration data

复位后的寄存器使用默认值,因此这里可以用来设置寄存器的初始值,这里就回答了前面的问题,DDR是如何初始化的。


http://www.hkcw.cn/article/SOOTmiyNry.shtml

相关文章

CloudCompare——使用CSF算法进行点云高程归一化

目录 1.算法原理2.软件操作2.1 CSF算法2.2 生成CSF网格2.3 平滑网格(可选)2.4 计算点云到网格的距离2.5 将计算得到的距离赋值给高程 3.结果展示3.1 原始点云3.2 归一化结果 1.算法原理 点云高程归一化的关键在于获取原始点云地面数据的DEM。可选取CSF算法提取样地点云地面DEM。…

【C语言】C语言经典小游戏:贪吃蛇(下)

文章目录 一、游戏前准备二、游戏开始1、游戏开始函数(GameStart)1)打印欢迎界⾯(WelcomeToGame)2)创建地图(CreateMap)3)初始化蛇⾝(InitSnake)4…

循序渐进 Android Binder(一):IPC 基本概念和 AIDL 跨进程通信的简单实例

Binder 给人的第一印象是”捆绑者“,即将两个需要建立关系的事物用某些工具束缚在一起。在 Android 中,Binder 是一种高效的跨进程通信(IPC)机制,它将可以将运行在不同进程中的组件进行绑定,以实现彼此通信…

ISBN书号查询接口如何用PHP实现调用?

一、什么是ISBN书号查询接口 ISBN数据查询接口是一项图书信息查询服务。它基于全球通用的ISBN编码系统,帮助用户快速获取图书的详细信息,包括书名、作者、出版社、出版时间、价格、封面等关键字段。 该接口广泛应用于电商平台、图书馆管理系统、二手书…

Linux(信号)

目录 一 什么是信号 二 Linux中的信号 1. 查看信号:kill -l 2. 自定义信号的处理方式 2.1 API 2.2 demo 3. 理解信号的发送 4. 信号产生的方式 三 信号保存 四 捕捉信号 1. 先来说说硬件中断: 1. 谁调度操作系统? 2. 理解时间片…

[Windows] Simple Live v1.8.3 开源聚合直播 :支持哔哩哔哩 虎牙 斗鱼 抖音

Simple Live 是一款基于 AllLive 项目 开发的开源聚合直播 APP,支持 哔哩哔哩、虎牙、斗鱼、抖音 等主流平台,具备 无广告、低占用、弹幕互动 等核心优势。其核心功能包括:全平台覆盖:一站式聚合多平台直播资源,无需切…

第十天:Java反射

反射 反射就是:加载类,并编写代码获取类中的成员变量,方法,构造器等。 注意:反射,注解,动态代理就是用来学习框架做框架的,在平时业务开发需求上很少用到。 1 反射学什么&#xf…

整数有约 | 刘乾专访:继续预训练策略与数据优化之道

人工智能多语言处理近年来得到了极大的关注,尤其是在以东南亚为代表的小语种环境中,其特殊的语言多样性和语料库稀缺性使得研究挑战和机遇并存。在现有的自然语言处理模型中,英语和中文因为有海量高质量数据的支持,常被作为核心语…

Google 发布的全新导航库:Jetpack Navigation 3

前言 多年来,Jetpack Navigation 库一直是开发者的重要工具,但随着 Android 用户界面领域的发展,特别是大屏设备的出现和 Jetpack Compose 的兴起,Navigation 的功能也需要与时俱进。 今年的 Google I/O 上重点介绍了 Jetpack Na…

抖音商城抓包 分析

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 抓包展示 总结 1.出于安全考虑,本章未…

uniapp-商城-77-shop(8.2-商品列表,地址信息添加,级联选择器picker)

地址信息,在我们支付订单上有这样一个接口,就是物流方式,一个自提,我们就显示商家地址。一个是外送,就是用户自己填写的地址。 这里先说说用户的地址添加。需要使用到的一些方式方法,主要有关于地址选择器,就是uni-data-picker级联选择。 该文介绍了电商应用中地址信息处…

AlmaLinux OS 10 正式发布:兼容 RHEL 10 带来多项技术革新

AlmaLinux OS 基金会日前宣布推出 AlmaLinux OS 10,该版本代号代号紫色的狮子 (Purple Lion),新版本带来多项新功能和技术更新,旨在为用户提供更强大的企业级 Linux 体验。 该系统使用与 RHEL 10 相同的源代码构建并于 RHEL 10 保持完全兼…

深入理解C# MVVM模式:从理论到实践

在现代软件开发中,良好的架构设计对于构建可维护、可测试和可扩展的应用程序至关重要。Model-View-ViewModel (MVVM) 是一种特别适合XAML-based应用程序(如WPF、Xamarin和UWP)的架构模式。本文将全面探讨MVVM模式的概念、实现细节、最佳实践以…

Git GitHub Gitee

一、Git 是一个免费、开源的分布式版本控制系统。 版本控制:一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。它最重要的就是可以记录文件修改历史记录,从而让用户可以看历史版本,方便版本切换。 1.和集中式版本控制…

数据库管理-第332期 大数据已死,那什么当立?(20250602)

数据库管理332期 2025-06-02 数据库管理-第332期 大数据已死,那什么当立?(20250602)1 概念还是技术2 必然的大数据量3 离线到实时4 未来总结 数据库管理-第332期 大数据已死,那什么当立?(202506…

Java Netty 中处理粘包和半包问题的解决方案 | TCP消息完整性校验(XOR )

文章目录 引言I 处理TCP粘包和半包问题背景粘包问题的产生原因解决方案WebSocket中的粘包和半包问题及解决方案II Java Netty 中处理粘包和半包问题粘包和半包问题可以通过以下几种方式解决:使用分隔符解码器基于长度字段的解码器实现自定义解码器III TCP常见封装处理消息接收…

鸿蒙next系统以后会取代安卓吗?

点击上方关注 “终端研发部” 设为“星标”,和你一起掌握更多数据库知识 官方可没说过取代谁谁,三足鼎立不好吗?三分天下,并立共存。 鸿蒙基于Linux,有人说套壳;ios/macos基于Unix,说它ios开源了…

排便不是一件可以随意“延后”的事:长期便秘->直肠敏感性降低->功能性便秘->大便失禁

文章目录 引言知识扩展: 快乐排便的黄金姿势I 便秘并不是一种单一成因的疾病便秘成因临床治疗II 总是压抑排便,身体会发生的变化III 排便不是一件可以随意“延后”的事引言 排便是一种复杂的反射行为: 由“直肠充盈—产生便意—括约肌协调—排出”的完整生理链条完成的。 …

基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…

Golang——5、函数详解、time包及日期函数

函数详解、time包及日期函数 1、函数1.1、函数定义1.2、函数参数1.3、函数返回值1.4、函数类型与变量1.5、函数作参数和返回值1.6、匿名函数、函数递归和闭包1.7、defer语句1.8、panic和recover 2、time包以及日期函数2.1、time.Now()获取当前时间2.2、Format方法格式化输出日期…