IIC 프로토콜의 이해와 활용

IIC 프로토콜 개요

IIC (Inter-Integrated Circuit) 또는 I2C는 마이크로컨트롤러 시스템에서 널리 사용되는 직렬 통신 프로토콜입니다. 이 프로토콜은 두 개의 선(SDA 및 SCL)만으로 여러 장치 간에 양방향 통신을 가능하게 합니다.

1. IIC 프로토콜 소개

1.1 IIC 프로토콜의 기원

IIC 프로토콜은 1980년대 초 필립스 반도체(현재 NXP 반도체)가 회로 간 통신을 위한 간단한 직렬 버스를 구현하기 위해 처음 개발했습니다. 이 프로토콜은 동일한 버스 상에서 여러 주 장치(Master)와 부 장치(Slave)를 연결할 수 있게 하여 효율적인 데이터 통신을 지원합니다.

1.2 IIC 프로토콜의 특징

IIC 프로토콜은 두 개의 선으로 구성된 설계, 다중 주/부 장치 통신 능력, 그리고 낮은 통신 속도를 특징으로 합니다. 이는 마이크로컨트롤러와 주변 장치 간의 저속 데이터 교환에 이상적입니다.

1.3 IIC 프로토콜의 응용 분야

IIC 프로토콜은 임베디드 시스템, 모바일 장치, 소비자 전자 제품, 컴퓨터 주변 장치 등 다양한 분야에서 센서, 메모리, 디스플레이, 카메라 등을 연결하는 데 사용됩니다.

2. IIC 장치 통신 메커니즘

2.1 주 장치와 부 장치의 기본 상호작용

2.1.1 장치 역할과 주소 인식

IIC 버스는 주 장치와 부 장치 사이의 두 선(SDA 및 SCL)을 통해 통신합니다. 주 장치는 통신을 시작하고, 클럭 신호를 생성하며, 시작 및 종료 신호를 발생시키고 통신을 종료합니다. 부 장치는 주 장치의 신호를 수신하고 주소를 인식하여 요청에 응답 여부를 결정합니다.

2.1.2 버스 시작 및 종료 신호

버스 시작 신호는 새로운 IIC 통신 세션의 시작을 나타내며, 주 장치가 SCL이 고전압 상태일 때 SDA를 고전압에서 저전압으로 변경하여 발생시킵니다. 종료 신호는 주 장치가 SCL이 고전압 상태일 때 SDA를 저전압에서 고전압으로 변경하여 발생합니다.


    participant M as Master
    participant S as Slave
    M->>S: Start Condition
    M->>S: Address Frame (예: 0xA0 for write)
    S->>M: ACK
    M->>S: Data Frame (if write)
    S->>M: ACK (if write)
    M->>S: Stop Condition (if write)

2.2 데이터 전송 프레임 형식

2.2.1 주소 프레임의 구조와 전송

주소 프레임은 7비트 주소와 1비트 읽기/쓰기 제어 비트로 구성됩니다. 최상위 비트는 장치의 읽기/쓰기 방향 제어 비트(R/W bit)이며, '1'은 읽기 작업을, '0'은 쓰기 작업을 나타냅니다.

// Arduino 환경에서 내부 풀업 저항 설정 예제
void setup() {
  // SDA 및 SCL 라인의 내부 풀업 저항 활성화
  pinMode(A4, INPUT_PULLUP); // A4는 SDA 라인
  pinMode(A5, INPUT_PULLUP); // A5는 SCL 라인
}

void loop() {
  // 코드 로직
}

3. 7비트 부 장치 주소 및 읽기/쓰기 작업

3.1 주소 할당 및 유일성 원칙

3.1.1 주소 인코딩 방법

IIC 프로토콜에서는 각 부 장치가 고유한 주소를 가져야 합니다. 이 주소는 일반적으로 7비트 이진수로 표현되며, 최대 128개의 다른 장치 주소를 지원할 수 있습니다.

3.1.2 주소 충돌의 피하기 및 처리

주소 충돌을 피하기 위해서는 하드웨어 설계 단계에서 주소 할당을 확인하고, 소프트웨어를 이용해 주소 관리를 수행하거나, 하드웨어 수준에서 충돌 감지 논리를 추가할 수 있습니다.

3.2 읽기/쓰기 작업의 타이밍 및 제어

3.2.1 쓰기 작업의 타이밍 분석

