日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

mx51 uboot启动感悟

發(fā)布時(shí)間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mx51 uboot启动感悟 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://blog.csdn.net/evilcode/article/details/6079767

arm內(nèi)部有rom,該rom有代碼,上面駐留著系統(tǒng)真正啟動(dòng)的代碼,和uboot沒有關(guān)系。

通過該段代碼根據(jù)不同的啟動(dòng)模式進(jìn)行不同的啟動(dòng)方式:
如果是nand會(huì)自動(dòng)讀取uboot前4k的代碼到片內(nèi)sdram執(zhí)行,該代碼要完成cpu的初始化和ram初始化(初始化ram為外圍的)等。
——————————————————————————
i.mx51沒有nand但有SD卡,但都是作為存儲(chǔ)設(shè)備!
——————————————————————————
一直困惑自己的是,一直以為uboot的前4k是拷貝到外圍ram執(zhí)行的,但片外的ram需要前4k去初始化這樣造成了死鎖

拿Freescale的imx51為例 片內(nèi)ROM 36k 片內(nèi)RAM128k

iMX51啟動(dòng)機(jī)制如下(在實(shí)際開發(fā)中不會(huì)涉及到該內(nèi)容寫下這些只是讓你更好的了解系統(tǒng)的啟動(dòng)過程,系統(tǒng)的啟動(dòng)過程不單單只有uboot這一塊在uboot之前還做了很多的工作):

imx51在系統(tǒng)重啟時(shí),會(huì)采樣啟動(dòng)模式的GPIO管腳(BOOT_MODE[1:0]),采樣所得到的值存儲(chǔ)在SBMR寄存器中(System Reset Controller Boot Mode Register)。imx51支持的啟動(dòng)模式包括:內(nèi)部啟動(dòng)模式(通過啟動(dòng)模式的GPIO管腳判斷啟動(dòng)外設(shè))、測試模式、下載模式(通過USB/UART下載代碼)、內(nèi)部啟動(dòng)模式(通過啟動(dòng)模式fuse位判斷啟動(dòng)外設(shè))。

BOOT_MODE[1:0]啟動(dòng)模式類型啟動(dòng)模式細(xì)節(jié)
00內(nèi)部啟動(dòng)模式

?

(通過啟動(dòng)模式GPIO管腳判斷啟動(dòng)外設(shè))

iMX51執(zhí)行芯片內(nèi)部的啟動(dòng)代碼,可以從以下設(shè)備啟動(dòng)

?

  • Nor Flash(通過WEIM)
  • OneNAND
  • SPI(Serial Flash CS#1)/I2C eeprom
  • NAND Flash, MLC/SLC 0.5K/2k/4kB page ECC
  • SD/MMC(支持大容量)/MoviNAND(通過MMC接口)
01測試模式?
10內(nèi)部啟動(dòng)模式

?

(通過啟動(dòng)模式fuse位判斷啟動(dòng)外設(shè))

與00模式相同,只是不通過啟動(dòng)模式GPIO管腳來判斷啟動(dòng)外設(shè),而是通過iMX51的內(nèi)部fuse位,這些fuse位可以一次性寫入。
00USB/UART下載啟動(dòng)模式下載并執(zhí)行代碼,可以通過以下接口

?

l?????????? USB(全速)

l?????????? UART

imx51在系統(tǒng)重啟時(shí),會(huì)讀取GPIO_BT_SEL的內(nèi)部fuse位:

a)如果GPIO_BT_SEL=1(被燒寫過),在芯片內(nèi)部啟動(dòng)代碼會(huì)通過讀取內(nèi)部fuse位來判斷外設(shè)相關(guān)性。

b)如果GPIO_BT_SEL=0,imx51會(huì)在啟動(dòng)時(shí)采樣外設(shè)相關(guān)特性的GPIO管腳,并存儲(chǔ)在SBMR寄存器中。芯片內(nèi)部啟動(dòng)代碼會(huì)通過讀取該寄存器判斷外設(shè)相關(guān)性。所以,芯片內(nèi)部fuse位與啟動(dòng)相關(guān)GPIO管腳是一一對應(yīng)的。

IMX51內(nèi)部啟動(dòng)代碼

imx51內(nèi)部有一段ROMcode,在內(nèi)部啟動(dòng)模式下,系統(tǒng)啟動(dòng)時(shí),會(huì)執(zhí)行這段代碼,這段代碼會(huì)初始化最基本的硬件,然后判斷系統(tǒng)的外部存儲(chǔ)設(shè)備信息(通過讀取SBMR寄存器)。然后系統(tǒng)會(huì)初始化相應(yīng)的外設(shè),并將外設(shè)中的第一部分代碼拷貝到芯片內(nèi)部RAM中,并跳轉(zhuǎn)到其頭地址并執(zhí)行。

通過這種方式,imx51可以支持從多種外設(shè)啟動(dòng),從而增加啟動(dòng)靈活性,imx51 ROMcode流程如下

我們是按照從SD卡

1) ? 通過采樣SBMR寄存器讀取fuse位或者采用啟動(dòng)模式的管腳 <——Reset

2)通過BOOT_MODE[1:0]來判斷是否是那種啟動(dòng)模式

為了保持穩(wěn)定性BOOT_MODE[1:0]=10,內(nèi)部啟動(dòng)模式(通過啟動(dòng)模式fuse位判斷啟動(dòng)外設(shè)),將外部信息燒寫到芯片內(nèi)部fuse中,這樣系統(tǒng)將從內(nèi)部fuse中讀取相關(guān)外設(shè)信息。

3)因?yàn)槭菑腟D卡啟動(dòng)所以 boot memo ctrol SD/MMC/MoviNAND?

BT_MEM_CTL = 外設(shè)接口擴(kuò)展存儲(chǔ)設(shè)備

‘00’=SD/MMC HDD

4)配置SD/MMC的控制器 eSDHC1 Controller

5)basic config and obtain base addr of boot device

基本的配置和獲取啟動(dòng)硬件的基地址

6)執(zhí)行鏡像

講這些的作用:imx51的Romcode固化在芯片內(nèi)部,不能修改,以上分析Romcode主要可以幫助大家理解以下幾點(diǎn):

1)imx51最初是如何啟動(dòng)的

2)在bootloader開始執(zhí)行前,系統(tǒng)處于何種狀態(tài),由以上分析可見

a)imx51已經(jīng)初始化了硬件部分,包括部分時(shí)鐘,內(nèi)部總線以及外部存儲(chǔ)設(shè)備的控制器,以及外部存儲(chǔ)設(shè)備本身

b)bootloader的頭2k已經(jīng)被拷貝到imx51內(nèi)部的RAM了,除開1k的MBR頭,以及flash文件頭,剩下的部分就是可執(zhí)行代碼。由此可知剩下部分已經(jīng)不能放下整個(gè)bootloader了,所以必須把bootloader分成兩個(gè)部分:XLDR和Eboot本身。

c)可以利用DCD段來初始化某些寄存器,例如AndroidBSP利用它來初始化系統(tǒng)DDR2控制器。


總結(jié)

以上是生活随笔為你收集整理的mx51 uboot启动感悟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。