:::: MENU ::::

SD 메모리 SPI로 제어하기

SD 메모리 카드

SD메모리 는 SDC(Secure Digital Memory Card)를 지칭하며 MMC(Multi Media Card)와 호환된다. 이 SD메모리 카드는 SDIO 또는 SPI로 제어가 가능하다.

SD card pinout

SD 메모리 SPI로 제어하기

SPI 모드는 4가지가 있는데, SD를 제어하기 위해서는  Mode 0를 사용한다. 즉 CPHA = 0, CPOL = 0

SD_SPI_CMD

SPI로 제어시 command는 Command Index(1바이트) + Argument(4바이트) + CRC(1바이트) = 총 6바이트로 구성이되며, 항상 응답코드가 있다. CRC는 CMD0의 경우 0x95, CMD8의 경우 0x87이며, 나머지는 코드에서 0xFF로 처리한다. 아래 링크의 스펙 문서의 부록에 command list 참고

SD spec: https://www.sdcard.org/downloads/pls/simplified_specs/archive/partE1_200.pdf

SD 메모리카드의 인터페이스는 기본적으로 SD모드 이므로 SPI모드로 바꾸기 위해서는 절차가 필요하다.

SD Initialize using SPI

참고할만한 자료


7 Comments

  • Reply seokjin,jang |

    안녕하세요..

    제가 지금 SPI를 이용하여 SD카드에 데이터를 저장하는 작업중인데

    조언을 구하고자 연락드렸습니다..

    회신부탁드립니다.

    감사합니다.

  • Reply sunjae kong |

    sd카드에 대해서 찾아보다가 CSD(Card Specific Data register)안의 CCC(Card Command Class)를 이용하면 읽기/쓰기보호기능을 제어할 수 있을 것 같아서 그 방법을 찾아보고 있는 중입니다.

    혹시 micro sd카드도 spi라는 것을 통해서 제어가 가능한가요??
    혹시 spi라는 것을 사용하지 않아도 micro sd카드 안의 읽기/쓰기 보호기능을 제어할 수 있을까요??

      • Reply sunjae kong |

        답변해주셔서 감사합니다. ^^

        하나만 더 물어봐도 될까요..??
        컴퓨터 소프트웨어(ex.파이썬)를 이용해서 spi모드로 sd카드를 제어하는 것도 가능한가요?
        찾아보니 라즈베리파이로 sd카드를 제어하기도 하는 것 같은데 저는 컴퓨터에 sd카드를 연결해서 제어하고 싶어서요. 이게 가능한지 알려주시면 감사하겠습니다..^^

        • Reply openmicrolab |

          SPI는 버스 인터페이스입니다. 라즈베리파이나, 아두이노 같은 임베디드 MCU에는 거의 필수로 들어있죠.
          하지만 PC에는 SPI가 없으니 불가능합니다.
          대신 PC의 시리얼 포트를 이용한 http://eleparts.co.kr/EPXG4HD6 이런 모듈을 쓰면 되겠네요.

So, what do you think ?