開發板
啟動過程
sram,static random access memory 就是靜態隨即儲存器
srom static read only memory 靜態
唯讀儲存器
rom ,唯讀儲存器
ram,隨即儲存器
dram,英文全稱
dynamic random access memory
,即動態隨機訪問儲存器
sdram,同步動態隨機儲存器 同步就是需要同步時鐘
nor flash 和
nand flash
是現在市場上兩種主要的非易失快閃儲存器技術。
注:開發板 sram 64kb
(手冊p34) (
64kb for internal sram buffer(8kb internal buffer for booting))
sdram 256mb
nandflash 256mb
sram
是英文static ram的縮寫,它是一種具有靜止訪問功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資料。這樣
他不需要初始化就能夠直接使用
。這與我們在外部擴充套件的大容量的sdram是不一樣的,外部大容量的
sdram是需要初始化後才能使用的
,這點大家務必要搞清楚。這點在我做過移植的處理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是這樣的。在
s3c2440
這顆cpu
上這個sram
大小為4kb,datasheet
裡把它叫做
stepping stone,江湖人稱
「起步石」。
1)介面區別:
nor flash位址線和資料線分開,來了位址和控制訊號,資料就出來。
nand flash位址線和資料線在一起,需要用程式來控制,才能出資料。
通俗的說,就是光給位址不行,要先命令,再給位址,才能讀到nand的資料。而且都是在乙個匯流排完成的。
結論是:
arm無法從
nand
直接啟動。除非裝載完程式,才能使用
nand flash.
2)效能區別
nor的傳輸效率很高,在1~
4mb的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的效能。
nand
結構能提供極高的單元密度,可以達到高儲存密度,並且寫入和擦除的速度也很快。應用
nand
的困難在於
flash
的管理和需要特殊的系統介面。
● nor的讀速度比
nand
稍快一些。
● nand的寫入速度比
nor快很多。
● nand的
4ms擦除速度遠比
nor的
5s快。
● 大多數寫入操作需要先進行擦除操作。
● nand的擦除單元更小,相應的擦除電路更少。
nandflash和
norflash
是不同的
:norflash像記憶體一樣是直接掛在系統匯流排上的,這樣有足夠多的位址線使得
cpu能夠定址到每乙個儲存單元上去,這也意味著
cpu能夠直接通過匯流排訪問
norflash
上儲存的內容
,同時他還支援xip(即片上執行,不用將**搬到記憶體中,直接在
norflash
上就能執行
)。 而
nandflash
它並不是直接掛載系統匯流排上,而是通過
nandflash
控制器(
這個一般整合在
cpu內部
)來完成讀寫操作的。如果我們把
norflash
的那種定址方式叫直接定址的話
(不是彙編裡的那個直接定址,這裡指
cpu能夠直接通過位址線訪問儲存器的儲存單元
),那麼這裡的
nandflash
就是間接定址
(這裡需要
nandflash
控制器來定址
)。所以
我們在使用nandflash之前,一定要初始化
nandflash
控制器。
理解上面的這點後,就不難理解,為什麼系統能夠從norflash直接啟動,而不能直接從
nandflash
啟動。
這是因為,arm在
cpu復位時,
cpu缺省會到
0x0000 0000
位址處去取指令
,而如果我們是從norflash啟動的話(一般
norflash會掛到
bank0,ngcs0上),
s3c2440 cpu
就會把norflash
的空間掛接到
0x0000 0000
這段記憶體空間上。這時
cpu就能夠
直接從norflash上取指令執行,啟動了
。而如果是nandflash, 因為
nandflash他不能直接掛到系統匯流排
上,並且他的讀寫,擦除操作必須依賴nandflash控制器,這也就意味著
nandflash
的儲存空間永遠不能對映到
0x0000 0000
這個位址上去。
1)irom
(nor flash)(0x0000 0000)
2)sram (0x3000 0000) 3)
sdram (0x4000 0000) 1、
開發板上一般都用sdram做記憶體,
flash
(nor
、nand
)來當做
rom。其中
nand flash
沒有位址線,一次至少要讀一頁
(512b).
其他兩個有位址線
2、nandflash不用來執行**,只用來儲存**,
norflash
,sdram
可以直接執行**.
講到啟動系統,那麼需要哪些儲存介質才行呢?首先得有啟動介質,也就是
掉電後**不會丟失並且上電後就能執行
(不需要初始化,否則怎麼執行呢),我們知道記憶體是不行的,記憶體掉電後資料就清空了。norflash就能掉電後資料不丟失,並且可以匯流排式訪問(掛在匯流排上就可以使用,不需要初始化)。所以
norflash
可以作為啟動介質,但這傢伙
一般比較小,因為貴嘛,所以**一般執行在記憶體,容量大,便宜
。現在一般開發板內容都用ddr2. 理論上 有
norflash
和ddr2
就可以了,但三星還另外加了一塊
sram
。為什麼要加
sram
呢?因為norflash只能讀,不能寫,那麼就不能進行資料交換,而
ddr2
此時還不能用,那麼只能用
sram
來儲存全域性資料和設定棧空間
。所以210的儲存結構為
irom(
類似於norflash+sram+ddr2
的結構)。
注:irom與
norflash
功能作用相似,但結構不同,我們開發板不用
norflash
,都用irom。
剛上電時,首先執行irom內的固化程式(不能人工改變),按照
irom
內的命令,
cpu會自動從
nand flash
中讀取前8kb
的資料放置在
片內sram裡
(0x4000 0000
),同時把這段片內sram對映到
ngcs0
片選的空間(即
0x00000000
)。cpu是從
0x00000000
開始執行,也就是
nand flash
裡的前8
kb內容。因為
nand flash
連位址線都沒有,不能直接把
nand
對映到0x00000000
,只好使用片內sram做乙個載體
。通過這個載體把
nandflash中大**複製到
ram(
一般是sdram)
中去執行。
注:上電時移植的8k就是
superboot的8k
,主要作用
將主程式拷貝到ram (一般是
sdram)
中執行,同時還有初始化記憶體(sdram),關閉看門狗,初始化時鐘等作用。
0x3000 0000
)中,當然我們前面講過
sdram
必須要先初始化,才能應用,其實就是給
sdram
分配(0x3000 0000
)位址。這些初始化操作是在移植的
8k中完成的。因此我們可以直接執行
sdram
的我們自己寫的程式。
nand flash
複製到sdram
中。如果執行的**
<8kb,程式直接在
sram
中執行。
如果執行的**>8kb,要把**完整的搬到
sdram
中執行。
注意:我們會發現,剛開始點亮led燈時,我們沒有寫時鐘程式,為什麼燈還是能點亮,這是因為在移植8k到
sram
時,就開啟時鐘了,我們自己編寫的時鐘程式,只是覆蓋了
superboot
的時鐘程式。
s3c2440 nandflash啟動過程分析
有很多同學在移植u boot時,都會對s3c2440從nandflash啟動的過程非常迷惑。這裡發這個帖子給大家介紹一下它的啟動流程。大部分arm9的cpu內部都整合有乙個sram,sram是英文static ram的縮寫,它是一種具有靜止訪問功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資料...
s3c2440啟動過程詳解
一 位址空間的分配 3 nandflash不用來執行 只用來儲存 norflash,sdram可以直接執行 4 s3c2440總共有8個記憶體banks 6個記憶體bank可以當作rom或者sram來使用 留下的2個bank除了當作rom 或者sram,還可以用sdram 各種記憶體的讀寫方式不一樣...
S3C2410 S3C2440開發板相關書籍
1 arm處理器裸機開發實戰 機制而非策略 王小強 主編 電子工業出版社 實驗平台 tq2440。裸跑中的經典教程,有注釋,例項多而實用,是目前市場上最受好評的2440 裸跑教程。讓您從微控制器51入手arm 從此再無憂。2.c os ii原理與arm應用程式設計 張勇 方勤 蔡鵬 許波 著 3.嵌...