mini2440下載到nandflash中時地址設定是0x30000000
近來又開始學習韋東山書上的裸機驅動,在執行SDRAM中的程式碼的時候發現不能正確執行,當初下載的方法是通過mini2440自帶的supervivi的d命令燒寫程式。現在想想真是犯了很多錯誤。在韋東山的書上不止一次強調這些裸機程式要下載到nandflash上執行,但我都是通過supervivi的d命令來下載到SDRAM中執行,呵呵,能正常執行才怪。現在稍微總結下:
1.這些裸機程式是需要下載到nandflash中執行的。當從nandflash啟動CPU時,CPU會通過內部的硬體將nandflash開始的4KB的資料複製到稱為"Steppingston"的4KB的內部RAM中(起始地址為0),然後跳到RAM的地址0開始執行。
2.通過supervivi的d命令是把程式下載到SDRAM就是記憶體的起始地址0x3000000中的。這時候其實是從nor flash啟動的。本例中如果先從nor flash啟動,把程式直接下載到SDRAM中執行,就開始執行SDRAM中的程式碼,把steppingston中4KB的程式碼複製SDRAM中,這個時候由於steepingston中的東西是未知的,所以會把SDRAM中的程式碼覆蓋掉,導致程式錯亂。
3.正確的操作方法是先從nor flash啟動,然後用v命令(把程式下載到nandflash的vivi分割槽,而vivi分割槽的地址是0x0-0x50000)下載程式到nandflash , 其實v命令的過程是通過DNW先把程式下載到SDRAM中,然後執行了nand寫操作,把0x30000000開始的那段程式碼複製到了nandflash的0地址處(這段是聽網上一個朋友說的)。這樣就把程式碼下載到了nandflash中。然後再從nandflash重新啟動,這樣stepingston中就是nandflash中的程式碼了,本試驗就能正常運行了。
小結:程式要下載到nandflash時,是先燒寫到記憶體中,通過記憶體再燒寫到nandflash中,因為nandflash的資料匯流排與系統資料匯流排不一樣,所以nandflash不是掛載到系統資料匯流排上的,故程式沒辦法直接燒寫到nandflash中。