지난번 포스팅 “SD 메모리 SPI로 제어하기“의 내용만으로는 부족하여 추가적으로 정리한다.
SD 메모리 카드는 기본적으로 전원이 들어오면 SDIO로 동작을 한다. 따라서 대부분의 칩벤더에서는 SDIO인터페이스를 사용하는 예제를 제공하는데, SDIO가 없는 작은 MCU에서는 SPI를 사용해야 한다. 따라서 다음 그림과 같은 초기화 루틴이 필요하다.
SPI모드에서 SD 메모리 초기화 루틴
SD 메모리 커맨드
- 1번: CS, MISO를 High로 하고 74개 이상의 SPI dummy clock을 전송한다.
- 2번: CRC가 반드시 일치해야 한다.
위 표에서 CMD0은 0, CMD8은 8을 전송하는 형태이고, ACMD41은 CMD55를 전송후 CMD41를 전송하는 것이며, argument로 30번째 비트가 세트된 32비트를 전송한다.
커맨드 응답
커맨드의 응답은 다음과 같다. R1은 1바이트이고, R3, R7은 R1+ 32비트이니 5바이트이다.
관련 코드: STM32F429IDiscovery보드에서 테스트한 코드가 github에 업로드되어 있으니 코드를 보면서 참고 문서를 보면 이해가 될 듯.. SD memory control with SPI