SPI: 클럭에 맞춰 동시에 주고받기
SCK, MOSI, MISO, CS 네 선으로 빠르게 통신합니다. 네 가지 모드, 여러 슬레이브 연결, 실전 디버깅 포인트.
선 네 개
| 선 | 방향 | 역할 |
|---|---|---|
| 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가 대표 사용처입니다.