HW 기초

hw일반 / os 드라이버기초사항 / nand 읽는 방법

. . . 2011. 8. 22. 15:29
반응형
  • 맨날 헷갈려서 정리함;;;

위는 지금 현재 작업중인 nand의 데이터 시트이다.

nand 관련 드라이버를 작성하기 위해서는 가장 기본적인 것이 nand의 spec 을 정확히 이해하고 그에 맞게 드라이버를 포팅하는 것이다. 일단, 거의 모든 드라이버(wince / mobile / linux) 는 nand의 초기화 부분에서 nand의 id를 읽어서 그에 맞는 정보를 세팅을 하게된다.

이때.. 현재 갖고있는 드라이버가 지금 작업하려는 nand를 완벽히 지원하지 않는다면,  최대한 비슷한 설정을 갖고오는것이 편할것이다.

Page 의 크기

Page 의 크기는 일반 데이터 영역과 oob 영역으로 나뉜다. (oob 영역의 경우 여러가지 쓰임새가 있는데... 이것은 나중에 다시 스터디 하도록한다..)

현재 데이터 시트에서는 총 페이지사이즈는 528Byte 로 나와있다. 그림에도 나와있지만... 총사이즈 528 byte 중에 16byte 는 따로 그림이 나와있는것을 알수있다.

  • 실제 데이터 page 크기는 512byte / oob 데이터 page 크기는 16byte 이다.

드라이버의 page 관련 설정시 총 크기 / 데이터 page 크기 / oob (spare) page 크기 를 모두 따로 적어주게 되어 있으면 위의 데이터 시트를 보고 헷갈리지 않아야 한다.

데이터라인

대부분 Device width 라는 표현으로 드라이버내에 정의되어있다.

그림에도 나와있는데 데이터 라인은 총 nand의 크기와도 관련이 있다. 

데이터 라인에 따라서 Address 접근시 cycle 의 횟수가 결정된다. 

보는 방법은 io 접근 cycle을 보면된다. (총 8bit 의 address 로 접근됨) 또한 위의 그림의 경우 사각형의 우측하단에 잘 표현이 되어있다.

BLOCK 크기

nand 에서의 Block 크기는 중요하다. 이유는 Erase 나 Write 의 경우 Block 단위로 하기 때문이다.

위의 경우 Block 크기는 32page 라고 나와있다.

이때 Block 의 경우는 거의 대부분 oob 영역을 포함 하여 명시해주는것 같다. 

  • 1page *32 = 528Byte * 32 = 16,896 Byte 이다.

Block Count / Page Count

드라이버내에서 Block count 와 Page Count 라는 표현이 자주 나온다.

  • Block Count 는 nand의 총 블럭갯수를 말한다 ==> 4096개
  • Page Count 는 한개 블럭내의 Page 갯수를 말한다. ==> 32개

nand 의 총 크기

nand 의 총 크기는 총 block의 갯수로 따지면된다.

위의 경우 총 4096 block 이라고 나왔다. 그런데 친절하게도... 거의 대부분의 데이터 시트에는 총 크기를 알려준다.

차근차근 계산해보면..

Total 528Mbit ==> 528 / 8 = 66M byte
- 총 oob 영역 = 16 * 128k = 2048k Byte = 2M byte
- 총 66M byte 에서 실제 가용 가능한 영역은 (oob 영역을 빼고) = 64M byte 

Maker ID / Device ID

Maker ID 는 manufacturer ID 라고도 불리며 각 제조사마다 고유번호를 갖고있다.

아래에 각 제조사들의 코드를 조사한 대로 나열해놨다. 거의 대부분의 nand 는 아래의 제조사를 벗어나지 않을듯;;;

  • samsung ==> 0xEC
  • hynix ==> 0xAD
  • ST ==> 0x20
  • micron ==> 0x2C
  • Toshiba ==> 0x98

Device ID는 각 nand마다 모델넘버의 역할을 한다.

즉.. 드라이버 초기과정에서...

Maker ID를 보고 어떠한 드라이버를 로딩할지 동적으로 결정하고... 그 드라이버내에서 모델넘버마다 다른 설정을 읽어서  초기화를 완료하게 된다.

반응형