[아두이노] [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가
또 나왔다. ㅇㅇㅇ이란 무엇인가.
SPI는 Serial Peripheral Interface의 약자로 해석하면 ‘직렬 주변기기 인터페이스’. 음????
SPI는 1:N 통신을 지원하는 동기식 통신 방식이다. 동기식 통신 방식이 뭔지는 이제 설명 안해도 알겠지요?
SPI 통신을 위해서는 반드시 하나의 마스터와 하나 이상의 슬레이브 기기가 존재해야 한다. 통신을 위해서는 최소 4개의 선이 필요한데, MISO, MOSI, SCK, SS가 그것이다. 하나씩 살펴보면,
- MOSI : Master Out, Slave In – 마스터에서 데이터를 출력하기 위한 신호 선
- MISO : Master In, Slave Out – 슬레이브에서 데이터를 출력하기 위한 신호 선
- SCK : Clock 신호 선
- SS : Slave Select – 데이터를 송수신할 슬레이브를 선택하기 위한 신호 선
데이터를 전송하고 수신하는 선이 따로 있기 때문에 전송과 수신이 동시에 이루어질 수 있어서 송수신이 하나의 선으로 이루어지는 I2C 통신에 비해 속도가 빠르다. 그리고 마스터에서 출력하는 선과 슬레이브에서 출력하는 선이 정해져 있어 시리얼 통신처럼 Rx, Tx 선이 맨날 헷갈릴 일도 없다. 난 맨날 헷갈리거든…
속도가 빠르다는 장점 때문에 SPI는 주로 빠른 데이터 전송 속도를 필요로 하는 데에 많이 사용된다. 대표적으로 이더넷 통신이나 SD 쉴드 같은.
SPI 통신 역시 I2C 통신처럼 하나의 마스터에 여러 개의 슬레이브가 연결될 수 있기 때문에, 슬레이브를 선택하기 위한 솔루션이 필요하게 되는데, SPI는 그 방법으로 SS 신호를 사용하고 있다. SS는 Slave Select라는 뜻 그대로 슬레이브를 선택하는 선으로, 하나의 슬레이브에 하나의 SS 선을 사용한다.
요렇게. SCK와 MOSI, MISO 신호 선은 공통으로 사용한다.
여러 개의 슬레이브 기기가 마스터에 연결될 수 있지만, 슬레이브 개수만큼 SS 신호 선이 늘어나게 되므로 여러 개의 슬레이브가 존재할 때에는 물리적으로 비효율적이다. 핀 개수가 여유 있으면 상관없겠지만, 보통은 없엉.
동기화 통신 방식이므로 통신에는 클럭 신호가 사용되며, 클럭 신호는 마스터에서만 출력된다. 다음은 마스터와 슬레이브가 데이터를 주고 받는 신호를 그림으로 나타낸 것이다.
헐.. 스파크펀 홈페이지에 이렇게 자세한 설명이 있는 줄 몰랐네. 아두이노 홈페이지보다 더 자세히 설명되어 있음. 그림까지. 괜히 PPT로 힘들게 작업했..ㅜㅜ
아무튼, 데이터 송수신을 위해 제일 먼저 SS 신호로 슬레이브를 선택한 후 클럭 신호를 생성하고, 클럭 신호에 맞춰 데이터를 전송한다.
위 그림에서는 마치 데이터 전송 후 수신 받는 것처럼 되어 있지만, 사실은 데이터를 전송하는 중에도 MISO 신호 선으로 슬레이브의 데이터가 수신될 수 있다. 전송과 수신이 동시에 이루어질 수 있다는 것이 SPI의 가장 큰 장점!
그림에서는 클럭 신호가 HIGH로 바뀔 때 데이터를 읽는 것으로 되어 있지만, SPI 통신에서는 HIGH로 바뀔 때 데이터를 읽을 지 LOW로 바뀔 때 데이터를 읽을 지 지정할 수 있다. 그리고 클럭 신호가 HIGH로 먼저 시작하는지, LOW로 먼저 시작하는지 역시 결정할 수 있다 . 물론 슬레이브와 방식이 동일해야 한다.
제일 중요한 핀!
아두이노 메가(Mega 2560/ADK)의 경우 SPI 통신을 위한 핀으로 50~53번 핀이 지정되어 있고, 우노(Uno)의 경우 “ICSP”라는 포트로 따로 나와있다. 메가에 있는 “ICSP” 포트 역시 50~53번과 연결되어 SPI 포트로 사용할 수 있다.
ICSP 포트의 핀 순서는 다음과 같다.
위 순서대로 보드에 표시해보면,
요렇게 된다. 핀 포트의 왼쪽 상단에 점으로 표시된 핀이 1번 핀이라는 것에 유의하자.
메가에서 53번 핀이 SS 핀으로 지정되어 있지만, 사실 SS 핀은 어느 핀을 사용해도 상관 없다. 53번을 SS라고 지정해둔 건 참고용이랄까. 아두이노에서 제공하는 SPI 예제를 보면 53번(우노의 경우에는 10번)을 주로 SS 핀으로 사용하는 것을 알 수 있다. 보통은 변경할 수 있으므로 아무 핀이나 사용해도 상관 엄슴.
여기까지 정리해보면.
- SPI 통신은 MOSI, MISO, SCK, SS 핀으로 이루어지는 동기식 직렬 통신 방식이다.
- 데이터 출력 신호 선과 입력 신호 선이 따로 있어 동시에 송수신이 가능하다.
- 슬레이브를 SS 신호로 선택한다.
- 그래서 I2C 통신보다 속도가 빠르다는 장점
- SS 신호 선을 이용하면 여러 개의 슬레이브를 연결할 수 있지만 슬레이브 개수만큼 SS 신호 선이 필요하므로 슬레이브가 많아질 경우에는 비효율적
끝!
다음 시간에는 실제로 SPI 통신에 사용되는 함수들에 대해 알아보자. 그럼 안녕!