대표 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보다 속도가 느립니다.
- 간단한 하드웨어 구현: 적은 수의 핀으로 복잡한 시스템 구성이 가능합니다.
기본 트랜잭션 방식 (마스터-슬레이브 통신 예시):
- Start Condition: 마스터가 SDA 라인을 High에서 Low로 전환하여 통신 시작을 알립니다.
- Slave Address + R/W Bit: 마스터가 통신할 슬레이브 장치의 주소와 읽기(R) 또는 쓰기(W) 비트를 전송합니다.
- ACK/NACK: 슬레이브 장치는 자신에게 할당된 주소인지 확인하고, 해당 장치가 응답할 수 있으면 ACK(Acknowledge) 신호를 보냅니다. 그렇지 않으면 NACK(Not Acknowledge)를 보냅니다.
- Data Transfer: ACK 신호를 받으면 마스터는 데이터를, 쓰기 모드일 경우 데이터를 슬레이브로 보내고, 읽기 모드일 경우 슬레이브로부터 데이터를 받습니다. 각 데이터 바이트마다 ACK/NACK 신호가 오갑니다.
- 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 절차가 없어 구현이 비교적 간단하고 빠릅니다.
기본 트랜잭션 방식 (마스터-슬레이브 통신 예시):
- Slave Select: 마스터는 통신할 슬레이브 장치의 SS/CS 핀을 Low로 만들어 해당 슬레이브를 선택합니다.
- Clocking: 마스터는 SCLK 라인을 통해 클럭 펄스를 생성합니다.
- Data Transfer (MOSI/MISO):
- 마스터 송신, 슬레이브 수신: 마스터는 MOSI 라인을 통해 데이터를 클럭 펄스에 맞춰 보내고, 슬레이브는 MISO 라인을 통해 데이터를 동시에 받습니다.
- 슬레이브 송신, 마스터 수신: 슬레이브는 MISO 라인을 통해 데이터를 클럭 펄스에 맞춰 보내고, 마스터는 MOSI 라인을 통해 데이터를 동시에 받습니다.
- Slave Deselect: 마스터는 SS/CS 핀을 High로 만들어 슬레이브 선택을 해제하고 통신을 마칩니다.
비교 및 선택 가이드
| 특징 | I2C | I3C | SPI |
|---|---|---|---|
| 데이터 라인 | 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, 외부 플래시 메모리 등에 활용됩니다.
이 프로토콜들에 대한 더 깊이 있는 이해를 위해서는 각 제조사의 데이터시트, 관련 기술 백서, 그리고 아래 소개된 자료들을 참고하시면 큰 도움이 될 것입니다.
댓글
댓글 쓰기