首页 > 其他分享 >IMX6ULL启动方式

IMX6ULL启动方式

时间:2024-11-23 20:02:32浏览次数:5  
标签:ROM 方式 启动 代码 Boot IVT IMX6ULL Data DCD

IMX6ULL启动方式

文章目录


IMX6ULL支持多种启动方式,我们可以通过Boot位选择,在调试阶段我们通常选择采用SD卡,这将有助于我们的调试,在汇编实验中,我们通过正点的下载工具,起始实际下载的并不是led.bin文件,而是.imx文件

启动方式选择

引导过程从通电重置(PER)开始,其中硬件重置逻辑迫使Arm核心从片上引导ROM开始执行。

引导ROM代码使用内部寄存器BOOT_Mode[1:0]的状态以及各种eFUSE和/或MPI设置的状态来确定设备的引导流行为。

在这里插入图片描述

The boot ROM supports these boot devices:

  • NOR flash
  • NAND flash
  • OneNAND flash
  • SD/MMC
  • Serial (SPI) NOR flash and EEPROM
  • QuadSPI (QSPI) flash

Boot位配置

在这里插入图片描述

串行下载

当 BOOT_MODE1 为 0,BOOT_MODE0 为 1 的时候此模式使能,用户可通过USB或者USART将代码下载到外置设备存储上,这个下载需要使用到NXP提供到的软件

内部Boot模式

这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR。

BOOTROM初始化内容

可以看到,当为其选定为内部BOOT模式后d,首先就会初始化时钟,初始化结果如下所示。

在这里插入图片描述

同时为了加快执行速度。将会执行以下操作

下载镜像的时候 L1 ICache 会打开,验证镜像的时候 L1 DCache、L2 Cache 和 MMU 都会打开。一旦镜像验证完成,boot ROM就会关闭 L1 DCache、L2 Cache 和 MMU。

中断向量偏移会被设置到 boot ROM 的起始位置,当 boot ROM 启动了用户代码以后就可
以重新设置中断向量偏移了。一般是重新设置到我们用户代码的开始地方。

启动设备

启动设备是通过BOOT_CFG1[7:0]、BOOT_CFG2[7:0]和BOOT_CFG4[7:0]这 24 个配置 IO。当启动完成后,BOOT_CFG4[7:0]这24个IO就可以作为LCD的数据线使用。

在这里插入图片描述

通过下图可以分析出,虽然有着这么多IO口需要陪配制,但是实际上相关的IO口就那么几个。

在这里插入图片描述
在这里插入图片描述

镜像烧录

汇编实验中,我们实际下载的是一个叫做load.imx的镜像文件,为什么不是直接烧写Bin文件呢?

因为I.MX6U的启动过程需要一些额外的信息来正确初始化硬件并加载用户代码。

IMX6ULL最终可烧写文件组件

IVT + Boot Data + DCD + .bin

Image Vector Table (IVT)

IVT包含了一系列的地址信息,这些地址信息在ROM中按照固定的地址存放着。IVT的主要作用是告诉Boot ROM如何加载和执行用户代码。

Boot Data

Boot Data包含了镜像要拷贝到哪个地址,拷贝的大小是多少等信息。它告诉Boot ROM如何将用户代码加载到内存中。

Device Configuration Data (DCD)

DCD包含了设备配置信息,特别是DDR3的初始化配置。这些配置信息是确保DDR3内存能够正确初始化和工作的关键。

用户代码可执行文件

这是实际的用户代码,通常是一个编译生成的.bin文件。

为什么是3KByte

IVT、Boot Data和DCD的总大小通常是3KByte(3072字节)。这是因为:

  • IVT:通常占用1KByte(1024字节)。
  • Boot Data:通常占用1KByte(1024字节)。
  • DCD:通常占用1KByte(1024字节)。

用户代码的起始地址

用户代码必须从特定的地址开始,例如0X87800000。由于IVT、Boot Data和DCD在用户代码前面有3KByte的数据,因此最终可烧写文件load.imx在DDR中的起始地址是:

0X87800000 - 3072 = 0X877FF400

