TOOLS GAMES DEVLOG DOCS ABOUT CONTACT
HOME > DOCS > Embedded / IoT > 고속 SPI 버스 통신 프로토콜과 센서 레지스터 읽기/쓰기 타이밍 다이어그램
Embedded / IoT Intermediate Arduino SPI Library / ESP-IDF

고속 SPI 버스 통신 프로토콜과 센서 레지스터 읽기/쓰기 타이밍 다이어그램

I2C보다 수십 배 빠른 10~80MHz 클럭의 SPI 4선식(MOSI, MISO, SCK, CS) 버스 통신 원리와 레지스터 읽기/쓰기 바이트 시퀀스 제어.

#Embedded #SPI #Hardware #Protocols #Communication
핵심 개념SPI는 전이중(Full Duplex) 동기식 직렬 통신으로, 마스터가 클럭(SCK)을 칠 때마다 MOSI로 바이트를 보내고 MISO로 동시에 바이트를 받습니다. 슬레이브 셀렉트(CS)를 LOW로 당긴 후 최상위 비트(MSB)에 R/W 플래그(0x80)를 세팅하여 레지스터를 조회합니다.

1. SPI 1바이트 레지스터 읽기 C++ 함수

spi_register_read.cpp
#include <SPI.h>

uint8_t readSpiRegister(uint8_t csPin, uint8_t regAddress) {
    // 읽기 모드 플래그(최상위 비트 1) 세팅
    uint8_t readAddr = regAddress | 0x80;

    digitalWrite(csPin, LOW); // 슬레이브 활성화
    SPI.beginTransaction(SPISettings(10000000, MSBFIRST, SPI_MODE0));

    SPI.transfer(readAddr);            // 레지스터 주소 전송
    uint8_t regValue = SPI.transfer(0x00); // 더미 바이트 전송하며 응답 수신

    SPI.endTransaction();
    digitalWrite(csPin, HIGH); // 슬레이브 해제

    return regValue;
}

참고자료 & 관련 링크