Nand-Flash詳述(絕對經(jīng)典)_第1頁
Nand-Flash詳述(絕對經(jīng)典)_第2頁
Nand-Flash詳述(絕對經(jīng)典)_第3頁
Nand-Flash詳述(絕對經(jīng)典)_第4頁
Nand-Flash詳述(絕對經(jīng)典)_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、在Flash之前,紫外線可擦除 了。Word Lme Flu癡恤心配息rrSoursH-Dr&ihNandFlash 詳述i.硬件特性:Flash的硬件實現(xiàn)機制】Flash全名叫做Flash Memory ,屬于非易失性存儲設備 (Non-volatile Memory Device),與此相對應 的是易失性存儲設備(Volatile Memory Device)。這類設備,除了 Flash ,還有其他比較常見的如硬盤, ROM 等,與此相對的,易失性就是斷電了,數(shù)據(jù)就丟失了,比如大家常用的內(nèi)存,不論是以前的SDRAM , DDR SDRAM ,還是現(xiàn)在的DDR2, DDR3等,都是斷

2、電后,數(shù)據(jù)就沒了。Flash的內(nèi)部存儲是MOSFET ,里面有個懸浮門(Floating Gate),是真正存儲數(shù)據(jù)的單元。金屬-氧化層-半導體-場效晶體管,簡稱金氧半場效晶體管 (Metal-Oxide-SemiconductorField-Effect Transistor, MOSFET )是一種可以廣泛使用在模擬電路與數(shù)字電路的場效晶體管(field-effect transistor ) oMOSFETI其"通道"的極性不同,可分為 n-type 與 p-type 的 MOSFET 通常又稱為 NMOSFET PMOSFET其他簡稱尚包括 NMOS FET PMO

3、S FET nMOSFETpMOSFET。(uv-erasable)的EPROM ,就已經(jīng)采用用Floating Gate存儲數(shù)據(jù)這一技術圖1.典型的Flash內(nèi)存單元的物理結構數(shù)據(jù)在Flash內(nèi)存單元中是的。存儲電荷的多少,取決于圖中的外部門(external gate)所被施加的電壓,其控制了是向存儲單元中沖 入電荷還是使其釋放電荷。數(shù)據(jù)的表示,以所存儲的電荷的電壓是否超過一個特定的閾值Vth來表示?!維LC和MLC的實現(xiàn)機制】Nand Flash按照內(nèi)部存儲數(shù)據(jù)單元的電壓的不同層次,也就是單個內(nèi)存單元中,是存儲1位數(shù)據(jù),還是多位數(shù)據(jù),可以分為SLC和MLC :1. SLC , Singl

4、e Level Cell:單個存儲單元,只存儲一位數(shù)據(jù),表示成 1或0.就是上面介紹的,對于數(shù)據(jù)的表示,單個存儲單元中內(nèi)部所存儲電荷的電壓,和某個特定的閾值電壓 Vth ,相比,如果大于此 Vth值,就是表示1,反之,小于Vth,就表示0.對于nand Flash的數(shù)據(jù)的寫入1,就是控制External Gate去充電,使得存儲的電荷夠多,超過閾值Vth , 就表示1 了。而對于寫入0,就是將其放電,電荷減少到小于Vth ,就表示0 了。關于為何Nand Flash不能從0變成1,我的理解是,物理上來說,是可以實現(xiàn)每一位的,從 0變成1 的,但是實際上,對于實際的物理實現(xiàn),出于效率的考慮,如果

5、對于,每一個存儲單元都能單獨控制, 即,0變成1就是,對每一個存儲單元單獨去充電,所需要的硬件實現(xiàn)就很復雜和昂貴,同時,所進 行對塊擦除的操作,也就無法實現(xiàn)之前的,一閃而過的速度了,也就失去了Flash的眾多特性了。/也就是放電的思路還是容易些。1->02. MLC , Multi Level Cell :與SLC相對應,就是單個存儲單元,可以存儲多個位,比如2位,4位等。其實現(xiàn)機制,說起來比較簡單,就是,通過控制內(nèi)部電荷的多少,分成多個閾值,通過控制里面的電荷多少,而達到我們所需 要的存儲成不同的數(shù)據(jù)。比如,假設輸入電壓是Vin =4V (實際沒有這樣的電壓,此處只是為了舉例方便),那

6、么,可以設計出2的2次方=4個閾值,1/4的Vin = 1V, 2/4的Vin =2V, 3/4的Vin = 3V , Vin =4V,分別表示2位數(shù)據(jù)00, 01, 10, 11,對于寫入數(shù)據(jù),就是充電,通過控制內(nèi)部的電荷的多 少,對應表示不同的數(shù)據(jù)。對于讀取,則是通過對應的內(nèi)部的電流(與 Vth成反比),然后通過一系列解碼電路完成讀取,解析 出所存儲的數(shù)據(jù)。這些具體的物理實現(xiàn),都是有足夠精確的設備和技術,才能實現(xiàn)精確的數(shù)據(jù)寫入和 讀出的。單個存儲單元可以存儲 2位數(shù)據(jù)的,稱作2的2次方=4 Level Cell,而不是2 Level Cell ;同理,對于新出的 單個存儲單元可以存儲4位數(shù)

