태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.
2012.09.12 15:00

전자 시스템은 물리적으로 눈에 보이고 만져지는 hardware 부분과 OS 또는 각종 응용 프로그램들인 software의 부분으로 이루어져 있다.

Software는 어떤 형식으로든 hardware에 저장되어야 하는데 일반적인 PC의 경우 LPC ROM에 BIOS
program이 들어가고 HDD에 OS나 응용 프로그램들이 저장되며 스마트폰 같은 경우엔 NOR Flash나
NAND Flash등에 software가 저장된다.

즉 software의 storage로 HDD, ROM이 사용될 수 있으며 ROM의 종류엔 EEPROM, Flash ROM등이 있고
Flash ROM의 종류엔 SPI Flash, NOR Flash, NAND Flash등이 있는데 본 포스트에선 Flash ROM의
한 종류인 NAND Flash에 대해 살펴보고자 한다.

1. NAND FLASH의 종류
NAND Flash는 크게 Single Level Cell이라고 하는 SLC type과 Multi Level Cell이라고 하는
MLC type으로 나눠진다.

SLC와 MLC type NAND Flash간의 가장 큰 차이점은 SLC는 memory cell당 1bit의 data가 저장되는데
반해 MLC는 memory cell당 2bit 이상의 data를 저장할 수 있다는 점이다.

SLC type의 cell에 전압을 인가하고 전류값을 읽었을 때 전류값이 있으면 저장되어 있는 bit가 '1'이라고
판단하고 전류값이 읽혀지지 않으면 저장되어 있는 bit가 '0'이라고 판단하게 되는것이다.

한 종류의 전압 level만 있으면 cell에 있는 data를 판단할 수 있어서 Single Level Cell인 것이다.

위 그림에서 reference point의 voltage가 인가되면 저장된 bit value가 '0'또는 '1'로 얻어지게 된다.

MLC type의 cell엔 3종류의 전압 level을 인가시켜서 4종류의 bit value가 얻어질 수 있기 때문에
Multi Level Cell 이라고 한다.

위 그림에서 reference point의 voltage로 3가지가 인가되면 bit value가 '00', '01', '10', '11'로 4가지가
얻어지게 된다.

이상의 원리에 의해 SLC와 MLC의 실리콘 size가 같다면 MLC는 SLC대비 2배의 용량이 가능하기 때문에
가격 이점이 있지만 속도는 3배가 느린 단점이 있게 된다. (전압 레벨을 3번 바꿔가며 판단하므로...)

그래서 아래의 표에서 보듯이 SLC대비 MLC의 가격이 싸다고 표기되어 있지만 ECC 알고리즘은
어렵다고 되어있고 performance도 낮게 매겨지는 것이다.
(좋은 그림들 고마워요 micron !!!)


