NAND WRITE 관련 소스 문의 드립니다.
글쓴이: miracleman / 작성시간: 화, 2015/09/22 - 11:29오후
안녕하세요.
다음 소스는 NAND BUFFER에서 512 바이트를 읽어 어떤 포트(여기서는 PORTD)에 쓰는 소스 입니다.
for(i=0; i<512; i++)
{
NAND_IO = *(WriteBuf + i );
}
NAND_IO는 PORTD이며 NAND의 8개의 데이터 라인을 가리킵니다.
PODTD0 ~ D7까지 있을 겁니다. 근데 8개의 라인으로 표시가능한 바이트 256바이트인데 위에서 보는 바와 같이 512바이트를 읽어 쓸 수가 있나요 ?
더불어, NAND용 버퍼가 필요한 이유는 CPU의 데이터 버스와 NAND 플래시의 I/O를 분리하기 위해서라고 하는데, 잘 이해가 되지 않습니다.
비슷하게 NAND랑 MCU랑 연결할 때 반드시 버퍼가 필요한 거 같은 그 이유에 대해서도 전문가님들의 조언 부탁드립니다.
Forums:
음.. 아마도 속도의 차이 때문이지 않을까요?
CPU의 속도는 매우 빠른대 NAND의 쓰기속도는 느려서 분리되지 않는다면 그만큼 CPU의 대기시간이 길어지기 때문에 중간에 버퍼를 사용해서 그 시간을 줄이려는게 아닐까 생각해 봅니다.
그냥 PORTD에 쓰는 코드로 보여집니다. 256
그냥 PORTD에 쓰는 코드로 보여집니다. 256 바이트이던 512 바이트이던 필요한 만큼 쓸수 있을 것이며 얼마만큼 쓸지에 대해서는 구체적인 설계에 의해서 정해질 것입니다.
PORTD = WriteBuf[i]; 와 똑같은 코드입니다. 대상이 메모리가 되었던 포트가 되었던 MCU가 다른 방법으로 쓸수 있는 방법이 있는지 모르겠네요.
사실 이 정도로 해서 데이터를 포트에 쓸수 있다면 굉장히 단순한 코드인 것입니다.
8개의 라인으로 표시가능한 바이트는 1바이트(8비트)
8개의 라인으로 표시가능한 바이트는 1바이트(8비트) 입니다.
8개의 어드레스라인으로 표현가능한 어드레스는 256개 입니다.
8개의 어드레스라인으로 어드레스 가능한 메모리범위는 (256x비트수) 입니다.
그리고 예를드신 코드와 버퍼는 관련이 없습니다.
CPU와 NAND 프래시메모리간의 동작 전압 레벨이 달라서 버퍼가 있을겁니다.
이것이 대부분의 이유이고, 보드에서 데이터라인등이 길어져서 버퍼를 사용해 정확하게! 동작시키려는 것일 수도 있습니다.
예를 들어주신 코드와 설명이 일치하지 않는것 같은데,
왜 PORTD가 NAND플래시의 대이터라인하고 연결되어 있나요?
애초에 NAND플래시에서 데이터를 읽을때는 어떻게 읽었습니까?
속도 개선이라면...
for(i=0; i<256; i=i+2)
{
NAND_IO1 = *(WriteBuf + i );
NAND_IO2 = *(WriteBuf + i+1 );
}
대충 이런 방식도 통할까 모르겠네요. ㅇ_ㅇ??
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기