전 여름이 싫습니다.

제 체질이 더우면 버티기 힘든데

요즘은 후덥지근까지 하고 ...

그나마 회사에는 에어콘 빵빵해서 좋은데..

밖에 돌아 다니려면 정말 짜증나네요

여름분 여름 감기 조심합시당..

잡설은 고만하고

좀더 NAND 플래쉬 메모리에 대해서 알아보죠....

솔찍히 리눅스 디바이스 드라이버를 다룰려고 하는데

웬 NAND 플래쉬에 대한 이론이 거창하냐고 물으실지 모르지만

리눅스 디바이스 드라이버의 개념이 잡힌 이후

디바이스 드라이버를 작성하려면 다루려는 장치를 정확하게 이해해야 작성이 가능합니다.

즉 디바이스 드라이버의 기초를 공부하는 것은 C 언어 문법을 이해하는 것이고

실제로 프로그램을 작성하기 위해서는 해당 시스템이나 작성하려는 분야에 정통해야 하는것과 같습니다.

그래서 프로그래머들이 만물 박사가 되어 가는 것이 아니겠습니까...

알아야 짜니깐...

저는 프로그램을 작성할때 가장 중요시 하는 것중 하나가 왜? 라는 질문입니다.

도대체 리눅스 디바이스 드라이버의 MTD의 구조체는 왜 이런 모양이 되었을까?

하는 질문을 던지고 난후

나같으면 어떻게 작성할까를 생각하고 보면 훨씬 이해가 쉽기 때문입니다.

리눅스 디바이스 드라이버의 구조체는 해야할 일의 완결편이라고 보시는 것이 좋습니다.

그래서 하드웨어를 이해하면 리눅스 디바이스 드라이버의 구조체를 정확하게 알수 있습니다.

어찌 되었건간에....

NAND 플래쉬를 알아 봅시다.

일단 NAND 플래쉬는 NOR 플래쉬와 다르게 ROM 으로 사용 못합니다.

가장 비슷하게 닮은 놈이 하드디스크 입니다.

아래의 [그림 3-1 Hard Disk 와 Flash Memory 구조]을 참고하세요.

여러분이 가장 익숙한 하드 디스크라는 놈을 살펴보면 섹터 단위로 입출력을 합니다.

즉 한 섹터를 읽거나 쓰게 됩니다.

NAND 플래쉬도 이와 비슷하게 되어 있습니다.

NAND 플래쉬는 섹터와 비슷한 것으로 페이지라는 것이 있습니다.

섹터의 크기가 보통 512 이듯이 NAND의 페이지도 512 입니다.

아..

물론 이 크기는 요즘 나오는 플래쉬들은 다른 놈들이 생겼습니다만

일단 NAND 플래쉬를 이해 하려면 단순화 시키는 것이 좋으므로

그냥 한 페이지는 512 의 크기를 갖는다고 생각하십시오

하드 디스크는 섹터들이 모여서 하나의 트랙을 구성합니다.

마찬가지로 NAND 플래쉬도 512 바이트의 페이지를 모아서 블록이라는 것을 가지고 있습니다.


[그림 3-1 Hard Disk 와 Flash Memory 구조]

이렇게 서로 상당히 유사한 형태를 가지기 땜시..

USB 메모리 장치로 NAND 프래쉬 메모리를 사용하는 겁니다.

다루기가 유사하거던요...

하드 디스크와 NAND 플래쉬와 유사한 점이 또 있습니다.

바로 데이터를 읽고 쓰는 방식입니다.

일반적인 하드웨어 장치라면 항상 어드레스 버스와 연결되어서 레지스터 형태로 데이터를 읽고 씁니다.

하지만 NAND 플래쉬는 이런식으로 원하는 데이터를 읽거나 쓰지 못합니다.

하드 디스크 역시 마찬 가지 입니다 IDE 인터페이스에 연결된 하드 디스크라면

읽고 쓸때 읽기 위한 명령을 지정하거나 쓰기 위한 명령을 지정합니다.

마찬가지로 NAND 플래쉬도 원하는 데이터를 쓰거나 읽기 위해서는

NAND 플래쉬 장치에 데이터를 쓰기 위한 명령을 이용해야 하고 읽기 위한 명령을 이용해야 합니다.

그래서 NAND 플래쉬의 하드웨어적인 신호는 이런 명령을 처리 하기 위한 구조를 갖습니다.

일단 하드 디스크에 특정 섹터를 읽어 온다고 합시다.

이런 경우 당연하게 하드 디스크에 읽겠다는 명령을 전송하고 읽을 섹터 번호를 지정한후에 데이터를 읽어 와야 합니다.

반대로 하드 디스크에 데이터를 쓰기 위해서는 데이터를 쓰겠다는 명령을 지정하고

써 넣을 섹터를 지정하고 데이터를 씁니다.

이런 행위가 끝나면 당연히 데이터가 정상적으로 쓰여 지거나 읽을수 있는지를 검사 하게 되죠...

이런 과정은 NAND 플래쉬 역쉬 마찬가지 입니다.

자...

대충 전체적인 설명이 끝냈으니 좀 더 구체적으로 살펴 봅시다.

이제 부터가 진짜지요 ^^

아...

외부 약속 시간이 다 되었군요.. 쩝

구체적인 것은 내일 써야 할 듯 합니다.

태그: *유영창 *디바이스드라이버