1. uboot 和 bootloader
bootloader:引導程式,在嵌入式linux中,沒有bios,而是直接從flash中執行,來裝載核心。它可以初始化硬體裝置,從而將系統的軟硬體環境帶到乙個合適的狀態,以便為最終呼叫作業系統做好準備。
uboot:是bootloader中的一種
2. norflash、nandflash和emmc
nor:nor位址線和資料線分開,來了位址和控制訊號,資料就出來。所以nor晶元可以像sram一樣連在資料線上。(s3c2440)以nor啟動時,nor flash被對映到0x00000000位址(就是ngcs0,這裡就不需要片內sram來輔助了,所以片內sram的起始位址還是0x40000000). 然後cpu從0x00000000開始執行(也就是在no***lsh中執行)。
nand:位址線和資料線在一起,需要用程式來控制,才能出資料。cpu會自動從nand flash中讀取前4kb的資料放置在片內sram裡(s3c2440是soc),同時把這段片內sram對映到ngcs0片選的空間(即0x00000000)。cpu是從0x00000000開始執行,也就是nand flash裡的前4kb內容。因為nand flash連位址線都沒有,不能直接把nand對映到0x00000000,只好使用片內sram做乙個載體。通過這個載體把nandflash中大**複製到ram(一般是sdram)中去執行。
emmc:emmc 相當於 nandflash+主控ic ,對外的介面協議與sd、tf卡一樣,主要是針對手機或平板電腦等產品的內嵌式儲存器標準規格。emmc的乙個明顯優勢是在封裝中整合了乙個控制器,它提供標準介面並管理快閃儲存器,使得手機廠商就能專注於產品開發的其它部分,並縮短向市場推出產品的時間。這些特點對於希望通過縮小光刻尺寸和降低成本的nand**商來說,同樣的重要。
3. 啟動位址
以2440為例,
總結:
以nor啟動時,cpu從norflash中讀取指令,執行時的棧在片內ram中,而此時norflash被對映到ngcs0片選的bank0空間,其位址被對映為0x0000 0000;即啟動位址為0x0000 0000;而片內4k ram的位址被對映為0x4000 0000,棧底設定為0x4000 0000 + 4096;
以nand啟動時,0位址線會連線到起步石(stepping stone,即片內4k ram)上面,同時cpu會通過內部的硬體將nand flash開始的4k資料複製到起步石裡面,啟動位址還是0x00000000,棧底設定為0x0000 0000 + 4096;
下面這段摘自:為什麼nor啟動要將sp設定為0x40000000+4096 ?
1.先解釋0x40000000如何來?為什麼要+4096?用nor啟動時,片內的儲存控制器的bank0-bank7這8個bank都對應了其他用途,所以設計者在bank7結束的位址0x40000000的地方作為
nor flash的啟動位址,而nand flash啟動的位址則是0x00000000。請看下圖:
因為對於啟動檔案.s來說,4k的空間是足夠存放,**段、bss…和堆疊段了,因為堆疊的sp是從高位址往低位址移動的,所以要將堆疊的起始位址放在堆疊段的高位址;
你也可以不用設定成4096,但要保證堆疊的長度不能和下面其他段重疊,若重疊,就會出bug,保險值是4096,因為sram就是4k設計的。
下面這段摘自:關於s3c2440儲存器位址分配和啟動流程分析
從norflash啟動時,與ngcs0相連的norflash就被對映到ngcs0片選的bank0空間,其位址被對映為0x0000 0000;從nandflash啟動時,s3c2440晶元內部自帶的一塊容量為4k的被稱為「steppingstone」(起步石)的bootram被對映到ngcs0片選的bank0空間,其位址被對映為0x0000 0000。當系統上電或復位時,程式會從0x0位址處開始執行,因此我們編寫的啟動**要確保儲存在0位址處。如果系統的所有程式在編譯鏈結後的大小小於4k,那在系統的啟動**中無需考慮將程式從nandflash搬運到sdram這個問題,因為所有的程式在啟動時即全部由nandflash拷貝至bootsram,程式在bootsram中執行即可;如果系統的所有程式在編譯鏈結後的大小大於4k,那在系統的啟動**中就需要包含一段將系統的全部程式從nandflash搬運到sdram的**,因為系統啟動時只將nandflash的前4k拷貝到了bootsram中,還有部分程式在nandflash中,而程式在nandflash中是無法執行的,需要將所有程式拷貝至sdram並在其中執行,所以系統的啟動**中要包含這段有關程式拷貝的**,並在所有程式拷貝完成後使程式跳轉到sdram中執行。也就是說nandflash啟動時需要考慮到涉及的兩次搬移,第一次搬運是s3c2440硬體機制自動實現的,無需干預,第二次搬運需要程式設計師來實現,搬運程式量大小是系統的所有程式。
arm9作為32位的cpu,理論上可以使用的位址範圍可以達到2的32次方等於4g,除去上述的1g位址空間,還有一部分是cpu內部暫存器的位址,剩下的位址空間沒有使用。那麼,0x4000 0000以後的位址是怎樣對映的呢?
0x4000 0000——0x4000 0fff 從nor flash啟動時片內4kb sram對映在這個位址範圍,而從nand啟動時片內4kb sram對映在0x0000 0000位址,則這個位址範圍是保留的。外接裝置0x4000 0fff——0x4800 0000 保留
0x4800 0000——0x6000 0000 特殊功能暫存器的位址
0x6000 0000——0xffff ffff 未用
起始位址
結束位址
儲存控制器
0x48000000
0x48000030
usb host控制器
0x49000000
0x49000058
中斷控制器
0x4a000000
0x4a00001c
dma0x4b000000
0x4b0000e0
時鐘和電源管理
0x4c000000
0x4c000014
lcd控制器
0x4d000000
0x4d000060
nand flash控制器
0x4e000000
0x4e000014
攝像頭介面
0x4f000000
0x4f0000a0
uart
0x50000000
0x50008028
脈寬調變計時器
0x51000000
0x51000040
usb裝置
0x52000140
0x5200026f
watchdog計時器
0x53000000
0x53000008
iic控制器
0x54000000
0x5400000c
iis控制器
0x55000000
0x55000012
i/o埠
0x56000000
0x560000b0
實時時鐘rtc
0x57000040
0x5700008b
a/d轉換器
0x58000000
0x58000010
spi0x59000000
0x59000034
sd介面
0x5a000000
0x5a000040
ac97音訊編碼介面
0x5b000000
0x5b00001c
具體這些位址是如何對映的,可以參考《對s3c2440特殊功能暫存器位址的深入挖掘》1. 首先將u-boot程式燒寫到norflash以上部分源自:
2. 開發板設定為nor啟動,上電進入uboot
3. 通過uboot接收並燒寫bin檔案到nandflash
4. 設定nand啟動
嵌入式基本概念
前後臺系統 對基於晶元的開發來說,應用程式一般是乙個無線迴圈,平時微處理器在停機狀態,所有事都靠中斷服務來完成,可稱為前後系統或超迴圈系統 作業系統 作業系統是計算機中最基本的程式。作業系統負責計算機系統中全部軟硬資源的分配與 控制與協調等併發的活動 作業系統提供使用者介面,使使用者獲得良好的工作環...
嵌入式系統的基本概念
一 定義 定義1 嵌入式系統用來控制或監視機器 裝置 工廠等大規模系統的裝置。定義2 嵌入式系統是指以應用為中心,計算機技術為基礎,軟硬體可剪裁,適應應用系統對功能 可靠性 成本 體積 功耗嚴苛要求的專用計算機系統。二 發展史 1 積體電路 integrated circuit 把乙個電路中所需的電...
嵌入式科普 基本概念,設計流程,開發特點,如何學習
本文涉及的內容較多,個人知識水平有限,如有不當之處歡迎指正。特別鳴謝 嵌入式大神 tofulee woshizmxin 對本文給出了一些很好的意見。嵌入式是乙個比較模糊的概念,也沒有很準確的解釋,其實也沒必要一定找出個準確的解釋來,並不影響學習。參考了網上的資料,根據我的認識,可以認為嵌入式系統是一...