4.04.2007

MLC nand flash

MLC和SLC有什麼不同 (使用上) ?

不允許 "partial programming" ?

好像也就只有這個。google了半天,也沒有人說明partial programming是什麼?還有為甚麼MLC不行?

只有一篇有說.. MLC 上對同一page的某個sector作write動作時,會 "cause failure distribute" 。
是說 ?寫這個sector會影響到同page的其他sector ?

這一篇 :

最近改Nand driver,從SLC改為支持MLC。
但改完了發現一個問題:
1、全部先擦一遍

2、連續寫20個Page,每一個Page都是2K內容 + 64Byte的OOB
(此時若將這20個Page讀出來,發現全部都是正確的)

3、將前8個Page的OOB部分寫入一些信息
(此時是只寫OOB)

4、再將這20個Page讀出來,發現有些Page的內容都不對了,包括後面12個Page中也有些內容不對了。

問題就是這樣。
我知道MLC的Page+OOB需要一次寫入,所以每次寫Page時都是2K內容 + 64Byte的OOB,第3步執行完後,我想MLC不至於將原來的Page內容也就弄錯掉了吧。

想請問,單獨寫入MLC的OOB部分,會不會將這個Page的內容弄亂?會不會將其他Page的內容弄亂?還是都不會亂,是我程序的問題?

請達人幫忙看下!
難道就是這個原因 ?

那,SLC哪裡用到partial programming ?

大概是FTL吧,以前就懷疑 spare area部份有用到 flash 允許將1寫成0的特性,來mark "dirty" page.但是CE是沒有source code,所以僅只於猜測。
這一篇,有一句
....... much like the way translation layers work for single-bit-per-cell flash memories.

所以?是猜對囉。

所以現有的CE block driver不適用MLC。如果要支援,連FTL都要重新寫過...

opensource 還是比較好.. YFFS2 已經支援這個,在Wiki中有提到..
Each page within a block must be written to in sequential order, and each page must be written only once. YAFFS2 was designed to accommodate these newer chips.
這不就是MLC的限制嗎?



有關 nandflash, ecc, wear leveling , bad block management.
MICRO 的網站有一系列 application note 說明:

http://www.micron.com/products/nand_flash/clearnand.html
順帶推銷一下,他們的 ClearNand - with on-die ECC 的 Nand.

* 這個很不錯 (? 如果 price 沒增加的話), 因為 Nand ECC bit 增加的速度太外,Application Processor 跟本追不上,常常面臨, 開發完成,nand已經換代的問題。

4 則留言:

想走多远,就走多远 提到...

SLC的Partial Programming的一种用法2K+64bytes的Page,可以当作(512+16+512+16+512+16+512+16)来用。也就是说第一次只写最前面的512+16bytes,第二次,第三次。。。

checko 提到...

? 這樣說明我還是不太瞭解,改天再詳細研究看看...:p

想走多远,就走多远 提到...

啊。。。
就是说一页的数据可以分几次写,不用一次都写完。
不过你的理解也是对的,SLC NAND理论上好像是可以重复写,就是把1变成0,但0变不回1,除非擦整个Block。

checko 提到...

原來是這樣,非常感謝您的解說。