類型
非易失性存儲器主要有以下類型:
唯讀存儲器
PROM
可程式唯讀存儲器(Programmable ROM,PROM)其內部有行列式的鎔絲,可依用戶(廠商)的需要,利用電流將其燒斷,以寫入所需的數據及程式,鎔絲一經燒斷便無法再恢復,亦即數據無法再更改。
EPROM
可抹除可程式唯讀存儲器(Erasable Programmable Read Only Memory,EPROM)可利用高電壓將數據編程寫入,但抹除時需將線路曝光於
紫外線下一段時間,數據始可被清空,再供重複使用。因此,在封裝外殼上會預留一個
石英玻璃所制的透明窗以便進行紫外線曝光。寫入程式後通常會用貼紙遮蓋透明窗,以防日久不慎曝光過量影響數據。
OTPROM
一次編程唯讀存儲器(One Time Programmable Read Only Memory,OTPROM)內部所用的晶片與寫入原理同EPROM,但是為了節省成本,封裝上不設定透明窗,因此編程寫入之後就不能再抹除改寫。
EEPROM
電子抹除式可複寫唯讀存儲器(Electrically Erasable Programmable Read Only Memory,EEPROM)之運作原理類似EPROM,但是抹除的方式是使用高
電場來完成,因此不需要透明窗。
快閃記憶體
快閃記憶體(英語:
flash memory),是一種電子式可清除程式化唯讀存儲器的形式,允許在操作中被多次擦或寫的存儲器。這種科技主要用於一般性數據存儲,以及在電腦與其他數字產品間交換傳輸數據,如
儲存卡與
隨身碟。快閃記憶體是一種特殊的、以宏塊抹寫的EEPROM。早期的快閃記憶體進行一次抹除,就會清除掉整顆晶片上的數據。
快閃記憶體的成本遠較可以位元組為單位寫入的
EEPROM來的低,也因此成為非易失性固態存儲最重要也最廣為採納的技術。像是PDA、筆記本電腦、數字隨身聽、數位相機與手機上均可見到快閃記憶體。此外,快閃記憶體在遊戲主機上的採用也日漸增加,藉以取代存儲遊戲數據用的EEPROM或帶有電池的
SRAM。
快閃記憶體是非易失性的記憶體。這表示單就保存數據而言,它是不需要消耗電力的。與硬碟相比,快閃記憶體也有更佳的動態抗震性。這些特性正是快閃記憶體被移動設備廣泛採用的原因。快閃記憶體還有一項特性:當它被製成儲存卡時非常可靠──即使浸在水中也足以抵抗高壓與極端的溫度。快閃記憶體的寫入速度往往明顯慢於讀取速度。
雖然快閃記憶體在技術上屬於
EEPROM,但是“EEPROM”這個字眼通常特指非快閃式、以小區塊為清除單位的
EEPROM。它們典型的清除單位是位元組。因為老式的
EEPROM抹除循環相當緩慢,相形之下快閃記體較大的抹除區塊在寫入大量數據時帶給其顯著的速度優勢。快閃記憶體最常見的封裝方式是TSOP48和BGA,在邏輯接口上的標準則由於廠商陣營而區分為兩種:ONFI和Toggle。手機上的快閃記憶體常常以eMMC的方式存在。
快閃記憶體的限制
區塊抹除
快閃記憶體的一種限制在於即使它可以單一位元組的方式讀或寫入,但是抹除一定是一整個區塊。一般來說都是設定某一區中的所有比特為“1”,剛開始區塊內的所有部分都可以寫入,然而當有任何一個比特被設為“0”時,就只能藉由清除整個區塊來恢復“1”的狀態。換句話說快閃記憶體(特別是NOR Flash)能提供隨機讀取與寫入操作,卻無法提供任意的隨機改寫。不過其上的區塊可以寫入與既存的“0”值一樣長的訊息(新值的0比特是舊值的0比特的
超集)。例如:有一小區塊的值已抹除為1111,然後寫入1110的訊息。接下來這個區塊還可以依序寫入1010、0010,最後則是0000。可是實際上少有
算法可以從這種連續寫入兼容性得到好處,一般來說還是整塊抹除再重寫。儘管快閃記憶體的
數據結構不能完全以一般的方式做更新,但這允許它以“標記為不可用”的方式刪除訊息。這種技巧在每單元存儲大於1比特數據的MLC設備中必須稍微做點修改。
記憶耗損
另一項快閃記憶體的限制是它有抹寫循環的次數限制(大多商業性SLC快閃記憶體保證“0”區有十萬次的抹寫能力,但其他區塊不保證)。這個結果部分地被某些
固件或檔案系統為了在相異區塊間分散寫入操作而進行的計算寫入次數與動態重對映所抵銷;這種技巧稱為耗損平衡(wear leveling)。另一種處理方法稱為
壞區管理(Bad Block Management, BBM)。這種方法是在寫入時做驗證並進行動態重測,如果有驗證失敗的區塊就加以剔除。對多數移動設備而言,這些磨損管理技術可以延長其內部快閃記憶體的壽命(甚至超出這些設備的使用年限)。此外,丟失部分數據在這些設備上或許是可接受的。至於會進行大量數據讀寫循環的高可靠性數據存儲套用則不建議使用快閃記憶體。不過這種限制不適用於
路由器與
瘦客戶端(Thin clients)等唯讀式套用,這些設備往往在使用年限內也只會寫入一次或少數幾次而已。
讀取干擾
所使用的快閃記憶體讀取方式隨著時間的推移會導致在同一區塊中相近的記憶單元內容改變(變成寫入動作)。這即是所謂的讀取干擾。會導致讀取干擾現象的讀取次數門檻介於區塊被抹除間,通常為100,000次。假如連續從一個記憶單元讀取,此記憶單元將不會受損,而受損卻是接下來被讀取的周圍記憶單元。為避免讀取干擾問題,快閃記憶體控制器通常會計算從上次抹除動作後的區塊讀取動作總次數。當計數值超過所設定的目標值門檻時,受影響的區塊會被複製到一個新的區塊,然後將原區塊抹除後釋放到區塊回收區中。原區塊在抹除動作後就會像新的一樣。若是快閃記憶體控制器沒有即時介入時,讀取干擾錯誤就會發生,如果錯誤太多而無法被ECC機制修復時就會伴隨著可能的數據丟失。
寫入(編程)干擾
寫入干擾(編程干擾)是指當對頁(page)進行寫入時,由於閾值電壓接近的關係,相鄰的位(bit)也被升高,從而造成相鄰的位出錯。快閃記憶體電荷非常不穩定,相鄰存儲電荷的懸浮門間會相互干擾,造成相鄰懸浮門間的bit錯誤,MLC由於存在4組接近的電壓,與SLC相比更容易受到干擾。