[아두이노] [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가

또 나왔다. ㅇㅇㅇ이란 무엇인가.


SPI Serial Peripheral Interface의 약자로 해석하면 직렬 주변기기 인터페이스’. ????


 

(인터페이스는 우리 말로 뭐라 해야해?)brown_and_cony-78



 

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 선을 사용한다.


2a9919c875d142ce95d38b9a6e661ea4.jpg


요렇게. SCK MOSI, MISO 신호 선은 공통으로 사용한다.

 

 

여러 개의 슬레이브 기기가 마스터에 연결될 수 있지만슬레이브 개수만큼 SS 신호 선이 늘어나게 되므로 여러 개의 슬레이브가 존재할 때에는 물리적으로 비효율적이다핀 개수가 여유 있으면 상관없겠지만보통은 없엉.

 

 

동기화 통신 방식이므로 통신에는 클럭 신호가 사용되며클럭 신호는 마스터에서만 출력된다다음은 마스터와 슬레이브가 데이터를 주고 받는 신호를 그림으로 나타낸 것이다.


4c2502c045a7be61613a6c2a679c1459.png


(출처 :  )




.. 스파크펀 홈페이지에 이렇게 자세한 설명이 있는 줄 몰랐네아두이노 홈페이지보다 더 자세히 설명되어 있음그림까지괜히 PPT로 힘들게 작업했..ㅜㅜ

 

 

아무튼데이터 송수신을 위해 제일 먼저 SS 신호로 슬레이브를 선택한 후 클럭 신호를 생성하고클럭 신호에 맞춰 데이터를 전송한다.

 

위 그림에서는 마치 데이터 전송 후 수신 받는 것처럼 되어 있지만사실은 데이터를 전송하는 중에도 MISO 신호 선으로 슬레이브의 데이터가 수신될 수 있다전송과 수신이 동시에 이루어질 수 있다는 것이 SPI의 가장 큰 장점!



그림에서는 클럭 신호가 HIGH로 바뀔 때 데이터를 읽는 것으로 되어 있지만, SPI 통신에서는 HIGH로 바뀔 때 데이터를 읽을 지 LOW로 바뀔 때 데이터를 읽을 지 지정할 수 있다그리고 클럭 신호가 HIGH로 먼저 시작하는지, LOW로 먼저 시작하는지 역시 결정할 수 있다 . 물론 슬레이브와 방식이 동일해야 한다.

 

 

제일 중요한 핀!

 

아두이노 메가(Mega 2560/ADK)의 경우 SPI 통신을 위한 핀으로 50~53번 핀이 지정되어 있고우노(Uno)의 경우 “ICSP”라는 포트로 따로 나와있다메가에 있는 “ICSP” 포트 역시 50~53번과 연결되어 SPI 포트로 사용할 수 있다.



 9f098d48157844978e8aa8c8816215ba.jpg

우노(Uno)

fa0715963e545d039820154a0b8d4532.jpg
메가(Mega 2560/ADK)

 



ICSP 포트의 핀 순서는 다음과 같다.


06dcd28907758b910ebc90da493fa1ce.png


위 순서대로 보드에 표시해보면,


d26f0fd17f4e812098ff248145ecf519.png

요렇게 된다. 핀 포트의 왼쪽 상단에 점으로 표시된 핀이 1번 핀이라는 것에 유의하자.

 

 

메가에서 53번 핀이 SS 핀으로 지정되어 있지만사실 SS 핀은 어느 핀을 사용해도 상관 없다. 53번을 SS라고 지정해둔 건 참고용이랄까아두이노에서 제공하는 SPI 예제를 보면 53(우노의 경우에는 10)을 주로 SS 핀으로 사용하는 것을 알 수 있다보통은 변경할 수 있으므로 아무 핀이나 사용해도 상관 엄슴.

 


여기까지 정리해보면.



 

- SPI 통신은 MOSI, MISO, SCK, SS 핀으로 이루어지는 동기식 직렬 통신 방식이다.

데이터 출력 신호 선과 입력 신호 선이 따로 있어 동시에 송수신이 가능하다.

슬레이브를 SS 신호로 선택한다.

그래서 I2C 통신보다 속도가 빠르다는 장점

- SS 신호 선을 이용하면 여러 개의 슬레이브를 연결할 수 있지만 슬레이브 개수만큼 SS 신호 선이 필요하므로 슬레이브가 많아질 경우에는 비효율적 

 

 

 

다음 시간에는 실제로 SPI 통신에 사용되는 함수들에 대해 알아보자그럼 안녕!

 

(이번 강좌가 좀 짧아 보이는 건 기분 탓…)brown_and_cony-80

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 9,529
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 13,203
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 8,612
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 12,381
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 8,899
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 10,393
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 7,726
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 9,828
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 10,969
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 12,683
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 12,617
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 8,971
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 12,535
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 9,311
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 9,173
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 11,443
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 8,120
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 14,484
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 18,960
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 14,771