1. NAND의 OOB란?
NAND의 구성이 Block과 Page로 구성이 되어있으며, Page가 Data와
OOB(Out of Band)로 구성이 되어 존재한다.
OOB의 Size는 항상 Page Size의 의존적이며, 주로 Page의 Data 영역의 512 byte 기준으로
16byte 정도의 영역을 차지한다.
Page size의 크기가 커지면 커지고,작으면 작어진다.
- Bad Block Information ( Factory Bad Block 의 기본정보)
- Bad Block Marker (2 byte or 1 byte Bad Block, first or second page of erase block)
- ECC (Error Correction Code)
- 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
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 부분이 존재하므로, 항상 오류를 체크를 해야하며,
에러발생시 이를 탐지하고 복원을 해야한다.
- 1 bit per 512 B (43 nm - 350 nm)
- 4 bits per 512 B (32 nm)
- 8 bits per 512 B (24 nm)
- 12? bits per 512 B (19 nm)
- 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 이 되므로 분리해서 생각을 할수가 없다.
- Hamming : for 1bit (1bit 만)
- Reed Solomon: for up to 4 bits (4 bit 까지)
- BCH : For more than 4 bits (4 bit 이상)
초창기 많이 사용되어지 알고리즘이며, SW로 많이 제공되었음
- 1 bit correction
- 2 bits error detection (Parity 기능)
- requires 24 bits for 512 B ( 512 Byte 당 3 Byte 필요)
원래 CD-ROM/DVD에서 되며, DVB 및 QR Code 및 다양한 곳에서 사용
- 4 bits correction
- 5 bits error detection
- requires 80 bits for 512 B ( 512 Byte당 10 Byte 필요)
- BCH (Bose, Ray-Chaudhuri and Hocquenghem)
다양한 저장장치에서 사용이 되고 있으며, 현재 많이 사용이 되는 ECC 중 하나이다.
- t bits correction ( t 값은 가변적으로 변화됨)
- requires t*13 bits for 512 B
- extra parity bit needed for error detection
- 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를 보정하는 시간 파악하여 알고리즘의 복잡도를 알수있다.
4.61us /120 = 3.8416666666666666666666666666667e-8
1 tick = 38.816nS
120 timer ticks
4.61us to correct 1 error
234,000 timer ticks
9.00ms to correct 1 error with no meaningful performance difference when correcting 2 to 4 errors
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는 HW로 Error Detection 과 Location 기능을 제공해주며, SW로 Correction 을 제공을 해주고있다.
Location 부분은 별로 신경을 쓰지 않았지만, 생각을 해보니 중요한 정보인것 같으며, TI에서 좋은 정보를 제공해주고 있다.
- Error Detection : HW NAND Error 감지 가능한 Bit 수
- Error Location : HW NAND Error 위치 파악 기능
- Error Correction : HW NAND Error 복원
ECC support by device
| Hardware | Boot ROM Code | Driver Solution |
Error Detection | Error Location | Error Correction | Error Correction |
1b | 4b | 8b | 16b | 1b | 4b | 8b | 16b | 1b | 4b | 8b | 16b | 4b | 8b | 16b |
DM33x/DM35x/DM36x
AM1xxx/C674x/OMAP-L1xx | EMIFA | — | EMIFA | — | — | Y | — | Y | — |
OMAP34xx/35xx
AM35xx 1.0
AM/DM37xx 1.0 | G | G | G | — | G | — | Y | — | — | Y | — |
AM35xx 1.1
AM/DM37xx 1.1+ | GPMC | — | G | — | Y | — | Y | — |
AM389x/C6A816x/DM816x | G | G | GPMC | G | ELM | — | Y | — | Y |
AM387x/DM814x
AM335x
AM437x | GPMC | G | ELM | — | Y | Y |
Note: GPMC abbreviated to G in narrow columns and grayed out if affected by the BCH-4 erratum.
TI에서 사용되는 HW ECC 정보 및 Raw NAND Interface , MTD 정보제공
http://processors.wiki.ti.com/index.php/Raw_NAND_ECC
MTD 및 NAND , Raw File System 관련 자료, 자료내용 좋다.