卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

Nand Flash裸機(jī)驅(qū)動(dòng)程序的設(shè)計(jì)

每種類型的存儲(chǔ)設(shè)備都有其缺點(diǎn),NAND Flash的缺點(diǎn)為壞塊較多,并且難以修復(fù),由于數(shù)據(jù),命令,地址,數(shù)據(jù)都用同一批I/O口傳輸,以致驅(qū)動(dòng)程序較為復(fù)雜。本文根據(jù)NAND Flash的原理來介紹NAN

每種類型的存儲(chǔ)設(shè)備都有其缺點(diǎn),NAND Flash的缺點(diǎn)為壞塊較多,并且難以修復(fù),由于數(shù)據(jù),命令,地址,數(shù)據(jù)都用同一批I/O口傳輸,以致驅(qū)動(dòng)程序較為復(fù)雜。本文根據(jù)NAND Flash的原理來介紹NAND Flash裸機(jī)驅(qū)動(dòng)程序的設(shè)計(jì)。

硬件特性

Flash全名叫做flash memory,屬于非易失性存儲(chǔ)設(shè)備,與此相對(duì)應(yīng)的是易失型設(shè)備(就是平常我們電腦用的內(nèi)存SDRAM,斷電后數(shù)據(jù)就沒有了)。數(shù)據(jù)在FLASH內(nèi)存單元當(dāng)中是以電荷形式存儲(chǔ)的。存儲(chǔ)電荷的多少,取決于圖中外部門(extern gate)所施加的電壓,其控制了是向存儲(chǔ)單元中沖入電荷還是使其釋放電荷。

NAND Flash的尋址方式

區(qū)別于SDRAM與NOR Flash等存儲(chǔ)設(shè)備,SDRAM與NOR Flash可以直接通過CPU地址引腳直接訪問對(duì)應(yīng)的數(shù)據(jù),而NAND Flash通過IO口經(jīng)過復(fù)雜的編程來實(shí)現(xiàn)尋址。

編程相關(guān)

  1. 從DATASHEET里面,看出,配置NFCONF時(shí)需要設(shè)置一個(gè)叫做MLCFLASH的參數(shù),這個(gè)參數(shù)的作用是選擇閃存類型的。
    1. SLC:?jiǎn)蝹€(gè)存儲(chǔ)單元,只存儲(chǔ)一個(gè)數(shù)據(jù)。
    2. MLC:?jiǎn)蝹€(gè)存儲(chǔ)單元可以存儲(chǔ)多個(gè)位。

    如何識(shí)別SLC還是MLC:NAND Flash設(shè)計(jì)中,有個(gè)命令叫做ReadID,讀取ID,意思是讀取芯片ID,還有比如NAND Flash內(nèi)部是多少個(gè)片(chip)組成的,每個(gè)chip包含了幾個(gè)片(plane),每一片中的頁(yè)大小,塊大小,等等。

  2. 比如我們要訪問其中的第7000個(gè)塊中的第25頁(yè)中的1208字節(jié)處的地址,計(jì)算出具體地址為:物理地址塊大小*塊號(hào) 頁(yè)大小*頁(yè)號(hào) 頁(yè)內(nèi)地址 7000*128k 64*2k 1208 0x36B204b8,再看看具體傳遞地址的流程。

可以算出:

  1. 1st周期,A7~A0:1011 1000 0xB8
  2. 2nd周期,A11~A8:0000 0100 0x04(這里的高四位的0不是原數(shù)據(jù)中的,而是硬件要求的)
  3. 3rd周期,A19~A12:0010 0000 0x20
  4. 4th周期,A27~A20:0110 1011 0x6B
  5. 5th周期,A30~A28:0000 0011 0x03

算出地址以后,接下來就針對(duì)讀操作進(jìn)行細(xì)說:

  1. (1)操作準(zhǔn)備階段:此處是讀(Read)操作,所以,先發(fā)一個(gè)圖5中讀命令的第一個(gè)階段的0x00,表示,讓硬件先準(zhǔn)備一下,接下來的操作是讀。
  2. (2)發(fā)送兩個(gè)周期的列地址。也就是頁(yè)內(nèi)地址,表示,我要從一個(gè)頁(yè)的什么位置開始讀取數(shù)據(jù)。
  3. (3)接下來再傳入三個(gè)行地址。對(duì)應(yīng)的也就是頁(yè)號(hào)。
  4. (4)然后再發(fā)一個(gè)讀操作的第二個(gè)周期的命令0x30。接下來,就是硬件內(nèi)部自己的事情了。
  5. (5)Nand Flash內(nèi)部硬件邏輯,負(fù)責(zé)去按照你的要求,根據(jù)傳入的地址,找到哪個(gè)塊中的哪個(gè)頁(yè),然后把整個(gè)這一頁(yè)的數(shù)據(jù),都一點(diǎn)點(diǎn)搬運(yùn)到頁(yè)緩存中去。而在此期間,你所能做的事,也就只需要去讀取狀態(tài)寄存器,看看對(duì)應(yīng)的位的值,也就是R/B那一位,是1還是0,0的話,就表示,系統(tǒng)是busy,仍在”忙“(著讀取數(shù)據(jù)),如果是1,就說系統(tǒng)活干完了,忙清了,已經(jīng)把整個(gè)頁(yè)的數(shù)據(jù)都搬運(yùn)到頁(yè)緩存里去了,你可以接下來讀取你要的數(shù)據(jù)了。
  6. 對(duì)于這里。估計(jì)有人會(huì)問了,這一個(gè)頁(yè)一共2048 64字節(jié),如果我傳入的頁(yè)內(nèi)地址,就像上面給的1208一類的值,只是想讀取1028到2011這部分?jǐn)?shù)據(jù),而不是頁(yè)開始的0地址整個(gè)頁(yè)的數(shù)據(jù),那么內(nèi)部硬件卻讀取整個(gè)頁(yè)的數(shù)據(jù)出來,豈不是很浪費(fèi)嗎?答案是,的確很浪費(fèi),效率看起來不高,但是實(shí)際就是這么做的,而且本身讀取整個(gè)頁(yè)的數(shù)據(jù),相對(duì)時(shí)間并不長(zhǎng),而且讀出來之后,內(nèi)部數(shù)據(jù)指針會(huì)定位到你剛才所制定的1208的那個(gè)位置。
  7. (6)接下來,就是你“竊取“系統(tǒng)忙了半天之后的勞動(dòng)成果的時(shí)候了,呵呵。通過先去Nand Flash的控制器中的數(shù)據(jù)寄存器中寫入你要讀取多少個(gè)字節(jié)(byte)/字(word),然后就可以去Nand Flash的控制器的FIFO中,一點(diǎn)點(diǎn)讀取你要的數(shù)據(jù)了。

至此,整個(gè)Nand Flash的讀操作就完成了。對(duì)于其他例如寫操作,可以參照DATA SHEET編寫。

標(biāo)簽: