SPI 모드에 대한 명령

7 SPI 모드

7.1 소개

SPI 모드는 플래시 기반 SD 메모리 카드에서 제공하는 보조 통신 프로토콜로 구성됩니다. 카드 프로토콜의 하위 집합입니다. 이 인터페이스는 전원을 켠 후(CMD0) 모든 재설정 명령 중에 선택됩니다.

SPI 표준은 물리적 링크만 정의하고 데이터 전송 프로토콜을 제공하지 않습니다. SD 메모리 카드 SPI 구현은 SD 메모리 카드 프로토콜 및 명령 세트의 하위 세트를 활용합니다.

7.2 SPI 버스 프로토콜

SD 카드는 명령과 데이터 흐름을 기반으로 합니다. 이러한 명령과 데이터 흐름은 시작 비트로 시작하여 정지 비트로 끝납니다. 워드 지향 각 명령 또는 데이터 블록은 여러 개의 8비트 바이트로 구성되며 각 바이트는 CS 칩 선택 신호와 정렬됩니다(예: 이 길이는 8 클럭 사이클의 배수입니다).

SD 메모리 카드 프로토콜과 유사하게 SPI 텍스트 메시지는 명령, 응답 및 데이터 블록 링으로 구성됩니다. 모든 통신은 CS를 로우로 당겨 각 버스 트랜잭션을 시작하는 마스터에 의해 제어됩니다.

SPI 모드의 응답 동작은 다음 세 가지 측면에서 SD 모드와 다릅니다.

1. 선택한 카드는 항상 명령에 응답합니다.

2. 추가(8비트) 응답 구조를 사용합니다.

3. 카드에 데이터 검색 문제가 발생하면 SD 모드에서 시간 초과 대신 응답 오류(예상 데이터 블록 교체)로 응답합니다.

명령 응답 외에도 쓰기 작업 중에 카드로 전송된 각 데이터 블록은 특수 데이터 응답 토큰으로 응답됩니다. 데이터 블록은 쓰기 블록(WRITE_BL_LEN)만큼 크거나 세마포어 워드만큼 작을 수 있습니다. 일부 블록에 대한 읽기/쓰기 작업은 카드의 CSD 레지스터에 설명된 선택된 항목에 의해 활성화됩니다.

7.2.1 모드 선택

SD 카드가 SD 모드에서 깨어납니다. 리셋 명령(CMD0)을 수신하는 동안 CS 신호가 Low로 풀려 아이들 모드로 진입한 경우, SD 모드가 필요하다고 판단되면 이 명령에 응답하지 않고 계속 SD 모드를 유지합니다. SPI 모드가 필요한 경우 카드는 SPI로 전환되고 SPI 모드 R1으로 응답합니다.

SD 모드로 돌아가는 유일한 방법은 전원을 껐다 켜는 것입니다. SPI 모드에서는 SD 메모리 카드 프로토콜 상태 머신이 존중되지 않습니다. SPI 모드에서 지원되는 모든 SD 메모리 카드 명령은 항상 사용할 수 있습니다.

7.2.2 버스 전송 보호

버스에서 전송되는 각 SD 메모리 카드 토큰은 CRC 비트로 보호됩니다. SPI 모드에서 SD 메모리 카드는 비보호 모드를 제공합니다. 이 모드를 사용하면 신뢰할 수 있는 데이터 링크로 시스템을 설정할 수 있으므로 CRC 생성 및 검증 기능을 수행하기 위한 하드웨어나 소프트웨어가 필요하지 않습니다.

비보호 모드에서는 명령, 응답 및 데이터 토큰의 CRC 비트가 여전히 토큰에 필요하지만 송신기의 경우 "상관 없음"으로 정의되고 수신기에서는 무시됩니다. .

비보호 모드에서는 SPI 인터페이스가 초기화됩니다. RESET 명령을 사용하여 카드를 SPI 모드로 전환하지만 SD 모드의 카드에서 이를 수신하므로 유효한 CRC 필드가 있어야 합니다.

CMD0에는 매개변수가 없기 때문에 모든 필드(CRC 필드 포함)의 내용은 상수이며 런타임에 계산할 필요가 없습니다. 유효한 재설정 명령은 다음과 같습니다:

0x40, 0x0, 0x0, 0x0, 0x0, 0x95

호스트는 CRC_ON_OFF 명령(CMD59)을 사용하여 카드의 CRC 옵션을 전환할 수 있습니다.

7.2.3 데이터 읽기

SPI는 단일 블록 읽기 및 다중 블록 읽기 작업(SD 메모리 카드 프로토콜의 CMD17 또는 CMD18)을 지원합니다.

유효한 읽기 명령을 수신하면 카드는 SET_BLOCK_LEN(CMD16)에 정의된 길이의 데이터 토큰 다음에 응답 토큰으로 응답합니다. (그림 41 참조)

그림 41 단일 블록 읽기 작업

유효한 데이터 블록은 16비트 CRC로 추가됩니다. 이 CRC는 CCITT 표준 다항식 X16 X12 X5 1에 의해 생성됩니다. .

READ_BL_LEN으로 제공할 수 있는 최대 블록 길이는 CSD에 정의되어 있습니다. 청크가 허용되는 경우 청크 길이는 1에서 MAX 청크 크기 사이의 길이일 수 있습니다. 그렇지 않은 경우 데이터 읽기의 유효 블록 길이는 단순히 READ_BL_LEN에 지정된 값입니다.

시작 주소는 카드의 유효한 주소 범위 내의 모든 바이트 주소일 수 있습니다. 그러나 각 블록은 단일 물리적 카드 섹터 내에 포함되어야 합니다.

수정 가능한 오류가 발생하면 카드는 데이터를 전송하지 않지만 특정 데이터 오류 토큰을 호스트에 보냅니다.

그림 42: 읽기 작업 데이터 오류

上篇: 작업 일시 중단과 작업 삭제의 차이점과 연관성은 무엇인가요? 下篇: 광 모뎀에 광섬유를 연결하는 케이블을 어떻게 빼내나요?
관련 내용