2. NAND FLASH의 특징
   [BAD BLOCK]
    ① BAD BLOCK IDENTIFICATION
        모든 mass storage와 같이 NAND Flash도 메모리 안에 초기의 bad block이 존재한다.
         - NAND 제조사는 생산 공정에서 factory test를 거쳐 bad block을 검출
         - 검출된 bad block에 marking을 하고 NAND의 특정 영역에 해당 위치들을 표기함
         - 해당의 initial bad block을 사용자가 program이나 erase하면 marking 또한 지워지기 때문에 어떠한
            용도로도 사용해선 안됨 (정상적인 cell에 영향을 줄 수도 있음)
         - 그러므로 NAND를 사용하기 전엔 항상 NAND를 읽고 bad block을 검출하여 bad block table을
            만들어서 관리해야 함

    ② PERMANENT FAILURES
        - NAND를 동작시키다가 발생하는 불량
        - NAND의 cell에 0이나 1이 들어있지만 program, erase되지 않음
        - Permanent failure가 발생하면 해당 block을 bad block table에 추가해서 추후에 사용치 않아야 함

    ③ TEMPORARY FAILURES
        - NAND를 동작시키다가 발생하는 불량
        - 적절한 방법을 통하여 복구할 수 있기 때문에 bad block table에 추가시키지 않음

   [WEAR LEVELING]
    - NAND의 cell은 기대 수명이 있기 때문에 특정 cell을 반복해서 사용하다 보면 해당 block이 wear out
       되어 bad block이 될 수 있음
    - Wear leveling이란 NAND의 logical memory address를 다른 physical memory address로 변경함으로써
       momory의 전체 영역을 골고루 사용하여 cell의 기대 수명을 연장하는 것임

   [ECC]
    - Digital 신호의 처리에서 error는 항상 발생하는 요소이기 때문에 NAND에서의 bit error에 대해서도
       적절한 Error Correction Code 알고리즘이 요구됨
    - 저장 할 bit data를 ECC encoder에서 encoding해서 저장하고 저장된 bit data를 읽을 땐 ECC
       decoding을 통해서 error를 검출하고... 만일 error가 발생했다면 정정해서 읽게 됨
    - ECC encoding을 할 때 redundant bit가 발생하는데 이 부분이 나중에 NAND의 size를 논할 때 매우
       중요한 요인이 됨
    - Redundant bit란 RS-232통신을 예로들면 7bit의 data '0101000'를 전송할 때 odd parity 방식이라면
       data의 끝에 '1'을 붙여서 실제 전송하게되는 신호는 '01010001'이 되는데 정보 data와는
       무관하지만 수신측에서 에러 검출용으로 필요하기 때문에 정보 data와 같이 전송하게되는 마지막
       bit '1'이 바로 redundant bit 임
    - ECC는 다음의 종류들이 있으나 NAND에서 주로 사용하는 ECC는 block code계열인 Hamming code
       BCH

    - Hamming code는 single error를 정정할 때, BCH code는 double error를 정정할 때 사용됨 (SLC)
    - 더 많은 error를 정정하기 위해 convolution code나 LDPC를 사용할 수도 있겠지만 가격이 올라가니
       trade off가 되지 않음
    - 일반적으로 NAND에서의 Error Correction Code는 1 sector인 512byte에서 몇 개의 error를 정정시킬
       수 있느냐로 명시함
    - 예를 들어 1bit Hamming ECC라고 하면 22bit의 redundant bit를 사용해서 sector당 1bit의 error를
       정정시킬 수 있다는 의미임

3. NAND FLASH의 용량
NAND Flash의 구조는 가장 작은 page단위가 모여서 block을 이루고 이 block이 몇개냐에 따라서 전체
용량이 결정된다.

1Gbit 이하의 density가 주로 생산되던 예전엔 block size를 32page로 구성하는 small block 구조였으나
근래엔 NAND의 용량이 커지면서 memory를 좀 더 효율적으로 관리하기 위해 block size를 64pgae로
구성하는 large block 구성이 주를 이루게 된다.

Large block NAND Flash의 장점은 block간의 회로가 줄었기 때문에 chip의 size가 작아지고 program,
read 등의 performance가 향상된다는 것이다.

Page와 block으로 구성되어 있는 이 NAND의 용량은 어떻게 계산되는가?

필자는 처음에 이 부분이 매우 이해하기 어려웠다.

김대리들은 어떤가요? NAND Flash의 datasheet들 보면서 금방 이해 했나요? 같이 알아가 봅시다.


NAND는 모눈종이 같은 page가 여러장 모여서 1 block을 형성하고 이 block을 모두 합치면 전체 NAND의
용량이 결정된다.

1Gbit용량의 large block NAND 구조를 보면서 계산해 보도록 한다.

위 그림에서 보라색이 1 page를 나타낸다.

Page는 cell이 한층으로 종이처럼 구성되어 넓게 퍼져있는 영역이다.

Large block에서 1 page는 2048Byte의 data 영역으로 이루어져 있다.
거기에 ECC에서 설명한 redundant bit로 사용되는 spare영역인 64Byte가 덧붙여져서 1 page는
2KByte + 64Byte
가 된다.
(Small block에선 512Byte + 16Byte 구성임)

위 그림에서 초록색은 1 block을 나타내는데 large block에서 1 block은 64page로 구성된다.
여기엔 1 page에서 포함되었던 64Byte의 spare 영역이 64page만큼 들어있게 된다.

그래서 전체 용량은 다음과 같게 된다.
1 page = 2112 Byte

1 block = 1 page * 64

1 device = 1 block * 1024 = 2112 * 64 * 1024 = 138,412,032 Byte = 1056 Mbit ≒ 1 Gbit