7、據(jù)的,稱作2的4次方=16 Level Cell?!娟P于如何識別SLC還是MLC】Nand Flash設計中,有個命令叫做 Read ID,讀取ID,意思是讀取芯片的ID,就像大家的身份證一樣, 這里讀取的ID中,是:讀取好幾個字節(jié),一般最少是 4個,新的芯片,支持5個甚至更多,從這些字節(jié)中,可以解析出很多 相關的信息,比如:此Nand Flash內(nèi)部是幾個芯片(chip)所組成的,每個chip包含了幾片(Plane),每一片中的頁大小,塊大小,等等。在這些信息中,其中有一個,就是識別此 flash是SLC還是MLC。下面這個就是最常見的 Nand Flash 的datasheet中所規(guī)定的,

8、第3個字節(jié),3rd byte,所表示的信息,其中就有 SLC/MLC的識別信息:DescriptionI/O7I/O6I/O5I/O4I/O3I/O2I/O1I/O0InternalChip Number12480 00 11 01 1Cell Type2 Level Cell4 Level Cell8 Level Cell16 Level Cell0 00 11 01 1Number ofSimultaneouslyProgrammed Pages12480 00 11 01 1Interleave ProgramBetween multiple chipsNot SupportSuppor

9、t01Cache ProgramNot SupportSupport01表I.Nand Flash第3個ID的含義Nand Flash的物理存儲單元的陣列組織結構】Nand flash的內(nèi)部組織結構,此處還是用圖來解釋,比較容易理解:圖2.Nand Flash物理存儲單元的陣列組織結構Figure 2. K9KSGD8U0A Array Organization上圖是K9K8G08U0A的datasheet中的描述 簡單解釋就是:1.一個nand flash由很多個塊(Block)組成,塊的大小一般是- > 128KB,- > 256KB,- > 512KB止匕處是128KB

