아두이노/이론

SPI통신 아두이노와 오실로스코프로 확인해보기 2편

원원 2023. 1. 31. 23:25

안녕하세요. 오늘은 SPI통신을 알아보는 2편입니다.
1편: https://wowon.tistory.com/231

참고사항 (ARDUINO UNO기준)
MOSI (SDI) : 11번핀
MISO (SDO)  : 12번핀
CLOCK : 13번핀
SS (CS) : 10번핀(or 사용자 지정)

SPI통신은 SS핀을 LOW로 설정한다음에 MOSI핀과 CLOCK핀을 흔들면 됩니다. CLOCK은 8번 흔들리고 MOSI핀도 8번 흔들립니다

위의 사진은 SPI속도 200Mhz, MSBFIRST, 0x64(100)전송한 파형입니다.
속도가 200Mhz설정했으므로 1클럭의 속도는 5ns입니다.
0x64 = 0b 0110 0100입니다. MSBFIRST이므로 위와같이 파형이 나왔고, LSBFIRST면 아래처럼 나옵니다. 기본은 MSBFIRST입니다. 

그리고 위의 세팅 외에 하나 더 설정한게있는데 그거는 아래에서 자세히 설명하겠습니다.

*MODE설정
SPI통신할때 데이터와 클럭파형에 기준이 필요한데 두가지입니다.
첫번째기준 : CLOCK핀이 초기에 LOW인 경우 or CLOCK핀이 초기에 HIGH인 경우
두번째기준 : 첫번째 엣지에서 데이터 인식하는 경우 or 두번째 엣지에서 데이터 인식하는 경우

첫번째 기준을 영어로 CPOL(Clock polarity)이라고 합니다. 0이면 클럭 LOW시작, 1이면 클럭 HIGH시작 입니다.
두번째 기준을 영어로 CPOA(Clock phase)이라고 합니다.
0이면 첫번째 엣지에서 데이터 인식/두번째 엣지에서 값 변함, 1이면 두번째 엣지에서 데이터 인식/첫번째 엣지에서 값 변함
경우의 수가 총 4가지이므로 MODE0~MODE3까지 있고 표로 정리하면 아래처럼 됩니다

 

(아래파형은 전부 MSBFIRST이고 위에가 DATA, 아래가 CLOCK 파형입니다)
MODE0 
CPOL가 0, CPHA가0인경우 입니다. CPOL가 0이므로 CLOCK파형은 LOW에서 시작합니다. CPHA가 0이므로 첫번째 엣지에서 데이터를 인식하고 두번째 엣지에서 값이 변합니다.

 

MODE1
CPOL가 0, CPHA가1인경우 입니다. CPOL가 0이므로 CLOCK파형은 LOW에서 시작합니다. CPHA가 1이므로 두번째 엣지에서 데이터를 인식하고 첫번째 엣지에서 값이 변합니다.

 

MODE2
CPOL가 1, CPHA가0인경우 입니다. CPOL가 1이므로 CLOCK파형은 HIGH에서 시작합니다. CPHA가 0이므로 첫번째 엣지에서 데이터를 인식하고 두번째 엣지에서 값이 변합니다.

 

MODE3
CPOL가 1, CPHA가1인경우 입니다. CPOL가 1이므로 CLOCK파형은 HIGH에서 시작합니다. CPHA가 1이므로 두번째 엣지에서 데이터를 인식하고 첫번째 엣지에서 값이 변합니다.

위와 같은 파형은 사용하려는 모듈의 데이터시트에 나와있습니다. 

예시로 MAX7219데이터시트에 나와있는 타이밍다이어그램입니다.
CLOCK이 LOW시작이니 CPOL 0 ,  첫번째엣지에서 데이터읽기이므로 CPHA 0입니다. 그리고 데이터가 D15부터 나오니 MSBFIRST입니다. D15~D0이므로 16bit를 전달한다고 나와있습니다. 그러면 2바이트를 write하면 됩니다.
이런방식으로 타이밍다이어그램을 보고 설정을 하면 됩니다.