Serial 통신 - 2. I2C 통신이란?

haesoo·2024년 9월 29일

통신

목록 보기
2/2
post-thumbnail

임베디드 분야를 접해본 사람이라면 I2C 통신에 대해 한 번쯤 들어보았을 것이다.

학부 시절 임베디드 시스템 설계를 수강하며, 자이로 및 가속도 데이터를 받아오기 위해 MPU6050과 mcu의 I2C 통신 프로토콜을 직접 구현했었다. 나는 통신쪽 수업을 하나도 듣지 않았기에, 대충 I2C는 뭐다- 라고 수업만 듣고 직접 구현하려니 머리가 터질 뻔 했었다 .. 🤯🤯

어찌 저찌 인터페이스를 구현하고 데이터 수집에 성공했지만 아직도 I2C에 대해 정확히 이해하지 못한 것 같아 글을 써본다.

이 글을 읽은 분들은 앞으로 MPU6050 같은 IMU 센서를 다룰 때 머리가 터질 일이 없을 것이다 ^_^


Atmel (AVR) 사에서는 mcu들의 I2C 핀을 TWI 통신 핀으로 명명하고 있다.

TWI : Two Wire Serial Interface

그러나 일반적으로 해당 통신 프로토콜은 I2C로 불린다.

I2C : Inter-Integrated Circuit

I square C 라고 읽으면 된다. 동기식 통신의 일종인데, 비동기식 통신과의 차이점 먼저 알아보자

동기식 통신 vs 비동기식 통신

저번 포스티에서도 설명했지만, 다시 설명해보자면

동기 통신 : 보내는 쪽에서 데이터와 별개로 동기 신호 (클럭 신호)를 같이 보낸다.
수신 측에서는 동기 신호에 맞추어 해당 데이터를 읽는다.
별도의 동기 신호가 필요하다는 것은 결국 또 "돈"과 직결됨.
빠르고 오류가 적지만 그만큼 비싸다

비동기 통신 : 보내는 쪽에서는 데이터만을 전송, 수신하는 쪽에서 이를 적절한 방식으로 읽어낸다.
주로 통신 속도 (Baud Rate)만을 맞춰서 통신함
(데이터의 시작과 끝을 알아내는 등 ..)
언뜻 보면 불편을 감수하는 통신 같은데, 단일 신호로 쉽게 구성할 수 있다는 것과 저렴함이 강점.

I2C 통신은 대표적인 "동기" 통신 이라는 것.

주로 짧은 거리 통신, IC 간의 통신에 사용된다.
SCL (Clock) 과 SDA (Data) . 2개의 line으로 통신한다.
여러 슬레이브와 통신 가능하며, 다른 마스터와도 통신이 가능하다.

반드시 풀업 저항과 연결해주어야 한다 (두 line이 default HIGH 상태여야 하므로)

통신 과정을 살펴보자.

  • 두 line이 HIGH 상태를 유지하고 있다.
  • 그러다 SDA (Data) 라인이 LOW로 변하면 (Falling Edge) START로 감지한다.
  • 이후 SCL (Clock) 도 LOW로 떨어지며 클럭 신호를 생성한다.
  • 클럭 신호가 HIGH일 때마다 SDA의 데이터를 읽는다.

Master가 Slave에 Write

  • 데이터는 마스터에서 생성하며 1byte씩 보낸다. start bit 뒤로 7bit의 slave 주소가 나온다. 이후 비트는 0이면 write, 1이면 read를 의미한다.
    바로 다음 비트에서는 주소에 해당하는 Slave가 ACK 비트를 보낸다. (LOW) -> 확인했다는 의미임
  • 그러면 이제 데이터를 교환하는데, Stop Condition까지 Master에서 1byte 데이터를 전송하고, 마지막에 Slave는 데이터를 받았다는 의미로 ACK (Acknowledge) 를 다시 전송한다.
  • 통신이 종료되기 위해서 클럭 신호 (SCL)가 HIGH를 유지하는 상태로 돌아가면, SDA 라인도 HIGH 상태로 돌아간다.

Master가 Slave에 Read

  • 데이터는 마스터에서 생성하며 1byte씩 보낸다. start bit 뒤로 7bit의 slave 주소가 나온다. 이후 비트는 0이면 write, 1이면 read를 의미한다.
    바로 다음 비트에서는 주소에 해당하는 Slave가 ACK 비트를 보낸다. (LOW) -> 확인했다는 의미임
  • 그러면 이제 데이터를 교환하는데, Stop Condition까지 Slave에서 1byte 데이터를 전송하고, 마지막에 Master가 데이터를 받았다는 의미로 NACK (Not Acknowledge)를 전송한다.
  • 통신이 종료되기 위해서 클럭 신호 (SCL)가 HIGH를 유지하는 상태로 돌아가면, SDA 라인도 HIGH 상태로 돌아간다.

다음 시간에는 MPU6050과 Atmega4809의 데이터 시트를 보며 실제 각속도, 가속도 통신 과정을 설명해보겠습니다.

통신은 넘모 어렵다..

0개의 댓글