주요 콘텐츠

이 페이지는 기계 번역을 사용하여 번역되었습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

I2C 통신 지원

I2C(Inter-Integrated Circuit)는 집적 회로 및 저속 주변기기 간 통신을 위한 동기식 칩 간 통신 프로토콜입니다. 일반적인 I2C 기반 장치로는 EEPROM, 열 센서, 실시간 클록 등이 있습니다. I2C Controller Write 블록과 I2C Controller Read 블록은 I2C 장치와의 통신을 가능하게 합니다.

해당 장치의 I2C 버스에는 두 개의 양방향 라인인 직렬 데이터 라인(SDA: Serial Data Line)과 직렬 클록 라인(SCL: Serial Clock Line)에 연결된 I2C 컨트롤러가 있습니다. 이 두 라인은 부착된 I2C 주변기기의 핀 쌍에 연결됩니다. I2C 주변기기는 제조업체가 제공하는 고유한 7비트 또는 10비트 주소를 가집니다. 주소가 고유하지 않은 경우, 장치 데이터 시트를 참조하여 주소를 재구성합니다.

컨트롤러 노드는 클록을 생성하고 주변기기와의 통신을 시작합니다. 주변 노드는 클록을 수신하고 I2C 컨트롤러에 확인 응답을 보냅니다.

I2C는 다음과 같은 통신 모드를 사용합니다:

  • 컨트롤러 송신: I2C 컨트롤러가 I2C 주변기기에 데이터를 씁니다

  • 컨트롤러 수신: I2C 컨트롤러가 I2C 주변기기로부터 데이터를 읽습니다

  • 주변기기 전송: I2C 주변기기가 I2C 컨트롤러에 데이터를 WRITE(쓰기)합니다

  • 주변기기 수신: I2C 주변기기가 I2C 컨트롤러로부터 데이터를 읽습니다

시작 및 중지 조건

I2C 메시지는 START 비트, 송신할 데이터, STOP 비트로 구성됩니다.

SDA가 HIGH에서 LOW로 전환되고 SCL이 여전히 HIGH 상태인 경우 START 조건을 나타냅니다. SDA가 LOW에서 HIGH로 전환되고 SCL이 HIGH 상태로 유지될 경우 STOP 상태를 나타냅니다. 다른 모든 SDA 전환은 SCL이 로우 상태일 때 발생합니다.

데이터 확인 응답

I2C 통신은 데이터 바이트를 8비트 길이로 정의합니다. I2C는 단일 바이트 또는 다중 바이트 데이터를 송신할 수 있습니다. 데이터 전송 중에는 각 바이트 뒤에 확인 응답(acknowledge) 신호 ACK가 따라옵니다. ACK용 클록은 컨트롤러에서 생성되며, 수신기(컨트롤러 또는 주변기기)는 SDA를 로우(LOW)로 끌어내린 후 확인 응답 클록 펄스의 하이(high) 부분 동안 유지함으로써 ACK를 생성합니다.

수신기가 확인 응답 기간 동안 SDA를 LOW로 끌어내리지 않으면, 이는 수신기에 의한 NACK(확인 응답 없음)을 나타냅니다. 주변기기가 다음 데이터 바이트의 송수신 준비가 되지 않은 경우, SCL을 LOW 상태로 유지하여 컨트롤러가 대기 상태(WAIT state)로 진입하게 합니다. 주변기기가 준비 완료되어 SCL을 해제하면 정상적인 데이터 전송이 재개됩니다.

I2C 읽기/쓰기

I2C 읽기/쓰기 작업은 다음과 같이 수행됩니다:

  1. I2C 컨트롤러는 START 신호를 전송한 후 7비트 주변기기 주소와 8번째 비트를 보내 통신을 시작하며, 이 8번째 비트는 쓰기(0)/읽기(1)를 나타냅니다.

  2. 컨트롤러는 SDA를 해제하고 주변기기로부터 ACK를 기다립니다.

  3. 주변기기가 버스에 존재하면 ACK로 응답합니다.

  4. 컨트롤러는 전송한 읽기 또는 쓰기 비트에 따라 송신 모드 또는 수신 모드를 유지하며, 주변기기는 그에 상응하는 모드(각각 수신 또는 송신)를 유지합니다.

  5. 컨트롤러는 STOP 조건을 전송하여 데이터 전송을 종료합니다.

다음 이미지는 I2C 주변기기에서의 단일 바이트 읽기 및 쓰기를 보여줍니다.

I2C 레지스터 읽기/쓰기

I2C 레지스터 읽기/쓰기 작업은 다음과 같이 수행됩니다:

  1. I2C 컨트롤러는 START 신호를 전송한 후 7비트 주변기기 주소와 8번째 비트를 보내 통신을 시작하며, 이 8번째 비트는 쓰기(0)/읽기(1)를 나타냅니다.

  2. 컨트롤러는 SDA를 해제하고 주변기기로부터 ACK를 기다립니다.

  3. 주변기기가 버스에 존재하면 ACK로 응답합니다.

  4. 그런 다음 컨트롤러는 엑세스하려는 주변기기의 레지스터 주소를 기록합니다.

  5. 주변기기가 레지스터 주소를 확인하면, 컨트롤러는 쓰기/읽기 작업 시 각 바이트마다 ACK와 함께 데이터 바이트를 전송합니다.

  6. 컨트롤러는 STOP 조건을 전송하여 데이터 전송을 종료합니다.

다음 이미지는 I2C 주변기기에 존재하는 레지스터에 대한 단일 바이트 읽기 및 쓰기를 보여줍니다.