嵌入式啓動過程筆記


內存。

    sram:靜態內存,價格貴容量大,不需要初始化上電就能用。

    dram:動態內存,價格便宜容量小,需要初始化後才能使用。

在單片機額中,由於內存小希望開發儘量簡單,所以內存適合全部用sram,在pc機中,所需內存大,軟件複雜,不在乎dram初始化的開銷,所以應該全部選用dram,在嵌入式系統中,內存需求量大而且沒有norflash等啓動介質。(一般內部有iram就是sram用來啓動,運行用dram,我推測的)。

外存

    norflash:容量小,價格貴,可以和cpu總線直接相連,直接讀取,所以一般作爲啓動介質。

    nandflash:容量大,價格便宜,不能總線式訪問,不可以直接讀取,需要初始化,然後通過時序接口讀寫。

pc機一般用很小的BIOS(norflash)+大容量硬盤(類似於nandflash)+大容量dram

嵌入式系統一般用 外接大容量nandflash +大容量Dram+soc內置sram(由於norflash比較昂貴,一般不用)

單片機:很小的sram+很小的norflash。


S5PV210使用的啓動方式是:外接的大容量Nand + 外接大容量DRAM + SoC內置SRAM

實際上210的啓動還要更好玩一些,210內置了一塊96KB大小的SRAM(叫iRAM),同時還有一塊內置的64KB大小的NorFlash(叫iROM)。210的啓動過程大致是:

第一步:CPU上電後先從內部IROM中讀取預先設置的代碼(BL0),執行。這一段IROM代碼首先做了一些基本的初始化(CPU時鐘、關看門狗···)(這一段IROM代碼是三星出廠前設置的,三星也不知道我們板子上將來接的是什麼樣的DRAM,因此這一段IROM是不能負責初始化外接的DRAM的,因此這一段代碼只能初始化SoC內部的東西);然後這一段代碼會判斷我們選擇的啓動模式(我們通過硬件跳線可以更改板子的啓動模式),然後從相應的外部存儲器去讀取第一部分啓動代碼(BL1,大小爲16KB)到內部SRAM。

第二步:從IRAM去運行剛上一步讀取來的BL1(16KB),然後執行。BL1負責初始化NandFlash,然後將BL2讀取到IRAM(剩餘的80KB)然後運行

第三步:從IRAM運行BL2,BL2初始化DRAM,然後將OS讀取到DRAM中,然後啓動OS,啓動過程結束。


我的困惑:

    我用的時s3c2451的開發板是在nandflash啓動,上面說nandflash不能直接讀取數據,那怎麼啓動?

解決:norflash啓動和nandflash啓動的區別

    norflash:norflash有自己的地址總線和數據總線,cpu可以直接讀取 ,所以norflash可以直接運行程序,也可以直接做uboot,地址被映射到0x0000 0000處。

    nandflash:Nand flash是IO設備,數據、地址、控制線都是共用的,需要軟件區控制讀取時序,所以不能像nor flash、內存一樣隨機訪問,不能EIP(片上運行),因此不能直接作爲boot。

 NANDFlash控制器自動把nandflash存儲器的前4K載到Steppingstone(內部SRAM緩衝器),並把0x00000000S設置爲內部SRAM的起始地址,cpu從內部SRAM0x00000000開始啓動,這個過程不需要程序干涉。

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

程序員要完成的工作是把最核心的代碼放在nandflash的前4K中。4K代碼要完成S3C2451的核心配置以及啓動代碼(U-boot)的剩餘部分拷貝到SDRAM中。

NORflash速度快,數據不易失,可作爲存儲並執行起到代碼和應用程序的存儲器,norflash可像內存一樣讀操作,但擦初和寫操作效率很低,價格很昂貴。SDRAMnandflash的價格比較適中。根據這些特點,一些人產生了這樣一種想法:外部nandflash中執行啓動代碼,SDRAM中執行主程序。NANDFlash控制器自動把nandflash存儲器的前4K載到Steppingstone(內部SRAM緩衝器),並把0x00000000S設置爲內部SRAM的起始地址,cpu從內部SRAM0x00000000開始啓動,這個過程不需要程序干涉。這4K的啓動代碼需要將NANDFlash中的內容複製到SDRAM(dram中的一種)中執行。NANDFlash的前4K空間放啓動代碼,SDRAM速度較快,用來執行主程序的代碼ARM一般從ROMFlash啓動完成初始化,然後將應用程序拷貝到RAM,然後跳到RAM執行。


















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