본문 바로가기
myGyro300SPI

SPI 통신 - 간략버전

by irmus 2009. 8. 25.

myGyro300SPI의 SPI는 4개의 신호선으로 구성된다.

  • SCLK(SCK/CLK) : 클럭 신호선
  • CS(FSS/SS) : chip select, frame start sequence, slave start
  • DIN(MOSI) : data input, master output/slave input
  • DOUT(MISO) : data output, master input/slave output

ADIS16100 데이터쉬트의 페이지 5에 있는 그림2를 보면 4개의 신호선에 대해 timing chart를 볼 수 있다.

ADIS16100 데이터쉬트에서 캡쳐한 SPI bus timing chart


SCLK는 master 즉 MCU에서 만들어 myGyro300SPI에 넣어주는 클럭 신호이다. 10kHz~20MHz 사이의 클럭을 사용하면 된다. 주로 MCU의 SPI peripheral이 자동으로 만들어 주므로 별도로 신경쓸 필요는 없다. 다만 SPI 모드를 결정함에 있어 timing chart를 주의깊게 들여다 볼 필요는 있다.


CS는 chip select 신호이며, 역시 MCU에서 생성해서 myGyro300SPI에 넣어주는 신호이다. 이 신호가 low일 때에만 myGyro300SPI가 동작한다. 보통 여러개의 SPI 장치들을 하나의 SPI 버스에 물려 같이 사용할 때 각 장치를 구분하기 위해 사용한다. SPI 버스에 myGyro300SPI 하나만 물려 있는 경우에도 꼭 상황에 맞게 CS 신호를 인가해야 한다. CS는 chip select 뿐만 아니라 SPI frame start sequence 역할도 하기 때문이다. 일반적으로 MCU의 SPI peirpheral에서 CS 신호를 자동으로 생성해 주므로 별도로 신경쓸 필요는 없다. 하지만 AVR에서는 자동 생성 되지 않으므로 별도로 만들어줘야 한다.


DIN. Data input 데이터 입력선이다. 여기에서 말하는 입력이라는 것은 myGyro300SPI를 기준으로 봤을때 입력이라는 뜻이다. 즉 MCU에서 출력하고, myGyro300SPI에서 입력하는 데이터를 말한다. SPI 규약에서 말하는 master output/slave input 즉 MOSI에 해당하는 핀이다. 반대로 DOUT은 Data Output이다. 역시 myGyro300SPI 기준으로 output 이므로 MISO에 해당한다.

참고로 SPI에는 반듯이 1개의 master가 있어야 하고, slave는 여러개 있어도 무관하다. 일반적으로 MCU가 master 역할을 하고, myGyro300SPI와 같은 장치들이 slave가 된다.


이상 4개 신호선은 Vdrive 전원을 사용한다. myGyro300SPI는 5V 전원에서 동작하므로 3.3V와 같은 저전압 프로세서와 연결해서 사용하기 위해서는 Vdrive에 해당 전원을 연결해 사용할 수 있다. 대표적인 예로 myCortex 시리즈는 3.3V 전원을 사용하므로 Vdrive에 3.3V를 연결해서 사용해야만 한다. <VDD5V와 Vdrive의 차이 포스팅 참조>


flat cable은 적합하지 않다

SPI 버스를 사용할 때 전선의 길이를 30cm 이하로 사용하는 것이 좋다. 케이블 또한 플랫케이블과 같은 노이즈가 많은 저급 케이블은 피하는 것이 바람직하다. 클럭 속도가 빨라질 수록 케이블 길이가 짧고 양질의 케이블을 사용해야만 한다.



SPI 연결[wikipedia에서 발췌]

위 그림은 SPI master와 slave 사이의 연결을 보여주고 있다. 가장 간단한 1:1 연결 구성이다. myGyro300SPI는 오른쪽의 SPI slave에 해당한다. 4개의 연결 화살표는 데이터의 흐름 방향도 보여주고 있다. 즉 MISO만 slave에서 출력할 뿐 나머지 3개 핀은 master에서 출력하는 핀이다.


이제 다시 ADIS16100의 SPI timing chart를 살펴보자. CS 핀이 high인 상태를 idle 상태라 한다. 이 상태에서는 아무런 동작도 하지 않는다. 모든 센서 동작과 SPI 통신은 CS핀이 low일때에만 이루어진다. 이처럼 CS가 low인 구간 1개를 frame이라 부른다. myGyro300SPI는 한 프레임에 16비트의 데이터를 주고받는다. 이런 경우를 16비트 프레임이라 이야기 한다.