最近看了好久的nandflash,總算是有了一點感覺,但一直沒有系統的整理一下,腦子裡很亂,今天剛好公司的很多人都出去旅遊了,所以工作不是很忙,就在這裡好好整理一下吧。首先當然是最基礎的了,nandflash的硬體實現機制。
flash
全名叫做
flash memory
,屬於非易失性儲存裝置
(non-volatile memory device)
,與此相對應的是易失性儲存裝置
(volatile memory device)
。關於什麼是非易失性
/易失性,從名字中就可以看出,非易失性就是不容易丟失,資料儲存在這類裝置中,即使斷電了,也不會丟失,這類裝置,除了
flash
,還有其他比較常見的入硬碟,
rom等,與此相對的,易失性就是斷電了,資料就丟失了,比如大家常用的記憶體,不論是以前的
sdram
,ddr sdram
,還是現在的
ddr2
,ddr3
等,都是斷電後,資料就沒了。
flash
的內部儲存是
mosfet
,裡面有個懸浮門
(floating gate)
,是真正儲存資料的單元。在
flash
之前,紫外線可擦除
(uv-erasable)
的eprom
,就已經採用用
floating gate
儲存資料這一技術了。
資料在flash
記憶體單元中是以電荷
(electrical charge)
形式儲存的。儲存電荷的多少,取決於圖中的外部門(
external gate
)所被施加的電壓,其控制了是向儲存單元中衝入電荷還是使其釋放電荷。而資料的表示,以所儲存的電荷的電壓是否超過乙個特定的閾值
vth來表示。
【slc
和mlc
的實現機制】
nand flash
按照內部儲存資料單元的電壓的不同層次,也就是單個記憶體單元中,是儲存
1位資料,還是多位資料,可以分為
slc和
mlc:
1. slc
,single level cell:
單個儲存單元,只儲存一位資料,表示成1或
0.就是上面介紹的,對於資料的表示,單個儲存單元中內部所儲存電荷的電壓,和某個特定的閾值電壓
vth,相比,如果大於此
vth值,就是表示
1,反之,小於
vth,就表示
0.對於
nand flash
的資料的寫入
1,就是控制
external gate
去充電,使得儲存的電荷夠多,超過閾值
vth,就表示
1了。而對於寫入
0,就是將其放電,電荷減少到小於
vth,就表示0了。
關於為何
nand flash
不能從0變成1
,我的理解是,物理上來說,是可以實現每一位的,從0變成
1的,但是實際上,對於實際的物理實現,出於效率的考慮,如果對於,每乙個儲存單元都能單獨控制,即,0變成
1就是,對每乙個儲存單元單獨去充電,所需要的硬體實現就很複雜和昂貴,同時,所進行對塊擦除的操作,也就無法實現之前的,一閃而過的速度了,也就失去了
flash
的眾多特性了。
2. mlc
,multi level cell:與
slc相對應,就是單個儲存單元,可以儲存多個位,比如2位,
4位等。其實現機制,說起來比較簡單,就是,通過控制內部電荷的多少,分成多個閾值,通過控制裡面的電荷多少,而達到我們所需要的儲存成不同的資料。比如,假設輸入電壓是
vin=
4v(實際沒有這樣的電壓,此處只是為了舉例方便),那麼,可以設計出2的
2次方=
4個閾值,
1/4的
vin=1v,
2/4的
vin=2v,
3/4的
vin=3v,
vin=
4v,分別表示
2位資料00,
01,10,
11,對於寫入資料,就是充電,通過控制內部的電荷的多少,對應表示不同的資料。
對於讀取,則是通過對應的內部的電流(與
vth成反比),然後通過一系列解碼電路完成讀取,解析出所儲存的資料。這些具體的物理實現,都是有足夠精確的裝置和技術,才能實現精確的資料寫入和讀出的。單個儲存單元可以儲存
2位資料的,稱作2的
2次方=
4 level cell
,而不是
2 level cell
,這點,之前差點搞暈了。。。,同理,對於新出的單個儲存單元可以儲存
4位資料的,稱作2的
4次方=
16 level cell
。【關於如何識別
slc還是
mlc】
nand flash
設計中,有個命令叫做
read id
,讀取id
,意思是讀取晶元的
id,就像大家的身份證一樣,這裡讀取的
id中,是讀取好幾個位元組,一般最少是
4個,新的晶元,支援
5個甚至更多,從這些位元組中,可以解析出很多相關的資訊,比如此
nand flash
內部是幾個晶元(
chip
)所組成的,每個
chip
包含了幾片(
plane
),每一片中的頁大小,塊大小,等等。在這些資訊中,其中有乙個,就是識別此
flash
是slc
還是mlc
。下面這個就是最常見的
nand flash
的datasheet
中所規定的,第
3個位元組,
3rd byte
,所表示的資訊,其中就有
slc/mlc
的識別資訊。
總結一下:nandflash也是一種rom,通俗一點理解就是可以當做硬碟用,也就是說掉電後,上面的資料還在。
nandflash分為slc和mlc兩種實現機制,主要是根據其單個記憶體單元所能存放資料的位數,slc只能存放一位資料,
nandflash的操作:對其寫如資料1,就是乙個充電的過程,寫入資料0,是乙個放電的過程。資料是1還是0主要是根據所設定的閥值電壓決定的
NAND Flash硬體原理
一 儲存資料的原理 兩種快閃儲存器都是用三端器件作為儲存單元,分別為源極 漏極和柵極,與場效電晶體的工作原理相同,主要是利用電場的效應來控制源極與漏極之間的通斷,柵極的電流消耗極小,不同的是場效電晶體為單柵極結構,而flash為雙柵極結構,在柵極與矽襯底之間增加了乙個浮置柵極。浮置柵極是由氮化物夾在...
MTD原始裝置與NANDFLASH硬體驅動互動
好久沒寫部落格了,今天再次分析nandflash驅動程式,每一次讀原始碼總有一點的收穫 1 首先從入口函式開始 probe函式將是我們遇到的第乙個與具體硬體打交道,同時也相對複雜的函式對於很多外設的driver來說,只要能成功實現probe函式,那基本上完成這個外設的driver也就成功了一多半,基...
MTD原始裝置與NANDFLASH硬體驅動互動
好久沒寫部落格了,今天再次分析nandflash驅動程式,每一次讀原始碼總有一點的收穫 1 首先從入口函式開始 probe函式將是我們遇到的第乙個與具體硬體打交道,同時也相對複雜的函式對於很多外設的driver來說,只要能成功實現probe函式,那基本上完成這個外設的driver也就成功了一多半,基...