boot學習筆記(1)

一:地址空間的分配
1:s3c244032位的,所以可以尋址4GB空間,內存(SDRAM)和端口(特殊寄存器),還有ROM都映射到同一個4G空間裏.

2:開發板上一般都用SDRAM做內存flashnornand)來當做ROM。其中nand flash沒有地址線,一次至少要讀一頁(512B).其他兩個有地址線

3:nandflash不用來運行代碼,只用來存儲代碼,NORflashSDRAM可以直接運行代碼)

4:s3c2440總共有8個內存banks
6個內存bank可以當作ROM或者SRAM來使用
留下的2bank除了當作ROM 或者SRAM,還可以用SDRAM(各種內存的讀寫方式不一樣)
7
bank的起始地址是固定的

還有一個靈活的bank的內存地址,並且bank大小也可以改變

5:s3c2440支持兩種啓動模式NAND和非NAND(這裏是nor flash)。
具體採用的方式取決於OM0OM1兩個引腳

OM[1:0所決定的啓動方式

OM[10]=00時,處理器從NAND Flash啓動

OM[10]=01時,處理器從16位寬度的ROM啓動

OM[10]=10時,處理器從32位寬度的ROM啓動。

OM[10]=11時,處理器從Test Mode啓動。

 

 

當從NAND啓動時

cpu會自動從NAND flash中讀取前4KB的數據放置在片內SRAM裏(s3c2440soc),同時把這段片內SRAM映射到nGCS0片選的空間(即0x00000000)。cpu是從0x00000000開始執行,也就是NAND flash裏的前4KB內容。因爲NAND FLASH連地址線都沒有,不能直接把NAND映射到0x00000000,只好使用片內SRAM做一個載體。通過這個載體把nandflash中大代碼複製到RAM(一般是SDRAM)中去執行

當從非NAND flash啓動時

nor flash被映射到0x00000000地址(就是nGCS0,這裏就不需要片內SRAM來輔助了,所以片內SRAM的起始地址還是0x40000000. 然後cpu0x00000000開始執行(也就是在Norfalsh中執行)。

 

 

總結:

Arm的啓動都是從0地址開始,所不同的是地址的映射不一樣。在arm上電的時候,要想讓arm知道以某種方式(地址映射方式)運行,不可能通過你寫的某段程序控制,因爲這時候你的程序還沒啓動,這時候arm會通過引腳的電平來判斷。

1
當引腳OM0OM1有一個是高電平時,這時地址0會映射到外部nGCS0片選的空間,也就是Norflash,程序就會從Norflash中啓動,arm直接取Norflash中的指令運行。

2
OM0OM1都爲低電平,則0地址內部bootbuf(一段4kSRAM)開始。系統上電,arm會自動把NANDflash中的前4K內容考到bootbuf(也就是0地址),然後從0地址運行。

這時NANDFlash中的前4K就是啓動代碼(他的功能就是初始化硬件然後在把NANDFlash中的代碼複製到RAM中,再把相應的指針指向該運行的地方)

   
爲什麼會有這兩種啓動方式,關鍵還是兩種flash的不同特點造成,NOR FLASH容量小,速度快,穩定性好,輸入地址,然後給出讀寫信號即可從數據口得到數據,適合做程序存儲器。NAND FLASH 總容量大,但是讀寫都需要複雜的時序,更適合做數據存儲器。這種不同就造成了NORflash可以直接連接到arm的總線並且可以運行程序,而NANDflash必須搬移到內存(SDRAM)中運行。

  
在實際的開發中,一般可以把bootloader燒入到Norflash,程序運行可以通過串口交互,進行一定的操作,比如下載,調試。這樣就很可以很方便的調試你的一些代碼。Norflash中的Bootloader還可以燒錄內核到Norflash等等功能。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章