10、。2 .每個塊里面又包含了很多頁(page)。每個頁的大小,老的 nand flash,頁大小是 256B, 512B,這類的nand flash被稱作small block,。地址周期只有4個。對于現(xiàn)在常見的nand flash多數(shù)是2KB ,被稱作big block,對應的發(fā)讀寫命令地址,一共 5個周期(cycle),更新的 nand flash 是 4KB,塊,也是Nand Flash的擦除操作的基本/最小單位。3 .每一個頁,對應還有一塊區(qū)域,叫做空閑區(qū)域( spare area /冗余區(qū)域(redundant are ,而Linux 系統(tǒng)中,一般叫做 OOB (Out Of Band

11、),這個區(qū)域,是最初基于 Nand Flash的硬件特性:數(shù)據(jù)在讀 寫時候相對容易錯誤,所以為了保證數(shù)據(jù)的正確性,必須要有對應的檢測和糾錯機制,此機制被叫做EDC(Error Detection Code)/ECC (Error Code Correction,或者 Error Checking and Correcting),所以設 計了多余的區(qū)域,用于放置數(shù)據(jù)的校驗值。頁,是Nand Flash的寫入操作的基本/最小的單位。【Nand Flash數(shù)據(jù)存儲單元的整體架構】簡單說就是,常見的nand flash,內(nèi)部只有一個chip,每個chip只有一個plane。而有些復雜的,容量更大的na

12、nd flash,內(nèi)部有多個chip,每個chip有多個plane。這類的nand flash, 往往也有更加高級的功能,比如下面要介紹的Multi Plane Program和Interleave Page Program1。比如,型號為K9K8G08U0A 這個芯片(chip), 內(nèi)部有:K9F4G08U0A (256MB) : Plane (1Gb), Plane (1Gb)K9F4G08U0A (256MB) : Plane (1Gb), Plane (1Gb)K9WAG08U1A ,內(nèi)部包含了 2 個 K9K8G08U0AK9NBG08U5A ,內(nèi)部包含了 4 個 K9K8G08U0

13、A【Flash名稱的由來】Flash的擦除操作是以block塊為單位的,與此相對應的是其他很多存儲設備,是以bit位為最小讀取/寫入的單位,F(xiàn)lash是一次性地擦除整個塊:在發(fā)送一個擦除命令后,一次性地將一個block,常見的塊的大小是128KB/256KB。,全部擦除為1,也就是里面的內(nèi)容全部都是 0xFF 了,由于是一下子 就擦除了,相對來說,擦除用的時間很短,可以用一閃而過來形容,所以,叫做 Flash Memory o中文 有的翻譯為(快速)閃存?!綟lash相對于普通設備的特殊性】1.上面提到過的,F(xiàn)lash最小操作單位,有些特殊。一般設備,比如硬盤/內(nèi)存,讀取和寫入都是以 bit位

14、為單位,讀取一個bit的值,將某個值寫入對應 的地址的位,都是可以按位操作的。但是Flash由于物理特性,使得內(nèi)部存儲的數(shù)據(jù),只能從 1變成0,這點,可以從前面的內(nèi)部實現(xiàn)機 制了解到,只是方便統(tǒng)一充電,不方便單獨的存儲單元去放電,所以才說,只能從1變成0,也就是釋放電荷。所以,總結一下Flash的特殊性如下:普通設備(硬盤/內(nèi) 存等)Flash讀取/寫入的叫法讀取/寫入讀取/編程(Programed)讀取/寫入的最小單位Bit/位PageM擦除(Erase臊作的最小單位Bit/位Block/塊擦除操作的含義將數(shù)據(jù)刪除/全部寫入0將整個塊都擦除成全是1,也就是里面的數(shù)據(jù)都是0xFF對于寫操作直接

15、寫即可在寫數(shù)據(jù)之前,要先擦除,然后再寫表2.Flash和普通設備相比所具有的特殊性注:之所以將寫操作叫做編程,是因為,flash和之前的EPROM, EEPROM繼承發(fā)展而來,而之前的EEPROM(Electrically Erasable Programmable Read-Only Memory),往里面寫入數(shù)據(jù),就叫做編程Program,之所以這么稱呼,是因為其對數(shù)據(jù)的寫入,是需要用電去擦除/寫入的,就叫做編程。對于目前常見的頁大小是 2K/4K的Nand Flash,其塊的大小有 128KB/256KB/512KB等。而對于 Nor Flash,常見的塊大小有 64K/32K等。在寫數(shù)

16、據(jù)之前,要先擦除,內(nèi)部就都變成 0xFF 了,然后才能寫入數(shù)據(jù),也就是將對應位由1變成0。Nand Flash引腳(Pin)的說明】Pin NamePin Funcikmi/Oti - 1/07DAIA ITJPUTOUTPUTSTrie I/O pin舊 are used to in口u: corrnnand, address and d&La, and to outputcIuh兇 raad operatsinE. The L0 pms float tohigh-z iwtien the chip 的 deselected orirvtien the oulputs are dis

17、abled.CLECOMMAHD LATCH ENABLEIifie CLE e n put controls the activciting path ,fwtomnMfids sent to trie comm and register. When ace hii, ccoinnands are hatched into the com niand resist er Ubtj ugh the I/O pens on ±ie rising ed ge of Ihe &E signal.AL£ADDRESS UVTCH ENABLEThe ALE input co

18、ntnols the actiatiing path for address to izhe internal address registers AddresEies are latched on the rising etige M WE 卻由 ALE 用好C& /CE1CHIPEMABLEThe C£ 1 C&1 input 片 ttie deuiee selection eonmE 'Mien the device ie in lie Busy Eta鳳 Ct / CE 1 kiiqh 13 ignored, anti device does ixrt

19、etun to starxfciy mode in p(rog.r?m or erase operatiofiR*egar<Sng CE/ CEi control d0*109 read operaiion ( refer ta -Page Read section of Device operMion.CE2CHIP EHABLETTi號 C= input /g;酊 觸 3打。M K9K2口SUMREREAP EK&LEWe RE input 恰由q卞/data-out ccrrtroi. and when 毗廿*噂 driven the onto the UQDau 得Hid

20、tREA fcerthe falli ng edge of RE which 除0 irrererints the in忸eI slumn aJdr-eas t&unisrby ocieWEW 同莊ENABLE,e WE input mntnois writes t&UO port. Cowi 3nd&, aoires anfl art 小E on tM rising edge ofthe AE pci Ie*.布WRITE PROTECTTtieTVP pin provides inadvertenL program/erase pmtectkm during pow

21、er iransrtjons. The intemai high vott- age generatw 梏 rew! when the H P pin is relive low.fws/fVbiREADWU5Y0UTPIHThe R/B ; Rj'SI output indicates stainsdevice operation.low, rt indicalAS that a program.eraie 6r randftm 旭白d e拈 m fsrotess arid 裙tutn號伯 Mh state upon bMYp隨射白乩 H 性 in opsri drjm output

22、 and doea iwt Host io hlfi-2 condition when the 由ip i& deselectad or wtien outputs 白旭 dieabted.VccPOWERVoc ie (he power supply ft)r devic*.VssGROUNDN.CHO CONHECTIOHLead isnoi mtanallv itwinected.圖3.Nand Flash引腳功能說明上圖是常見的Nand Flash所擁有的引腳(Pin)所對應的功能,簡單翻譯如下:1. I/O0I/O7:用于輸入地址/數(shù)據(jù)/命令,輸出數(shù)據(jù)2. CLE: Comm

23、and Latch Enable,命令鎖存使能,在輸入命令之前,要先在模式寄存器中,設置 CLE 使能3. ALE: Address Latch Enable,地址鎖存使能,在輸入地址之前,要先在模式寄存器中,設置 ALE 使能4. CE#: Chip Enable,芯片使能,在操作 Nand Flash之前,要先選中此芯片,才能操作5. RE#: Read Enable,讀使能,在讀取數(shù)據(jù)之前,要先使 CE#有效。6. WE#: Write Enable ,寫使能 在寫取數(shù)據(jù)之前,要先使 WE #有效。7. WP#: Write Protect,寫保護8. R/B#:Ready/Busy O

24、utput,就緒/忙,主要用于在發(fā)送完編程/擦除命令后,檢測這些操彳是否完成,忙,表 示編程/擦除操作仍在進行中,就緒表示操作完成.9. Vcc: Power,電源10. Vss: Ground,接地11. N.C: Non-Connection,未定義,未連接。小常識在數(shù)據(jù)手冊中,你常會看到,對于一個引腳定義,有些字母上面帶一橫杠的,那是說明此引腳/信號是低電平有效,比如你上面看到的RE頭上有個橫線,就是說明,此 RE是低電平有效,此外,為了書寫方便,在字母后面加“#",也是表示低電平有效,比如我上面寫的CE#;如果字母頭上啥都沒有,就是默認的高電平有效,比如上面的CLE,就是高電

25、平有效?!緸楹涡枰狝LE和CLE】突然想明白了, Nand Flash中,為何設計這么多的命令,把整個系統(tǒng)搞這么復雜的原因了 :比如命令鎖存使能(Command Latch Enable,CLE)和地址鎖存使能(Address Latch Enable, ALE),那是因 為,Nand Flash就8個I/O,而且是復用的,也就是,可以傳數(shù)據(jù),也可以傳地址,也可以傳命令, 為了區(qū)分你當前傳入的到底是啥,所以,先要用發(fā)一個 CLE (或ALE)命令,告訴nand Flash的控制 器一聲,我下面要傳的是命令(或地址),這樣,里面才能根據(jù)傳入的內(nèi)容,進行對應的動作。否則,nand flash內(nèi)部,

26、怎么知道你傳入的是數(shù)據(jù),還是地址,還是命令啊,也就無法實現(xiàn)正確的操作了 .12. nd Flash只有8個I/O引腳的好處】1 .減少外圍引腳:相對于并口(Parellel)的Nor Flash的48或52個引腳來說,的確是大大減小了引腳數(shù) 目,這樣封裝后的芯片體積,就小很多?,F(xiàn)在芯片在向體積更小,功能更強,功耗更低發(fā)展,減小芯 片體積,就是很大的優(yōu)勢。同時,減少芯片接口,也意味著使用此芯片的相關的外圍電路會更簡化, 避免了繁瑣的硬件連線。2 .提高系統(tǒng)的可擴展性,因為沒有像其他設備一樣用物理大小對應的完全數(shù)目的addr弓I腳,在芯片內(nèi)部換了芯片的大小等的改動,對于用全部的地址addr的引腳,

27、那么就會引起這些引腳數(shù)目的增加, 比如容量擴大一倍,地址空間/尋址空間擴大一倍,所以,地址線數(shù)目/addr引腳數(shù)目,就要多加一個, 而對于統(tǒng)一用8個I/O的引腳的Nand Flash,由于對外提供的都是統(tǒng)一的 8個引腳,內(nèi)部的芯片大小 的變化或者其他的變化,對于外部使用者(比如編寫nand flash驅(qū)動的人)來說,不需要關心,只是保證新的芯片,還是遵循同樣的接口,同樣的時序,同樣的命令,就可以了。這樣就提高了系統(tǒng)的擴展 性。Nand flash的一些典型(typical) 特性】1 .頁擦除時間是200us,有些慢的有800us。2 .塊擦除時間是1.5ms.3 .頁數(shù)據(jù)讀取到數(shù)據(jù)寄存器的時

28、間一般是20us。4 .串行訪問(Serial access )讀取一個數(shù)據(jù)的時間是 25ns,而一些舊的nand flash 是30ns,甚至 是 50ns。5 .輸入輸出端口是地址和數(shù)據(jù)以及命令一起multiplex 復用的。以前老的NandFlash ,編程/擦除時間比較短,比如K9G8G08UQMtt 5K次,而后來很多6.nand flash的編程/擦除的壽命,最多允許的次數(shù),以前的 nand flash多數(shù)是10K次,也就是1萬次,而現(xiàn)在很 多新的 nand flash,技術提高了,比如,Micron 的 MT29F1GxxABBNumonyx勺 NAND04G-B2D/NAND0

29、8G-BxC 都可以達到100K,也就是10萬次的編程/擦除。和之前常見的 Nor Flash達到同樣的使用壽命了。6 .48引腳的TSOP隹寸裝或52弓|腳的ULGA寸裝Nand Flash中的特殊硬件結構】由于nand flash相對其他常見設備來說,比較特殊,所以,特殊的設備,也有特殊的設計,所以, 有些特殊的硬件特性,就有比較解釋一下:1.頁寄存器(PageRegister ):由于NandFlash讀取和編程操作來說,一般最小單位是頁,所以, nand flash在硬件設計時候,就考慮到這一特性,對于每一片,都有一個對應的區(qū)域,專門用于存 放,將要寫入到物理存儲單元中去的或者剛從存儲

30、單元中讀取出來的,一頁的數(shù)據(jù),這個數(shù)據(jù)緩存區(qū),本質(zhì)上就是一個buffer ,但是只是名字叫法不同,datasheet里面叫做Page Register ,此處翻譯為 頁寄存器,實際理解為頁緩存,更為恰當些。注意:只有寫到了這個頁緩存中,只有等你發(fā)了對應的編程第二階段的確認命令0x10之后,實際的編程動作才開始,才開始把頁緩存中的數(shù)據(jù),一點點寫到物理存儲單元中去。所以,簡單總結一下就是,對于數(shù)據(jù)的流向,實際是經(jīng)過了如下步驟:圖4 Nand Flash讀寫時的數(shù)據(jù)流向Nand Flash 中的壞塊(Bad Block)】Nand Flash中,一個塊中含有1個或多個位是壞的,就成為其為壞塊。 壞塊

31、的穩(wěn)定性是無法保證的,也就是說,不能保證你寫入的數(shù)據(jù)是對的,或者寫入對了,讀出來也不 一定對的。而正常的塊,肯定是寫入讀出都是正常的。壞塊有兩種:(1) 一種是出廠的時候,也就是,你買到的新的,還沒用過的Nand Flash ,就可以包含了壞塊。此類出廠時就有的壞塊,被稱作 factory (masked)bad block 或initial bad/invalid block ,在出廠 之前,就會做對應的標記,標為壞塊。具體標記的地方是,對于現(xiàn)在常見的頁大小為 2K的NandFlash ,是塊中第一個頁的00b起始位置(關 于什么是頁和oob,下面會有詳細解釋)的第1個字節(jié)(舊的小頁面,pa

32、gesize是512B甚至256B的 nand flash ,壞塊標記是第6個字節(jié)),如果不是0xFF,就說明是壞塊。相對應的是,所有正常的 塊,好的塊,里面所有數(shù)據(jù)都是 0xFF的。(2)第二類叫做在使用過程中產(chǎn)生的,由于使用過程時間長了,在擦塊除的時候,出錯了,說明此 塊壞了,也要在程序運行過程中,發(fā)現(xiàn),并且標記成壞塊的。具體標記的位置,和上面一樣。這類塊 叫做 worn-out bad block 。對于壞塊的管理,在 Linux系統(tǒng)中,叫做壞塊管理(BBM Bad Block Managment ,對應的會有一個 表去記錄好塊,壞塊的信息,以及壞塊是出廠就有的,還是后來使用產(chǎn)生的,這個

33、表叫做 壞塊表(BBT Bad Block Table )。在 Linux 內(nèi)核 MT鹿構下的 Nand Flash 驅(qū)動,和 Uboot 中 Nand Flash 驅(qū)動中, 在加載完驅(qū)動之后,如果你沒有加入?yún)?shù)主動要求跳過壞塊掃描的話,那么都會去主動掃描壞塊,建 立必要的BBT的,以備后面壞塊管理所使用。而關于好塊和壞塊,Nand Flash在出廠的時候,會做出保證:1 .關于好的,可以使用的塊的數(shù)目達到一定的數(shù)目,比如三星的K9G8G08U0懈個flash 一共有4096個塊,出廠的時候,保證好的塊至少大于3996個,也就是意思是,你新買到這個型號的nand flash , 最壞的可能,有

34、3096 3996=100個壞塊。不過,事實上,現(xiàn)在出廠時的壞塊,比較少,絕大多數(shù), 都是使用時間長了,在使用過程中出現(xiàn)的。2 .保證第一個塊是好的,并且一般相對來說比較耐用。做此保證的主要原因是,很多Nand Flash壞塊管理方法中,就是將第一個塊,用來存儲上面提到的BBT,否則,都是出錯幾率一樣的塊,那么也就不太好管理了,連放 BBT的地方,都不好找了,人_人。一般來說,不同型號的 Nand Flash的數(shù)據(jù)手冊中,也會提到,自己的這個nand flash ,最多允許多少個壞塊。就比如上面提到的,三星的K9G8G08UOM最多有100個壞塊。對于壞塊的標記,本質(zhì)上,也只是對應的flash

35、上的某些字節(jié)的數(shù)據(jù)是非 0xFF而已,所以,只要是數(shù)據(jù),就是可以讀取和寫入的。也就意味著,可以寫入其他值,也就把這個壞塊標記信息破壞了。對 于出廠時的壞塊,一般是不建議將標記好的信息擦除掉的。uboot中有個命令是"nand scrub ”就可以將塊中所有的內(nèi)容都擦除了,包括壞塊標記,不論是出廠 時的,還是后來使用過程中出現(xiàn)而新標記的。一般來說,不建議用這個。不過,我倒是經(jīng)常用,其實 也沒啥大礙,呵呵。最好用“nand erase ”只擦除好的塊,對于已經(jīng)標記壞塊的塊,不擦除。nand Flash中頁的訪問順序】在一個塊內(nèi),對每一個頁進行編程的話,必須是順序的,而不能是隨機的。比如,

36、一個塊中有128個頁,那么你只能先對page。編程,再對pagel編程,。,而不能隨機的,比如先對 page3,再 pagel, page2., page。,page4,.?!酒x無關(CE don ' t-care)技術】很多Nand flash支持一個叫做CE don' t-care的技術,字面意思就是,不關心是否片選,那有人會問了,如果不片選,那還能對其操作嗎?答案就是,這個技術,主要用在當時是不需要選中 芯片卻還可以繼續(xù)操作的這些情況:在某些應用,比如錄音,音頻播放等應用,中,外部使用的微秒(us)級的時鐘周期,此處假設是比較少的2us,在進行讀取一頁或者對頁編程時,是

37、對 NandFlash操作,這樣的串行(Serial Access )訪問的周期都是20/30/50ns ,都是納秒(ns)級的,此處假設 是50ns,當你已經(jīng)發(fā)了對應的讀或?qū)懙拿钪?,接下來只是需要Nand Flash內(nèi)部去自己操作,將數(shù)據(jù)讀取除了或?qū)懭脒M去到內(nèi)部的數(shù)據(jù)寄存器中而已,此處,如果可以把片選取消,CE建低電平有效,取消片選就是拉高電平,這樣會在下一個外部命令發(fā)送過來之前,即微秒量級的時間里面,即 2us-50ns-2us,這段時間的取消片選,可以降低很少的系統(tǒng)功耗,但是多次的操作,就可以在很大 程度上降低整體的功耗了??偨Y起來簡單解釋就是:由于某些外部應用的頻率比較低,而 Na

38、nd Flash內(nèi)部操作速度比較快,所 以具體讀寫操作的大部分時間里面,都是在等待外部命令的輸入,同時卻選中芯片,產(chǎn)生了多余的功 耗,此"不關心片選”技術,就是在 Nand Flash的內(nèi)部的相對快速的操作(讀或?qū)?完成之后,就 取消片選,以節(jié)省系統(tǒng)功耗。待下次外部命令/數(shù)據(jù)/地址輸入來的時候,再選中芯片,即可正常繼續(xù) 操作了。這樣,整體上,就可以大大降低系統(tǒng)功耗了。注:Nand Flash的片選與否,功耗差別會有很大 。如果數(shù)據(jù)沒有記錯的話,我之前遇到我們系統(tǒng)里面 的nand flash的片選,大概有5個mA的電流輸出呢,要知道,整個系統(tǒng)優(yōu)化之后的待機功耗,也才 10個mA右的?!?/p>

39、帶 EDC勺拷回操作以及 Sector 的定義(Copy-Back Operation with EDC& Sector Definition for EDC】Copy-Back功能,簡單的說就是,將一個頁的數(shù)據(jù),拷貝到另一個頁。如果沒有Copy-Back功能,那么正常的做法就是,先要將那個頁的數(shù)據(jù)拷貝出來放到內(nèi)存的數(shù)據(jù) buffer中,讀出來之后,再用寫命令將這頁的數(shù)據(jù),寫到新的頁里面。而Copy-Back功能的好處在于,不需要用到外部的存儲空間,不需要讀出來放到外部的 buffer里面, 而是可以直接讀取數(shù)據(jù)到內(nèi)部的頁寄存器(page register )然后寫到新的頁里面去。而且

40、,為了保 證數(shù)據(jù)的正確,要硬件支持 EDC (Error Detection Code )的,否則,在數(shù)據(jù)的拷貝過程中,可能會 出現(xiàn)錯誤,并且拷貝次數(shù)多了,可能會累積更多錯誤。而對于錯誤檢測來說,硬件一般支持的是512字節(jié)數(shù)據(jù),對應有16字節(jié)用來存放校驗產(chǎn)生的 ECC發(fā)值,而這512字節(jié)一般叫做一個扇區(qū)。對于 2K+ 64字節(jié)大小的頁來說,按照512字節(jié)分,分別叫做 A,B,C,D區(qū),而后面的64字節(jié)的00b區(qū)域,按照16字節(jié)一個區(qū),分別叫做E,F,G,H區(qū),對應存放A, B, C, D數(shù)據(jù)區(qū)的ECC勺值??偨Y:512+162K +64 : A B C D - E F G H 區(qū)Copy-Ba

41、ck編程的主要作用在于,去掉了數(shù)據(jù)串行讀取出來,再串行寫入進去的時間,所以,這部分 操作,是比較耗時的,所以此技術可以提高編程效率,提高系統(tǒng)整體性能?!径嗥瑫r編程(Simultaneously Program Multi Plane) 】對于有些新出的Nand Flash,支持同時對多個片進行編程,比如上面提到的三星的K9K8G08U0A內(nèi)部包含4片(Plane),分別叫做Plane。,Plane1 , Plane2, Plane3。.由于硬件上,對于 每一個Plane, 都有對應的大小是2048+64=2112字節(jié)的頁寄存器(PageRegister ),使得同時支持多個 Plane編程

42、成為可能。K9K8G08U0及持同時對2個Plane進行編程。不過要注意的是,只能對 Plane。和Plane1 或者Plane2和Plane3 ,同時編程,而不支持 PlaneO和Plane2同時編程?!窘诲e頁編程(Interleave Page Program )】多片同時編程,是針對一個 chip里面的多個Plane來說的,而此處的交錯頁編程,是指 對多個chip而言的??梢韵扔謙一個chip,假設叫chip1 ,里面的一頁進行編程,然后此時,chip1內(nèi)部就開始將數(shù)據(jù)一點點寫到頁里面,就出于忙的狀態(tài)了,而此時可以利用這個時間,對出于就緒狀態(tài)的chip2 ,也進行頁編程,發(fā)送對應的命令后

43、,chip2內(nèi)部也就開始慢慢的寫數(shù)據(jù)到存儲單元里面去了,也出于忙的狀態(tài) 了。此時,再去檢查chip1 ,如果編程完成了,就可以開始下一頁的編程了,然后發(fā)完命令后,就讓 其內(nèi)部慢慢的編程吧,再去木查chip2 ,如果也是編程完了,也就可以進行接下來的其他頁的編程了。 如此,交互操作chip1和chip2 ,就可以有效地利用時間,使得整體編程效率提高近2倍,大大提高nand flash 的編程/擦寫速度了?!倦S機輸出頁內(nèi)數(shù)據(jù)(Random Data Output In a Page )】在介紹此特性之前,先要說說,與 Random Data Output In a Page 相對應的是,普通的,正

44、常的, sequential data output in a page 。正常情況下,我們讀取數(shù)據(jù),都是先發(fā)讀命令,然后等待數(shù)據(jù)從存儲單元到內(nèi)部的頁數(shù)據(jù)寄存器中后, 我們通過不斷地將RE#(Read Enale ,低電平有效)置低,然后從我們開始傳入的列的起始地址,一點 點讀出我們要的數(shù)據(jù),直到頁的末尾,當然有可能還沒到頁地址的末尾,就不再讀了。所謂的順序 (sequential )讀取也就是,根據(jù)你之前發(fā)送的列地址的起始地址開始,每讀一個字節(jié)的數(shù)據(jù)出來, 內(nèi)部的數(shù)據(jù)指針就加1,移到下個字節(jié)的地址,然后你再讀下一個字節(jié)數(shù)據(jù),就可以讀出來你要的數(shù) 據(jù)了,直到讀取全部的數(shù)據(jù)出來為止。而此處的隨機

45、(random)讀取,就是在你正常的順序讀取的過程中,先發(fā)一個隨機讀取的開始命令 0x05命令,再傳入你要將內(nèi)部那個數(shù)據(jù)指針定位到具體什么地址,也就是2個cycle的列地址,然后再發(fā)隨機讀取結束命令 0xE0,然后,內(nèi)部那個數(shù)據(jù)地址指針,就會移動到你所制定的位置了,你接下來再讀取的數(shù)據(jù),就是從那個制定地址開始的數(shù)據(jù)了。而nand flash數(shù)據(jù)手冊里面也說了,這樣的隨機讀取,你可以多次操作,沒限制的。請注意,上面你所傳入的地址,都是列地址,也就是頁內(nèi)地址,也就是說,對于頁大小為 2K的nandflash來說,所傳入的地址,應該是小于 2048+64=2112的。不過,實際在nand flash

46、的使用中,好像這種用法很少的。絕大多數(shù),都是順序讀取數(shù)據(jù)?!卷摼幊?寫操作)】Nand flash的寫操作叫做編程Program,編程,一般情況下,是以頁為單位的。有的Nand Flash,比如K9K8G08U0A支持部分頁編程,但是有一些限制:在同一個頁內(nèi)的,連續(xù)的 部分頁的編程,不能超過4次。一般情況下,很少使用到部分頁編程,都是以頁為單位進行編程操作 的。一個操作,用兩個命令去實現(xiàn),看起來是多余,效率不高,但是實際上,有其特殊考慮,至少對于塊擦除來說,開始的命令 0x60是擦除設置命令(erase setup comman),然后傳入要擦除的 塊地址,然后再傳入擦除確認命令(erase

47、confirm command ) 0xDO,以開始擦除的操作。這種,分兩步:開始設置,最后確認的命令方式,是為了避免由于外部由于無意的/未預料而產(chǎn)生的噪音,比如,此時,即使被 nand flash誤認為是擦除操作,但是沒有之后的確認操作0xD0, nandflash就不會去擦除數(shù)據(jù),這樣使得數(shù)據(jù)更安全,不會由于噪音而誤操作。分類:Flash 驅(qū)動【讀(read )操作過程詳解】以最簡單的read操作為例,解釋如何理解時序圖,以及將時序圖中的要求,轉化為代碼。解釋時序圖之前,讓我們先要搞清楚,我們要做的事情:那就是,要從 nand flash的某個頁里面, 讀取我們要的數(shù)據(jù)。要實現(xiàn)此功能,會涉

48、及到幾部分的知識,至少很容易想到的就是:需要用到哪些命令,怎么發(fā)這些命 令,怎么計算所需要的地址,怎么讀取我們要的數(shù)據(jù)等等。下面,就一步步的解釋,需要做什么,以及如何去做:1 .需要使用何種命令首先,是要了解,對于讀取數(shù)據(jù),要用什么命令。F面是datasheet中的命令集合:Table- 1. Command SetsFunctionis: Cycle?rtd CycleAcceptable Command during BReadOOH30hRead for Gapy 由曲oon35hRM ID酬-,ResetFFh-0Page ProgrameohionTwo-Plane Page Pro

49、gram *son11 nGTh10hCopy-Back Program85hionTwo-Plane Copy-Back Program,S5h-11h81h-10hErase60hDOhTwo-Plane Block Erase60h60hDOhRandom Data lnputn 1B5h.Randoni Data Output105tlEOhRead Status70ft0Read EDC Status':l7Bh0Chipl Status3Flh0Chip Status-F2h0圖 5.Nand Flash K9K8G08U0A 的命令集合很容易看出,我們要t取數(shù)據(jù),要用到

50、Read命令,該命令需要2個周期,第一個周期發(fā)0x00,第二 個周期發(fā)0x30。2 .發(fā)送命令前的準備工作以及時序圖各個信號的具體含義知道了用何命令后,再去了解如何發(fā)送這些命令。小常識在開始解釋前,多羅嗦一下"使能”這個詞,以便有些讀者和我以前一樣,在聽這類雖然對于某些專 業(yè)人士說是屬于最基本的詞匯了,但是對于初次接觸,或者接觸不多的人來說,聽多了,容易被搞得 一頭霧水:使能(Enable),是指使其(某個信號)有效,使其生效的意思,“使其” “能夠”怎么 怎么樣。比如,上面圖中的CLE線號,是高電平有效,如果此時將其設為高電平, 我們就叫做, 將CLE使能,也就是使其生效的意思。R

51、ead OperationtCLRALEtR-itRF?-RCW Ad口陣號TR/BCd Adcswpw Add 1Column Address I+ -IV/C->WER£f*IRC F4 5廠L S圖6.Nand Flash數(shù)據(jù)讀取操作的時序圖注:此圖來自三星的型號 K9K8G08U0A1 nand flash 的數(shù)據(jù)手冊(datasheet)。我們來一起看看,我在圖6中的特意標注的邊上的黃色豎線。黃色豎線所處的時刻,是在發(fā)送讀操作的第一個周期的命令0x00之前的那一刻。讓我們看看,在那一刻,其所穿過好幾行都對應什么值,以及進一步理解,為何要那個值。(1)黃色豎線穿過的第一

52、行,是 CLE還記得前面介紹命令所存使能(CLB那個引腳吧? CLE將 CLE置1,就說明你將要通過I/O復用端口發(fā)送進入 NandFlash的,是命令,而不是地址或者其他類 型的數(shù)據(jù)。只有這樣將CLE置1,使其有效,才能去通知了內(nèi)部硬件邏輯,你接下來將收到的是命令, 內(nèi)部硬件邏輯,才會將受到的命令,放到命令寄存器中,才能實現(xiàn)后面正確的操作,否則,不去將 CLE置1使其有效,硬件會無所適從,不知道你傳入的到底是數(shù)據(jù)還是命令了。(2)而第二彳f,是CE#,那一刻的值是0。這個道理很簡單,你既然要向 Nand Flash發(fā)命令,那么 先要選中它,所以,要保證 CE就低電平,使其有效,也就是片選有效

53、。(3)第三彳f是WE#意思是寫使能。因為接下來是往 nand Flash里面寫命令,所以,要使得 WE#T 效,所以設為低電平。(4)第四行,是ALE是低電平,而ALE是高電平有效,此時意思就是使其無效。而對應地,前面介 紹的,使CLE有效,因為將要數(shù)據(jù)的是命令,而不是地址。如果在其他某些場合,比如接下來的要輸 入地址的時候,就要使其有效,而使 CLE無效了。(5)第五行,RE#,此時是高電平,無效??梢钥吹?,知道后面低6階段,才變成低電平,才有效,因為那時候,要發(fā)生讀取命令,去讀取數(shù)據(jù)。(6)第六行,就是我們重點要介紹的,復用的輸入輸出I/O端口了,此刻,還沒有輸入數(shù)據(jù),接下來,在不同的階

54、段,會輸入或輸出不同的數(shù)據(jù)/地址。(7)第七行,R/B#,高電平,表示R (Ready) /就緒,因為到了后面的第 5階段,硬件內(nèi)部,在第四 階段,接受了外界的讀取命令后,把該頁的數(shù)據(jù)一點點送到頁寄存器中,這段時間,屬于系統(tǒng)在忙著 干活,屬于忙的階段,所以, R/B#才變成低,表示Busy忙的狀態(tài)的。介紹了時刻的各個信號的值,以及為何是這個值之后,相信,后面的各個時刻,對應的不同信號的 各個值,大家就會自己慢慢分析了,也就容易理解具體的操作順序和原理了。3 .如何計算出,我們要傳入的地址在介紹具體讀取數(shù)據(jù)的詳細流程之前,還要做一件事,那就是,先要搞懂我們要訪問的地址,以及這 些地址,如何分解后

55、,一點點傳入進去,使得硬件能識別才行。此處還是以K9K8G08U0的例,此nand flash , 一共有8192個塊,每個塊內(nèi)有64頁,每個頁是2K+64Bytes,假設,我們要訪問其中的第 7000個塊中的第25頁中的1208字節(jié)處的地址,此時,我們就要 先把具體的地址算出來:物理地址二塊大小X塊號+頁大小X頁號+頁內(nèi)地址=7000X 128K+64X 2K+1208=0x36B204B8接下來,我 們就看看,怎么才能把這個實際的物理地址,轉化為 nand Flash所要求的格式。I/O 01/011/0 21/0 3IQ 4l;0 51/0 6I/O 71st CycleAdAiA2A+

56、AsAeAt2nd CycleAt口AnY工3M CycleAl2A13AmAisAiaAi 7AlftAisdth Cycle具30AnA22AssA24A25A2755 CycleA2GA23Aso,LrL1'L*L在解釋地址組成之前,先要來看看其datasheet中關于地址周期的介紹:CohHnn Addrt5sCd umn AddressRow AddressRow AddressRow Add ressHOT E Col umri Adcteas Siarti ng Mdrs骷 ol the Regtater., L must be sei to .Low1',The device ignones any 日dditionm injKJt of address taeles than required.圖7 Nand Flash的地址周期組成

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論