Archive for the NAND Category

Note: Spare Block for SLC NAND Device(x8)

Posted in Driver, NAND, WinCE on 2012 年 01 月 14 日 by Kun-Yi

SLC NAND 的 16 bytes Spare 區塊, 在區塊內的安排如下

Small Page (512+16) 是上圖, Bad Block Indicator 被安排在 第 6 個 Byte

Large Page(2048+16*4), 則Bad Block indicator 則被擺到第一個Byte

  • BAD: Bad page indicator, 當值不為0xFF, 表示該頁是壞的
  • LSN: Logical Block Number 提供上層 FTL 記錄邏輯扇區用
  • RESERVED: 也是主要用來提供 FTL 用來做一些演算法利用的儲存區
  • ECC0 ~ ECC2, Main Array 的 ECC Code 儲存區, 因 256 Byte 會用到 22bit 的ECC, 512 BYTE 則用到 24bits 剛好三個BYTE
  • S-ECC0 ~ S-ECC1, Spare 區域用的 ECC 碼, 主要針對 LSNx, 等校正

Ref. Spare Assignment Standard, Samsung App. Note

廣告

Note: SLC NAND Flash, Large Block, 2K page size

Posted in Driver, NAND, WinCE on 2012 年 01 月 11 日 by Kun-Yi

今年被公司安排, 從 PC BIOS Engineer 轉成了SW Engineer, 重操舊業搞起了WinCE, 因為案子需求, Study 了一下 NAND 的結構,這篇筆記以 2K Large Block 的SLC NAND 為例, 會想寫下筆記是因為網路上看了很多資料, 但是有些過於分散, 寫成code的也缺一些關鍵點, 不適合簡單入門的概念, 題外話, 下圖是用Google Documents 畫的, 現在 Web App 真的是很成熟!

NAND

上圖有三個部分

  • NAND PHYSICAL 是 NAND Flash datasheet 裡面寫的實體頁(page)配置, 2048Byte的Main Array + 64Byte的Spare Array
  • 中間則是 Driver 實作時, 透過邏輯上的概念切割把他分成 四塊, 讓它吻合如 Small Block,而 Sector 512Bytes 的大小
  • 而最下面則是FTL (Flash Translation Layer) 看到的樣子

至於Driver為啥可以做這種概念上的切割, 依據的應該是 Datasheet 中關於 Page programming 的下面這一段話

The device is programmed basically on a page basis, but it does allow multiple partial page programing of a word or consecutive bytes up to 2112, in a single page program cycle. The number of consecutive partial page programming operation within the same page without an intervening erase operation must not exceed 4 times for main array (1time/512byte) and 4 times for spare array(1time/16byte). The addressing should be done in sequential order in a block. A page program cycle consists of a serial data loading period in which up to 2112bytes of data may be loaded into the data register, followed by a non-volatile programming period where the loaded data is programmed into the appropriate cell.

此外 NAND 操作還有一些注意事項, (這裡用1Gb/128M 為例)

  1. Erase 以Block 為單位, 一個 Block 有 64 pages, 每頁 2K+64B
  2. Programming 以page 為單位, page 必須由Block 的page 0 依序寫到 page 63, 不能任意順序寫入

待續, 有空的話將補完 Spare 的業界標準, 1bit ECC 等.. (這兩部分補完的話, SLC NAND應該就打通底層)

Update:

如果不是採用 3rd party 的 FTL Driver, 會有下列限制

WinCE 4.2 只能支援 512B 的 small page 的 SLC NAND,  因為好像未採用 FlashInfo 去Get Sector Size(這個是看來的懶得去查了, 有求知心的可以查查, 確認後方便的話通知我)

WinCE 5.0 & WinCE 6.0 R2 以前, 只能支援 SLC, 因為 FAL (FTL) Driver 會有用到 partial page programming  feature, 換句話說要用 MLC NAND 要在 WinCE 6.0 R2或是之後版本的 MSFLASH 才能正常支援MLC 版本

因為 SLC 因為支援 Partial Page programming 關係 所以實際上也可把上圖的 User View 的結構, 用在Driver , 反正可以寫四次 所以spare 不見得一定要分區寫, 又 spare 要放在最前面也行, 反正只要自己的driver 能確認出data & spare 的定位就行了