歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> 嵌入式學習之Nand Flash編程

嵌入式學習之Nand Flash編程

日期:2017/3/1 9:55:52   编辑:Linux編程

一、NandFlash內部結構:

不同開發板使用的NandFlash的型號可能不一樣,本文只是以K9F1208U0M為例做個簡單介紹。引腳描述如下所示:

NandFlash存儲單元結構圖如下所示:

Device、Block和Page之間的關系---1 Device = 4,096 Blocks = 4096*32 Pages = 128K Pages;1 Block = 32 Page;1 Page = 528 Byte = 512 Byte + 16 Byte。其中1 Page中包含有數據寄存器512 Byte和16 Byte的備用位用於ECC校驗存儲。所以有528 columns * 128K rows(Pages)。1 Page中的512 Byte的數據寄存器又分為兩個部分1st 256 Bytes和 2nd 256 Bytes。用於數據存儲的單元有 512 Bytes * 32 Pages * 4096 Blocks = 64 MB,用於ECC校驗單元有16 Bytes * 32 Pages * 4096 Blocks = 2MB 。

二、NandFlash命令字:

操作NandFlash時,先傳輸命令,然後傳輸地址,最後進行數據的讀/寫。K9F1208U0M的命令字如下所示:

由於尋址需要26bit的地址,該26bit地址通過四個周期發送到NandFlash,如下圖所示:

Read 1操作:該操作是對512 Bytes * 32 Pages * 4096 Blocks = 64 M的數據寄存器進行尋址。第一個周期發送A7~A0的8bit Column地址,8bit的尋址范圍是0~255,只能對1st 256 Bytes部分進行尋址。00h命令是1st 256 Bytes部分尋址。當發送01h命令時,A8將會被置1,此時尋址范圍變成了256~511了,所以01h命令是對2nd 256 Bytes部分進行尋址。(*注意:A8在發送00h命令後被清0,在發送01h命令後被置1,並且在發送01h對2nd尋址完畢後,A8會自動清0,指針會自動地指向1st);第二個周期的A9~A13的5bit是對Page進行尋址(因為1 Block = 32 Pages,5bit的尋址范圍是0~31,可以對1 Block裡面的所有Page進行尋址)。A14~A25的12bit則是對Block進行尋址,12bit的尋址范圍是0~4095,對整個Device的4096個Blocks進行尋址。Read 2操作:該操作是對16 Bytes * 32 Pages * 4096 Blocks =2MB的備用位(ECC)進行尋址。50h命令為Read2操作,對1 Page裡面的後16 Byte尋址。這樣,通過四個周期的發送即可對整個Device的所有存儲單元進行尋址。

Copyright © Linux教程網 All Rights Reserved