본문 바로가기

My Study/Hardware, Firmware

SPI 통신 (SPI Interface)

반응형

SPI통신은 I2C통신과 같은 통신방법의 한 종류이지만 통신하는 방법이 다르다.

통신방법에는 여러가지가 있는데 쉽게 비유하자면 I2C통신은 한사람이 보낼때는 다른사람을 받고만 있어야하는 무전기와 같은 통신방식이고

SPI 통신은 한사람이 데이터를 보내면서 데이터를 받을 수 있는 전화같은 방식이다.

세세하 점에서 더 차이가 있지만 어느 통신방법을 쓸 것인가에 대하여는 사용자들의 몫이기 때문에 아래의 장단점등을 잘 확인하여 사용하자.

SPI 통신의 장점

1. 완전한 전이중(Full duplex) 통신 : 양방향 통신이다. 위에서 설명한 것처럼 말하면서 들을수 있다는 이야기.
2. 전송되는 비트에 대한 완전한 프로토콜 유연성 : 최대 16비트까지 맘대로 길이를 조절 할 수 있다.
3. 전송기가 필요하지 않다 : 흔히 말하는 트랜시버를 사용할 필요가 없다.
4. 매우 단순한 하드웨어 인터페이스 처리 : 아주 단순한 센서나 메모리에서 많이 사용.
5. IC 패키지에 4개의 핀만 사용
6. 최대 클럭이 제한되지 않아 속도 제한이 없다.
7. Push-Pull 출력(Open Drain이 아닌)을 사용하여 상호간에 같은 전압을 사용하여 시그널 정합성과 고속을 지원한다.
8. I2C 보다 낮은 소비 전력
9. 슬레이브는 마스터가 보내주는 클럭만을 사용하고 정확성이 떨어져도 문제 없다.

SPI 통신의 단점

1. 하드웨어 슬레이브 인식이 없음.
2. 슬레이브에 의한 하드에워 흐름제어가 없음.
3. 오류 검사 프로토콜이 정의되어 있지 않음. (에러 체킹 지원)
4. 노이즈 스파이크에 영향을 받는 경향이 있음.
5. RS-232, CAN 버스보다 비교적 더 짧은 거리에서 동작. (칩간 통신에서만 주로 사용)
6. 하나의 마스터 장치만 지원.
7. 인밴드(디폴트 SPI wire)를 통해 주소가 지원되지 않아 다 수의 슬레이브를 사용 시 별도의 아웃밴드(칩 셀렉트 라인)를 통해 슬레이브를 선택해야 한다.
8. Hot 플러그를 지원하지 않는다.

Applications

- EEPROM, 플래시 메모리
- MMC or SD Card
- LCD
- RTC(Real Time Clock)
- 각종 센서류

SPI Pin Description

I2C통신에서는 데이터를 전송하는 SDA(Serial Data)선과 클럭을 전송하는 SCL(Serial Clock)선 두개만 필요하다.

SPI통신에서는 송신과 수신을 위한 MOSI(Master Out Slave IN)선과 MISO(Master In Slave Out)선, 클럭(SCLK)선, SS(Slave Select)선 이렇게 4개가 필요하다.

MOSI(Master Out Slave IN)는 이름그대로 마스터에서 나와서 슬레이브에게 가는 데이터를 전송하는 선이다.
MISO(Master In Slave Out)는 슬레이브에게 나와서 마스터에게 가는 데이터를 전송하는 선이다.
(I2C통신이 전이중통신이 안됐다면 SPI는 선이 구분되어 있기 때문에 송수신이 동시에 가능하다.다만 SPI통신은 Master-Slave관계(주인-종)처럼 Slave는 Master에게 통신은 마음대로 하지 못한다. )
- SPI의 데이터 송수신은 동시에 이루어지기 때문에 데이터 송신이 곧 수신이 된다. 이 데이터 송수신의 타이밍을 결정짓는 것은 Master장치이다.
SCLK,CLK(Clock)동기화 신호를 위한 Clock이라고 생각하면 된다.
SS,CS(Slave Select, Chip Select)선, Master장치가 여러개의 Slave 장치와 통신할 때 하나를 선택하여 통신을 하는데 그 때 선택을 하는 역할의 신호선이다. 한마디로 어디로 보낼지 결정하는 신호선이다.

 

SPI 통신의 동작 구조

SPI 장치들은 Shift Register를 가지고 있다.
기본적으로 MSB부터 전송되는데 특정 컨트롤러는 LSB부터 전송을 수행시키는 방법도 지원한다.

위의 그림처럼 SHIFT REGISTER에 의해서 데이터가 이동된다.
마스터에서 어떤 값을 슬레이브로 보낸다고 가정했을 때, 보내는 1Clock의 신호 마다 1bit의 data가 이동된다.
밀어내기 식으로 data가 들어간다고 생각하면 된다.

여기서 궁금한 점이라면 슬레이브에 들어있던 쓰레기 값이 마스터로 넘어왔을 때, 이 값이 만약 필요한 값이라면 마스터에서 받아서 처리하면 되지만 그렇지 않다면 그냥 버려 버리면 된다.

이렇게 송수신이 한번에 이루어 지는 간단한 통신 방식을 가지고 있다.

SPI는 여러가지 전송모드가 있다.

3 wire SPI
- Half Duplex 입출력 wire를 1개 지원한다.
- 저속 EEPROM 및 센서류에서 사용된다.

Dual SPI
- Half Duplex 입출력 wire를 2개 지원한다. (단방향 속도가 2배)

Quad SPI
- Half Duplex 입출력 wire를 4개 지원한다. (단방향 속도가 4배)
- SPI-Nor 플래시 및 SPI-Nand 플래시에 자주 사용된다.

또 다른 예시 3-Wire, 4-Wire

위 그림을 보면 1번이 4-Wire 방식, 2번이 3-Wire 방식, 3번이 다중 슬레이브 연결 시의 결선도 입니다.
1번의 경우, 일반적으로 연결하는 방식이며, SS를 통해 data 전송 알림 신호를 보내 data를 전달하는 방식.
2번의 경우, Slave장치 에서 SS를 GND에 묶어두면 Slave장치는 항상 data를 받을 수 있는 상태가 된다.
3번의 경우, Slave를 여러개 연결할 경우 SS1, SS2를 통해 data 값을 전달하는 방식이다.

연결 구성 방식

SPI 버스를 구성하는 방법으로 다음과 같이 두 가지 방식을 사용한다.
  1) 독립 slave 구성 방식
     -- SPI 디바이스를 선택하여 사용하는 방식이다.
  2) Daisy-chain slave 구성 방식
     -- 데이터 비트를 서로 밀어내는 방식이다.

간단한 SPI의 Write 및 Read 동작

이상으로 쓰이는 장치의 회로도를 확인해 보자.

 

반응형