어지러운가요?

실제의 NAND datasheet에서 해당 부분을 다시 한번 숙지해 보자.
다음은 T社의 2Gbit SLC 제품의 datasheet이다.

1 page size는 2112Byte 이다. (2048Byte + 64Byte)

Block size는 1 page의 data 영역인 2048Byte에 64 page를 곱한 128KByte와 1 page의 spare 영역인
64Byte에 64 page를 곱한 4KByte의 합으로 표현되어 있다. (128KByte + 4KByte)

1 page = 2112 Byte

1 block = 1 page * 64 = 128 KByte + 4 KByte

1 device = 1 block * 2048

그러므로 전체 용량은 132 * 2048 = 2Gbit 가 된다.


[참고]
ECC in SLC NAND
- Micron -

Design and Use Considerations for NAND Flash Memory
- Micron -

Small Block vs Large Block NAND Flash Devices
- Micron -

포스트의 부족한 내용이나 아쉬운 부분을 본 페이지에 특화된 google검색을 통해서 알아보세요.
Custom Search
Posted by nooriry

댓글을 달아 주세요

  1. kerouac 2012.10.15 21:53 신고  댓글주소  수정/삭제  댓글쓰기

    혹시 한 디바이스에서 배드블록이 몇개쯤 발생하면 그 디바이스를 못쓰게 될까요?

    • nooriry 2012.10.17 09:18 신고  댓글주소  수정/삭제

      결론부터 말씀드리자면 그런 기준은 없습니다.
      NAND에 프로그램이 저장되어 있을 때 배드블럭이 1개만 발생해도 시스템 동작에 문제가 발생하는데 이를 device fail로 판단할 것인가요?
      NAND를 사용하려면 이런 경우를 가정하여 알고리즘이 짜여져야 합니다.
      방문해 주셔서 감사합니다.

  2. 호호 2013.01.04 06:34 신고  댓글주소  수정/삭제  댓글쓰기

    배드 블록 기준은 Sepc에 명시 되어 있습니다.
    SLC, MLC, TLC가 다르구요. 점점 더 많이 허용 하고 있습니다.
    이유는 만들기가 어려워지기 때문입니다.

    • nooriry 2013.01.09 19:19 신고  댓글주소  수정/삭제

      호호님이 말씀하신 기준은 nand device 제조사에서 nand를 출하 하면서 보증하는 최소 bad block인것 같습니다.
      (ex. 우리 nand는 출하시 2개 이하의 배드 블럭이 있을 수 있다.)

      하지만 위에서 kerouac님이 문의하신 내용은 '못 쓰게'되는 기준이므로 그런 '기준'은 없다라고 말씀 드립니다.

  3. semi 2013.01.30 14:28 신고  댓글주소  수정/삭제  댓글쓰기

    배드블럭이 존재하더라도, 컨트롤러에서 FTL, ECC등을 통해 정상적인 제품으로 동작하게 만들어 줍니다.
    (컨트롤러와)F/W의 성능에 따라 낸드플래시메모리의 배드블럭을 얼마나 커버할수 있는지 결정되는 거구요.

  4. 제임스 2013.09.09 15:30 신고  댓글주소  수정/삭제  댓글쓰기

    잘보고 가요..에반게리용

  5. kbbang 2014.04.03 15:46 신고  댓글주소  수정/삭제  댓글쓰기

    풍부한 자료와 친절한 설명 너무 감사합니다.
    덕분에 많은 공부가 되었습니다.

  6. kimwoochan85 2014.05.22 16:58 신고  댓글주소  수정/삭제  댓글쓰기

    많은 도움이 되었습니다. 작은 오류정정을 건의하자면 0101000에 even parity를 추가하면 0101000 0 입니다. 짝수패리티는 전체 비트열의 1의 갯수를 짝수개가 되게 하는 것이니까요..^^

    • nooriry 2014.05.23 09:10 신고  댓글주소  수정/삭제

      아차차... 제가 실수를 했군요.
      좋은 지적 감사드리며 포스트의 내용은 'even'을 'odd'로 수정하였습니다.
      많은 분들의 도움으로 블로그의 완성도를 높여가고 있습니다.
      방문해 주셔서 감사합니다.