그라운드 임베디드 유튜브 구독

노트 / 통신 프로토콜

SPI: 클럭에 맞춰 동시에 주고받기

SCK, MOSI, MISO, CS 네 선으로 빠르게 통신합니다. 네 가지 모드, 여러 슬레이브 연결, 실전 디버깅 포인트.

GROUND EMBEDDED · 정리 노트통신 04SPI선방향역할SCK마스터 → 슬레이브클럭MOSI (COPI)마스터 → 슬레이브데이터

선 네 개

선 방향 역할
SCK 마스터 → 슬레이브 클럭
MOSI (COPI) 마스터 → 슬레이브 데이터
MISO (CIPO) 슬레이브 → 마스터 데이터
CS (NSS) 마스터 → 슬레이브 칩 선택, LOW일 때 활성

클럭 한 번에 양쪽이 1비트씩 동시에 주고받습니다. 읽기만 하고 싶어도 마스터는 더미 바이트를 보내야 클럭이 나갑니다.

네 가지 모드

모드 CPOL (쉴 때 클럭) CPHA (샘플링 에지)
0 LOW 첫 번째 에지
1 LOW 두 번째 에지
2 HIGH 첫 번째 에지
3 HIGH 두 번째 에지

슬레이브 칩 데이터시트의 타이밍 그림을 보고 맞춥니다. 모드가 틀리면 값이 한 비트씩 밀리거나 엉망이 됩니다.

여러 슬레이브

SCK, MOSI, MISO는 공유하고 CS를 칩마다 따로 둡니다. 선택되지 않은 칩은 MISO를 놓아(하이 임피던스) 충돌하지 않습니다.

실전 포인트

  • CS를 소프트웨어 GPIO로 제어하는 경우가 많습니다. 전송이 완전히 끝난 뒤(BSY 플래그) CS를 올립니다.
  • 수 MHz 이상이면 배선 길이와 링잉을 봅니다. 클럭 출력에 직렬 저항이 도움이 됩니다.
  • 시프트 레지스터, 디스플레이, 외부 Flash, 고속 ADC가 대표 사용처입니다.