arm 嵌入式芯片的啟動(dòng)過(guò)程對(duì)于嵌入式菜鳥(niǎo)來(lái)說(shuō)其實(shí)是很復(fù)雜的,很多人都是一知半解,存在很多誤區(qū)。在筆者看來(lái),要想真正了解這一啟動(dòng)過(guò)程必須要首先了解存儲(chǔ)器的區(qū)別與聯(lián)系,參考文章:各種主流半導(dǎo)體存儲(chǔ)器的區(qū)別與聯(lián)系。還需要了解程序是如何編譯鏈接和執(zhí)行的。
本文將以s3c2440為例詳細(xì)講述 arm 芯片的啟動(dòng)過(guò)程。s3c2440支持兩種啟動(dòng)模式:NAND FLASH 啟動(dòng)和非 NAND FLASH 啟動(dòng)(一般是NOR FLASH 啟動(dòng),并且可以配置數(shù)據(jù)寬度),通過(guò) OM1、OM0 兩個(gè)管腳來(lái)控制。
NAND FLASH啟動(dòng)過(guò)程
當(dāng) OM1、OM0 兩個(gè)管腳都為低電平時(shí),CPU 就被配置成了 NAND FLASH 啟動(dòng)。此時(shí) CPU 內(nèi)部的 4KB 的 SRAM 就會(huì)被映射到 nGCS0 的空間(起始地址為 0x00000000),上電時(shí) CPU 會(huì)自動(dòng)將 NAND FLASH 中前 4KB 的數(shù)據(jù)拷貝到該片內(nèi) SRAM。然后 CPU 從內(nèi)部 SRAM 的 0x00000000 地址開(kāi)始執(zhí)行程序,對(duì)系統(tǒng)進(jìn)行相應(yīng)的初始化,為后續(xù) 4Kb 以外的程序執(zhí)行做準(zhǔn)備。
也就是說(shuō),CPU 啟動(dòng)過(guò)程之時(shí)能夠執(zhí)行的程序最多只能占用 4Kb 大小的空間。如果需要執(zhí)行更多程序,則需要在 4Kb 的程序里完成對(duì) DRAM 的初始化(DRAM 在使用前必須初始化),配置好棧空間,并將需要執(zhí)行的程序拷貝到 DRAM 中,然后跳轉(zhuǎn)到 DRAM 中繼續(xù)執(zhí)行。
啟動(dòng)過(guò)程之所以要將 NAND FLASH 中的代碼先拷貝到內(nèi)部 SRAM 再執(zhí)行,是因?yàn)?NAND FLASH 需要通過(guò) NAND FLASH 控制器來(lái)進(jìn)行訪(fǎng)問(wèn),不能通過(guò) CPU 的總線(xiàn)直接訪(fǎng)問(wèn),所以不能夠執(zhí)行程序。
NOR FLASH啟動(dòng)過(guò)程
當(dāng)系統(tǒng)配置為此方式啟動(dòng)時(shí),CPU 內(nèi)部 SRAM 則不再被映射到地址空間中,此時(shí)被映射到 nGCS0(起始地址為 0x00000000)地址空間的應(yīng)該是外部的 NOR FLASH(存放啟動(dòng)代碼的存儲(chǔ)器)。系統(tǒng)上電或者復(fù)位時(shí),CPU 直接從 0x00000000 地址(也就是 NOR FLASH 的起始地址)開(kāi)始執(zhí)行代碼。相比 NAND FLASH 啟動(dòng),NOR FLASH 的啟動(dòng)代碼可以達(dá)到 128Mb 之大(s3c2440)。
之所以可以在 NOR FLASH 上直接執(zhí)行代碼,是因?yàn)?NOR FLASH 具有類(lèi)似 RAM 的訪(fǎng)問(wèn)接口,可以通過(guò) CPU 總線(xiàn)直接進(jìn)行隨機(jī)讀取,但不支持隨機(jī)寫(xiě)操作。因此,這些啟動(dòng)代碼里是不可有 C 語(yǔ)言的,應(yīng)為程序里必然會(huì)有變量(需要寫(xiě)),需要棧空間調(diào)用函數(shù)(同樣需要寫(xiě)),而匯編程序則是可以避免對(duì)內(nèi)存空間的寫(xiě)操作的。
那么是不是說(shuō),如果是 NOR FLASH 啟動(dòng)就不能有 C 程序了呢?當(dāng)然不是的,不要忘了還有 DRAM 的存在。當(dāng) NOR FLASH 啟動(dòng)過(guò)程完成了對(duì) DRAM 的初始化,棧空間的配置之后就可去調(diào)用 C 語(yǔ)言的程序了。
這就是 arm 芯片的啟動(dòng)過(guò)程了,其實(shí)在啟動(dòng)過(guò)程中的最開(kāi)始的那些啟動(dòng)代碼里還有很多地方值得細(xì)細(xì)斟酌的,也會(huì)有很多疑問(wèn),這個(gè)時(shí)候就應(yīng)該去了解程序是怎么編譯鏈接的、又是如何執(zhí)行的。
編輯:hfy
-
ARM
+關(guān)注
關(guān)注
134文章
9207瀏覽量
371061 -
NAND
+關(guān)注
關(guān)注
16文章
1701瀏覽量
136947 -
嵌入式芯片
+關(guān)注
關(guān)注
4文章
231瀏覽量
27813 -
S3C2440
+關(guān)注
關(guān)注
4文章
132瀏覽量
39071
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
STM32的上電啟動(dòng)過(guò)程分享
ADS1146的外接時(shí)鐘,以4.096MHZ為例,這個(gè)時(shí)鐘頻率是用來(lái)決定采樣頻率的么?
用txb0108在ARM9 S3C2440的八個(gè)數(shù)據(jù)口和計(jì)數(shù)器8254-2的八個(gè)數(shù)據(jù)口做了一個(gè)轉(zhuǎn)換,8254-2嚴(yán)重發(fā)燙是為什么?
BQ79600-Q1啟動(dòng)過(guò)程

AIC3254啟動(dòng)過(guò)程是怎樣的?需要功能調(diào)節(jié)延時(shí),請(qǐng)問(wèn)怎么實(shí)現(xiàn)?
負(fù)載電容對(duì)電源轉(zhuǎn)換器啟動(dòng)過(guò)程的影響

PA3113D2在系統(tǒng)啟動(dòng)過(guò)程中會(huì)出現(xiàn)一個(gè)POP聲,請(qǐng)問(wèn)是什么原因造成的?
使用pahomqtt啟動(dòng)過(guò)程中pipe_fops_open時(shí)出現(xiàn)rt_condvar_timedwait ,如何解決?
【技術(shù)分享】CAN總線(xiàn)相關(guān)知識(shí)探討以及Model3C兩路CAN的應(yīng)用

YTM32的HA系列微控制器啟動(dòng)過(guò)程詳解

軟啟動(dòng)柜的作用和功能是什么
什么叫軟啟動(dòng)?如何實(shí)現(xiàn)軟啟動(dòng)
STM32__UCOSII系統(tǒng)啟動(dòng)過(guò)程中空閑任務(wù)和統(tǒng)計(jì)任務(wù)扮演怎樣的角色?
基于S3C2440和專(zhuān)用DSP的嵌入式四軸運(yùn)動(dòng)控制器

評(píng)論