대표 Peri. device 들에 대해서(I2C, I3C, SPI)

 I2C, I3C, SPI는 SoC(System on Chip) 설계에서 흔히 접하는 직렬 통신 프로토콜입니다. 각 프로토콜은 고유한 특징과 장단점을 가지고 있어 특정 애플리케이션에 적합하게 사용됩니다. 이 글에서는 각 프로토콜의 기본 개념부터 심층적인 정보까지, 교과서적인 내용부터 논문에 이르기까지 폭넓게 다루겠습니다.

I2C (Inter-Integrated Circuit)

I2C는 NXP(구 Philips)에서 개발한 동기식 직렬 통신 버스 프로토콜로, 주로 보드 내에서 여러 개의 저속 주변 장치와 마이크로컨트롤러 간의 통신에 사용됩니다.

  • 특징:

    • 2선 인터페이스: SDA (Serial Data)와 SCL (Serial Clock) 두 개의 신호선만 사용합니다.
    • 멀티마스터, 멀티슬레이브: 하나의 버스에 여러 개의 마스터와 슬레이브 장치가 연결될 수 있습니다.
    • 주소 지정 방식: 각 슬레이브 장치는 고유한 7비트 또는 10비트 주소를 가지며, 마스터는 이 주소를 사용하여 특정 슬레이브와 통신합니다.
    • 저속: 표준 모드(100kHz), 고속 모드(400kHz), 초고속 모드(1MHz), 초고속 모드 플러스(3.4MHz), 초고속 모드(5MHz) 등을 지원하지만, 일반적으로 SPI보다 속도가 느립니다.
    • 간단한 하드웨어 구현: 적은 수의 핀으로 복잡한 시스템 구성이 가능합니다.
  • 기본 트랜잭션 방식 (마스터-슬레이브 통신 예시):

    1. Start Condition: 마스터가 SDA 라인을 High에서 Low로 전환하여 통신 시작을 알립니다.
    2. Slave Address + R/W Bit: 마스터가 통신할 슬레이브 장치의 주소와 읽기(R) 또는 쓰기(W) 비트를 전송합니다.
    3. ACK/NACK: 슬레이브 장치는 자신에게 할당된 주소인지 확인하고, 해당 장치가 응답할 수 있으면 ACK(Acknowledge) 신호를 보냅니다. 그렇지 않으면 NACK(Not Acknowledge)를 보냅니다.
    4. Data Transfer: ACK 신호를 받으면 마스터는 데이터를, 쓰기 모드일 경우 데이터를 슬레이브로 보내고, 읽기 모드일 경우 슬레이브로부터 데이터를 받습니다. 각 데이터 바이트마다 ACK/NACK 신호가 오갑니다.
    5. Stop Condition: 마스터가 SDA 라인을 Low에서 High로 전환하여 통신 종료를 알립니다.

I3C (Improved Inter-Integrated Circuit)

I3C는 MIPI(Mobile Industry Processor Interface) Alliance에서 개발한 차세대 인터페이스로, I2C의 장점을 계승하면서도 성능과 기능을 대폭 향상시킨 프로토콜입니다. I2C 호환성을 유지하면서도 고속 데이터 전송 및 더 많은 기능을 지원합니다.

  • 특징:

    • 2선 또는 4선 인터페이스: 기본적으로 SDA, SCL 두 선을 사용하지만, 선택적으로 IBI(In-Band Interrupt) 및 PIDX(Protocol ID/Data Extension)를 위한 추가 선을 사용할 수 있어 4선까지 확장 가능합니다.
    • I2C 호환성: I2C 마스터와 슬레이브 장치가 I3C 버스에서 함께 작동할 수 있습니다.
    • 고속 데이터 전송: DDR(Double Data Rate) 기능을 지원하여 최대 12.5MHz에서 I2C보다 훨씬 빠른 데이터 전송이 가능합니다.
    • 향상된 기능:
      • IBI (In-Band Interrupt): 별도의 인터럽트 핀 없이 데이터 라인을 통해 인터럽트를 발생시킬 수 있습니다.
      • PIDX (Protocol ID/Data Extension): 특정 프로토콜 ID를 사용하여 효율적인 데이터 전송이나 추가 기능(예: HDR-DDR, HDR-TSP)을 지원합니다.
      • 핫-플러깅(Hot-Plugging): 장치를 연결하거나 제거해도 버스에 영향을 덜 미칩니다.
      • 자동 구성: 장치 주소를 자동으로 할당하는 기능을 지원합니다.
    • 멀티마스터 지원: I2C와 달리 명시적인 멀티마스터 지원을 포함합니다.
  • 기본 트랜잭션 방식:
    I3C는 I2C와 유사한 기본적인 트랜잭션 흐름을 따르지만, 다양한 명령 코드와 모드를 통해 더 복잡하고 효율적인 통신이 가능합니다.

    • Start/Stop Conditions: I2C와 동일하게 사용됩니다.
    • Header: 마스터는 각 트랜잭션 시작 시 명령 비트(Command Bit), 대상 장치 주소(Target Address), 프로토콜 ID(PID) 등을 포함하는 헤더를 전송합니다.
    • ACK/NACK: I2C와 마찬가지로 데이터 전송 확인에 사용됩니다.
    • IBI (In-Band Interrupt): 슬레이브가 마스터의 폴링 없이 데이터 라인을 통해 인터럽트를 요청할 수 있습니다.
    • HDR Modes (High Data Rate): DDR, TSP(Transport Protocol) 등의 고급 모드를 사용하여 효율성을 극대화합니다.

