NAND의 구성이 Block과 Page로 구성이 되어있으며, Page가 Data와 OOB(Out of Band)로 구성이 되어 존재한다.
OOB의 Size는 항상 Page Size의 의존적이며, 주로 Page의 Data 영역의 512 byte 기준으로 16byte 정도의 영역을 차지한다.
Page size의 크기가 커지면 커지고,작으면 작어진다.
- OOB의 저장되어지는 정보
- 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)
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 사용)
처음 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/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 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)
- MLC 공정에 따라 필요한 ECC
- 4 bits per 512 B (43 nm )
위와 같이 NAND의 Type과 공정에 따라 필요되는 ECC의 기능이 다르며, 이에 따른 알고리즘 역시 다르게 적용해야한다.
- ECC(Error Correcting Code)의 기본기능
처음에는 SW로 지원했지만 현재에는 거의 HW ECC가 보편화되었으며 이 선택은 이제 중요하다.
만약 MLC 까지 고려를 한다고 하며, HW ECC의 성능을 반드시 해봐야한다.
- 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 기능
- Hamming : for 1bit (1bit 만)
- Reed Solomon: for up to 4 bits (4 bit 까지)
- BCH : For more than 4 bits (4 bit 이상)
- Hamming 알고리즘
- 1 bit correction
- 2 bits error detection (Parity 기능)
- requires 24 bits for 512 B ( 512 Byte 당 3 Byte 필요)
- Reed Solomon 알고리즘
- 4 bits correction
- 5 bits error detection
- requires 80 bits for 512 B ( 512 Byte당 10 Byte 필요)
- BCH (Bose, Ray-Chaudhuri and Hocquenghem)
- 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를 보정하는 시간 파악하여 알고리즘의 복잡도를 알수있다.
- tick 계산
4.61us /120 = 3.8416666666666666666666666666667e-8
1 tick = 38.816nS
- 1-bit correction mode
4.61us to correct 1 error
- 4-bit correction mode
9.00ms to correct 1 error with no meaningful performance difference when correcting 2 to 4 errors
- 8-bit correction mode
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에서 좋은 정보를 제공해주고 있다.
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 Raw NAND관련 ECC 정보
http://processors.wiki.ti.com/index.php/Raw_NAND_ECC
- NAND 및 ECC의 알고리즘 및 기타 자료
MTD 및 NAND , Raw File System 관련 자료, 자료내용 좋다.