天天看點

s3c2440裸機程式是怎麼運作的?突破!

目錄

S3C2440的啟動方式?

為什麼系統能夠從Norflash直接啟動,而不能直接從Nandflash啟動?

S3C2440從nandflash啟動流程?

Nand啟動裸機程式是怎麼運作的?你要怎麼寫?

先介紹硬碟flash和記憶體sdram

  1. NOR FLASH(2M):ROM存儲器,通常用來儲存BootLoader,引導系統啟動。NOR FLASH:它的特點是支援XIP晶片内執行(eXecute In Place),這樣應用程式可以直接在Flash閃存内運作,不必再把代碼讀到系統RAM中,也就是說可以随機尋址。NOR FLASH的成本較高。

(2)NAND FLASH(256M,型号不一樣,Nandflash大小不一樣):儲存作業系統映像檔案和檔案系統。不支援XIP。可做嵌入式裡的資料存儲媒體。如:手機存儲卡,SD卡等。

   (3)SDRAM(64M):記憶體,執行程式,系統運作。

S3C2440的啟動方式?

  • NOR啟動
  • nandflash啟動

則由OM0和OM1引腳(開發闆具體通過撥碼開關控制)來選擇。

OM1 OM0 說明
1 nor flash啟動

nand flash啟動

 s3c2440的MMU有一種“steppingstone”.技術,它是協助MCU從無法執行程式的NAND FLASH執行啟動程式的一種方法。

為什麼系統能夠從Norflash直接啟動,而不能直接從Nandflash啟動?

 Nandflash和Norflash是不同的:

  • Norflash像記憶體一樣是直接挂在系統總線上的,這樣有足夠多的位址線使得CPU能夠尋址到每一個存儲單元上去,這也意味着CPU能夠直接通過總線通路Norflash上存儲的内容,同時他還支援XIP(即片上執行,不用将代碼搬到記憶體中,直接在Norflash上就能運作)。 
  • nandflash它并不是直接挂載系統總線上,而是通過Nandflash控制器(這個一般內建在CPU内部)來完成讀寫操作的。如果我們把Norflash的那種尋址方式叫直接尋址的話(不是彙編裡的那個直接尋址,這裡指CPU能夠直接通過位址線通路存儲器的存儲單元),那麼這裡的Nandflash就是間接尋址(這裡需要Nandflash控制器來尋址)。是以我們在使用Nandflash之前,一定要初始化Nandflash控制器。

   了解上面的這點後,就不難了解,

S3C2440從nandflash啟動流程?

S3C2440A引導代碼可以在外部NAND Flash存儲器上存儲。為了支援從NAND Flash啟動,S3C2440A配備了一個内置的SRAM緩沖器,叫做“Steppingstone(墊腳石)”。

片内記憶體Steppingstone位址 0x0000000-0x00001000(4096位元組)

Nand位址 0-4k位元組 (前面4096位元組),以及4k以後的部分

在配置NAND啟動模式之後,S3C2440上電會先将NAND中的0x0 - 0x1000共4096位元組的資料拷貝到位于Bank0中的Boot Internal SRAM上

從NAND flash啟動時,cpu硬體會把NAND flash前4k複制到Steppingstone的4k的内部RAM(開始位址0x000000),然後從Steppingstone的0位址執行!

複制大小為多少:4K。

複制到哪裡去:Steppingstone(墊腳石)。

複制完接着做什麼:執行複制到Steppingstone這4k代碼

Nand啟動裸機程式是怎麼運作的?你要怎麼寫?

注意:nandflash、norflash、sdram都是外面的裝置,是獨立于cpu的外部的,cpu所接外設控制器的通路位址通路這些裝置。

  Sdram就是筆記本的記憶體條ram一樣,斷電丢失資料。我們程式就是加載在記憶體條中運作的。所s3cc2440我們接了兩個sdram就是類似于筆記本插了兩根記憶體條。我們從flash這種硬碟的加載程式到記憶體條裡面,程式就可以跑了!!

請注意!NOR Flash 能夠像記憶體一樣讀操作,不能像記憶體寫入和擦除,是以norflsh程式還是得複制到記憶體sdram中運作。

一句話,嵌入式開發闆上片外記憶體指的就是SDRM。

一句話,嵌入式開發闆上片内記憶體指的就是Steppingstone。

我們硬體上會自動從NANDFLAH複制到4K到Steppingstone,并從Steppingstone的0位址執行。

那麼這4k程式你要怎麼寫,

如果你的軟體小于4k,Steppingstone執行的這4k,你要寫成把自己這4k複制到SDRM(記憶體)裡,複制後跳到SDRM中執行。

如果你軟體大于4k就是4096位元組,怎麼辦?

第一個問題:

你放在nandflash的軟體要怎麼放?

即連結腳本怎麼寫,要把nandflash存放的分為兩部分:

  1. 前4k(nandflash0-4095)位址是引導用到。{head.o,init.o,nand.o}
  2. 4k以後(nandflash4096機以後)位元組以後位址存放的資料,才是你真正的程式。(main.o)

第二個問題

前4k你要怎麼寫?

也就是硬體從nandflash複制到Steppingstone的4k要執行什麼?你要把程式寫作初始化nandflash使你能讀nandflash,并把nandflash位址4k以後的資料複制到SDRAM,調到SDRM的mian執行.

片外記憶體SDRAM對于外設控制器的通路位址是0x30000000,執行片外記憶體Steppingstone裡面的複制的4k程式,就是把nandflash的4k以後資料複制到0x30000000,跳到SDRAM的開始位址執行0x30000000執行程式。

下面是一個啟動圖

s3c2440裸機程式是怎麼運作的?突破!