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
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
두 개 이상의 디바이스의 클럭들을 동기화
데이터를 송수신하기 위한 시작과 끝 조건
관련문서 및 출처
- https://twinw.tistory.com/148
- https://eslectures.blog.me/80137860924
- http://jake.dothome.co.kr/i2c-1/
- https://igotit.tistory.com/entry/I2C-Bus-%EA%B8%B0%EB%B3%B8%EA%B0%9C%EB%85%90