s3c2440 nandflash啟動過程分析

2021-06-17 22:12:15 字數 2115 閱讀 6801

有很多同學在移植u-boot時,都會對s3c2440從nandflash啟動的過程非常迷惑。這裡發這個帖子給大家介紹一下它的啟動流程。

大部分arm9的cpu內部都整合有乙個sram,sram是英文static ram的縮寫,它是一種具有靜止訪問功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資料。這樣他不需要初始化就能夠直接使用。這與我們在外部擴充套件的大容量的sdram是不一樣的,外部大容量的sdram是需要初始化後才能使用的,這點大家務必要搞清楚。這點在我做過移植的處理器:s3c2410(arm920t),s3c2440(arm920t),at91rm9200(arm920t),at91sam9260(arm926t)上都是這樣的。在s3c2440這顆cpu上這個sram大小為4kb,datasheet裡把它叫做stepping stone,江湖人稱「起步石」。

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這個位址上去。另外,nandflash的讀寫操作也不是這樣直接定址的,有興趣的同學可以自己看看nandlfash的datasheet,寫乙個raw的nandflash 擦除,讀寫操作程式就明白了。我就寫過這麼乙個程式,對理解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**

求教 s3c2440問題

趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...

s3c2440系統時鐘

1 flck hclk和pclk的關係 一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c2440中,...

s3c2440儲存控制

nandflash和norflash都是flash的一種,都是散存,都是磁碟儲存介子,但是nandflash一般比較大,而norflash都比較小,並且norflash比較貴,並且norflash寫的速度比較慢,但讀的速度比較快 而nandflash讀的速度比較慢,寫的速度比較快。nor flash...