내가 알고 싶은 것들

괜찮아- 모든 것이 잘 될 꺼야

NAND FLASH란? 구조는?

댓글 0

[메모리]

2013. 1. 4.

 

Nand Flash는 비휘발성 메모리로 전원이 꺼져도 Data를 저장하기 위한 메모리입니다.
우리가 쓰는 휴대폰의 내장메모리,외장메모리,USB 메모리,SSD Hard disk 모두 Nand Flash를 사용합니다.

Nand Flash는 크게 SLC(Single Level Cell)MLC(Multi Level Cell)로 나눕니다.



SLC는 하나의 Cell에 하나의 Level 즉 0 또는 1을 저장할 수 있는 구조로 되어 있습니다.
반면에 MLC의 경우는 하나의 Cell에 여러 Level이 존재 할 수 있습니다. 00,01,10,11 등으로 표현이 가능합니다.
하나의 Cell에 MLC가 표현할 수 있는 개수가 많기 때문에 낮은 가격으로 높은 메모리 용량을 가질 수 있지만
SLC 보다 오류가 발생할 확률이 더 높아집니다
.
물컵으로 이야기 하자면 SLC의 경우 물이 있느냐 없느냐로 0,1을 판단하지만
MLC의 경우 물이 얼마만큼 있느냐에 따라 값이 달라지므로 오류가 발생할 확률이 높아집니다.

ECC(Error Correcting Code)는 메모리 오류를 검출하고 위치를 계산해서 오류를 정정하는 역할 을 합니다.
메모리에 저장시에 Hamming Code를 이용하여 연산한값을 spare 영역에 Write를 합니다.
읽을때에 spare 영역에 저장된 ECC 값을 이용하여 에러가 있는지 확인하고 (현재는 어떤지 모르겠는데)
512Byte 당 1bit 에러일경우 스스로 Correcting이 가능합니다. 2bit 이상일경우 에러 검출만 가능하며 정정은 할 수 없습니다.
MLC의 경우 SLC 보다 오류가 발생할 확률이 높아지므로 에러 검출하는 알고리즘이 더 복잡해집니다.
따라서 MLC의 경우 ECC 알고리즘이 복잡해 지므로 속도가 느립니다
.


Nand Flash은 구조는 Page 단위로 구성되어 있으며 이 Page를 묶음으로 만든것이 Block 입니다.
512Byte 가 1Page 일경우 ECC 및 Bad Block 정보를 가지는 spare byte 16Byte 를 포함하여 528 Byte가 1개의 Page가 됩니다.
Block의 경우 Page * 32 또는 Page * 64 개가 한개의 Block 이 됩니다.
요즈음에는 1Page= 2048 Byte(spare 제외) ,1Block= 32Page 가 주로 많이 사용되고 있습니다.


1 Page 단위로 읽고 쓰기가 가능하며 1 Block 단위로 삭제를 할 수 있습니다.
한번 사용한 Page는 Block erase를 하지 않으면 쓸수가 없습니다.
이렇게 된이유는 RAM과 달리 Nand Flash는 물리적으로 주소라인을 가지고 있지 않기 때문입니다.
RAM의 경우도 용량이 많아지면 주소라인이 많아져야 하는것과 같이 Nand의 경우 차츰 용량이 커지게 되면
주소라인을 감당하지 못하겠지요. 그래서 Data Line으로 Address/Command/Data가 이동하게 되어있습니다.
CLE(Command Latch Enable),ALE(Address Latch Enable) Pin 을 이용하여 구분합니다.

Flash는 반영구적이지 않아서 Erase/write를 반복적으로 할 경우 Bad 가 날수 있으므로
한곳만 사용하는것이 아니라 골고루 사용하여 Bad가 발생할 확률을 줄이기도 합니다.
Bad Block이 발생할경우 Spare 영역에 표시를 하게되며 읽거나 쓸때 Bad인지를 검사합니다.
Spare내에서 Bad Block을 표시하는 부분은 제품마다 약간의 차이가 있습니다.
Bad Block의 경우 제조공정상 발생할 수 있기 때문에 Datasheet에 몇개 이하의 Bad Block이 있다고 표시를 합니다.
Nand Boot의 경우 보통 제일 처음 Block에 Bootloader를 넣기 때문에 첫번째 Block블럭이 Bad 인경우는 불량으로
처리됩니다.

Nand Flash 내부에 Device ID와 Mark ID 정보를 이용하여 어떤 타입이며 얼마만큼의 용량이 있는지를 알 수 있습니다.
Qualcomm Source의 경우 toshiba/samsung/hynix의 어떤제품을 사용하더라도 Device ID 와 Mark ID를 이용하여
용량에 맞게 동작하게 되어있습니다.

요즘에는 Nand Flash를 바로 사용하지 않고 eMMC라는것을 많이 사용합니다.
말하자면 Nand Flash에 mmc Interface를 할 수 있는 Controller를 부착하는것입니다.
mmc controller + Nand Flash = TFlash
TFlash는 들고 다닐 수 있지만 eMMC는 TFlash를 Chip 형태로 만들어 보드에다 납땜 하는 형태로 만듭니다.
eMMC 라고 하기도 하고 삼성에서는 MoviNand라고 부르기도 합니다.
예전에는 SDRAM와 NandFlash가 하나의 Chip으로 구성이 되어 있었는데 그러다 보니 Nand Flash의 용량이 크지 않았습니다.
하지만 Android가 대세인 지금 저장공간이 아주 크야 하므로 더큰용량을 지원하는 eMMC가 많이 사용되는 추세입니다.

앞서 이야기한 Nand Flash의 경우 물리적인 주소로 접근을 해서 Data를 읽어오게 되면 물리적인 주소가 Bad Block이 되었을경우
에 대한 처리가 필요합니다. eMMC의 경우 가상주소로 접근을 하기 때문에 Bad Block에 대한 부분에 대해서는 조금 자유로울수 있습니다

 

참조 : http://slgi97.egloos.com/10951909