하드웨어
맘은 항상 하루에 한편씩 쓰자고 먹는데
쩝..
꼭 일이 생겨서 맘같지 않네요...
오전 시간에 시간내서 강좌를 쓰고 있는데
꼭 오전에 일이 생겨요 ㅜㅜ
어쨌든 가능하면 계속 고고씽~~~
저번 강좌에 플래쉬 메모리 셀 구조에 대해서
설명을 했는데 이번에는 제어부 구조를 살펴보죠
NAND 플래쉬 메모리 레퍼런스 매뉴얼을 보면 다음 그림과 같이 설명을 하고 있습니다.
[그림 3-6] NAND 기능 구조
플래쉬 메모리는 이전 강좌에서 설명했듯이 페이지, 블록 구조를 갖고 있습니다.
이에 반해서 이 플래쉬 메모리를 쓰거나 읽거나 지우는 것을 지원하기 위한 구조는 좀 더 복잡합니다.
그림 처럼 여러가지 버퍼와 레지스터가 있습니다.
그림을 보면 제어부는 크게 3가지 부분으로 나누어져 있다고 보면 됩니다.
- 첫째가 명령 레지스터 입니다.
- 둘째가 주소 선택 레지스터 입니다.
- 셋째가 페이지 레지스터입니다.
각각의 레지스터는 데이터 버스인 I/O 와 연결되는데
데이터 버스가 어떤 레지스터와 연결될지를 결정하는 것은 ALE, CLE 입니다.
CLE 가 HIGH 이면 I/O 데이터버스는 명령 레지스터에 연결됩니다.
ALE 가 HIGH 이면 I/O 데이터버스튼 주소 선택 레지스트에 연결됩니다.
CLE와 ALR 가 LOW 이면 페이지 레지스트에 연결된다고 생각하시면 됩니다.
(아닐 경우도 있기 때문에 이렇게 얼버무리는 겁니다. ㅜㅜ )
자 이걸 다루는 프로세서 하드웨어들은 어떻게 제작될까요?
뭐 일일이 각각의 CLE 와 ALE 그리고 nCE 를 GPIO 에 연결하고
데이터 버스와 R/W 신호핀을 연결하는 구조로 만드는 경우가 있겠죠...
흠 이런 경우에는 당근 GPIO 를 직접 다루기 땜시 일일히 CLE 올리고 내리고
같은 행위를 합니다.
좀 느리죠...
그림으로 보면 다음과 같은 그림이 됩니당.
[그림 3-7] NAND 연결 예 1(GPIO)
현실적인 이유에서 보통 R/nB는 신호는 사용하지 않습니다.
이 부분은 나중에 제어와 관련된 내용을 자세하게 설명할겁니다. ^^
이런 방식은 속도가 좀 느리기 땜시 조금 복잡하게 회로를 구성해서 연결합니다.
대부분 이런 방식을 사용합니당...
[그림 3-8] NAND 연결 예 1(버스 선택 회로)
이런 방식은 다음과 같은 주소가 존재하는 방식입니다.
- nCS 를 HIGH 로 만드는 주소
- nCS 를 LOW로 만드는 주소
- 명령을 써 넣는 주소
- 주소를 써 넣는 주소
- 데이터를 써 넣는 주소
저희 회사에서 만드는 보드중 NAND 컨트롤러를 프로세서에서 지원하지 않을 경우
에 이런 회로를 만들어 씁니다.
마지막은 아예 프로세서가 위 방식의 컨트롤러를 지원하는 방식이죠
제일 편하겠죠?
삼성 계열이 이런 식으로 되어 있습네다...
(삼성이 NAND를 만들지 않습니까 그러니 당근 지원해야죠...)
일단 NAND 칩에 접근 하려면 nCE 를 LOW 상태로 만들어야 합니다.
일반적인 디바이스들은 쓰거나 읽는 순간만 nCE 단자를 활성화 시키는 것과 다르게.
NAND 플래쉬 메모리에 무언가를 하려면 접근할때는 nCE 단자를 계속
LOW 상태로 놓고 작업하고 작업이 끝나면 HIGH 상태로 돌려 높습니다.
이렇게 칩 제어를 시작하는것을 NAND Start 라고 합니다.
반대로 칩 제어가 끝난 상태를 NAND End 라고 합니다.
원래 올렸다 내렸다 해도 되는데 그렇게 하지 않는다는 야그 입니다.
뭐 어떤 NAND 컨트롤러는 일반 디바이스와 비슷하게 제어되도록 하고 있지만은 일반적인 것은 아닙니다.
nCE 는 NAND 제어 시작부터 LOW로 만들고 NAND 제어가 끝날때 HIGH 로 만든다.
이것은 꼭! 기억해 두시는 것이 좋을 겁니다.
뭐 내부 구성의 동작 방식은 제어하는 방법을 알아가면서 이해 해야 하므로 일단 다음 강좌로 미룹시당
오늘은 대충 내부 모양과 회로 구성의 개요만 보여 드리는 것으로 쫑내죠..
왜냐하면 벌써 시간이 ...
몇줄 안썼는데 그림 그리고 나면 ㅜㅜ
다음 강좌에서 뵙죠...
태그: *유영창 *디바이스드라이버