강좌를 쓰다보면 글 투가 가끔 무협지 나 판타지 체가 나올때가 있네요 ㅜㅜ
(제가 무협지하고 판타지 소설 무지 좋아 하거덩요... 이해해 주세용)

자...

오늘도 들어가 보죠...

하루마다 쓰니깐 내용을 다 써야 한다는 압박감이 없어서 좋군요... ㅋㅋ

저번 강좌에 하드웨어 핀 사양에 대해서 알아 봤죠...

JTAG 같은 프로그램을 작성하려면 이 핀에 인가되는 신호 시그널 타이밍도가 무척 중요하죠...

그래서 이 부분도 설명을 하려고 하지만

그 이전에 NAND 플래쉬의 내부 구성에 대한 이해가 조금 필요합니다.

그래야 어떤식으로 제어해야 하는지 감을 잡거든요..

NAND 플래쉬 메모리는 크게 두 분으로 나누어 져 있습니다.

기억을 저장하고 유지하는 부분과 이를 꺼내거나 써 넣도록 제어하는 로직 부분이죠...

자 그림을 봅시당.


[그림 3-3] NAND 플래쉬 내부 구조

아주 심플한 그림 한장 그렸습니다.

보시면 알겠지만 외부 버스와는 제어부와 연결되고 제어부는 다시 내부 메모리 셀과 연결되어 있습니다.

이 제어부는 일종의 컨트롤러와 같다고 보시면 됩니다.

메모리 셀을 지우고 데이터를 써 넣고 데이터를 읽어서 버스에 전달하는 기능을 담당합니다.

이 제어부에 무언가를 지시하기 위해서는 명령을 사용해야 합니다.

이 명령은 조금 있다가 살펴보고

이 메모리 셀은 가장 기초 단위는 BIT 입니다 즉 연결 상태 또는 끊김 상태를 가지게 됩니다.

이걸 회로적으로 보면 다음과 같은 그림이죠...


[그림 3-4] NAND BIT 구조

혹시 이 회로에 대해서 자세하게 설명해 달라고는 하지 마세요 ㅜㅜ

저도 잘 모르고 과시용으로 그냥 NAND 가 어떻다는 등의 기술적인 글 처럼 보이려고 붙여 놓은 거니깐

반도체 제조에 관심이 많은 분들은 인터넷을 뒤져 주세용.. ( 휘리릭~~~ )

우린 비트는 관심을 끕시당. 프로그래머 입장에서는 그냥 이런 비트들이 8 개 모여서 바이트 단위로
제어 한다고 보면 되니깐...

자 다시 설명을 진행하면

1비트 셀들을 8 개 모여 놓고 이를 바이트 라고 하는 단위로 묶습니다.

이 바이트 단위의 셀들을 다시 256 바이트 단위로 묶는데 이를 Half Page 라고 합니다.
이 Half Page 를 다시 2 개 묶어서 Page 라고 하죠 ...

여기서 제조사들은 덤으로 16 바이트를 더 줍니다.

그래서 앞에서 제가 한 페이지는 512 바이트라고 박박 우겼지만 그건 하드 디스크와 비교하기 위해서 그런것이지
제가 절대로 몰라서 그런것 아닙죠 ( 정말입니다. ㅜㅜ )

어쨌든 이렇게 page들을 다시 여러개 묶어서 블록이라고 합니다. 이 블록이 바로 플래쉬 메모리 지우기의 기본 단위
라는 겁니다.

이런 블록이 다시 모여서 전체 플래쉬 메모리가 된다는 야그 입니다.

이걸 그림으로 봅시당..


[그림 3-5] 내부 구조

그림을 보면서 정리해 보죠...

NAND 플래쉬 메모리는 내부적으로 여러 블록으로 나누어져 구성되어 있습니다 .
이 블록들은 다시 PAGE라는 영역으로 나누어져 구성되어 있습니다.
PAGE 는 다시 512 바이트 + 16 바이트 로 나누어져 있습니다.

지우기 단위는 블록이고 읽고 쓰는 단위는 페이지 입니다.

실제로 페이지가 항상 512 + 16 이지는 않습니다.
NAND 플래쉬 마다 조금 씩 다릅니다. 하지만 가장 보편적인 크기가 512 입니다.

하나의 블록이 몇 페이지를 가지고 있는지 역시 NAND 플래쉬 마다 틀립니다.

하나의 NAND 플래쉬 메모리 에 몇개의 블록이 있는가 역시 NAND 전체 용량에 따라 달라집니다.

제가 강좌의 예제로 다루고 있는 것은 다음과 같습니다.

Page = 512 + 16 : 읽고 쓰는 기본 단위
Block = 32 Pages : 지우는 기본 단위
전체 = 4096 Blocks : 전체 용량

이렇게 됩니다.

아항 벌써 저희 회사 점심시간인 1시네요.. 쩝

그림 그리다 시간 다 갔습니다.

조금더 내부 구조를 보면서 어떻게 접근 하는 지를 설명하기 위해서는
내일로 시간을 미뤄야 겠군요...

그럼...

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