nand flash 在嵌入式系統中的地位與pc機上的硬碟是類似的。用於儲存系統執行所必需的作業系統,應用程式,使用者資料,執行過程中產生的各類資料,系統掉電後資料不會護丟失.本文主要介紹關於nand flash的組織結構和編寫程式的方法。
在三星的nand flash 中,當cpu從nand flash開始啟動時,cpu會通過內部的硬體將nand flash開始的4kb資料複製到稱為「steppingstone」的4kb的內部ram中,起始位址為0,然後跳到位址0處開始執行。這也就是我們為什麼可以把小於4kb的程式燒到nand flash中,可以執行,而
當大於4kb時,卻沒有辦法執行,必須借助於nand flash的讀操作,讀取4kb以後的程式到記憶體中。
nand flash的定址方式和nand flash的memory組織方式緊密相關。nand flash的資料是以bit的方式儲存在 memory cell(儲存單元)。一般情況下,乙個cell中只能儲存乙個bit。這些cell以8個或者16個為單位,連成 bit line ,形成所謂的byte(x8)/word(x16),這就是nand flash的位寬。
這些line會再組成pape(頁)。然後是每32個page形成乙個block,所以乙個block(塊)大小是16k.block是nand flash中最大的操作單元,其中的擦除操作是以block為單位進行擦除的,而讀寫和程式設計是以page為單位進行操作的,並且讀寫之前必須進行flash的擦寫。我們這裡以三星k9f1208u0m的nand flash 為例,它的大小是64mb的。
1block = 32page
1page = 512bytes(datafield) + 16bytes(oob)
k9f1208u0b總共有4096 個blocks,故我們可以知道這塊flash的容量為4096 *(32 *528)= 69206016 bytes = 66 mb
但事實上每個page上的最後16bytes是用於存貯檢驗碼用的,並不能存放實際的資料,所以實際上我們可以操作的晶元容量為
4096 *(32 *512) = 67108864 bytes = 64 mb
nand flash 物理結構圖
在nand flash中有8個i/o引腳(io0—io7)、5個全能訊號(nwe ale cle nce nre)、乙個引腳,1個寫保護引腳。操作nand flash時,先傳輸命令,然後傳輸位址,最後讀寫資料。對於64mb的nand flash,需要乙個26位的位址。只能8個i/o引腳充當位址、資料、命令的復用埠,所以每次傳位址只能傳8位。這樣就需要4個位址序列。因此讀寫一次nand flash需要傳送4次(a[7:0] a[16:9] a[24:17] a[25])。64m的nand flash的位址範圍為0x00000000—0x03ffffff。
一頁有528個位元組,而在前512b中存放著使用者的資料。在後面的16位元組中(oob)中存放著執行命令後的狀態資訊。主要是ecc校驗的標識。列位址a0-a7可以定址的範圍是256個位元組,要定址528位元組的話,將一頁分為了a.(1half array)b(2 half array) c(spare array)。a區0—255位元組,b區 256-511 位元組c區512—527位元組。訪問某頁時必須選定特定的區。這可以使位址指標指向特定的區實現。
在nand flash 中存在三類位址,分別為block address 、column address page address.。
column address 用來選擇是在上半頁定址還是在下半頁定址a[0]—a[7].也就相當於頁內的偏移位址。在進行擦除時不需要列位址,因為擦除是以塊為單位擦除。32個page需要5bit來表示。也就是a[13:9];也就是頁在塊內的相對位址。a8這一位用來設定512位元組的上半頁,還是下半頁,1表示是在上半頁,而2表示是在下半頁。block的位址有a[25:14]組成。
儲存操作特點:
1.擦除操作的最小單位是塊
2.nand flash晶元每一位只能從1變為0,而不能從0變為1,所以在對其進行寫入操作之前一定要將相應塊擦除(擦除就是將相應塊的位全部變為1
3 oob部分的第六位元組(即517位元組)標誌是否壞塊,如果不是壞塊該值為ff,否則為壞塊
4 除oob第六位元組外,通常至少把oob前3位元組存放nand flash硬體ecc碼
乙個容量為64m(512mbit)的nand flash,分為131072頁,528列。(實際中由於存在spare area,故都大於這個值),有4096塊,需要12bit來表示即a[25:14].如果是128m(1gbit)的話,blodk address為a[26:14].由於位址只能在io0—io7上傳送。程式設計時通常通過移位來實現位址的傳送。傳送過程如下:
第1個位址序列:傳遞column address,也就是nand flash[7:0],這一週期不需要移位即可傳遞到i/o[7:0]上,而half page pointer 即a8是由操作指令決定,00h,在a區,01h在b區,指令決定在哪個half page上進行讀寫,而真正a8的值是不需要程式設計師關心的;
第2個位址序列:就是將nand_addr 右移9位,而不是8位,將nand_addr[16:9]傳遞到i/o[7:0]上;
第3個位址序列:將nand_addr[24:17] 傳遞到i/o[7:0]上;
第4個位址序列:將nand_addr[25]傳送到i/o上。
整個位址的傳送過程需要4步才能完成。如果nand flash 的大小是32mb的以下的話,那麼block address 最高位只到bit24,因此定址只需要3步,就可以完成。
在進行擦除操作時由於是以塊進行擦除,所以只需要3個位址序列,也就是只傳遞塊的位址,即a[14:25]。
nand flash位址的計算:
column address 翻譯過來是列位址,也就是在一頁裡的偏移位址。其實是指定page上的某個byte,指定這個byte,其實也就是指定此頁的讀寫起始位址。
page address:頁位址。頁的位址總是以512bytes對齊的,所以它的低9位問題0,確定讀寫操作在nand flash中的哪個頁進行。
NAND Flash硬體原理
一 儲存資料的原理 兩種快閃儲存器都是用三端器件作為儲存單元,分別為源極 漏極和柵極,與場效電晶體的工作原理相同,主要是利用電場的效應來控制源極與漏極之間的通斷,柵極的電流消耗極小,不同的是場效電晶體為單柵極結構,而flash為雙柵極結構,在柵極與矽襯底之間增加了乙個浮置柵極。浮置柵極是由氮化物夾在...
nand flash操作原理
1.nand flash原理圖 訊號線只有ldata 0 7 既傳送命令,傳送位址,還能讀寫資料。nand flash引腳定義 rnb 狀態訊號 nfce 片選訊號 cle 為高表示當前 ldata上的資料是命令 nfwe 寫 nfre 讀 2.辨別nand flash 每個nand flash裡面...
NAND FLASH中ECC的原理與錯誤
向nand flash寫資料時,每256或512位元組會生成乙個校驗碼寫在每個page的oob區,當從nand flash讀資料時,每讀取256或512位元組資料,也會生成乙個ecc校驗碼,拿這個校驗碼與存放在oob區的校驗嗎對比看看是否一致,就可以知道讀取的資料是否正確.一般來說,kernel與c...