SPI (Serial Peripheral Interface)

SPI는 Motorola(현 Freescale, NXP)에서 개발한 동기식 전이중(Full-Duplex) 직렬 통신 프로토콜로, 주로 마이크로컨트롤러와 고속 주변 장치(센서, 메모리, 디스플레이 등) 간의 통신에 사용됩니다.

  • 특징:

    • 4선 인터페이스: 일반적으로 MOSI (Master Out Slave In), MISO (Master In Slave Out), SCLK (Serial Clock), SS/CS (Slave Select/Chip Select) 네 개의 신호선을 사용합니다.
    • 전이중 통신: MOSI와 MISO 라인을 통해 동시에 데이터를 주고받을 수 있어 효율적입니다.
    • 마스터-슬레이브 구조: 단일 마스터와 하나 이상의 슬레이브 장치로 구성됩니다. 각 슬레이브는 SS/CS 라인을 통해 개별적으로 선택됩니다.
    • 고속: I2C보다 훨씬 높은 클럭 속도(수십 MHz 이상)를 지원하여 고속 데이터 전송에 적합합니다.
    • 별도의 클럭 라인: 마스터가 클럭 신호를 생성하므로 별도의 클럭 동기화 라인이 필요합니다.
    • 간단한 프로토콜: 복잡한 주소 지정이나 ACK/NACK 절차가 없어 구현이 비교적 간단하고 빠릅니다.
  • 기본 트랜잭션 방식 (마스터-슬레이브 통신 예시):

    1. Slave Select: 마스터는 통신할 슬레이브 장치의 SS/CS 핀을 Low로 만들어 해당 슬레이브를 선택합니다.
    2. Clocking: 마스터는 SCLK 라인을 통해 클럭 펄스를 생성합니다.
    3. Data Transfer (MOSI/MISO):
      • 마스터 송신, 슬레이브 수신: 마스터는 MOSI 라인을 통해 데이터를 클럭 펄스에 맞춰 보내고, 슬레이브는 MISO 라인을 통해 데이터를 동시에 받습니다.
      • 슬레이브 송신, 마스터 수신: 슬레이브는 MISO 라인을 통해 데이터를 클럭 펄스에 맞춰 보내고, 마스터는 MOSI 라인을 통해 데이터를 동시에 받습니다.
    4. Slave Deselect: 마스터는 SS/CS 핀을 High로 만들어 슬레이브 선택을 해제하고 통신을 마칩니다.

비교 및 선택 가이드

특징I2CI3CSPI
데이터 라인1 (SDA)1 (SDA) + 1 (SCL) (기본)2 (MOSI, MISO)
클럭 라인1 (SCL)1 (SCL)1 (SCLK)
제어 라인없음 (주소 기반)없음 (주소 기반)1+ (SS/CS) - 슬레이브 당 1개
통신 방식반이중 (Half-Duplex)반이중 (Half-Duplex)전이중 (Full-Duplex)
최대 속도5 MHz (HS-mode)12.5 MHz (DDR), 5 MHz (SDR)수십 ~ 수백 MHz (칩셋에 따라 다름)
버스 구조멀티마스터, 멀티슬레이브멀티마스터, 멀티슬레이브 (I2C 호환)싱글 마스터, 멀티슬레이브
주소 지정7/10-bit 주소7-bit 주소 + PID (I2C 호환)Slave Select (SS/CS) 핀
복잡성중간 (주소 지정, ACK/NACK)높음 (다양한 명령, HDR 모드)낮음 (간단한 프로토콜)
주요 용도센서, EEPROM, RTC 등 보드 내 저속 주변 장치모바일, IoT 장치, 고성능 센서디스플레이, 플래시 메모리, ADC/DAC, 고속 센서
전력 소모낮음 (단일 풀업 저항)중간중간 (SS/CS 라인 개수만큼 필요)
  • I2C: 적은 핀으로 많은 장치를 연결해야 할 때, 비교적 느린 속도로도 충분한 경우에 적합합니다. MCU 주변의 EEPROM, 온도 센서 등에 많이 사용됩니다.
  • I3C: I2C의 편리함과 SPI의 속도 및 기능을 결합하고 싶을 때, 특히 모바일 및 IoT 장치와 같이 공간과 전력이 제한적인 환경에서 고성능 센서나 장치 간 통신에 이상적입니다. I2C와의 하위 호환성도 강점입니다.
  • SPI: 데이터 전송량이 많고 속도가 중요하며, 별도의 제어 핀을 할당할 여유가 있는 경우에 최적입니다. 고해상도 디스플레이 컨트롤러, 고속 ADC/DAC, 외부 플래시 메모리 등에 활용됩니다.

이 프로토콜들에 대한 더 깊이 있는 이해를 위해서는 각 제조사의 데이터시트, 관련 기술 백서, 그리고 아래 소개된 자료들을 참고하시면 큰 도움이 될 것입니다.

댓글

이 블로그의 인기 게시물

📚 SDC 마스터 클래스 시리즈 | Chapter 1

📚 SDC 마스터 클래스 시리즈 | Chapter 2

📚 SDC 마스터 클래스 시리즈 | Chapter 3