본문 바로가기
AUTOSAR

SPI 통신이란 무엇인가? (SPI 기본 구성, SPI 통신 동작 과정 포함)

by Autosar 2026. 6. 9.
반응형

임베디드 시스템을 개발하다 보면 MCU 하나만으로 모든 기능을 구현할 수는 없다.

 

자동차 ECU를 예로 들면 MCU 외에도 SBC(System Basis Chip), Motor Driver IC, EEPROM, External Flash, Sensor 등 다양한 외부 IC들이 존재한다.

 

MCU는 이러한 장치들과 데이터를 주고받으며 시스템을 제어한다.

 

예를 들어,

  • SBC에게 Watchdog 갱신 명령 전송
  • EEPROM에 설정값 저장
  • Motor Driver에 모터 구동 명령 전송
  • Sensor 데이터 읽기

와 같은 작업들이 끊임없이 발생한다.

 

이때 MCU와 외부 IC를 연결하는 대표적인 통신 방식 중 하나가 SPI(Serial Peripheral Interface)이다.

 

실제 자동차 ECU를 분석해 보면 대부분의 SBC, EEPROM, Motor Driver IC가 SPI를 사용하여 MCU와 연결되어 있는 것을 확인할 수 있다.

 

SPI란?

 

SPI는 Motorola에서 개발한 동기식(Synchronous) 직렬 통신 프로토콜이다.

직렬 통신이란 데이터를 한 번에 여러 비트가 아닌 한 비트씩 순차적으로 전송하는 방식을 의미한다.

 

SPI의 가장 큰 특징은 Clock 신호를 기준으로 데이터를 주고받는다는 점이다.

또한 데이터를 보내는 동시에 받을 수 있는 Full Duplex 통신을 지원한다.

 

SPI의 주요 특징은 다음과 같다.

  • 고속 통신 가능
  • Full Duplex 지원
  • 하드웨어 구조가 단순
  • 구현이 쉬움
  • 다양한 외부 IC 지원

이러한 장점 때문에 자동차 ECU뿐 아니라 산업용 제어기, 가전제품, IoT 기기 등에서도 널리 사용된다.

 

SPI 기본 구성

 

SPI는 일반적으로 4개의 신호선을 사용한다.

 

SPI는 Master와 Slave 구조로 동작한다.

일반적으로 MCU가 Master가 되고 외부 IC가 Slave가 된다.

SCLK (Serial Clock)

Master가 생성하는 Clock 신호이다.

SPI 통신의 기준이 되는 신호로 모든 데이터 송수신은 이 Clock에 맞춰 이루어진다.

쉽게 말하면 통신의 박자를 맞춰주는 역할을 한다.

 

MOSI (Master Out Slave In)

Master에서 Slave로 데이터를 전송하는 선이다.

예를 들어 MCU가 SBC에 명령을 보낼 때 사용된다.

MCU → SBC

 

MISO (Master In Slave Out)

Slave에서 Master로 데이터를 전송하는 선이다.

예를 들어 SBC 상태 정보를 MCU가 읽어올 때 사용된다.

MCU ← SBC


CS (Chip Select)

어떤 Slave와 통신할 것인지를 선택하는 신호이다.

일반적으로 Active Low 방식으로 동작한다.

CS = Low  → 선택
CS = High → 비선택

 

외부 IC가 여러 개 존재하는 경우 각 IC마다 별도의 CS 신호를 사용한다.

 

SPI 통신 동작 과정

 

그렇다면 실제 데이터는 어떤 순서로 전송될까?

MCU가 SBC에 데이터를 전송하는 상황을 예로 들어보자.

 

1단계 : Slave 선택

먼저 MCU는 통신하려는 Slave의 CS를 Low로 만든다.

CS = Low

 

이 신호를 받은 SBC는 "이제 나와 통신하려는구나" 라고 인식한다.

 

2단계 : Clock 생성

Master인 MCU가 Clock 신호를 생성한다.

SCLK

 

SPI에서는 Master만 Clock을 생성할 수 있다.

Slave는 Clock을 만들 수 없다.

 

3단계 : 데이터 전송

MCU는 MOSI 선을 통해 데이터를 전송한다.

예를 들어 0xA5를 전송한다고 가정해 보자. (0xA5 = 10100101)

 

Clock이 한 번 발생할 때마다 1비트씩 전송된다.

Clock 1 → 1
Clock 2 → 0
Clock 3 → 1
...
Clock 8 → 1

 

8번의 Clock이 발생하면 1Byte 전송이 완료된다.

 

4단계 : 데이터 수신

데이터를 보내는 동안 Slave도 동시에 데이터를 전송할 수 있다.

MCU → SBC
MCU ← SBC

 

즉. 송신과 수신이 동시에 발생한다.

이를 Full Duplex 통신이라고 한다.

UART와 SPI의 가장 큰 차이점 중 하나이다.

 

5단계 : 통신 종료

데이터 전송이 완료되면 MCU는 CS를 High로 변경한다.

CS = High

 

이후 Slave는 통신 종료 상태로 전환된다.

 

Full Duplex란?


SPI의 핵심 특징 중 하나이다.

 

UART는 일반적으로 '송신 → 수신'과 같은 방식으로 동작한다.

반면 SPI는 '송신과 동시에 수신'이 가능하다.

 

즉, 데이터를 보내면서 동시에 데이터를 받을 수 있다.

덕분에 매우 높은 통신 효율을 가진다.

 

SPI Mode (CPOL / CPHA)

 

SPI 설정 시 가장 많이 실수하는 부분이다.

Clock의 유휴 상태와 데이터 샘플링 위치에 따라 총 4개의 Mode가 존재한다.

Mode  CPOL  CPHA
Mode 0 0 0
Mode 1 0 1
Mode 2 1 0
Mode 3 1 1

 

 

Master와 Slave가 동일한 Mode를 사용해야 정상적으로 통신할 수 있다.

실제 프로젝트에서 SPI 통신이 안 되는 경우 가장 먼저 확인하는 항목 중 하나이다.

 

자동차 ECU에서는 어디에 사용할까?

 

SBC 통신

  • Watchdog Trigger
  • Sleep 제어
  • Wakeup 설정
  • Fault 상태 확인

 

Motor Driver IC

  • 모터 Enable
  • Duty 설정
  • Fault 진단 정보 읽기

 

EEPROM

  • EOL 데이터 저장
  • Variant Coding 저장
  • 진단 정보 저장

 

External Flash

  • Bootloader
  • FOTA
  • Application Update

 

정리

 

SPI는 MCU와 외부 IC를 연결하는 가장 대표적인 고속 직렬 통신 방식이다.

 

구조는 단순하지만 실제 자동차 ECU에서는 SBC, EEPROM, Flash Memory, Motor Driver IC 등 거의 모든 핵심 부품과의 통신에 사용된다.

 

특히 SPI를 이해할 때는 단순히 MOSI, MISO의 의미를 외우는 것보다 CS로 Slave를 선택하고, Clock에 맞춰 데이터를 주고받으며, 송신과 수신이 동시에 이루어진다는 동작 원리를 이해하는 것이 중요하다.

 

AUTOSAR 프로젝트에서도 SPI Driver, SPI Handler, MCAL SPI 설정을 자주 다루게 되므로 임베디드 개발자라면 반드시 익숙해져야 하는 기본 통신 프로토콜 중 하나이다.

반응형