历史上的今天
返回首页

历史上的今天

今天是:2024年10月29日(星期二)

正在发生

2021年10月29日 | Linux之ARM(IMX6U)裸机之I.MX6ULL启动方式详解

2021-10-29 来源:eefocus

1.启动方式选择

BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就不能再修改了,所以我们不使用。我们使用的是通过修改 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 模式配置如表所示:

image.png?imageView2/2/w/550

①.串行下载

当 BOOT_MODE1 为 0, BOOT_MODE0 为 1 的时候此模式使能,串行下载的意思就是可以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1 这个 USB口向开发板上的 SD/EMMC、 NAND 等存储设备下载代码。我们需要将 BOOT_MODE1 拨到“OFF”,将 BOOT_MODE0 拨到“ON”。这个下载是需要用到 NXP 提供的一个软件,一般用来最终量产的时候将代码烧写到外置存储设备中的


②.内部BOOT模式

当 BOOT_MODE1 为 1, BOOT_MODE0 为 0 的时候此模式使能,在此模式下,芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设备(就是存放代码的设备、比如 SD/EMMC、 NAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR。


2.BOOT ROM得初始化内容

当我们设置 BOOT 模式为“内部 BOOT 模式”以后, I.MX6U 内部的 boot ROM 代码就会执行,这个 boot ROM 代码都会做什么处理呢?首先肯定是初始化时钟, boot ROM 设置的系统时钟如图

BT_FREQ 模式为 0,可以看到, boot ROM 会将 I.MX6U 的内核时钟设置为396MHz, 也就是主频为 396Mhz。 System PLL=528Mhz, USB PLL=480MHz, AHB=132MHz,IPG=66MHz。


内部 boot ROM 为了加快执行速度会打开 MMU 和 Cache,下载镜像的时候 L1 ICache 会打开,验证镜像的时候 L1 DCache、 L2 Cache 和 MMU 都会打开。一旦镜像验证完成, boot ROM就会关闭 L1 DCache、 L2 Cache 和 MMU。


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


3.选择启动设备

当 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。

这些启动设备如何选择呢? 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]这 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 含义在原理图的左侧已经贴出来了,如图

在这里插入图片描述

打开 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 IO 含义, I.MX6U-ALPHA 开发板从 SD 卡、 EMMC、 NAND 启动的时候拨码开关各个位设置方式如表

image.png?imageView2/2/w/550


推荐阅读

史海拾趣

问答坊 | AI 解惑

基于单片机的医院呼叫系统==毕业设计

刚刚接到毕业设计(医院呼叫系统)课题,现在是一头雾水,不知道出那下手.... 希望有经验的大虾给小弟指点指点....提点建议也行....小弟不胜感激....... 要求:1、主机显示时间、日期、温度、呼叫床号,并用语音报号功能。      &nb ...…

查看全部问答>

FLASH代换升级手册(适用MPN和U盘) (转载)

本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 转自:数码之家 200birds原创 看到一个不错的帖子,与大家分享下: FLASH代换升级在MPN维修和U盘DIY中是经常要用到 的,比如维修MP4的时候怀疑固件问题,想刷FW,但是手上没有确定正确的固件 ...…

查看全部问答>

如何编程实现wince桌面背景更换

高手们,问下一个问题 如何用编程实现wince桌面背景的更换 比如,更换为我指定位置上的那张图片。 以下是我在evc跑的代码 BOOL T=FALSE;         TCHAR bmpfile[]=L\"sdmmc\\\\wince.bmp\";         ...…

查看全部问答>

DSP tms320vc33定时器定时时间?

EXTCLK接11.0592M晶振 XIN接地 CLKMD0和CLKMD1均接高电平。 Timer0.Period = 0x1d4c0; Timer0.Counter = 0x1d4c0;    Timer0.Control = 0x3f2; Timer0多少时间产生了一个中断? Timer0中断中Timer0->Control ^= 0x4 Timer0->Contro ...…

查看全部问答>

ARM 600Mhz + DSP 550Mhz 至强RK2808介绍,强烈推荐!

瑞芯推出RK2808芯片方案 Android下720p播放国产最强   国内芯片方案厂商福州瑞芯微刚刚推出了RK2808芯片方案,这是一款可以用于手机、MID、电子书等设备的芯片。这款芯片率先开始支持Android系统,采用65纳米制程构建,其最大的卖点是支持Androi ...…

查看全部问答>

关于芯片加密

大家好,我做了个小系统,用AT28C64B 做程序存储器,请问如何给芯片加密,以保护我的程序不被窃取呢?有的编程器可以加密,但是既然可以加密,就应该可以解密,不知哪位高手能给个办法,让我的程序写进去之后就读不出来了,而且还能继续使用,拜托 ...…

查看全部问答>

模态对话框的创建和关闭方法

Wince下,我在Dialog1中创建了一个模态对话框Dialog2。 CDialogTime m_DiaTime; m_DiaTime.DoModal(); 然后在Dialog2中分别使用下面函数,关闭。 用 (1)OnOK(); (2)DestroyWindow(); (3)CDialog::EndDialog(0); 这三个函数都不行。 win ...…

查看全部问答>

S3c2440开发板的底板和核心板原理图

为大家提供方便,需要的可以下载…

查看全部问答>

请教香一主:用了HSI后,我的10B开发板

之前一直用的比较好,没什么异常,自从采用内部HSI后,先是出现USART1工作不正常,然后出现J-LINK没法写入程序,并报如错误:“Wrong AHB ID (15:3).Expected 0x04770001 (Mask 0x0FFFFF0F), Fund 0xFFFFFFFF”。现在J-LINK没办法烧入了这块板 ...…

查看全部问答>