주요 개념
- SPI(Serial Peripheral Interface) 통신
- 시리얼 통신
SPI(Serial Peripheral Interface) 통신이란 직역하면 직렬 주변 기기 인터페이스이다. 2C, CAN, UART와 같은 시리얼 통신(직렬 통신) 방식 중 한 가지로 마이크로컨트롤러, 시프트 레지스터 , SD카드 등의 소형 주변 장치 사이에 데이터를 전송하기 위한 기능이다. 쉽게 말해 SPI 통신은 칩(IC)과 칩 간에 데이터를 주고받기 위한 통신방법 중 한 가지이다. SPI를 이해해두면 추후 ADC 관련 IC분석이나 Phase제어 등의 IC분석을 할 때 좀 더 쉽게 접근할 수 있다고 한다.
SPI 통신 방식의 특징은 1 대 다수(1:N)의 통신을 지원하는 동기식 통신 방식이라는 것이다. 다만 다수의 통신을 위해서는 다수만큼 선이 필요하다는 단점이 있다. 또한 동시에 송수신이 가능하며 I2C에 비해 속도가 빠르다. 또한 단순 센서, 메모리와 같은 칩과 칩 사이의 통신에 많이 사용하기도 한다. 실제로 여러 장비나 센서들을 부착하다 보면 늘어나는 선들이 고민이 될 때가 많은데 SPI 통신을 이용하면 간단하게 배선이 가능하다. 이외에 RS-232 , CAN 버스보다 비교적 짧은 거리에서 동작한다는 것과 하나의 마스터 장치만 지원한다는 특징들이 있다.
SPI 통신은 하나의 마스터 기기와 하나 이상의 슬레이브 기기를 연결하여 사용한다.
SPI는 4가지의 신호를 지정한다. 반드시 이 4가지의 신호가 있어야 SPI 통신이 가능하다.
- SCLK(=SCK) : 동기화 신호이며 클럭 전송을 위한 단자로, 마스터에서 슬레이브로 클럭을 전송합니다.
- MOSI: Master Output Slave Input, 말 그대로 마스터 출력, 슬레이브 입력(M→S 데이터 전송)이다. 실제 마스터에서 슬레이브로 데이터를 전송할 때 MOSI를 통해 데이터를 보낸다.
- MISO: Master Input Slave Output, 슬레이브 출력, 마스터 입력(S→M 데이터 전송)이다. 보통 MOSI를 통해 슬레이브에 명령 데이터가 들어오면 MISO를 통해 슬레이브에서 마스터로 응답 데이터가 출력된다.
- CS(=SS): Chip Select, 보통 SS 핀 즉 Slave Select로 슬레이브를 선택할 때 사용된다. 다시 말해 마스터 장치에서 슬레이브 장치를 선택하기 위한 단자이다.
SPI 장치들은 Shift Register를 가지고 있다. 기본적으로 MSB부터 전송되는데 특정 컨트롤러는 LSB부터 전송을 수행시키는 방법도 지원한다. 아래 그림처럼 SHIFT REGISTER에 의해서 데이터가 이동된다.
마스터에서 어떤 값을 슬레이브로 보낸다고 가정했을 때, 보내는 1 Clock의 신호마다 1bit의 data가 이동된다. 아래는 이에 대한 예시이다.
아래는 좀 더 쉬운 예로 설명된 그림이다.
이처럼 밀어내기 식으로 data가 들어간다고 생각하면 된다.
아래는 1:N 형태의 SPI이다. 우선 SCLK로 동기식 클럭을 만들어주고 CS를 이용해 Slave를 선택하여 통신할 수 있다. SPI는 한 개의 Slave Device와 통신만 가능하며 CS를 LOW로 주면 해당 장치와 통신할 수 있다. 즉, 통신하지 않는 Slave는 CS에 High를 주고 통신하는 Slave에만 CS에 LOW를 주면 된다.
SPI 통신 방식의 장단점은 아래와 같다.
SPI 통신의 장점
- 완전한 전이중(Full duplex) 통신 : 양방향 통신이다. 즉, 동시에 송수신이 가능하다.
- 전송되는 비트에 대한 완전한 프로토콜 유연성 : 최대 16비트까지 맘대로 길이를 조절할 수 있다.
- 전송기가 필요하지 않다 : 흔히 말하는 트랜시버를 사용할 필요가 없다.
- 매우 단순한 하드웨어 인터페이스 처리 : 아주 단순한 센서나 메모리에서 많이 사용.
- IC 패키지에 4개의 핀만 사용
- 최대 클럭이 제한되지 않아 속도 제한이 없다.
- Push-Pull 출력(Open Drain이 아닌)을 사용하여 상호 간에 같은 전압을 사용하여 시그널 정합성과 고속을 지원한다.
- I2C 보다 낮은 소비 전력
- 슬레이브는 마스터가 보내주는 클럭만을 사용하고 정확성이 떨어져도 문제없다.
SPI 통신의 단점
- 하드웨어 슬레이브 인식이 없음.
- 슬레이브에 의한 하드웨어 흐름 제어가 없음.
- 오류 검사 프로토콜이 정의되어 있지 않음. (에러 체킹 지원)
- 노이즈 스파이크에 영향을 받는 경향이 있음.
- RS-232, CAN 버스보다 비교적 더 짧은 거리에서 동작. (칩 간 통신에서만 주로 사용)
- 하나의 마스터 장치만 지원.
- 인밴드(디폴트 SPI wire)를 통해 주소가 지원되지 않아 다 수의 슬레이브를 사용 시 별도의 아웃밴드(칩 셀렉트 라인)를 통해 슬레이브를 선택해야 한다.
- Hot 플러그를 지원하지 않는다.
이번 포스팅에서 SPI 통신에 사용되는 핀들과 구동 방식에 대한 타이밍 다이어그램에 대한 이해를 중점으로 두면 된다.
참고 자료
https://hanbulkr.tistory.com/5
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=roboholic84&logNo=220422219584
https://electronic-king.tistory.com/16
https://blog.naver.com/yuyyulee/220331139392
https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi