嵌入式基本概念

2021-08-25 14:40:47 字數 4136 閱讀 2869

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如何來?

用nor啟動時,片內的儲存控制器的bank0-bank7這8個bank都對應了其他用途,所以設計者在bank7結束的位址0x40000000的地方作為

nor flash的啟動位址,而nand flash啟動的位址則是0x00000000。請看下圖:

為什麼要+4096?

因為對於啟動檔案.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 對本文給出了一些很好的意見。嵌入式是乙個比較模糊的概念,也沒有很準確的解釋,其實也沒必要一定找出個準確的解釋來,並不影響學習。參考了網上的資料,根據我的認識,可以認為嵌入式系統是一...