임베디드 시스템과 마이크로컨트롤러(MCU)에서 주변 장치와 데이터를 주고받는 방법에는 여러 가지가 있다. 그중에서 SPI(Serial Peripheral Interface)는 높은 속도와 간단한 구조를 가진 직렬 통신 프로토콜로 널리 사용된다. 이번 글에서는 SPI의 기본 개념, 동작 방식, 그리고 실제 적용 사례를 살펴보자.
⸻
1. SPI란 무엇인가?
SPI는 풀 듀플렉스(Full-Duplex) 방식의 동기식 직렬 통신 프로토콜이다. 1980년대 Motorola에서 개발한 이 프로토콜은 센서, 디스플레이, 메모리 등의 주변 장치와 마이크로컨트롤러 간의 데이터 교환을 용이하게 한다.
SPI의 특징
• 클럭 신호(Synchronous Clock) 기반 통신
• 마스터-슬레이브 구조
• 풀 듀플렉스 전송 가능
• 고속 통신 가능 (수십 MHz 이상)
• 단순한 하드웨어 설계 (4개 기본 신호선 사용)
⸻
2. SPI의 동작 방식
SPI는 기본적으로 마스터-슬레이브(Master-Slave) 구조를 가진다. 즉, 데이터를 주고받기 위해 반드시 마스터 장치가 존재해야 하며, 슬레이브는 마스터의 클럭 신호에 동기화된다.
기본 신호선 (4선)
1. SCLK (Serial Clock)
• 마스터가 생성하는 클럭 신호
• 모든 슬레이브는 이 클럭에 맞춰 데이터를 송수신
2. MOSI (Master Out, Slave In)
• 마스터 → 슬레이브로 데이터를 전송하는 라인
3. MISO (Master In, Slave Out)
• 슬레이브 → 마스터로 데이터를 보내는 라인
4. SS (Slave Select, Chip Select, CS)
• 특정 슬레이브를 활성화하는 신호 (Active Low)
SPI 데이터 전송 과정
1. 마스터가 SS(Chip Select)를 Low로 설정해 특정 슬레이브를 선택
2. 마스터가 SCLK를 생성하여 통신 시작
3. 마스터는 MOSI를 통해 데이터를 전송하고, 동시에 슬레이브는 MISO를 통해 응답
4. 필요한 만큼 데이터를 주고받은 후, 마스터는 SS를 High로 설정하여 통신 종료
이 방식 덕분에 SPI는 풀 듀플렉스(Full-Duplex) 통신이 가능하며, 클럭 속도에 따라 빠른 데이터 전송을 실현할 수 있다.
⸻
3. SPI의 데이터 프레임과 클럭 모드
SPI는 CPOL (Clock Polarity) 과 CPHA (Clock Phase) 라는 두 가지 설정을 통해 4가지 동작 모드를 지원한다.

슬레이브 장치에 따라 요구하는 SPI 모드가 다를 수 있으므로, 올바른 모드 설정이 필요하다.
⸻
4. SPI와 다른 직렬 통신 방식 비교

SPI는 속도가 빠르고 풀 듀플렉스가 가능하지만, SS 라인이 증가할수록 하드웨어 설계가 복잡해진다. 반면, I²C는 다중 슬레이브 구성이 더 간단하지만 속도가 비교적 느리다.
⸻
5. SPI의 실제 활용 사례
SPI는 속도가 중요한 다양한 임베디드 애플리케이션에서 사용된다.
1) 외부 메모리 (Flash, EEPROM) 제어
• 데이터 저장 및 읽기
• 비휘발성 메모리로 설정 정보 저장
2) 디스플레이 제어 (LCD, OLED, E-Ink 등)
• 그래픽 및 텍스트 출력
• 빠른 화면 갱신
3) 센서 데이터 수집
• 가속도계, 자이로스코프, 온습도 센서 등
• 실시간 데이터 측정
4) RF 통신 모듈 (Wi-Fi, Bluetooth, LoRa)
• 무선 데이터 송수신
• 네트워크 모듈과의 인터페이스
⸻
6. 결론
SPI는 빠른 속도, 간단한 프로토콜 구조, 풀 듀플렉스 지원 등의 장점 덕분에 다양한 임베디드 시스템에서 널리 사용된다. 하지만 SS 라인 관리의 복잡성과 다중 슬레이브 연결 시 한계 같은 단점도 존재한다.
적절한 주변 장치를 선택하고, 올바른 클럭 모드 설정과 함께 사용하면 SPI는 강력한 직렬 통신 솔루션이 될 수 있다.
'임베디드' 카테고리의 다른 글
UART (Universal Asynchronous Receiver/Transmitter) 통신의 이해 (0) | 2025.03.13 |
---|---|
I²C (Inter-Integrated Circuit) 통신의 이해 (0) | 2025.03.12 |
Bare-metal 시스템에서 부트로더의 동작 방식 (1) | 2024.12.24 |
ARM MMU: 레지스터와 동작 방식 완벽 가이드 (0) | 2024.12.22 |
MMU와 페이지 테이블의 이해: 가상 메모리 관리의 핵심 (1) | 2024.12.21 |