IT/리눅스마스터1급

SPI

알콩달콩아빠 2022. 5. 4. 19:09
728x90
반응형
 
  3-WIRE 시리얼 통신규격으로 주로 I2C등장 이전까지 자주 사용되던 통신 프로토콜이다. I2C와 마찬가지로 보드내에 있는 여러 디바이스간의 데이터 교환을 위해 사용하였다.
SPI프로토콜을 가진 대표적인 칩은 93C46(EEPROM)이 있다.

요사이는 I2C의 등장으로 SPI의 사용이 다소 줄었지만, 워낙 오랜 역사를 가지고 있는 프로토콜이기 때문에, SPI로 동작되는 디바이스들이 아직도 현존하고 있다.(주로 모토롤라의 디바이스들)
SPI는 3가닥으로 통신을 한다. 데이터입력(SDI),데이터출력(SDO), 클럭(SCK)이 있고 SPI의 동작을 허가하는 선택관이 별도로 존재한다.(결과적으로 4가닥이 필요하다는 뜻이다.)
PIC16C74는 SPI프로토콜을 FULL지원하고 있다. 마스터모드, 슬레이브 모드를 드라이브 할 수 있고, 마치 SPI디바이스처럼 lSS 입력을 받아서 동작하기도 한다.



 
  SPI의 모드는 SSPCON 레지스터의 하위 4비트로 결정한다.
    - 마스터모드(SCK는 출력이다.)
    - 슬레이브 모드 (SCK는 입력이다.)

마스터모드에서의 구동 클럭은 다음 4가지중 하나로 결성할 수 있다.
    - OSC/4, OSC/16, OSC/64, TIMER2

슬레이브 모드는 다시 2가지로 나눌 수 있다.
    - /SS입력을 ENABLE (외부에서 /SS입력을 받는경우)
    - /SS입력을 DISABLE (외부에서 /SS입력을 받지 않는경우)  



 
  다른 통신모듈과 마찬가지로 SPI 통신도 2개의 전송버퍼를 가지고 있다.
SSPSR은 송수신을 위한 버퍼이다. 이 곳에서 송수신이 완결되면 SSPBUF로 옮겨진다.
(SSPBUF는 유저가 엑세스 가능한 레지스터이다.)

SSPBUF의 상태를 나타내는 BF(Buffer Full)비트가 있다.(SSPSTAT의 0번 비트) 이 비트가 SPI통신에 있어서는 중요한 키역활을 담당하고 있다.
이 비트가 1이면, 버퍼에 데이터가 있는것을 의미한다. 반대로 0이면 데이터가 없다는 뜻이다.

이 두개의 엑세스 포인트만 가지고도 SPI를 훌륭하게 제어할수 있다.



 
  지금 소개하는 프로그램은 SPI통신을 사용하기 위한 표준 프로그램이라고 할 수 있다.
BF플레그가 세트되었다는 것은 송수신버퍼(SSPBUF)에 무언가 있다는 뜻이므로 BF 플레그가 1이 되는것을 기다린후 어떠한일을 처리하면 된다.

LOOP

물론 이 프로그램을 실행 시키기 전에 사전 준비작업을 해주어야 한다
- SDI포트 (RC4)는 입력으로 만든다.
- SDO 포트 (RC5)는 출력으로 만든다.
- 마스터모드;SCK 포트 (RC3)은 출력으로 만든다.
- 슬레이브 모드,SCK 포트 (RC3)은 입력으로 만든다.
- /SS 포트 (RA5)는 입력으로 만든다.
- SSPCON 레지스터를 적당한 값으로 세팅한다.(SSPEN 은 반드시 1로 한다.)

 

- SPI마스터 모드 데이터 송신
SSPBUF에 원하는 데이터를 기입하면 그 즉시 송신된다. 송신이 환료되면 BF비트는 클리어 된다.

- SPI마스터 모드 데이터 수신
수신이 완료되면 BF비트는 세트되며, 수신된 데이터는 SSPBUF에 저장된다.

- SPI슬레이브 모드 데이터 송신
이 모드에서는 SCK단자에 외부 클록 펄스가 입력되어야만 동작개시된다. 클럭이 입력되면 SSPBUF에 있는 데이터가 SDO포트로 출력된다.
송신이 완료되면 BF비트는 클리어 된다.

- SPI슬레이브 모드 데이터 수신
외부에서 클록과 데이터를 모두 입력받는다. 수신이 완료되면 BF비트는 세트되고, 데이터는 SSPBUF에 로드된다.



출처 : http://blog.naver.com/PostView.nhn?blogId=e839638&logNo=140069549234 
728x90
반응형

'IT > 리눅스마스터1급' 카테고리의 다른 글

cpsr  (0) 2022.05.04
LVM  (0) 2022.05.04
I2C  (0) 2022.05.04
GPIO  (0) 2022.05.03
Streams  (0) 2022.05.03