태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

MSP430에서 통신 인터페이스를 설명할 때 가장 먼저 설명해야 할 것이 SPI라고 생각합니다.

왜냐하면 "내 맘이죠!!" 가 아니라 가장 기본적이면서 모든 MSP430에 들어있는 통신 인터페이스이기 때문이죠.

 

일단 SPI는, 지금은 구글에 합병되버린 Motorola 사에서 처음 고안한 통신 방식으로 MCU와 주변 장치간의 Serial 통신을 위한 규약입니다. 외부 주변장치와 Clock을 통하여 동기화하는 동기식 통신 방식이며, 하나의 Master와 하나 또는 다수의 Slave Device간의 통신 방식입니다.

통신 방식이 아주 간단하여 대표적으로 사용되는 통신 방식입니다.

 

SPI 통신의 장점

 - 완전한 전이중(Full duplex) 통신 : 내가 말하면서 들을수도 있어요.

 - 전송되는 비트에 대한 완전한 프로토콜 유연성 :  최대 16비트까지 맘대로 길이를 조작할 수 있어요.

 - 전송기가 필요하지 않음 : 흔히 말하는 트랜시버 사용할 필요 없음

 - 매우 단순한 하드웨어 인터페이스 처리 : 아주 단순한 센서나 메모리에서 많이 사용

 - IC 패키지에 4개의 핀만 사용

 

SPI 통신의 단점

 - 하드웨어 슬레이브 인식이 없음

 - 슬레이브에 의한 하드웨어 흐름제어가 없음

 - 오류 검사 프로토콜이 정의되어 있지 않음

 - 노이즈 스파이크에 영향을 받는 경향이 있음

 - RS-232, CAN 버스보다 비교적 더 짧은 거리에서 동작 (칩간 통신에서만 주로 사용)

 - 하나의 마스터 장치만 지원

 

라고 위키피디아에 설명이 되어 있죠.

 

 

1. SPI에서 사용되는 핀이 뭐죠?

우선은 SPI에서 사용되는 핀의 뜻을 알아보는 것이 SPI 통신을 알기 위해 좋을 것 같습니다.

핀의 이름은 약어로 많이 불리우기 때문에 처음엔 어렵지만 한번만 설명을 들으면 쉬워요. 아래표를 확인해 보시죠.

 Signal Name

 Alternative Names

설명 

 SCLK

 SCK, CLK

 Serial Clock

 MOSI

 SDI, DI, SI

 Master Output Slave Input

 MISO

 SDO, DO, SO

 Slave Output Master Input

 SS

 nCS, CS, nSS, STE, CE

 Slave Select, Chip Enable

 

SCLK는 단순한 동기화 신호이며, 통신 Clock이라고 생각하면 되겠습니다.

MOSI는 Master에서 Slave로 가는 방향성이 있는 데이터 선이라고 생각하면 되겠고요.

MISO는 Slave에서 Master로 가는 방향성이 있는 데이터 선이죠.

SS는 하나의 Master장치가 여러개의 Slave 장치와 통신할 때 하나를 선택하여 걔랑만 귓속말 하려고 할 때 사용하는 핀입니다.

 

 

2. SPI에서 3-Wire, 4-Wire가 뭐에요??

 

위 그림에서 보면 맨 위에 것이 4-wire 방식이며, 2번째 그림이 3-wire 방식입니다.

자세히 설명해 드리면 첫번째 그림은 내가 지금부터 자료를 보낸다고 슬레이브 장치의 SS 핀을 통하여 신호를 전달하는 방식이고,

두번째 그림은 Slave장치에서 SS 핀에 항상 받을 준비를 하라고 SS 핀을 GND에 묶어 놓은 형태입니다.

세번째 그림은 마스터에서 슬레이브 장치들 중 어느 장치에 보낼지를 SS1, SS2 핀을 통하여 전달하는 방식입니다.

한마디로 말해 마스터가 슬레이브한테 한대 툭 치며 "자료 받어!" 라고 하는 거라 생각하시면 되겠습니다.^^

 

3. SPI 통신의 동작 구조

쉬프트 레지스터를 아시나요?? 모르시면 네이버 형님한테 한번 물어 보시고요.

SPI 통신은 SCK 의 클럭에 따라서 마스터에서 슬레이브로 한비트를 전송하고 슬레이브에서도 마스터로 한비트를 전송합니다.

 

이해하기 어려울 수도 있으니까 아주 쉽게 마스터에서 슬레이브로 "가나다라"라는 데이터를 보내려고 한다고 생각해 보자고요.

 

위의 그림을 보시면 초기에는 마스터의 쉬프트 레지스터에 "가나다라"라는 데이터가 있고 슬레이브 쪽에는 의미없는 쓰레기값이 있습니다.

SCK를 통해 클럭을 전송할 때마다 하나의 데이터가 마스터에서 슬레이브로 옮겨지고, 또한 슬레이브에서 마스터로 옮겨지는 것을 확인할 수 있습니다.

