조회 수 17857 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print


인터페이스[편집]

SPI 버스는 4가지 논리 신호를 지정한다:

  • SCLK: 직렬 클럭 (마스터로부터의 출력)
  • MOSI; SIMO: 마스터 출력, 슬레이브 입력 (마스터로부터의 출력)
  • MISO; SOMI: 마스터 입력, 슬레이브 출력 (슬레이브로부터의 출력)
  • SS: 슬레이브 셀렉트 (active low, 마스터로부터의 출력).

그 밖의 대안 이름으로는 다음과 같이 쓰인다:

  • SCK; CLK: 직렬 클럭 (마스터로부터의 출력)
  • SDI; DI, DIN, SI: 직렬 데이터 입력; 데이터 입력, 직렬 입력
  • SDO; DO, DOUT, SO: 직렬 데이터 출력, 데이터 출력, 직렬 출력
  • nCS, CS, CSB, CSN, nSS, STE: 칩 셀렉트, 슬레이브 전송 기능 이용 (active low, 마스터로부터의 출력)

통신 개요[편집]

마스터가 SS를 통해 신호를 전송할 슬레이브를 선택한다. 마스터는 MOSI 를 통해서 SCLK에 동기화된 신호를 전송한다. 슬레이브는 SS을 통해서 신호를 수신할 수 있게 활성화되어 있는 상태에서 자신(슬레이브)의 MOSI를 통하여 전달되는 신호를 SCLK 에 맞춰 수신한다. SCLK에 동기화된 MOSI 신호는 8비트나 16비트, 또는 그 이상의 비트로 조합되어 유의미한 데이터로 사용된다.

SPI를 사용하는 통신하는 프로토콜은 몇 가지 인터페이스로 나뉜다.

  • 모토로라 SSP 호환 인터페이스
    • 전이중, four-wire 동기 전송
    • 프로그래밍 가능한 clock polarity 및 phase
  • 내셔널 세미컨덕터 마이크로와이어 인터페이스
    • 8비트 제어 메시지를 이용한 반이중 전송
  • 텍사스 인스트루먼츠 동기 직렬 인터페이스
    • 전이중, four-wire 동기 전송
    • Transmit data pin tristateable when not transmitting.

모토로라 SSP 호환 인터페이스는 Polarity와 Phase로 신호를 서로 송신하는 프로토콜이 조절할 수 있다. Polarity와 Phase를 조합하면 4가지 방식이 가능하다.

  1. Motorola SSP Format with SPO=0, SPH=0
  2. Motorola SSP Format with SPO=0, SPH=1
  3. Motorola SSP Format with SPO=1, SPH=0
  4. Motorola SSP Format with SPO=1, SPH=1

SPO(Signal Polarity)와 SPH(Signal Phase)변경하면 다음과 같은 약속의 효과가 있다.

  1. polarity Control 설정이 LOW인 경우 SCLK가 LOW 인 구간에 의미있는 신호가 출력된다.
  2. polarity Control 설정이 HIGH인 경우 SCLK가 HIGH 인 구간에 의미있는 신호가 출력된다.
  3. phase control 설정이 LOW인 경우 SCLK가 첫 번째 변화(엣지)시점에서 신호를 수신(Capture)한다.
  4. phase control 설정이 HIGH인 경우 SCLK가 두 번째 변화(엣지)시점에서 신호를 수신(Capture)한다.

사례

  1. SPO가 0, SPH가 1인경우

SPI CLOCK가 LOW상태에서 SS가 HIGH에서 LOW가 되고 SPI_CLOCK이 HIGH로 올라가면서 동시에 MOSI가 활성화된다. SPI CLOCK 이 절반나갔을 때부터 유효 데이터로 인정되고 SPI CLOCK 이 떨어지는(폴링엣지)시점에 의미있는 신호가 데이터로서 수신된다(Capture)

  1. SPO가 1, SPH가 1인경우

SPI CLOCK가 HIGH상태에서 SS가 HIGH에서 LOW가 되고 SPI_CLOCK이 LOW로 떨어지면서 동시에 MOSI가 활성화된다. SPI CLOCK 이 절반나갔을 때부터 유효 데이터로 인정되고 SPI CLOCK 이 올라가는(라이징엣지)시점에 의미있는 신호가 데이터로서 수신된다(Capture)

모드 번호[편집]

모드CPOLCPHA
000
101
210
311

SPI의 장단점[편집]

장점[편집]

  • 완전한 전이중 통신
  • 전송되는 비트에 대한 완전한 프로토콜 유연성
  • 전송기가 필요하지 않음
  • 매우 단순한 하드웨어 인터페이스 처리
  • IC 패키지에 4개의 핀만 사용하며 이는 병렬 인터페이스에 비해 수가 적은 것이다.

단점[편집]

  • 하드웨어 슬레이브 인식이 없음
  • 슬레이브에 의한 하드웨어 흐름 제어가 없음
  • 오류 검사 프로토콜이 정의되어 있지 않음
  • 일반적으로 노이즈 스파이크에 영향을 받는 경향이 있음 (통신 문제를 일으킬 수 있음)
  • RS-232RS-485CAN 버스보다 비교적 더 짧은 거리에서 동작
  • 하나의 마스터 장치만 지원




-----------------------------------------------------------------------------------


http://www.mcublog.co.kr/1828


일단 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가 뭐에요??

 

2604BA3952CF4E613D8284

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

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

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

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

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

 

3. SPI 통신의 동작 구조

274EAE3F52CF4E612688F4

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

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

 

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

2444BF3552CF4E622D01C8

 

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

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

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

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





Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
405 Pi SSD1306 OLED Displays with Raspberry Pi 2017.05.10 9101 0
» Pi SPI란? (Serial Peripheral Interface) 2017.04.20 17857 0
403 Pi LCD interface 종류 및 Driver IC 2017.04.17 8718 0
402 Pi 아두이노의 인터럽트 (interrupt) 사용 2017.04.13 16879 0
401 JAVA [Java] 자바에서 콜백(Callback) 구현하기 2017.03.15 28247 0
400 Android json 데이터 다루기 - GSon 사용법 2017.03.15 11057 0
399 Python json 데이터 핸들링 2017.03.09 11076 0
398 Pi 라즈베리파이 gpio utility 2017.02.15 8539 0
397 C++ STL queue 사용법 2017.02.14 30739 0
396 C++ C++ string 정리 (C++ 문자열) 2017.02.14 15144 0
395 Pi 라즈베리파이 3, Spec & PIN Map file 2017.02.06 33011 0
394 일반 Anet A8 Prusa i3: tips and tricks 2017.02.04 25122 0
393 MFC [Collection] ArrayList 예제 2017.01.25 8977 0
392 MFC [Collection] CArray Class 사용법 2017.01.25 18118 0
391 업무 ABS / PLA 2017.01.18 8483 0
목록
Board Pagination ‹ Prev 1 ... 3 4 5 6 7 8 9 10 11 12 ... 34 Next ›
/ 34

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5