學習嵌入式Linux-JZ2440-啓動過程分析

  首先,分析幾種存儲:
1>幾種存儲器
SRAMSRAMStatic Random Access Memory),即靜態隨機存取存儲器。它是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。SRAM主要用於二級高速緩存(Level2 Cache)。它利用晶體管來存儲數據。與DRAM相比,SRAM的速度快,但在相同面積中SRAM的容量要比其他類型的內存小。
       部分ARM9CPU內部都集成有一個SRAMSRAM是英文Static RAM的縮寫,它是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。這樣他不需要初始化就能夠直接使用。這與我們在外部擴展的大容量的SDRAM是不一樣的,外部大容量的SDRAM是需要初始化後才能使用的,這點大家務必要搞清楚。
s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是這樣的。在s3c2440這顆CPU上這個SRAM大小爲4KB,datasheet裏把它叫做Stepping Stone,江湖人稱“起步石”。
SDRAM:同步動態隨機存儲器,同步是指 Memory工作需要同步時鐘,內部的命令的發送與數據的傳輸都以它爲基準;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲,而是自由指定地址進行數據讀寫,用作內存。
NORFLASHNOR FLASH地址線和數據線分開,來了地址和控制信號,數據就出來。NORFLASH像內存一樣是直接掛在系統總線上的,這樣有足夠多的地址線使得CPU能夠尋址到每一個存儲單元上去,這也意味着CPU能夠直接通過總線訪問NORFLASH上存儲的內容,同時他還支持XIP(即片上執行,不用將代碼搬到內存中,直接在NORFLASH上就能運行)
NANDFLASHNANDFLASH它並不是直接掛載系統總線上,而是通過NANDFLASH控制器(這個一般集成在CPU內部)來完成讀寫操作的。如果我們把NANDFLASH的那種尋址方式叫直接尋址的話(不是彙編裏的那個直接尋址,這裏指CPU能夠直接通過地址線訪問存儲器的存儲單元),那麼這裏的NANDFLASH就是間接尋址(這裏需要NANDFLASH控制器來尋址)。所以我們在使用NANDFLASH之前,一定要初始化NANDFLASH控制器。
2>NOR與NAND的性能區別
NOR的傳輸效率很高,在14MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。 NAND結構能提供極高的單元密度,可以達到高存儲密度,並且寫入和擦除的速度也很快。應用NAND的困難在於flash的管理和需要特殊的系統接口。
● NOR
的讀速度比NAND稍快一些。
● NAND
的寫入速度比NOR快很多。
● NAND
4ms擦除速度遠比NOR5s快。
● 
大多數寫入操作需要先進行擦除操作。
● NAND
的擦除單元更小,相應的擦除電路更少。

啓動過程:
1>NOR啓動
NORFLASH被映射到0x00000000地址(就是nGCS0,這裏就不需要片內SRAM來輔助了,所以片內SRAM的起始地址還是0x40000000然後CPU0x00000000開始執行(也就是在NORFLASH中執行)。
2>NAND啓動
CPU會自動從NANDFLASH中讀取前4KB的數據放置在片內SRAM裏,http://tiyubisai.com/video_news/news_135576.html 同時把這段片內SRAM映射到nGCS0片選的空間(即0x00000000)。CPU是從0x00000000開始執行,也就是NAND FLASH裏的前4KB內容。因爲NAND FLASH連地址線都沒有,不能直接把NAND映射到0x00000000,只好使用片內SRAM做一個載體。通過這個載體把NANDFLASH中大代碼複製到RAM(一般是SDRAM)中去執行。

         另外,U-Boot有一個Download to SDRAM& Run這個選項,這個選項是把程序下載到SDRAM然後跳轉到SDRAM開始執行。所以在做實驗的時候,要考慮是要下載到NORFLASH中還是NANDFLASH中還是SDRAM中運行,代碼是稍稍有點區別的。比如要下載到SDRAM中程序,它的開始地址是0X30000000,如果程序中有絕對地址跳轉,就要考慮更改地址的值到底是多少,當然了,bbl這樣的相對跳轉是沒有影響的。如果要下載到NORFLASH中,它的開始地址是0X00000000,而且可以直接在NORFLASH中運行。如果是在NANDFLASH中運行,就要考慮程序是不是大於了4K

         我在學習過程中就遇到了一個類似的問題,就是做按鍵控制LED燈的亮滅的程序。因爲我一開始沒有意識到這個問題,就在下載的時候直接選擇了Download to SDRAM & RUN,怎麼都看不到按鍵控制LED的效果,糾結了好久,還以爲是代碼寫錯了(其實如果是下載到SDRAM,確實是寫錯了),後來突然想到,下載到NANDFLASH試一試,然後果然就好了。最後看到後面的章節才意識到地址的問題,然後修改了跳轉到main函數前設置SP的地方,一開始是把SP設置爲0,然後修改爲0X34000000,然後下載到SDRAM& RUN就正常了。
         這個經歷讓我對地址這個東西有了新的認識,以及編譯選項中有一個-Ttext選項,我對於這個按鍵控制LED的程序修改了這個編譯選項,發現沒什麼影響,因爲這個是編譯選項,影響的是編譯過程,程序中如果知識相對跳轉,所以不會有什麼影響。但是後面有一個SDRAM的實驗,就是跳轉到SDRAM中執行的那條指令是絕對地址跳轉的,-Ttext後面的選項不同給點話那個地址會發生變化,也就對程序產生了影響。做實驗的時候一定不能僅僅是照抄,抄程序是我們學習的第一步,但是後面要轉化爲自己的東西還是要自動動手去實驗的,去改變一些東西進行實驗,能夠發現更多的問題,因爲教程是大衆化的,不可能針對所有問題所有人,細節的東西還是需要自己好好的去挖掘。
http://blog.csdn.net/xiaoxiongli/article/details/49637419
http://blog.csdn.net/xiaoxiongli/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章