Showing posts with label storage. Show all posts
Showing posts with label storage. Show all posts

Sunday, July 13, 2008

Commands of the NAND

Applications of NAND

到電子商場逛一圈就會發現一堆產品都有 NAND flash 的身影(例如大拇哥,記憶卡,MP3 player,數位相框,甚至 PC 等)。前陣子和 simayi 閒聊時,他就提到:既然大家都愛用 NAND flash ,要是有人為它搞個 IP 或函式庫之類的,勢必可大幅節省開發時間。

相信處理過 NAND flash 的 firmware 人員,在啃讀 datasheet 的過程,難免得謹慎地交叉比對,好好推敲那也佔了不少篇幅的時序圖,以免自己還是不夠小心,誤解文意……

不知道大家看了那一疊 waveform 後,有什麼感想?我的看法是,那疊圖雖補足了許多重要細節,卻沒能好好強調重點,抽象度不夠。這根本是在折磨 firmware 人員,使我們構思演算法時綁手綁腳。

因此,在 K 完文件後,我為這疊 command waveforms 作的第一件事就是--提昇抽象度,強調重點,用 Computer Science 學生都看得懂的語言重新詮釋過:

Command Sequences (2k)

Command Sequences (2k, cont.)

基本的正規表示法就捕捉到 NAND flash commands 的內涵,充分表現出蘊藏其中的模式 :)

適當的表示法可以流暢表達所思所想,幫助我們釐清思緒、避免錯誤;好的表示法更可以提供新的洞見,讓我們解決乍看之下非常困難的問題,甚至進一步導致新的發現。

將來要實現自動化,或 Workflow 軟體時,正規、簡明的表示法更是一個必要的基礎設施。

後記:就 NAND flash 而言,僅僅是 command 的正規化還不夠方便;為 NAND flash 設計演算法時,最好再架上另層一抽象,以幫助思考。

Monday, June 30, 2008

NAND Flash 簡介

The insides of a SD Card

撬開一張 SD 卡,裡面最顯眼的,當然就是那大大一顆的 NAND flash ,我們餵給 SD 卡的資料都儲存在裡面;在 NAND flash 旁邊,還可看到一顆小一號的,那就是 controller IC , 要確保資料的儲存是安全可靠的,有九成的責任都要算在 controller 身上。

在硬體介面方面, NAND Flash 雖有 bus 結構,卻沒去區分 address bus 及 data bus 。在 NAND Flash 上進行任何操作(如 read, write, erase 等),都要透過 command ,且無論 address, data, 或 command,都以同一組 I/O bus 傳輸。

此外, NAND flash 在資料 program 或保存過程,還會隨機出錯,所以廠商才會建議搭配 ECC (Error Correcting Coding) ,以資料冗餘來偵測及更正這種隨機的錯誤。

Compare to NOR Flash

就算不考慮上述這些, NAND flash 還是非常難纏,對 firmware 人員來說更是如此:它無法像 RAM 或 ROM 那樣,隨插隨用;也不像 serial NOR flash 那樣,照著 spec. 下下 command 就能了事。我就以 Samsung K9F1G08U0B 這顆 NAND flash 為例,摘要如下:

Samsung K9F1G08U0B

相較於其他 floating gate 製品,NAND Flash 最讓人詬病的是壞塊(bad blocks),不但一出廠就允許壞塊存在,在保固的使用壽命內好塊還會陸續變成壞塊,更慘的是壞塊的發生還是隨機的。也因如此, NAND flash 的 firmware 或專用的檔案系統都得好好管理壞塊(Bad Block Management),讓用戶察覺不到壞塊存在。

再者,同樣是 floating gate 組出來的, NAND Flash 當然也有明顯的寫入次數限制,再加上它常用於頻繁、不均勻的寫入場合,所以要有一個叫作 wear leveling 的抽象層,讓針對單一邏輯位址的多次寫入,分散到不同的實體位址,以避免太快壽終。

The Algorithm

Tags: [] [] []