1. 程式人生 > >關於ARM啟動流程的分析(NandFlash Or NorFlash)

關於ARM啟動流程的分析(NandFlash Or NorFlash)

學習了S3C2440的啟動流程,如何讓bootLoader成功載入。並且找到了一篇講的非常好的部落格,試著結合著自己的理解總結一下,以備以後的複習。

第一部分關於內部的SRAM:

部分ARM9的CPU內部都整合有一個SRAM,SRAM是英文Static RAM的縮寫,它是一種具有靜止存取功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資料。這樣他不需要初始化就能夠直接使用。這與我們在外部擴充套件的大容量的SDRAM是不一樣的,外部大容量的SDRAM是需要初始化後才能使用的

在s3c2440這顆CPU上這個SRAM大小為4KB,datasheet裡把它叫做Stepping Stone,江湖人稱“起步石”。


第二部分關於Norflash與Nandflash的異同點

Norflash:

Norflash像記憶體一樣是直接掛在系統總線上的,這樣有足夠多的地址線使得CPU能夠定址到每一個儲存單元上去,這也意味著CPU能夠直接通過匯流排訪問Norflash上儲存的內容,同時他還支援XIP(即片上執行,不用將程式碼搬到記憶體中,直接在Norflash上就能執行)。


Nandflash:

而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這個地址上去。另外,Nandflash的讀寫操作也不是這樣直接定址的


第四部分關於

而如果這些CPU要從Nandflash上啟動,那該怎麼辦呢?

這就要用到我之前提到的CPU的內部SRAM了。
在S3C2440的datasheet裡有提到,如果我們配置從Nandflash啟動的話,那麼CPU會自動將內部SRAM的地址對映到0x0000 0000這個地址空間上了,而如果不是從Nandflash啟動,那麼掛載Bank0(nGCS0)上的裝置就會被對映到0x0000 0000地址空間上,如我們之前提到的Norflash。


總結:

如果從Nandflash啟動,那麼CPU內部SRAM被對映到0x0000 0000地址空間上,這時Norflash就不可用了。而如果是從Norflash啟動的話,那麼Norflash被對映到0x0000 0000地址空間上。我們之前提到ARM CPU在復位時,會預設到0x0000 0000地址上取指令。這樣也就是如果從Nandflash啟動的話,那麼CPU預設會從內部SRAM中取第一條指令;而如果從Norflash啟動的話,那麼CPU預設從Norflash中取第一條指令。


那如果從SRAM啟動的話,那麼SRAM中的指令(也就是程式碼)從哪裡來的呢?在s3c2440處理器(arm920t和arm926t的核應該都是這樣的,另外我看S3C6410也是如此)上電時,CPU會自動將Nandflash的前4K程式碼(或叫指令)拷貝到內部SRAM中,這是由CPU自動完成的,不需要我們干預。這也就意味著,SRAM中的內容就是我們Nandflash上前4K的程式碼了。
這樣,如果是在我們的bootloader如u-boot中就要確保,我們編譯出來的前4K程式碼完成以下功能:
1, 初始化CPU,外部SDRAM,Nandflash控制器等基本功能;
2, 將Nandflash上剩餘的u-boot程式碼拷貝到外部的SDRAM中
3, 調到外部的SDRAM中來執行u-boot程式碼。
這樣,U-boot就啟動了。

我看到原文也是轉載的別人的:附上鍊接http://blog.sina.com.cn/s/blog_61e10f0201017phe.html 謝謝大神的總結,學習了!!!