본문 바로가기
통신

[칩 간 통신] I2C Protocol

by 스테고사우르스 2023. 3. 15.

안녕하세요.

 

지금까지 칩 내부의 IP 사이에 데이터를 전송하는 AMBA Protocol에 대해 공부해봤는데요

이번에는 칩 사이에서 데이터를 주고받는 방식을 알아보려고 합니다.

 

여러가지 방식이 있는데 그 중 널리 사용되는 I2C Protocol을 학습해보도록 하겠습니다.

 

 


I2C Protocol

 

I2C는 Inter-Integrated Circuit으로 IC사이 통신 링크를 제공하는 양방향 2 wire serial bus 입니다.

 

SCL (clock), SDA (data) 두 개의 선을 이용합니다.

 

하나의 Master가 여러개의 Slave와 연결되는 구조를 가지고 있습니다.

Slave는 127개까지 연결 가능합니다.

보통 address는 8bit인데 마지막 bit은 R/W를 의미하므로 2의 7승-1, 즉 127개까지 연결 가능합니다.

 

I2C Protocol은 웬만하면 pull-up 저항이 달려 있습니다.

왜냐하면 SDA와 SCL이 HIGH를 유지하기 위해서 입니다.

Tx, Rx를 하나의 선으로 연결하기 때문에 floating을 방지하기 위함이라고 하는데요,

풀업저항은 다른 게시글에서 알아보도록 하겠습니다.

 


Write Protocol

 

먼저 SCL과 SDA가 HIGH인 상태에서 시작합니다.

 

  1. SCL이 HIGH일 때 SDA의 falling edge가 나타나면 START 신호로 받아들입니다.

  2. 첫 구간은 Device Address에 대한 정보를 제공합니다.
    SCL이 HIGH일 때만 SDA의 값을 캡쳐합니다.
    마지막 bit는 R/W에 대한 정보입니다.
    0이면 Write를 뜻합니다.

  3. 잘 전송했으면 ACK (0)를 실패하면 NACK (1)를 전송합니다.

  4. 두 번째 구간은 Register Address로 선택한 device에서 어떤 레지스터를 선택할 지 주소 정보를 제공합니다.

  5. 쓰고 싶은 개수만큼 Register Address를 전송해줍니다.

  6. 마찬가지로 잘 전송했으면 ACK (0)를 실패하면 NACK (1)를 전송합니다.

  7. 마지막 구간은 Write할 Data를 전송합니다.

  8. 쓰고 싶은 개수만큼 Data를 전송해줍니다.

  9. 마찬가지로 잘 전송했으면 ACK (0)를 실패하면 NACK (1)를 전송합니다.

  10. SCL이 HIGH일 때 SDA의 rising edge가 뜨면 STOP 사인입니다.

 

Write Protocol은 위와 같은 방식으로 진행됩니다.

 

SCL이 HIGH일 때 SDA가 변하면 START나 STOP으로 인식합니다.

START 신호가 뜬 후에는 Slave가 SCL의 HIGH에서의 값을 capture하여 읽습니다.

 


Read Protocol

 

이번에도 SCL과 SDA가 HIGH인 상태에서 시작합니다.

 

  1. SCL이 HIGH일 때 SDA의 falling edge가 나타나면 START입니다.
  2. 처음 나오는 건 Device Address입니다.
    총 8bit인데 앞에는 주소이고 LSB는 R/W입니다.
    Read Protocol이지만 처음엔 W 신호로 시작합니다.

  3. 잘 전송했으면 ACK (0)를 실패하면 NACK (1)를 전송합니다.

  4. 다음은 Register Address 정보입니다. 8bit로 이루어져 있습니다.

  5. 잘 전송했으면 ACK (0)를 실패하면 NACK (1)를 전송합니다.

  6. 여기가 중요한데 RESTART를 해야합니다.
    SCL이 HIGH일 때 SDA의 falling edge가 뜨면 RESTART입니다.

  7. 다시 Device Address를 보내줍니다.
    8bit인데 이번엔 LSB가 R(1)입니다. 

  8. 잘 전송했으면 ACK (0)를 실패하면 NACK (1)를 전송합니다.
  9. 이제 Data를 읽어옵니다.
    마지막 Data까지 다 읽었으면 Slave가 NACK를 전송합니다.
  10. SCL이 HIGH일 때 SDA의 rising edge가 뜨면 STOP입니다.

 

여기까지가 I2C의 Read Protocol입니다.

처음에는 복잡해 보일 수 있겠지만 파형과 함께 보면 이해하기 쉬울겁니다.

 

앞으로 다양한 통신에 대해 글을 써보도록 할게요~

'통신' 카테고리의 다른 글

[칩간통신] CAN (Controller Area Network)  (1) 2023.05.03

댓글