하드웨어
강좌를 매일 아침에 시간 내서 쓰기로 했는데...
항상 뭔가 일이 생기는 구먼요.. 쩝쩝
오늘은 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 위에 윗줄을 긋습니다.
이 신호는 일반적인 다른 하드웨어 장치와 달리 처리 합니다.
이후 강좌에서 이 부분을 잘 설명할겁니다.
잘 칩 선택신호인 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 가 되어야 한다는 야그 입니다.
태그: *유영창 *디바이스드라이버