ATmega128 SPI W25Q64 EEPROM 제어하기 -2

2019. 7. 29. 16:28임베디드/ATmega128

이제 EEPROM에 데이터를 쓰고 읽으려고 한다. 바이트 단위로 read, write를 하면 다음 제어신호를 위해 5ms를 기다려야 한는 단점이 있다. 바이트 단위 대신 page 단위로 기록하면 한 번에 훨씬 많은 데이터를 기록할 수 있다

 

페이지는 경계가 존재한다. 즉 경계에 도달하면 다음 주소로 넘어가는 것이 아니라 페이지의 첫 시작 주소로 넘어오게 된다. 따라서 페이지가 시작하는 주소부터 write를 시작하는 것이 좋다

 

 

제어하려는 w25q64는 256바이트 크기의 페이지로 이뤄졌다. w25q64는 64M-bit로 8M-byte로 32768*256 = 8M-byte가 나오게 된다. 다음 명령어로 page write 제어를 할 수 있다. 256개를 한 번에 쓰는 것이므로 명령어와 주소를 입력한 후 총 256개의 데이터를 전달하면 된다

 

코드를 작성하기 전에, 반드시 Timing 요구 사항을 확인해야 한다. 아래 표를 보면 쓰기 명령 전에는 반드시 5ms를 기다려야만 한다. 기다리는 시간은 SS핀을 Low로 내리기 전 대기하는 시간이다

 

 

1. 쓰기 명령을 하기 위해서는 반드시 Write_enable을 해야만 한다. "06h" 명령어를 전달하면 된다

 

 

2.  Write_enable이 잘 됐는지 상태 레지스터를 검사해야 한다. 05h를 전달한 후 다음 바이트에 1번 비트인 WEL을 검사해서 확인할 수 있다

 

 

 

3. Page program을 통해 Write를 할 것인데, 데이터시트를 잘 읽어보면 해당 명령어를 실행하기 전에 해야할 일들이 있다

 

1) Page program을 할 부분에 대해서 사전에 erase를 해야만 한다

2) Write Enable이 되어있어야 한다

3) 그 후 "02h" 명령어를 전달해서 페이지만큼 쓰게 된다

 

 

3-1) Sector-Erase를 하기 위해선 먼저 Timing 요구를 보게 되면, 최대 400ms를 기다려야만 한다

 

 

그리고 4KB 단위로 지우게 되는데, 현재 예제는 256바이트만 쓰고 읽을 것이므로 0번지에서 한 번만 실행할 것이다

 

3-2) 2번 과정과 같다

 

3-3) "02h" 명령어를 전달해서 페이지 단위로 256바이트를 한 번에 쓸 수 있다

 

4. 읽기 과정을 실행한다