1/24/2015

NAND OOB 영역 및 ECC 기능

1. NAND의 OOB란? 

NAND의 구성이 Block과 Page로 구성이 되어있으며, Page가 Data와 OOB(Out of Band)로 구성이 되어 존재한다.
OOB의 Size는 항상 Page Size의 의존적이며, 주로 Page의 Data 영역의 512 byte 기준으로 16byte 정도의 영역을 차지한다.
Page size의 크기가 커지면 커지고,작으면 작어진다.

  • OOB의 저장되어지는 정보 
  1. Bad Block Information ( Factory Bad Block 의 기본정보)
  2. Bad Block Marker (2 byte or 1 byte Bad Block, first or second page of erase block)
  3. ECC (Error Correction Code)
  4. File system Meta Data(Raw Flash Filesystem) 

아래의 MTD Driver 문서를 읽어보면 ECC가 256단위로 저장되며, Bad block marker 1byte의 정보를 넣고 있다.

  • MTD Manual의 OOB정보 (autoplacement default schemes) 
  MTD의 저장되는 OOB 정보
  http://www.linux-mtd.infradead.org/tech/mtdnand/x255.html


기본적으로 Chip 제조사들은 OOB에 BBI (Bad Block Inforamtion) 정보를 넣어 Factory Bad Block을 구분이 가능하도록 한다.
하지만 Vendor 위치가 상이 하므로 이부분은 개별 Chip Datasheet를 확인해야 봐야한다.

1.1 BBM 와 Raw File System Meta Data 

OOB에는 ECC정보도 들어가지만, Raw File system 선택에 따라 그에 관련된 Meta Data도 들어가게 되며,
이 뿐만 아니라 Bad Block 관리를 위하여 BBM(Bad Block Management)이라는 Data 정보를 넣는다.
그래서 OOB Size와 ECC의 Size 계산 및 위치가 중요하다.


  • OOB 실제 사용 예 (JFFS2, BBT 사용)
OOB 64 per 2048 bytes 중 , BCH 8bit ECC를 사용할 경우  56 bytes =(14 byte * 4) 사용
처음 Bad Block Table을 생성시 Bad Block Information을 이용한다고 한다.

              Total = 56bytes

하지만, Raw Flash로 사용하고, Raw Flash 기반으로 한 File system 사용한다면, OOB Size가 문제가 될 수 있다고 한다.

대표적인 Raw NAND Filesystem JFFS2의 경우 Metadat로  Clean Marker 용도로 8byte를


Raw Flash 기반으로 둔 Filesystem(JFFS2)   (UBIFS, YAFFS)
한번 확인 필요할 것 같다.


  http://wiki.openmoko.org/wiki/NAND_bad_blocks   (Nand page)
  http://dooeui.blogspot.kr/2010/01/understanding-nand-flash-memory.html

  • Linux 의 OOB의 구성
  http://www.linux-mtd.infradead.org/tech/mtdnand/x215.html
  http://www.linux-mtd.infradead.org/tech/mtdnand/x255.html


  http://processors.wiki.ti.com/index.php/AM335x_JFFS2_Support_Guide


2 ECC(Error Correcting Code) 기능 

NAND는 기본적으로 BAD Block의 가능성과 불안정한 Bit 부분이 존재하므로, 항상 오류를 체크를 해야하며,
에러발생시 이를  탐지하고 복원을 해야한다.

  • SLC 공정에 따라 필요한 ECC
  1. 1 bit per 512 B (43 nm - 350 nm)
  2. 4 bits per 512 B (32 nm)
  3. 8 bits per 512 B (24 nm)
  4. 12? bits per 512 B (19 nm)

  • MLC 공정에 따라 필요한 ECC 
  1. 4 bits per 512 B (43 nm )

위와 같이 NAND의 Type과 공정에 따라 필요되는 ECC의 기능이 다르며, 이에 따른 알고리즘 역시 다르게 적용해야한다.

  • ECC(Error Correcting Code)의 기본기능 
NAND의 Error Bit를 Detection 과 Correction 부분이다. 이 부분은 알고리즘에 따라 탐지되는 Bit와 복원되는 Bit수도 달라진다.
처음에는 SW로 지원했지만 현재에는 거의 HW ECC가 보편화되었으며 이 선택은 이제 중요하다.
만약 MLC 까지 고려를 한다고 하며, HW ECC의 성능을 반드시 해봐야한다.


  • Error Detection 과 Correction 
아래의 Wiki에서 Error의 Detection 과 Correction 에 대해서 기본개념을 설명해주고 있다.
Error Detection 알고리즘은 CRC , Parity bits 등 존재하고 이를 복구하는 ECC는 설명해준다.

  https://en.wikipedia.org/wiki/Error_detection_and_correction


2.1 ECC 알고리즘 의 종류

