본문 바로가기

센서 강좌/통신

I2C(Inter Integrated Circuit) Bus

I2C(Inter Integrated Circuit) 버스란



I2C(Inter Integrated Circuit) 버스는 마이크로 프로세스와 저속 주변 장치를 연결 시키기 위해 필립스에서 개발한 직렬 컴퓨터 버스이다.

마더보드, 임베디드 시스템, 휴대전화 등에 저속의 주변기기를 연결하기 위해 사용된다.

I2C버스는 양방향 오픈 드레인 선인 SCL(Serial clock)과 SDA(Serial Data) 두 선을 이용하여 통신을 하기 때문에 TWI(Two Wire Interface)라고도 불리며, Master-Slave 형태로 동작한다.

속도는 다른 통신 방식에 비해 느리지만 물리적으로 간단한 구성을 가지고 하나의 버스에 많은 수의 노드를 연결할 수 있다.

또한 연결된 주변 장치와 대화형으로 연결할 수 있다.


I2C 규격문서 : UM10204 I2C-bus specification and User Manual from : https://www.nxp.com/docs/en/user-guide/UM10204.pdf

UM10204.pdf

 I2C.pdf

I2C 설계



I2C는 풀업 저항이 연결된 직렬 데이터(SDA)와 직렬 클럭(SCL)이라는 두 개의 양 방향 오픈 컬렉터 라인을 사용한다.

Master는 SCL로 동기를 위한 Clock을 출력하며 Slave는 SCL로 출력되는 클럭에 맞추어 SDA를 통해 데이터를 송신, 수신 한다. 

또한 SDA 한 선으로 통신을 하기 때문에 동시에 송수신을 할 수 없으며 반이중(Half Duplex) 통신만 가능하다.

SCL선과 SDA선은 모두 오픈 드레인이므로 두 선에 각각 풀업 저항을 연결해 두어야 한다.

사용되는 접압은 최대 +5V이며, 일반적으로 +3.3V 시스템이 사용되지만 다른 전압도 가능하다.


I2C 레퍼런스 디자인은 7비트의 주소 공간을 가지며, 이 중 16개는 예약되어 있으므로, 동일한 버스에 최대 112개의 노드를 연결 할 수 있다. 가장 일반적으로 사용되는 I2C 버서의 모드는 '표분 모드'인 100kbit/s 와, '저속 모드'인 10kbit/s가 사용된다.

최신 리비전의I2C는 보다 빠르게 동작하며, 패스트(Fast) 모드인 400kbit/s와, 고속(High-speed) 모드인 3.4Mbit/s를 지원한다.

최대 1008 노드까지 연결 가능한 10 비트 주소 지정 등의 확장된 기능들을 지원한다.


I2C 버스에 연결되는 디바이스 종류들은 매우 다양하다.


멀티마스터 지원


I2C는 1개의 버스에 2개 이상의 컨트롤러(마스터)가 경쟁할 수 있다.

이때 두 컨트롤러는 버스 Master 역할을 하기 위해 경쟁하게 된다.

  • Multi-master
    2개 이상의 마스터가 메시지 손상 없이 동시에 버스를 제어하는 경우
  • Arbitration
    2개 이상의 마스터가 버스를 동시에 통제할 때 오직 하나만이 허용되며 선택된 마스터의 메시지는 손상되지 않는다.
  • Synchronization
    두 개 이상의 디바이스의 클럭들을 동기화
I2C버스에 두 개 이상의 마스터들이 존재할 수 있다.
그러나 버스에 연결된 장치의 수가 아무리 많아도 한 순간에는 오직 하나의 마스터와 하나의 슬레이브만이 통신할 수 있다.
두 개 이상의 마스터가 있는 경우에 버서의 소유권을 가지고 있는 마스터 및 마스터와 통신을 진행하고 있는 슬레이브 장치 이외의 나머지 장치들은 통신을 방해하지 않아야 한다.
SCL과 SDA는 모두 오픈 드레인이므로 모든 장치들의 SCL과 SDA는 각각 Wired AND로 연결 되어 있다.
Wired AND 연결에서는 어느 한 장치라도 '0'을 출력하면 해당 신호의 상태는 논리 '0' 이 된다.
만일 SCL이나 SDA에 연결되어 잇는 어떤 장치가 논리 '0'을 출력한다면 다른 장치가 그 신호의 상태를 논리 '1' 로 만들수 있는 방법은 없다.
즉, 통신에 참여하지 않은 장치가 SCL이나 SDA로 '0'을 출력하면 마스터는 무조건 0의 값을 받게 된다.
이것은 I2C 버스에 연결되어 있지만 현재 통신에 참여하지 않고 있는 장치들은 모두 자신의 출력을 플로우팅 상태로 유지하거나 1로 출력해야 한다는 것이다.
통신이 진행되지 않는 상황에서 모든 장치의 출력은 플로우팅 상태이므로 SCL과 SDA의 상태는 모두 논리 '1`이다.
이상황에서 I2C 버스의 사용을 원하는 마스터는 SCL과 SDA로 시작 조건을 출력하며 버스 소유권을 주장하고 통신을 시작할 수 있다.
두 신호의 상태가 모두 논리 '1'이 아니라면 현재 다른 마스터가 버스 소유권을 가지고 통신을 진행 중에 있다는 것을 의미하며, 그 마스터가 버스 소유권을 반납할 때까지는 다른 마스터가 새로운 통신을 시작해서는 안된다.

Start & Stop condition

데이터를 송수신하기 위한 시작과 끝 조건







관련문서 및 출처