nandflash的啟動原理

2021-06-18 00:54:24 字數 2059 閱讀 9894

大部分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**。

這樣,u-boot就啟動了。

nandflash啟動理解

有很多同學在移植u boot時,都會對s3c2440從nand flash啟動的過程非常迷惑。這裡發這個帖子給大家介紹一下它的啟動流程。大部分arm9的cpu內部都整合有乙個sram,sram是英文static ram的縮寫,它是一種具有靜止訪問功能的記憶體,不需要重新整理電路即能儲存它內部儲存的資...

NAND Flash硬體原理

一 儲存資料的原理 兩種快閃儲存器都是用三端器件作為儲存單元,分別為源極 漏極和柵極,與場效電晶體的工作原理相同,主要是利用電場的效應來控制源極與漏極之間的通斷,柵極的電流消耗極小,不同的是場效電晶體為單柵極結構,而flash為雙柵極結構,在柵極與矽襯底之間增加了乙個浮置柵極。浮置柵極是由氮化物夾在...

nand flash操作原理

1.nand flash原理圖 訊號線只有ldata 0 7 既傳送命令,傳送位址,還能讀寫資料。nand flash引腳定義 rnb 狀態訊號 nfce 片選訊號 cle 為高表示當前 ldata上的資料是命令 nfwe 寫 nfre 讀 2.辨別nand flash 每個nand flash裡面...