쓰기 작업은 IIC 통신에서 가장 기본적인 작업 중 하나입니다. 완전한 쓰기 작업 타이밍은 다음과 같은 단계로 이루어집니다:

  1. 시작 신호: 주 장치가 SCL을 고전압 상태로 유지하면서 SDA를 고전압에서 저전압으로 변경하여 시작 신호를 생성합니다.
  2. 장치 주소 및 쓰기 비트 전송: 주 장치는 부 장치 주소를 전송한 다음, 쓰기 비트('0')를 전송하여 쓰기 작업을 나타냅니다.
  3. 데이터 바이트 전송: 주 장치가 한 바이트의 데이터를 전송하면 부 장치는 보통 ACK를 반환합니다.
  4. 반복 시작 또는 종료 신호: 더 많은 데이터를 쓰려면 데이터 바이트를 반복해서 전송하고, 쓰기가 완료되면 종료 신호를 전송합니다.

    participant 주장치
    participant 부장치
    주장치->>부장치: 쓰기 신호 및 주소 전송
    부장치-->>주장치: ACK 확인
    주장치->>부장치: 데이터 바이트 전송
    부장치-->>주장치: ACK 확인
    주장치->>부장치: 반복 시작 및 읽기 신호 및 주소 전송
    부장치-->>주장치: ACK 확인
    주장치<<--부장치: 데이터 바이트 수신
    주장치-->>부장치: ACK 확인
    주장치->>부장치: 종료 신호 전송

4. IIC 물리층 전기적 특성 및 오픈 드레인 출력

4.1 신호 전압 및 클럭 속도

IIC 버스에서 장치 간 통신은 신호 전압과 클럭 속도라는 두 가지 기본 전기적 특성에 의존합니다.

4.1.1 논리 전압 표준

IIC 프로토콜은 논리 전압 표준을 정의합니다. 예를 들어, 3.3V 시스템에서 논리 "1"은 2.4V 이상, 논리 "0"은 0.6V 이하로 정의됩니다.

4.1.2 버스 속도 및 오류 허용성

IIC 프로토콜은 표준 모드(100 kbps), 고속 모드(400 kbps), 초고속 모드(3.4 Mbps) 등의 다양한 클럭 속도를 지원합니다.

4.2 오픈 드레인 출력 및 풀업 저항

IIC 프로토콜의 오픈 드레인 출력은 외부 풀업 저항이 필요합니다.

5. 바이트 단위 데이터 전송 세부사항

5.1 바이트 전송 프로세스 및 규칙

5.1.1 데이터의 시작 비트 및 종료 비트

IIC 통신 프로토콜에서 각 바이트 데이터 전송은 시작 비트로 시작하고 종료 비트로 끝납니다.


    participant M as Master
    participant S as Slave
    M->>S: Start Condition
    Note over S: SDA goes from High to Low while SCL is High
    M->>S: Data Transmission
    S->>M: Acknowledge/Nacknowledge
    M->>S: Stop Condition
    Note over S: SDA goes from Low to High while SCL is High

5.1.2 인터럽트 및 재시도 메커니즘

데이터 전송 중에는 다양한 이유로 인터럽트가 발생할 수 있으며, IIC 프로토콜은 이러한 경우를 처리하기 위한 메커니즘을 제공합니다.

5.2 데이터 검증 및 오류 감지

5.2.1 데이터 검증 방법

데이터 검증은 데이터 전송 중 오류가 발생하지 않도록 하는 중요한 수단입니다. IIC 프로토콜은 간단한 패리티 검사를 사용하여 데이터의 올바름을 확인합니다.

6. 부 장치 응답 메커니즘

6.1 ACK 비트의 생성 및 인식

IIC 통신 프로토콜에서 ACK 및 NACK 비트는 주 장치와 부 장치 간에 제어 정보를 교환하는 중요한 부분입니다.


    participant 주장치
    participant 부장치

    주장치->>부장치: 데이터 또는 주소 프레임 전송
    주장치->>부장치: SDA 라인 해제 및 SCL 라인 높이기
    부장치->>주장치: ACK 신호 생성을 위해 SDA 라인 낮추기

7. 오류 처리 및 다중 주 장치 아비트레이션

7.1 오류 처리 메커니즘 및 프로토콜

IIC 통신 과정에서 다양한 이유로 오류가 발생할 수 있으므로, 오류 처리 메커니즘을 이해하고 적용하는 것이 중요합니다.

7.2 다중 주 장치 버스 경쟁 및 아비트레이션

다중 주 장치 환경에서 IIC 프로토콜은 아비트레이션 메커니즘을 통해 특정 시간에 하나의 주 장치만 버스를 제어하도록 보장합니다.

태그: IIC I2C Arduino EmbeddedSystems SerialCommunication

6월 13일 01:57에 게시됨