임베디드 용어 사전
시리얼 통신

전이중

보내면서 동시에 받는 통신 방식. SPI는 클럭 한 번에 양방향으로 한 비트씩 교환한다.

full duplex. SPI 의 동작을 이해하는 열쇠다.

읽기만 하고 싶어도 써야 한다

uint8_t rx = spi_transfer(0xFF);   /* 더미 0xFF 를 보내야 클럭이 나가고, 그래야 받는다 */

클럭은 마스터만 만든다. 슬레이브는 클럭이 있어야 자기 비트를 실을 수 있으므로, 받기만 하려 해도 마스터가 뭔가를 보내 클럭을 만들어야 한다.

시프트 레지스터로 보면 명확하다

마스터 [ 송신 레지스터 ] ──MOSI──► [ 수신 레지스터 ] 슬레이브
       [ 수신 레지스터 ] ◄─MISO─── [ 송신 레지스터 ]

클럭 8번 = 두 레지스터의 내용이 서로 교환된 것

그래서 생기는 성질

  • 보낸 바이트 수 = 받은 바이트 수. 항상 같다
  • 응답은 한 박자 늦게 온다. 명령을 보낸 그 전송에서 받은 값은 대개 의미가 없다
  • 이 지연을 처리하려고 더미 바이트를 넣는 시퀀스가 데이터시트에 자주 나온다

함께 보면 좋은 용어

노트에서 맥락과 함께 보기 — SPI — 클럭을 같이 보내는 대신 선이 넷