SPI
본문 바로가기
Embedded/Device Driver

SPI

by bsp-martin 2021. 8. 2.

This is introducing SPI for beginner. (I think beginner is the most important.)

초급자를 위해 SPI 를 소개합니다.

 

SPI 는 Serial peripheral interface

 

SPI 는 Full-duplex interface(양방향통신) 로 

총 4개의 핀을 이용하여 근거리에서 사용하는 통신이다.

해당되는 핀은 다음과 같다.

* SS: Slave Select

* SCLK: Master 에서 보내는 Serial Clock

* MOSI: Master Out Slave In

* MISO: Master In Slvaer Out

 

데이터 전송핀 (SCLK/MOSI/MISO)

Digital Signal(1/0)로 데이터를 Clock 에 실어서 보내게 되는데 Master 에서 Clock 을 생성한다.

1 clock 이 동작하는 동안 데이터를 1 또는 0으로 실어 보낼수도 받을수도 있다.

 

* SS: Slave Select

SS핀을 보면 Slave 를 선택한다는것이다.

이로써 유추해볼수있는것은

1. Slave 가 존재한다는 것은 Master 가 존재해야 가능하다.

2. Slave선택한다: 선택하려면 여러 Slave 가 존재해야겠다 -> 아하.. Slave 가 여러개 가능하다


보통 AP(SoC)가 Master 이고 Slave 는 Serial Flash 나 LCD 등이 해당된다.

(Master:Slave) 1:1 로 구성시에는 다음과 같이 SS 에 1개의 Slave 만이 연결된다.

<1 Master 와 1 Slaver 구성>

1:N 구성시 SS 는 독립적인 핀을 사용하지만 MOSI /MISO/ Clock 은 같은 핀을 사용한다.

1:N 구성시에 총 Pin 개수는 다음과 같이 유추할수있다.

3 + N

만약 3개의 Slave 를 갖는 SPI 를 구성시

3 + 3 = 총 6핀 구성

<구글이미지 펌>

 

SPI 의 Clock 에 대해 좀 더 자세히 알아보자.

Clock 이 High or Low 일때 데이터를 Read/Write 하는것은 Single rate 이다.

Clock 이 High and Low 일때 데이터를 Read/Write 하는 것은 Double rate 이다.

SPI 에서는 Single rate 방식으로 Read/Write 를 하게되는데 

SPI CPHA 와 CPOL 이라는 옵션이 있다.

먼저 * CPHA(Clock Phase) 를 알아보자.

1. CPHA 값이 Low 이면 Clock 이 바뀌는 첫 번째 에서 데이터를 Read/Write 하게 된다.

2. CPHA 값이 High 이면 Clock 이 바뀌는 두 번째 에서 데이터를 Read/Write 하게 된다.

SS 가 High 에서 Low 로 바뀌어서 해당 Slave 를 선택하게되고

Clock 이 인가되는데 Low 에서 High 로 바뀐다고 가정하자.

<SPI Clock Option CPHA & CPOL>

CPHA 값이 0으로 세팅(1.) 상태라면

SS 값이 Low 값으로 떨어지고나서 Clock 이 인가되는데 Low 에서 High 로 바뀔때 데이터를 R/W 하게 된다는 것이다.

CPHA 값이 1으로 세팅(2.) 상태라면

SS 값이 Low 값으로 떨어지고나서 Clock 이 인가되는데 Low 에서 High 로 바뀌고 다시 Low 로 떨어질 때 데이터를 R/W 하게 된다는 것이다.

 

 

다음으로 * CPOL(Clock Polarity) 를 알아보자.

위 그림을 보면 CPHA 가 바뀌는 상황에서의 CPOL 값에 대해 데이터를 Read/Write 하는 (Capture stobe) 부분을 확인할수있다.

CPHA 값과는 상관없이 Clock 의 반전되어있는지 여부만이 CPOL 에서는 중요한 요소이다.

CPOL 이 High 이면  Clock 은 High 에서 Low 로 내려가며 시작하고 마치면 High 로 유지시킨다.

CPOL 이 Low 이면 Clock 은 Low 에서 High 로 올라가며 시작하며 마치면 Low 로 유지시킨다.

CPOL 은 SS 값이 다시 Low 인동안 사용되다가 SS 가 High 가 될때 마지막 레벨도 처음과 같이 유지시키는것이다.

 

SPI 는 프로토콜을 만들어 사용이 가능한데 8-bit 9-bit 16-bit 24-bit 등으로 구성하여 만들수있다.

SPI 동작중에 Write Command 와 Write Data 는 구분을 시킬수있다.

 

8-bit 를 사용할때는 4개의 Wire 를 사용한다. (Wire == PIN)

Master -> Slave 전송시

MOSI, Clock, SS 세개가 있지만 여기에 DCX 핀을 추가하는것이다. 이를 4-Wire SPI 라고 한다.

이때 DC 핀이 High 이면 Data 를

DC핀이 Low 이면 Command 를 의미하게된다. 주로 LCD 를 컨트롤할때 DCX 핀이 사용된다. (없어도됨)

8 bit SPI 4-line serial interface

 

Master -> Slave 전송시

MOSI, Clock, SS 세개가 있지만 DCX핀을 따로 할당하지 않았다면 3-Wire SPI 라고 한다.

DCX핀이 따로 존재하지 않기때문에 SPI 를 구성시

DCX 핀대신

1. Data 를 전송하려면 9-bit SPI 에서 첫 1bit 를 High 로 설정한다

2. Command 를 전송하려면 9-bit SPI 에서 첫 1bit 를 Low 로 설정한다

9 bit SPI 3-line serial interface

 

정리하면

.종류 4 Wire, 8bit

* DC핀이 존재함

.종류 3 Wire, 9bit

  * DC핀이 없음

  * Write CMD

    - 첫 Clk 의 값은 DC bit 으로 0 임

  * Write Data

    - 첫 Clk 의 값은 DC bit 으로 1 임

 

다룬 내용은 초급자일수있지만 쉽게 잊어버릴수있는 내용을 LCD개발에서 사용된 내용까지 다시 한번 정리하며 남겨둡니다.

9-bit spi communication is very important for LCD work.

 

 

#SPI wire 3 wire 9 bit 8 bit 9bit 8bit CPOL CPHA

반응형

'Embedded > Device Driver' 카테고리의 다른 글

SDIO  (0) 2021.12.17
I2C(Inter-Integrated Circuit)  (0) 2021.11.10

댓글