如何計算Nand Flash要傳入的行地址和列地址

如何計算Nand Flash要傳入的行地址和列地址

   在介紹具體讀取數據的詳細流程之前,還要做一件事,那就是,先要搞懂我們要訪問的地址,以及這些地址,如何分解後,一點點傳入進去,使得硬件能識別才行。

    此處還是以 K9F8G08U0A 爲例,此 Nand Flash,一共有 8192 個塊,每個塊內有 64 頁,每個頁是 2K+64 Bytes,假設,我們要訪問其中的第 7000個塊中的第 64 頁中的 1208 字節處的地址,此時,我們就要先把具體的地址算出來: 
   
    物理地址 = 塊大小×塊號+頁大小×頁號+頁內地址
            =7000×128K+64×2K+1208
            =0x36B204B8

    接下來,我們就看看,怎麼才能把這個實際的物理地址,轉化爲 Nand Flash 所要求的格式。在解釋地址組成之前,先要來看看其datasheet 中關於地址週期的介紹:
p186193878-1.jpg

    結合圖,我們可以看出,此 Nand Flash 地址週期共有 5 個,2 個列(Column),3個行(Row)週期,而對於對應地,我們可以看出,實際上,列地址 A0~A10,就是頁內地址,地址範圍是從0 到2047,而對出的 A11,理論上可以表示 2048~4095,但是實際上,我們最多也只用到了2048~2011, 用於表示頁內的oob區域,其大小是 64 字節。對應地,A12~A30,稱作頁號,頁的號碼,可以定位到具體是哪一個頁。而其中,A18~A30,表示對應的塊號,即屬於哪個塊。

    簡單解釋完了地址組成,那麼就很容易分析上面例子中的地址了:

   0x36B204B8 = 0011 0110 1011 0010 0000 0100 1011 1000,分別分配到5個地址週期就是:
   1st週期,A7~A0:     1011 1000 = 0xB8
   2nd週期,A11~A8:    0000 0100 = 0x04
   3rd週期,A19~A12:    0010 0000 = 0x20
   4th 週期,A27~A20:    0110 1011 = 0x6B
   5th 週期,A30~A28:     0000 0011 = 0x03

    注意,與圖中對應的*L,意思是地電平,由於未用到那些位,datasheet中強制要求設爲0,所以,纔有上面的2nd週期中的高4位是0000.其他的A30之後的位也是類似原理,都是 0。

    因此,接下來要介紹的,我們要訪問第 7000 個塊中的第 64 頁中的 1208 字節處的話,所要傳入的地址就是分 5 個週期,分別傳入兩個列地址:0xB8,0x04,然後再傳3個行地址:0x20,0x6B,0x03,這樣硬件才能識別。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章