강좌를 매일 아침에 시간 내서 쓰기로 했는데...

항상 뭔가 일이 생기는 구먼요.. 쩝쩝

오늘은 NAND 플래쉬에 대한 것을 실제적인 모습을 살펴 보기로 합니다.

일단 대상이 있어야 이해가 쉽겠죠?

뭐 알다시피 제가 에프에이 리눅스 라는 회사 기술 이사이다 보니

당근 사용 대상 하드웨어도 저희 회사가 즐겨 사용하는 플래쉬를 이용해야 겠죠?

현재 저희 보드에 가장 많이 장착된 플래쉬 메모리는 삼성에 생산되는 것입니다.

뭐 NAND 하면 삼성, 메모리 하면 삼성 아니겠습니까?

일단 설명하기 위해 사용되는 NAND 플래쉬는

64M 용량을 갖고 입출력 데이터 버스는 8 비트이고 페이지 크기는 512 입니다.

모델명은 K9K1208U0A 이란 불리고 있습니다.

일단 이 놈의 외관을 봅시당..


[그림3-2] NAND 핀 설명

그림을 보시면서 느끼는 것 있습니까?

예... 다리 열라 많습니다.
더구나 다리 폭 무척 열라 작습니다.

이거 하드웨어 디버깅 할때 스팀 만땅 됩니다.

가난한 회사의 스코프 끝은 항상 두껎습니다.

초보자들 이 핀에 스코프 단자 들이 밀때 열 받습니다.

그나마 다행인것은 핀들의 대부분들이 NC 라는 점입니다. ㅋㅋ

아마 NOR 였으면 각 핀들의 기능이 모두 살아 있을 겁니다. NAND 만쉐이....

핀 이름을 다시 살펴 봅시당.

뭐 하드웨어 고수들이라면 핀 명칭만 봐도 느낌이 팍!팍! 오겠지만...

이 강좌는 초보 대상이지 않습니까?

그러므로 제가 수고스럽게 자세하게 설명해야죠? 흠흠...

일단 N.C No Connection 즉 연결할 필요가 없는 핀들이라는 의미 입니다.
즉 신경 쓸 필요가 없다는 것이죠...

그 다음...VCC - Power

이거 전원 신호 입니다. 3.3V 죠....

그 다음... VSS - Ground

일반적으로 그라운드를 이야기 할때 GND 라고 표기들을 많이 합니다.
그런데 이렇게 VSS라는 표현도 쓰죠 ...

같은 이야기 입니다.

즉 0V 라는 이야기 입니다.

그 다음.. CE - Chip Enable

이 핀은 말이죠...

모든 하드웨어 장치에는 있는 핀이죠.. 즉 해당 하드웨어를 CPU가 사용하겠다고 표시를 하는 핀인데...
보통 네거티브 로직으로 동작 합니다. 그래서 실제로는 이렇게 표기 합니다.

nCE

회로도에서 표기 할때는 보통 CE 위에 윗줄을 긋습니다.

이 신호는 일반적인 다른 하드웨어 장치와 달리 처리 합니다.

이후 강좌에서 이 부분을 잘 설명할겁니다.

여기서 잠깐

프로그래머인 우리가 참이라고 하는 것은 보통 0 이 아닌 상태를 의미 합니다.
디지털 회로에서 참에 대한 표현도 역시 0 이 아닌 1을 사용합니다.
디지털 회로에서 1 이라는 것은 5V 난 3.3V 의 전압 레벨로 표현합니다.
그렇다면 무언가 동작 시킨다는 것은 우리는 보통 상식적으로 참으로 익식하므로
칩선택 같은 것은 당근 참값 신호로 주어야 하지 않겠습니까?

근데 여기서 경제 논리가 나옵니다.

그게 뭐냐...

칩이 선택되는 신호를 인식하는 회로를 구성할때
참 논리로 선택하게 하고 이를 인식하는 것보다. 부논리로 하는 것이 회로적으로 간단해 집니다.
그래서 CS 즉 칩선택 신호같은 것을 부 신호로 만드는 것이 더 유리 하다는 것이죠...

물론 옛날에 그랬다는 이야기 입니다. 지금은 그런 부분이 많이 약해졌지만
어쨌든 부논리 신호가 더 쉽게 구현이 되는 것은 변함없는 사실입니다.

그래서 CS 도 부논리가 되겠끔 설계되어서 nCS 와 같이 표기 하게 되죠
그외 RESET 같은 것도 마찬가지로 리셋을 건다는 것이 사실이므로
참논리가 맞겠지만 현실적인 이유로 nRESET 과 같이 만들어 버립니다.

이제 이것이 전통이 되어서 칩 선택은 당연히 부 논리 즉 0V 신호가 인가되면
선택되는 것으로 된거죠 이것이 네거티브 로직입니다.

