一、硬件平臺:
正點原子I.MX6U阿爾法開發板
二、啟動方式選擇
I.MX6U 支持多種啟動方式以及啟動設備,比如可以從 SD/EMMC、NAND Flash、QSPI Flash 等啟動。用戶可以根據實際情況,選擇合適的啟動設備。
芯片上電以后,芯片會根據 BOOT_MODE[1:0] 的設置來選擇 BOOT 方式, BOOT_MODE[1:0] 的值有兩者控制方式
eFUSE(熔絲) 控制電平:修改 eFUSE 的方式通過熔斷對應的熔絲修改電平,該方式只能修改一次(不推薦)
修改 BOOT_MODE[1:0] 對應的 GPIO 高低電平來選擇啟動方式
I.MX6U 使用的是控制 IO 電平來控制啟動方式,原理圖上位置如下:
BOOT_MODE[1:0] 與啟動方式關系:
BOOT_MODE[1:0] | BOOT 類型 |
---|---|
00 | 從FUSE 啟動 |
01 | 串行下載 |
10 | 內部BOOT 模式 |
11 | 保留 |
一般我們使用 01 和 10 啟動方式
2.1 串行下載
BOOT_MODE[1:0] 為 01;
串行下載:可以通過 USB 或者 UART 將代碼下載到板子上的外置存儲設備中,比如載串行下載模式下,我們可以使用 OTG1 這個 USB 口向開發板上的 SD/EMMC、NAND 等存儲設備下載代碼
2.2 內部BOOT模式
BOOT_MODE[1:0] 為 10;
此模式下,芯片會執 行內部的 boot ROM 代碼,這段 boot ROM 代碼會進行部分硬件初始化,然后從 boot 設 備(就是存放代碼的設備、比如 SD/EMMC、NAND)中將代碼拷貝出來復制到指定的 RAM 中, 一般是 DDR
2.3 BOOT ROM初始化內容
在內部 BOOT 模式下,芯片執行 BOOT ROM 初始化內容,BOOT ROM 如何執行呢?
首先 BOOT ROM 代碼先初始化時鐘,按下下圖初始化各個時鐘總線的分配器
同時內部 boot ROM 為了加快執行速度會打開 MMU(內存管理單元) 和 Cache(緩存),下載鏡像的時候 L1 ICache(1級指令緩存) 會打 開,驗證鏡像的時候 L1 DCache、L2 Cache 和 MMU 都會打開。一旦鏡像驗證完成,boot ROM 就會關閉 L1 DCache、L2 Cache 和 MMU
之后中斷向量偏移會被設置到 boot ROM 的起始位置,當 boot ROM 啟動了用戶代碼以后就可以重新設置中斷向量偏移了
2.4 內部BOOT啟動設備
當 BOOT_MODE 設置為內部 BOOT 模式以后,可以從以下設備中啟動:
接到 EIM 接口的 CS0 上的 16 位 NOR Flash
接到 EIM 接口的 CS0 上的 NAND Flash
接到 GPMI 接口上的 MLC/SLC NAND Flash,NAND Flash 頁大小支持 2KByte、4KByte 和 8KByte,8 位寬。
Quad SPI Flash。
接到 USDHC 接口上的 SD/MMC/eSD/SDXC/eMMC 等設備。
SPI 接口的 EEPROM
關于啟動設備的選擇,I.MX 6U 同樣提供了 eFUSE 和 GPIO 量種配置方式,常用的是 GPIO 選擇啟動設備
啟動設備是通過 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 全部下拉 接地即可,如下圖,大部分 IO 一直保持下拉接地,只有幾個 IO (BOOT_CFG2[7:0]和 BOOT_CFG1[7:0])需要我們關注:
IO 與啟動設備的關系如下圖:
各個模式間切換時,許多 IO 是基本保持不變的,所以進一步簡化,只需要 LCD_DATA3 ~ LCDDATA7、LCD_DATA11 這 6 個 IO 也被引出來了,其中 LCD_DATA11 就 是 BOOT_CFG2[3],LCD_DATA3~LCD_DATA7 就是 BOOT_CFG1[3]~BOOT_CFG1[7]
對應的設備模式如下:
所以 I.MX6U 開發板從 SD 卡、EMMC、NAND 啟動 的時候撥碼開關各個位設置方式如表
三、鏡像燒寫
學習 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
所以燒寫文件的最終組成為: IVT + Boot data + DCD + usr.bin;其中 IVT + Boot data + DCD 大小為3KB
IVT 包含了鏡像程序的入口點、指向 DCD 的指 針和一些用作其它用途的指針。內部 Boot ROM 要求 IVT 應該放到指定的位置,不同的啟動設備位置不同,而 IVT 在整個 load.imx 的最前面,其實就相當于要求 imx 文件在燒寫的時候應該燒寫到存儲設備的指定位置去。整個位置都是相對于存儲設備的起始地址的偏移
3.1 IVT + Boot data 存放內容:
header:
Tag 為一個字節長度,固定為 0XD1,Length 是兩個字節,保存著 IVT 長度,大端格式(高字節保存在低地址)最后的 Version 是一個字節,為 0X40 或者 0X41
entry:入口地址,也就是鏡像第一行指令所在的位置。 0X87800000 就是我們的鏈接地址
reserved1:保留位
dcd:DCD 地址,鏡像地址為 0X87800000,IVT+Boot Data+DCD 整個大小為 3KByte。因此 .imx 文件的起始地址就是 0X87800000-0XC00=0X877FF400
Boot Data:boot 地址,header 里面已經設置了 IVT 大小是 32 個 字節,其結構如下:
start 整個 load.imx 的起始地址,包括前面 1KByte 的地址偏移。
length 鏡像大小,這里設置 2MByte。鏡像大小不能超過 2MByte。
plugin 插件
self: IVT 復制到 DDR 中以后的首地址
csf: CSF 地址
reserved2:保留,未使用
3.2 DCD數據
復位以后,I.MX6U 片內的所有寄存器都會復位為默認值,但是這些默認值往往不是我們想要的值,有些外設我們必須在使用之前初始化它。為此 I.MX6U 提出了一個 DCD (Device Config Data) 的概念,和 IVT、Boot Data 一樣,DCD 也是添加到 load.imx 里面的,緊跟在 IVT 和 Boot Data 后面,IVT 里面也指定了 DCD 的位置。
DCD 其實就是 I.MX6U 寄存器地址和對應的配置信息集合,Boot ROM 會使用這些寄存器地址和配置集合來初始化相應的寄存器,比如 開啟某些外設的時鐘、初始化 DDR 等等。DCD 區域不能超過 1768Byte !
DCD 里面的初始化配置主要包括三方面:
設置 CCGR0~CCGR6 這 7 個外設時鐘使能寄存器,默認打開所有的外設時鐘
配置 DDR3 所用的所有 IO
配置 MMDC 控制器,初始化 DDR3
上一篇:ARM裸機開發:C語言點亮LED
下一篇:s3c2410 MMU
推薦閱讀最新更新時間:2025-06-04 06:12





設計資源 培訓 開發板 精華推薦
- LTC3615EUF-1 雙路 3A 同步降壓型 DC/DC 轉換器用于 DDR 存儲器終端的典型應用
- AM1G-2424DH30Z ±24V 1 瓦 DC/DC 轉換器的典型應用
- LTC3642EDD 5V、50mA 降壓轉換器的典型應用電路
- 使用 Analog Devices 的 ADF4360-8BCP 的參考設計
- LT1170HVCQ、5A 高效恒流充電器的典型應用
- 四層核心
- NCP1566TEL5V10AGEVB:NCP1566 5V/10A 電信評估板
- EN6360QA 8A PowerSoC 具有集成電感器的高度集成同步 DC-DC 降壓的典型應用
- 24通道 100M邏輯分析儀
- 用于工業應用的 LT3973IDD 5V 降壓轉換器的典型應用