STM32 회로 리뷰 방법 - SPI

이번 포스트에서는 STM32의 SPI(Serial peripheral interface) 회로 리뷰 방법을 알아보도록 하겠습니다.

SPI는 비교적 간단한 회로로 구성할 수 있으며, 다른 통신에 비해 Noise에 강한 편입니다. 또한 동기(Synchronous) 통신이기에 에러율이 없다는 장점이 있습니다.

SPI는 다음과 같은 핀으로 구성됩니다.

  • MISO: Master In / Slave Out data.
  • MOSI: Master Out / Slave In data.
  • SCK: Serial Clock output.
  • NSS: Slave select pin.
    • 통신을 위한 개별 Slave 장치 선택
    • 데이터 프레임을 동기화하거나
    • 여러 Master 간의 충돌 감지

SPI는 통신 방법에 따라 회로의 연결이 달라지게 됩니다.

1. Full-duplex communication

STM32G4 Full-duplex communication

가장 일반적은 양방향 통신입니다. USART는 RX-TX 와 연결하지만 SPI 각 핀들은 Master - Slave 역할이 바뀌어도 동일한 핀 이름에 연결하면 됩니다. 주의해야 할 핀은 NSS 핀입니다. 만약 Software로 NSS를 제어한다면 어느 GPIO를 사용해도 별 문제는 없습니다. 그러나 Hardware NSS핀을 사용한다면 정해진 Pin을 사용하여야 합니다.

※가급적 Hardware NSS 핀을 할당하는 것이 좋습니다. 왜냐하면 같은 핀을 추후 소프트웨어로도 제어가 가능하기 때문입니다.

Full-duplex 통신은 입력 출력이 고정되어 있기 때문에 회로적으로 문제가 생길 소지는 없습니다. 다만 긴 선로 대비 통신 속도가 빠르다면 SCK가 끝까지 못 올라오거나, Undershoot, Overshoot이 발생할 수 있으니 통신 속도를 줄이거나 임피던스 낮추기 위해 선로를 짧게 하거나 Decoupling Capacitor 추가을 고려해야 합니다.

2. Half-duplex communication

STM32G4 Half-duplex communication

반이중 통신은 Master의 MOSI와 Slave의 MISO를 연결하는 통신 방법입니다. 출력 입력의 역할이 비동기적으로 바뀔 수 있기 때문에 쇼트의 위험이 있습니다. 따라서 중간에 시리얼 저항을 달아 줍니다.

3. Simplex communications

STM32G4 Simplex communications

단방향 통신은 Master가 Slave에게 일방적으로 송신만 하는 구조입니다. 입력, 출력이 고정이기에 회로적으로 문제가 될 만한 요소는 없습니다. 양방향 통신에서 MISO 만 연결에서 제외됩니다.

4. Standard multi-slave communication

STM32G4 Standard multi-slave communication

Single Master - Multi Slave 구조의 회로입니다. 이 때도 입력 출력의 역할이 바뀌지 않기 때문에 추가적인 소자는 필요하지 않습니다. 다만 Hardware NSS는 사용할 수 없고 IO1 ~ IOn 까지 GPIO를 할당하여 각각의 Slave NSS에 연결 할 수 있습니다.

5. Multi-master communication

STM32G4 Multi-master communication

아주 드물게 Multi master로 어플리케이션을 구현하는 경우에는 GPIO - NSS를 각각 연결해 두어야 합니다. 평소에는 양쪽이 모두 Slave였다가 송신을 시도하는 쪽에서 Master의 역할을 가져가는 방법으로 통신하게 됩니다. 소프트웨어의 결함으로 양쪽에서 모두 송신을 시도하는 경우 쇼트가 발생할 수 있으니 시리얼 저항이나 Open-drain으로 회로를 꾸미는 것이 안전합니다.

참조 : https://blog.naver.com/ansdbtls4067/221615054022

참조 : https://www.st.com/resource/en/reference_manual/rm0440-stm32g4-series-advanced-armbased-32bit-mcus-stmicroelectronics.pdf