4개의 비트를 옮기는 데에는 4 클럭 전송 후가 되겠죠? 4번 SCK를 통해 데이터를 옮기고 나서는 목적한 대로 슬레이브에 마스터의 데이터 "가나다라"가 저장되었습니다.

마스터는 쓰레기값이 의미 없다면 그냥 버려버리면 되겠죠?

 

이제 SPI 통신의 원리는 알았겠죠? 위의 설명을 보셨는데도 모르겠다고 하더라도 포기하진 마세요.

앞으로의 강의에서는 MSP430에서 어떻게 설정하여 사용하는지를 다루어 볼 것이니까요.

원리 따위는 몰라도 충분히 사용할 수 있습니다. 하지만 알면 이해가 더 쉽겠죠^^

Posted by vosami

댓글을 달아 주세요

  1. 오호라

    좋은 설명 감사합니다!

  2. 비밀댓글입니다
    2016.02.29 17:28 댓글주소 수정/삭제 답변

  3. 비밀댓글입니다
    2016.09.21 09:54 댓글주소 수정/삭제 답변

  4. ㅇㅇㅇ

    좋은 글 감사합니다 잘 보았습니다

  5. 공대생

    와 설명 진짜 쉽게 하셨네요 감사합니다ㅣ!!

  6. SoC

    쉬운 설명 감사합니다!!!

  7. 질문있습니다

    정리를 잘 해주셔서감사합니다.
    작성자님 질문이있는데 그럼 SPI방식은 큐방식이라고 이해해도 좋을까요?
    차례대로 순차적으로 들어온값들을 하나씩 밀면서 옆으로 넘겨주니 큐가 생각났습니다.

    • Favicon of http://www.mcublog.co.kr BlogIcon syncworks

      위에서 설명된 동작은 SPIDAT 레지스터에서 데이터가 나가고 들어오는 과정을 안내한 것으로, 실제 사용자가 접근하는 영역은 TX, RX 버퍼영역(FIFO) 입니다.

      동작에 대한 이해는 유사하게 이해하셔도 무방할 것 같습니다. ^^
      2018.08.03 17:28 신고 댓글주소 수정/삭제

  8. 질문있습니다

    빠른답변 감사합니다. 앞으로 자주 찾아봐 배우겠습니다.

  9. 하드웨어 엔지니어린이

    내용 정말 유익하고 잘 봤습니다. 다름이 아니라 현재 막 입사한 신입인데요. 잠깐 제 얘기를 하자면 학교에서는 SOC나 CPU (core단)와 관련해서 연구하고 학위까지 딴 상태인데... 문제는 기업에 입사해서 직무는 FPGA/CPLD를 탑재하거나 DSP를 탑재한 임베디드 보드를 설계하고 firmware를 제작하는 업무를 맡았습니다. 그래서 SPI나 JTAG과 같은 데이터 통신 인터페이스? 도 기본적으로 다시 알아야 하고 학부때 배웠던 내용들을 다시 상기 시켜야 하는데... 막막하네요. 어디서 부터 접근해야 할지;; 혹시 관련 업종 전문가 이신가해서 질문올립니다. 최소한 이정도는 알고 있어야 되는 전공과목? 이론..이라도 리스트로 나열해 주시면 정말 정말 감사하겠습니다... 시간내 주셔서 읽어 주신것도 감사합니다.

  10. 후니

    좋은 글 감사합니다
    질문이 하나 있는데요
    무조건 clock당 한 bit 전송인가요? 아니면 설정해주는 곳이 따로 있으려나요?
    저는 MSP432를 사용해서 보드 간 통신을 해보고 있는데요,
    USCI 모듈이 달린 switch 2개(한개는 UCA0CLK, 다른 한개는 UCB0STE)를 동시에 누를 때마다 한 CLOCK이 전송되는 걸까요?......
    감사합니다

    • Favicon of http://www.mcublog.co.kr BlogIcon syncworks

      SPI 통신은 동기식 시리얼 인터페이스로 클럭에 맞춰 송/수신이 동시에 이뤄지는 구조 입니다.

      데이터를 실어내거나 읽어들이는 Edge를 설정할 수 있고, 여기에 추가로 필요할 경우 Delay를 추가할 수 있습니다.

      TMS320F28X 칩의 SPI Maunal을 참고해보세요. Clock Polarity 와 Delay를 설정하는 레지스터를 확인하실 수 있으실 것 입니다.
      2018.08.16 08:41 신고 댓글주소 수정/삭제

  11. 연구실어린이

    글 잘 읽어보았습니다.
    의문점이 하나 생기는데 슬레이브의 값을 꼭 마스터로 다시 넘겨줘야하나요? 어차피 쓰레기값이면 슬레이브에서 바로 버리면 안될까 하는 생각이 들어서요.

    • Favicon of http://www.mcublog.co.kr BlogIcon syncworks

      SPI는 클럭에 맞춰 송신과 수신이 동시에 일어나게 됩니다. Master 쪽에서 Slave로부터 어떤 데이터를 받고자 한다면 의미없는 값이라도 무엇인가를 송신해서 클럭을 발생시켜줘야 합니다.
      2018.08.16 08:43 신고 댓글주소 수정/삭제