여기서 문제가 되는 것은 엔지니어들이 혼란 스러워 하는 것입니다.
회로를 설명할때 보통 동작시킨다는 개념이 참인데 그것을 거짓으로 설명해야 하니깐..
뭔가 동작 시킨다는 개념과 그에 따른 적용 상태를 분리할 필요가 있는 거죠...
그래서 나온 말이 ACTIVE 와 DEACTVIE 입니다.

아...아... 영어의 비애가 다시 느껴지는 부분입니다.

우리나라말로 하면 활성화 비 활성화라는 건데..
미국 놈들은 지들 말이라 다른 늬앙스가 있어서 잘 알아 듣습니다.

즉 무언가 선택하거나 동작 시키거나 허가 하거나 하는 모든 말을 뭉뚱그려서 ACTVIE 라고
하고 ACTIVE 의 반대를 DEACTIVE 라고 하는 겁니다.

영어 메뉴얼을 읽을때 이런 부분이 나오면 활성화라고 이해하셔도 되고 동작 시킨다라고 이해하셔도 됩니다.
이렇게 동작시킬때 로직은 부정이냐 참이냐를 또 설명하게 되죠..
즉 칩을 선택을 Aactive 하려면 FALSE State 가 되어야 한다라고 표현하게 됩니다.
이런 경우 신호에는 n자를 앞에 붙이게 되는게 통례이고요 회로상에는 글짜 위에 윗줄을 그어서 표기하게 됩니다.

잘 칩 선택신호인 CE 에 대해서 봤으니 당연히 생각나는 신호 읽기 쓰기 신호를 찾아 봐야죠...

RE - Read Enable , WE - Write Enable

이것도 네거티브 로직입니다.

즉 nRE 와 nWE 로 표기되어야 정상인거죠...

NAND 플래쉬에서 무언가를 읽으려면 nRE 신호를 LOW 즉 0V 로 떨어 트려야 읽을수 있고
무언가를 쓰려면 nWE 신호를 LOW 즉 0V로 떨어 트려야 쓸수 있습니다.

이에 대한 자세한 이야기는 다음 강좌에서 신호 시그날을 설명할때 자세하게 이야기 하겠습니다.

평상시에는 두 신호는 HIGH 즉 3.3V를 유지 하고 있어야 합니다.

플래쉬 메모리는 프로그램에 의해서 쓸수 있습니다만 경우에 따라서 프로그램의 오동작에 의한
잘못된 자료가 써 지는 것을 강제로 방지 할 필요가 있을수 있습니다.

이때 사용하는 것이 바로 WP - Write Protect 즉 쓰기 금지 신호 선입니다.

이것 역시 네거티브 로직입니다. 즉 nWP 라고 표현되어야 합니다.

근디 실제로 이 핀은 대부분의 하드웨어에서는 그냥 HIGH 즉 3.3V를 걸어 버립니다.
쓸일이 거의 없다는 거죠...

읽기 전용으로만 사용해야 하는 특수한 경우 아니면 그냥 무시하는 핀입니다.

자 그리고 CPU에서 NAND 플래쉬에 데이터를 넣거나 빼기 위한 무언가의 통로가 필요하겠죠?

그게 다음 신호 입니다. I/O0 ~ I/O7 - Data Input/Outputs

총 8 비트의 데이터 버스 신호 입니다.

이 신호는 보통 D 라고 표기 하기도 합니다.

자 이제까지는 일반적인 하드웨어 신호와 유사 합니다.

근데 가만히 보니 무언가 이상하죠?

예 .... 눈치 채신분이 있겠지만

어드레서 버스 입력 핀이 없습니다.

그것참...

없죠?

대신에 다음과 같은 2 개의 핀이 있습니다.

이전 강좌에서 이야기 했죠?

데이터를 읽거나 쓸때의 순서..

자 다시 한번 기억해 보세용...

읽기 부분을 기억해 봅시당

읽기 명령을 전달하고
읽을 주소를 전달하고
읽을수 있는 상태를 확인하고
데이터를 읽는다.

오호..

이를 위한 핀이 다음입니다.

CLE - Command Latch Enable
ALE - Address Latch Enable
R/B - Ready/Busy output

명령을 전달하려면 CLE 핀을 HIGH 로 놓고 데이터 버스에 명령을 써 넣으면 됩니다.
주소를 전달하려면 ALE 핀을 HIGH로 놓고 데이터 버스에 주소를 써 넣으면 됩니다.

읽을 수 있는 상태를 확인하려면 R/B 핀을 사용하면 됩니다.

그리고 마직막으로 실제 플래쉬 데이터를 읽으려면 CLE와 ALE를 둘다 LOW상태로
놓고 데이터 버스에서 읽으면 됩니다.

쉽죠? ㅋㅋ

이와 관련된 타이밍은 다음 강좌에 자세하게 써 넣을 겁니다.

참...

R/B는 엄밀히 이야기 하면 이렇게 표기되어야 합니다. R_nB

무언가 바쁘면 0이고 평상시에는 HIGH 가 되어야 한다는 야그 입니다.

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