안녕하세요. 오늘은 Micro SD카드 SPI 프로토콜에 대해 알아보겠습니다.
SPI, SD Mode 방식이 있고 해당 글에서는 SPI모드를 사용할 예정입니다.
아래의 사이트에서 프로토콜에 대한 내용을 확인 할 수 있습니다. (Physical Layer Simplified Specification)
https://www.sdcard.org/downloads/pls/
*SPI MODE 설정
1. CPOL : 클럭이 Idel 상태일때 Low (0)
2. CPHA : 첫 번째 엣지에서 데이터 샘플링 (0)
3. Significant Bit : MSB
4. Enable Line : Low
5. 클럭속도
1) 초기화 클럭 주파수 : 100kHz~400kHz(권장)
2) 초기화 완료 후 데이터 전송 단계 : 25MHz(최대)
*패킷해석방법
※ 커맨드(MOSI)
1바이트 : command index
2~5바이트 : Argument
6바이트 : CRC7+end bit (end bit는 항상 1)
※ 응답(MISO)
커맨드 전송 후 1~8바이트 이내로 응답하고 응답하는 바이트수는 커맨드에따라 다름
응답 | 커맨드 | 길이 | 주요 용도 |
R1 | CMD0, CMD17 등 | 1 byte | 상태 비트 (Idle, CRC error 등) |
R1b | CMD12 등 | 1 byte + busy | 상태 + Busy 처리 |
R2 | CMD13 | 2 bytes | R1 + 내부 오류 정보 |
R3 | CMD58 | 5 bytes | R1 + OCR (전압 범위, CCS 등) |
R7 | CMD8 | 5 bytes | R1 + 전압/Check Pattern Echo |
*SD카드 SPI 모드 진입하는 순서
아두이노 우노에 Micro SD를 연결해서 실제로 SPI모드에 진입하는 파형을 확인해보겠습니다.
사용하는 코드는 아래와 같습니다.
#include <SPI.h>
#include <SD.h>
void setup() {
Serial.begin(9600);
Serial.println("begin start");
if (!SD.begin(4))
{
Serial.println("begin fail");
return;
}
Serial.println("begin done");
}
void loop() {
}
1. 전원 인가 후 클럭 흔들기(Dummy Clocks)
- CS가 High 인 상태로 최소 74클럭 흔들어야함
2. SD 카드를 SPI 모드로 진입시키고, 초기화 상태로 만듦 (CMD0: GO_IDLE_STATE)
CS = LOW로 바꾼 뒤
커맨드: 0x40 00 00 00 00 95 전송
응답: R1 = 0x01 (Idle 상태)
3. 초기화전에 전압 범위 (2.7~3.6V) 지원 여부 & 패턴 확인 (CMD8: SEND_IF_COND)
커맨드: 0x48 00 00 01 AA 87
(Argument = 0x000001AA, CRC=0x87)
응답: R7 = 0x01 + 0x00 00 01 AA (정상)
4.SD카드 초기화 요청 시도 (CMD55 + ACMD41 반복)
커맨드 CMD55: 0x77 00 00 00 00 FF
커맨드 ACMD41: 0x69 40 00 00 00 FF
응답: 0x01 (반복) → 마지막엔 0x00 (초기화 완료)
5. OCR 확인 (CMD58: READ_OCR)
커맨드 : 0x7A 00 00 00 00 FF
응답 R3
R1 : 0x00 (정상)
OCR : 0xC0FF8000 (SDHC/SDXC카드(CCS=1), UHS-I 지원카드, 2.7V~3.6V 전압지원)
(결론)
1. 전원 인가 후 클럭 흔들기(Dummy Clocks)
2. CMD0 → 응답 0x01 → Idle 상태 진입, SPI 모드 진입 성공
3. CMD8 → 응답 0x01 + 0x000001AA → 전압 범위 2.7V~3.6V 지원 확인
4. CMD55 + ACMD41 (with HCS=1) 반복 전송
초기화 과정 → 응답이 0x00이 될 때까지 반복
응답 0x00 시 → 카드 초기화 완료, Ready 상태
5. CMD58 → OCR 응답 0xC0FF8000 분석 결과:
CCS = 1 → SDHC/SDXC 카드 (고용량)
S18A = 1 → 1.8V 전환 지원(UHS-I 가능)
전압 범위: 2.7~3.6V 지원 확인
'각종 CHIP' 카테고리의 다른 글
MCU에서 Micro SD카드 사용하기 1편 (MicroSD Card Adapter 알아보기) (0) | 2025.05.07 |
---|---|
CH341 칩을 이용해서 UART,I2C,SPI 통신하기 4편(SPI) (0) | 2025.05.05 |
CH341 칩을 이용해서 UART,I2C,SPI 통신하기 3편(I2C) (0) | 2024.12.22 |
CH341 칩을 이용해서 UART,I2C,SPI 통신하기 2편(UART) (0) | 2024.12.08 |
CH341 칩을 이용해서 UART,I2C,SPI 통신하기 1편(기본 소개) (0) | 2024.11.23 |