아래와 같이 대표적으로 많이 사용이 되는 ECC 알고리즘과 그 성능을 자세히 알아보자.
NAND의 ECC는 Error의 Detection 알고리즘과 Correction 알고리즘이 함께 되어있는 것이며, 위에서 설명했듯이 Detection 이 된 후 Correction 이 되므로 분리해서 생각을 할수가 없다.




  • Error Correction 기능 
  1. Hamming : for 1bit                 (1bit 만)           
  2. Reed Solomon: for up to 4 bits (4 bit 까지)
  3. BCH  : For more than 4 bits    (4 bit 이상)

  • Hamming  알고리즘 
    초창기 많이 사용되어지 알고리즘이며, SW로 많이 제공되었음
  1. 1 bit correction   
  2. 2 bits error detection   (Parity 기능)
  3. requires 24 bits for 512 B ( 512 Byte 당 3 Byte 필요)
  

  • Reed Solomon  알고리즘 
    원래 CD-ROM/DVD에서 되며, DVB 및 QR Code 및 다양한 곳에서 사용
  1. 4 bits correction
  2. 5 bits error detection
  3. requires 80 bits for 512 B ( 512 Byte당 10 Byte 필요)


  • BCH (Bose, Ray-Chaudhuri and Hocquenghem)
다양한 저장장치에서 사용이 되고 있으며, 현재 많이 사용이 되는 ECC 중 하나이다.
  1. t bits correction    ( t 값은 가변적으로 변화됨)
  2. requires t*13 bits for 512 B     
  3. extra parity bit needed for error detection
  4. more complex to compute than Hamming 

BCH4/8/16  Error Correction 기능만 Byte 정리

512B 의 기준으로 Data를 계산을 하면, t=4/8/12 * 13 
BCH for 4 bits  : 52 bits = 6.5 bytes
BCH for 8 bits  : 104 bits  = 13 bytes 
BCH for 12 bits : 156 bits  = 19.5 bytes 

BCH4/8/16 Error Detection 과 Error Correction 기능 Bytes 정리 (TI에서 실제사용)

OOB Area (spare region) >= B * ( Page_Size / 512 ) + 2 + FileSystem_metadata
where
B =  8 bytes for BCH4
B = 14 bytes for BCH8 
B = 26 bytes for BCH16

Error Dectection을 알고리즘, Parity 기능이 추가되어진다고 한다.

  https://en.wikipedia.org/wiki/BCH_code


2.2 ECC 알고리즘 의 성능

TI에서 제공해주는 자료이며, 성능의 단위는 Timer의 tick 기준으로 소요된 시간을측정한것이다.
측정보드는 AM37x EVM 이며, SW ECC를 사용했을 경우 알고리즘 비교하되 1 bit를 보정시간을 기준으로 측정  
아래의 자료를 통하여, 1bit를 보정하는 시간 파악하여  알고리즘의 복잡도를 알수있다.

  • tick  계산

4.61us /120  = 3.8416666666666666666666666666667e-8
1 tick =  38.816nS

  • 1-bit correction mode  
120 timer ticks
4.61us to correct 1 error

  • 4-bit correction mode
234,000 timer ticks
9.00ms to correct 1 error with no meaningful performance difference when correcting 2 to 4 errors

  • 8-bit correction mode
244,000 time ticks
9.38ms to correct 1 error with no meaningful performance difference when correcting 2 to 8 errors


2.3 TI HW ECC 알고리즘 



  • TI -MPU의 ECC 정보
TI-MPU는 HW로 Error Detection 과 Location 기능을 제공해주며, SW로 Correction 을 제공을 해주고있다.
Location 부분은 별로 신경을 쓰지 않았지만, 생각을 해보니 중요한 정보인것 같으며, TI에서 좋은 정보를 제공해주고 있다.

  1. Error Detection  :  HW NAND Error 감지 가능한 Bit 수
  2. Error Location    :  HW NAND Error 위치 파악 기능
  3. Error Correction :  HW NAND Error 복원 

ECC support by device

HardwareBoot ROM CodeDriver Solution
Error DetectionError LocationError CorrectionError Correction
1b4b8b16b1b4b8b16b1b4b8b16b4b8b16b
DM33x/DM35x/DM36x
AM1xxx/C674x/OMAP-L1xx
EMIFAEMIFAYY
OMAP34xx/35xx
AM35xx 1.0
AM/DM37xx 1.0
GGGGYY
AM35xx 1.1
AM/DM37xx 1.1+
GPMCGYY
AM389x/C6A816x/DM816xGGGPMCGELMYY
AM387x/DM814x
AM335x
AM437x
GPMCGELMYY
Note: GPMC abbreviated to G in narrow columns and grayed out if affected by the BCH-4 erratum.



  • TI Raw NAND관련 ECC 정보 
TI에서 사용되는 HW ECC 정보 및 Raw NAND Interface , MTD 정보제공


  http://processors.wiki.ti.com/index.php/Raw_NAND_ECC

  • NAND 및 ECC의 알고리즘 및 기타 자료 

MTD 및 NAND , Raw File System 관련 자료, 자료내용 좋다.

댓글 없음 :