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: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 로 바뀐다고 가정하자.
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 핀이 사용된다. (없어도됨)
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 로 설정한다
정리하면
.종류 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 |
댓글