0。由于IVT、Boot Data和DCD在用户代码前面有3KByte的数据,因此最终可烧写文件load.imx`在DDR中的起始地址是:

0X87800000 - 3072 = 0X877FF400

标签:ROM,方式,启动,代码,Boot,IVT,IMX6ULL,Data,DCD
From: https://blog.csdn.net/weixin_54930908/article/details/143988263

相关文章

  • Java中定时任务实现方式及源码剖析
    概述在企业级应用开发场景中,定时任务占据着至关重要的地位。比如以下这些场景:用户4个小时以内没有进行任何操作,就自动清除用户会话。每天晚上凌晨自动拉取另一个业务系统的某部分数据。每隔15分钟,自动执行一段逻辑,更新某部分数据。类似的场景会频繁出现在我们的日常开发中......
  • 以STM32为例的MCU启动过程
    以STM32为例的MCU启动过程在面试的时候,好多位面试官问过这个问题,即从上电后,到第一行main函数语句的执行,软件部分都在做什么。这次看了微控制器是如何启动的?|STM32为例演示微控制器的启动这个视频后,觉得很好,顺便整理下。0x00000004ResetHandler处理器复位时,从中断向量表0x000......
  • 宝塔linux版apache安装了启动不了
    如果在宝塔Linux面板中安装了Apache但无法启动,可以按照以下步骤进行排查和解决:1.查看Apache错误日志首先,查看Apache的错误日志,以获取详细的错误信息。访问宝塔面板:进入宝塔面板,找到你的网站。点击“设置”->“日志”->“查看错误日志”。查看日志文件:日志文件......
  • 一键AI换脸软件,支持表情控制,唇形同步Facefusion-3.0.0发布!支持N卡和CPU,一键启动包
    嗨,小伙伴们!还记得小编之前介绍的FaceFusion2.6.1吗?今天给大家带来超级exciting的消息——FaceFusion3.0.0闪亮登场啦!......
  • JS中使用new Array()与使用Array.from()方式创建二维数组的性能比较
    比较1,单次创建小额数组:1.通过newArray()方式functiont(){console.time();newArray(100).fill().map(()=>newArray(10));console.timeEnd();} 执行5次耗时:0.078125ms0.050048828125ms0.0380859375ms0.031005859375ms0.093017578125ms2.......
  • 2024最新【秋叶启动器Stable Diffusion V4.9版本更新教程】来了,附下载链接
    做为AI绘画的主流工具之一,StableDiffusion(简称SD)大部分人都不陌生,用的最多的可能就是秋葉大佬的一键启动整合包。它以资源整合、安装方便、界面友好,自动更新、完全免费,深受广大AI绘画爱好者的欢迎前两天秋葉大佬更新了2024最新的4.9版本一键整合包,修复了一些BUG,更新了一......
  • 修改 moviepy 2.0 使之兼容原有的 import 方式
    修改moviepy2.0使之兼容原有的import方式 时隔4年,视频处理领域最有名的python库moviepy终于再一次有了更新,解决了旧版本存在的一大堆问题. 但此次更新有一个重大的不兼容改变是去掉了editor类,所有的VideoClipAudioClip等类的import方式都改为了从moviepy......
  • AndroidStudio清除重置Http Proxy代理的方式
    问题背景在国内做代码开发的都知道,在国际互联网我们存在看不见的墙,导致无法访问一些代码库和资源,所以在使用开发工具拉取第三方库的时候总会遇到无法连接或者连接超时的情况,所以就会使用一些安全的网络代理工具,辅助完成我们的环境配置等工作,例如android程序员在使用andro......
  • 出售短视频平台,多节点实例数据同步触发的方式
    出售短视频平台,多节点实例数据同步触发的方式今天标题的内容,主要讲同步如何触发?内容已经圈定死,因此就不谈数据同步涉及的一致性,只谈如何触发这个动作。多节点实例触发的关键是,一旦触发,各个节点都要通知到位。那如何进行多个节点通知呢?答案就是通过广播。本案例核心流程图 实......
  • 深入浅出:SpringBoot启动流程源码分析(持续更新中......)最新日期:2024年10月29日
    Hello,大家好,我是此林。今天来深入底层讲一讲SpringBoot是如何启动的,也就是我们单击运行SpringBoot启动类,它底层发生了什么?SpringBoot启动类很简单,只有一行代码。我们点进run()方法。我们发现,它底层其实进行了两步操作。第一步是new出一个SpringApplication对象,第二个是......