덥죠?

전 드디어 진정한 피서를 하고 있습니다.
회사에 에어콘 빵빵해서 더운줄 모르고 있답니다. ㅋㅋ

자 이번 강좌는 저번에 이어서 NAND 를 연속적으로 읽는 겁니다.

그래서 이번 강좌는 무척 짧습니다. ㅋㅋ

AND 읽기에 대한 개념 정리

저번에 읽기에 대한 것을 보면서 여러분이 개념적으로 하나 정리해야 할것은

NAND 는 페이지로 다루어야 한다는 거죠..

일반 메모리 처럼 어드레스로 생각하면 안된다는 거죠

그리고 페이지는 NAND 칩 마다 그 크기가 달라집니다.
뭐 이건 나중에 Large Block 을 지원하는 칩을 다룰때 다시 말할겁니다.

현재는 한페이지는 512 바이트 + 16 이라고 생각하십시오

그러므로 주소라고 말하는 것은 크게 두가지가 합쳐진 개념이죠

버퍼 위치 + 페이지 번호

주소를 구성하는 바이트 수는 이런 고로 용량에 따라서 달라지는데

현재 제가 강좌하고 있는 칩은 64 M 라서 총 4 바이트로 구성됩니다.

12 번째 페이지의 32 번째의 데이터를 읽고자 한다면
어드레스는 다음과 같이 구성되어죠..

읽을 버퍼 위치 : 32
페이지는 : 12

총 바이트는 4 바이트의 써 넣기 순서는 다음과 같죠

페이지 번호는 역순으로 입력 되어야 합니다. ^^

이때는 읽기 명령이 0x00 이 되어야 합니다.

0x003456 번째( 계산하기 쉽게 ^^ ) 페이지의 257 번째의 데이터를 읽고자 한다면
어드레스는 다음과 같이 구성되어죠..

  • 읽을 버퍼 위치 : 257 --> 257 - 256 = 1
  • 페이지는 : 0x003456

총 바이트는 4 바이트의 써 넣기 순서는 다음과 같죠

이때 읽기 명령은 0x01 이 사용되어야 하죠..

뭐 스페어 읽는 것은 굳이 다시 설명 안해도 되겠죠?

NAND 연속적으로 읽기

자 한페이지씩 읽었는데...

속도광이 오토바이족이나 자동차족만 있는 것이 아닌거 아시죠?
예..

맞습니다.

어셈블러 하시는 분들은 대부분 속도 광입니다.
임베디드 하시는 분들은 대부분(?) 속도 광입니다.

아주 조금만 빨리 할수 있는 방법이 있으면 죽어라 팝니다.

이런 분들을 위해서 나온 것이 연속적으로 읽기 입니다.

이게 뭐냐...

NAND 를 읽을 때 한 페이지 단위로 읽어야 하는데
이때 항상 명령 쓰고 주소 넣어야 하죠?

이시간을 아끼고자 하는 분들을 위한 것이 바로 ....

연속 읽기

즉...

Sequential Row Read

라고 합니당.
(흠 사대주의인가 ... 영어로 쓰니깐 뭔가 있어 보이네 쩝 )

근데요..

이게 뭐 특별한 명령이 필요한 것은 아니고 그냥 읽기를 계속 하면 처리 됩니다.
( ㅋㅋ 속았죠.. )

먼저 매뉴얼에 있는 그림을 여기서 봅시다.


[그림] 연속 읽기 모드 1 타이밍.bmp

그림을 보면 알수 있듯이

맨처음 한페이지를 읽기 처리는 같지만 계속 데이터를 읽으면 다음 페이지로 이동한다.

여기서 한 페이지의 읽기 단위는 528 이다. 즉 스페어 공간까지 계속 읽는 다는 의미..

그런데 페이지 버퍼에서 읽고 끝까지 읽었다면 다음 페이지를 메모리 공간에서
페이지 버퍼로 이동 시키는 시간이 필요하므로

한 페이지 끝에 도달할때까지 데이터를 읽은 이후에는
잠시 기달려야 합니다.

이 시간은?

예 맞습니다.

귀찮음의 반로인 지연 루틴으로 대치합니다.

괜히 RnB 신호 체크 하지 않습니다.

어쨌든 보통 연속 읽기 1 모드 에서는 ( Sequential Row Read 1 Mode)

실질적인 프로그램에서는 버퍼위치는 항상 0 으로 주고 처음부터
읽는 것이 처리 하기 편하기 땜시

읽기 명령은 0x00 을 사용합니다.

정리하면

  1. 연속 읽기 명령은 0x00 명령을 주로 사용하고
  2. 버퍼 포인터 위치는 0 으로 지정하고
  3. 원하는 페이지 주소를 지정하고
  4. 메모리에서 페이지 버퍼로 이동하는 시간동안 기다린후
  5. 528 번 데이터를 읽고
  6. 다시 4) 번과 5) 번을 반복하면 됩니다.

뭐 사실 기껏 시간 줄이는 것이 1) 과 2) 만 줄이는 거라서

개발자들은 귀찮게 이런식의 구현을 안합니다. ( 나만 그런가? )

그냥 한페이지 단위로 읽는 루틴을 정형화 하고
그걸 이용하는 것이 나을수 있다는 거지요

명령 주고 어드레스 주는 시간이 얼마나 걸린다고 ㅉㅉ

전 속도광이 아니거든요

편하게 살고 싶어요...

자 여기서 한가지 더

스페어 부분만 읽는 명령이 0x50 을 사용하는 경우는 어떻게 될까요?

ㅋㅋ

그건 다음 그림을 보시면 확실히 알수 있습니다.
이건 굳이 설명하지 않겠습니다.


[그림 3-12] 연속 읽기 모드 2 타이밍

이렇게 읽는 방식을

연속 읽기 2 모드 ( Sequential Row Read 2 Mode)

라고 합니다.

이것은 거의 사용되지 않는다는 점을 기억해 주세용...

이것으로 읽기에 대한 개념을 마치겠습니당...

랄랄랄 이번것은 그냥 그림으로 때웠네요 ㅋㅋ