연구노트/통신 설계

[I2C/SPI] SPI 통신원리 || 신호선부터 원리까지

ipmes 2026. 7. 24. 10:00

썸네일

 

 


 

SPI 통신원리

신호선부터 원리까지


 

 

 


1부 [I2C/SPI] I2C, SPI 통신 || 간단히 알아보는 특징
2부 [I2C/SPI] I2C 통신원리 || 구조부터 통신 과정까지
3부 [I2C/SPI] SPI 통신원리 || 신호선부터 원리까지

4부 [I2C/SPI] I2C 통신 실험 || 아두이노 간 통신하기


 

SPI의 4가지 신호선

SPI는 I2C와 달리 4개의 선을 사용하여 통신합니다.

 

MOSI (Master Out Slave In)

Master에서 Slave로 데이터를 전송합니다.

 

MISO (Master In Slave Out)

Slave에서 Master로 데이터를 전송합니다.

 

SCK (Serial Clock)

Master가 생성하는 클럭 신호선입니다.

I2C의 SCL과 마찬가지로 모든 장치는 이 클럭에 맞춰 데이터를 주고받습니다.

 

CS / SS (Chip Select / Slave Select)

Master가 통신할 Slave를 선택하는 선입니다.

Slave마다 별도의 CS 선이 필요하며, 해당 선이 활성화된 Slave만 통신에 참여합니다.

 

SPI의 가장 큰 특징은 MOSI와 MISO가 별도의 선으로 분리되어 있다는 점입니다.

덕분에 Master와 Slave는 같은 클럭 사이클 안에서 동시에 데이터를 주고받을 수 있는 전이중(Full-Duplex) 통신 방식 입니다.

 

또한 SPI는 I2C와 달리 주소가 존재하지 않으며, Master가 물리적으로 CS 핀을 제어하여 통신 대상을 지정합니다.

이 방식은 구조가 단순하지만, Slave 수가 늘어날수록 Master에서 CS 핀도 함께 늘어난다는 단점이 있습니다.


마스터(Master)와 슬레이브(Slave)

@wikipedia

 

SPI 버스에도 마스터와 슬레이브라는 개념이 존재하지만, I2C와는 동작 방식에서 큰 차이가 있습니다.

 

마스터(Master)

버스의 주도권을 가진 장치입니다.

클럭 신호를 생성하며, 통신할 슬레이브를 CS 핀을 통해 직접 선택합니다.

또한 MOSI 라인을 통해 데이터를 전송하고, MISO 라인을 통해 슬레이브로부터 데이터를 동시에 수신합니다.

 

슬레이브(Slave)

마스터에 의해 선택되어 데이터를 주고받는 장치입니다.

각 슬레이브는 고유한 CS 핀을 가지며, 해당 핀이 활성화될 때만 통신에 참여합니다.

 

 

SPI Mode

 

SPI 또한 동기(Synchronous) 시리얼 통신 방식이기 때문에 클럭에 맞춰 데이터를 송수신합니다.

하지만 장치마다 클럭이 평소에 어떤 상태를 유지하는지, 그리고 어느 클럭 에지에서 데이터를 읽을지가 다를 수 있습니다.

이 두 가지 기준을 조합한 것이 바로 SPI Mode입니다.

 

 

  • CPOL (Clock Polarity, 클럭 극성)

클럭이 대기 상태일 때 어떤 값을 유지하는지를 나타냅니다.

CPOL이 0이면 클럭은 평소 LOW를 유지하고, CPOL이 1이면 평소 HIGH를 유지합니다.

 

  • CPHA (Clock Phase, 클럭 위상)

클럭의 어느 시점에서 데이터를 읽을지를 나타냅니다.

CPHA가 0이면 첫 번째 에지에서, CPHA가 1이면 두 번째 에지에서 데이터를 샘플링합니다.

 

 

이 두 값의 조합으로 아래 표와 같이 Mode 0부터 Mode 3까지, 총 4가지 SPI Mode가 만들어집니다.

 

 

데이터 송수신 원리

 

SPI 통신에서 데이터 프레임은 CS(또는 SS) 신호에 의해 정의되므로, 시작 비트(Start Bit)나 종료 비트(Stop Bit)를 별도로 사용하지 않습니다.

클럭이 한 번 발생할 때마다 1비트의 데이터가 전송되며, 대부분 1byte 단위로 데이터를 주고받지만 장치에 따라 다양한 데이터 길이를 사용하기도 합니다.

 

 

 

그리고 Master와 Slave는 각각 Shift Register를 가지고 있습니다.

데이터를 쓸 때는 Master의 Shift Register에 데이터를 먼저 저장하고, 데이터를 읽을 때는 Slave의 Shift Register에 데이터를 저장합니다.

 

이후 SPI 컨트롤러가 필요한 개수만큼 클럭을 발생시키면, 데이터 비트가 한쪽 Shift Register에서 밀려 나와 다른 쪽 Shift Register로 순차적으로 이동합니다.

일반적으로 가장 상위 비트(MSB, Most Significant Bit)부터 먼저 전송됩니다.

 

Slave에서 데이터를 읽기만 하더라도 Master는 반드시 데이터를 함께 전송해야 하며, 클럭 역시 계속 발생시켜야 합니다.

실제로 센서와 같은 SPI 장치는 데이터를 생성하기만 하고 Master로부터 받은 데이터를 활용할 필요가 없는 경우가 많은데, 이때 전송되는 0x00 또는 0xFF 같은 의미없는 임의의 값을 사용합니다.

 

 

마무리

 

지금까지 I2C와 SPI의 통신원리에 대해 알아보았습니다.

I2C는 2개의 선을 사용하여 정해진 프로토콜에 따라 데이터를 주고 받는데에 반면, SPI는 4개의 선을 이용하여 Master와 Slave의 Shift Register가 클럭에 맞춰 데이터를 동시에 송수신하는 차이가 있었습니다.

다음 시간에는 I2C 와 SPI 통신을 이용하여 아두이노간 통신을 해보도록 하겠습니다.

 

 

 




TEL (062-226-1777, 010-9891-7244), E-mail (ipmes@ipmes.co.kr)

임베디드 시스템 | PCB 설계 제작 | 펌웨어 개발 | 신호처리 | 응용프로그램

 

#IPMES#아이피엠이에스#연구노트#임베디드#PCB제작#펌웨어개발,

#하드웨어개발#소프트웨어개발#회로설계,

#광주PCB#광주시제품#광주시제품개발#광주OEM#광주광역시PCB,

#광주임베디드#광주음성처리#광주신호처리#광주광역시임베디드,

#광주회로설계#광주아트웍#PCB샘플링