본문 바로가기
임베디드.일렉트로닉스

I2C Bus 기본개념.

by i.got.it 2018. 12. 11.

 

 

I2C 개요

 

 

 

 

 

I2C Bus 양방향 2선통신 규격.

2선의 구성 : SDA 데이터, SCL 클럭.

2선은 풀업저항으로 VDD에 연결되어야 한다.

데이터 전송은 bus 상태가 busy가 아닐때 시작가능하며, non busy 상태란 SCL, SDA 모두 High 인경우다.

 

I2C 규격문서 : UM10204 I2C-bus specification and User Manual from http://nxp.com/

 

UM10204-i2c-bus-spec-usermanul.pdf

 

 

I2C Bus 결선 예.

 

 

 

 

 

 

 

 

I2C Bus 풀업저항 결정.

 

 

 

 

 

위 그림의 I2C 버스의 풀업저항 Rp 값을 결정하기 위해서는 VDD, bus speed, bus capacitance 3가지 변수에 의하여 결정되어야한다.

이에 대한 완전한 설명과 계산식을 구할려면  UM10204 I2C bus specification and User Manual 에서 제공된다.

 

그러나, 대부분의 회로에서는 아래와 같은 간단한 기준에 의한 저항값을 사용해도 된다.

 

 

 

조건 

VDD : 1.8V ~ 5.0V

bus capacitance : under 200pF.

 
 

 

 

 

I2C Bit 전송.

 

 SCL 클럭 1 펄스마다 데이터 1 비트 전송된다.

 

 

 

 

 

 

 

 

I2C START , STOP

 

I2C Bus not busy : SDA, SCL  모두 High 상태로 유지된다.

 

START : SCL High 인 상태에서 SDA H->L 상태변화 시점이 START (S로 표기)  

 

STOP : SCL High 상태에서 SDA L->H 상태변화 구간이 STOP (P로 표기)

 

START와 STOP  사이에 데이터  전송되며, 데이터 바이트 수량 제한은 없다. 각각의 데이터 1바이트 마다 1개의 Ack혹은 NoAck 가 붙는다.

 

 

 

 

 

 

 

I2C System 구성

 

 

Transmitter : 데이터를 생성하는것.

Receiver : 데이터를 수신하는것.

Master : 데이터를 컨트롤 하는것.

Slave : Master 의 제어를 받는것.

 

 

 

 

 

I2C Acknowledge

 

 

slave receiver 는 1바이트 수신시마다 ack를 발생시켜야 한다.

master receiver 역시 1바이트 수신시마다 ack 를 발생시켜야 한다.

ack 란 SCL의 ack clock 에서 SDA 를 Low 상태로 하는것이다. SDA가 High 인것이 no ack 임. - 아래 그림 필참.

 

 

 

 

 

 

I2C Addressing

 

 

I2C 버스의 START 이후 첫 바이트는 항상 slave address 7bit +  Read/Write 1비트로 구성된다.

 

 

 

 

 

 

 

I2C Multiple Master Arbitration

 

I2C에는 여러개의 master 가 있을 수 있고, 이때 동시에  데이터 전송을 하려는 경우가 발생할 수 있다. 이때는 아래 그림과 같이 arbitration scheme 이 적용되어 1개의 master 만 통신가능하게 처리된다.

 

 

 

 

 

 

 

 

I2C  Data Protocol

 

앞의 규격이 요점이며, 실제 I2C 버스의  프로토콜은 응용시스템 마다 다를 수 있다. 통상 I2C 를 다루는 경우는  I2C Slave 기능의 칩을 Master 입장에서 컨트롤 하는 경우이며,  I2C Slave 칩마다 프로토콜은 자체 정의된다. 이에 준하여 Master 측 코딩한다.

 

아래 예는 흔한 데이터 I2C 기반 데이터 교환 상황 일부예를 보이고 있다.

 

 I2C Master 에서 Slave 를 2바이트 데이터를 전송하는 예를 보이고 있다.  가장 먼저 START 이후 I2C의 Slave Address 7bit 가 항상 먼저 기록된다. 그리고 이어서 master 측에서 데이터 송신을 의미하는 0 이 1비트 점하고 있다. 이후 A 는 ACK 비트 를 의미한다. 이는 Slave 가 발생한 것이다. 이후 Master 측에서 생성된 DATA 1  바이트 이어서 Slave 가 생성한 ACK 1비트, 이런식이다.

 

아래 예는 Master 에서 Slave 로부터 1바이트 읽어들이는 경우이다. slave address  이후 1 이 기록되어있고, 이후 slave  측의 ACK 1비트, slave 가 생성한 1바이트의 데이터 이어서 Master 가 발생한 ACK  가 있다.

 

전형적인 I2C Write  시나리오.

 

전형적인 I2C Read 시나리오.

 

 

 

 

 

 

I2C Write 예.

 

 

 

 

I2C Read 예.

 

 

 

 

 

예 : PCF85063 인 경우.

 

 

더블클릭을 하시면 이미지를 수정할 수 있습니다

 

 

 

 

MCU 에서 I2C 실구현 예.

 
 

 STM32 에서 I2C 구현 

 - STM32 에서 I2C 활용하기 위한 STM32CubeMX 에서 설정 방법과 KEIL MDK-ARM 에서의 코딩예를 보이고 있다. 

 PSoC 에서 I2C 구현. 

 - PSoC Creator 에서 I2C 구현예. 

 EFM8 에서 I2C 구현.

 - SiLab 의 EFM8 ,  Simplicity Studio 에서 I2C 구현예.

 


 

 

 

 본 글이 포함된 상위 정리장소 

 

 Connectivity : http://igotit.tistory.com/280 의 I2C

 

 

 

///본글 단축주소 https://igotit.tistory.com/328



첫글등록 : 2015년 6월 13일. 

최종수정 : 2018년 12월 11일. 


댓글



 

비트코인




암호화폐       외환/나스닥/골드         암호화폐/외환/나스닥/골드
     
현물 |선물 인버스 |선물 USDT       전략매니저(카피트레이딩)         프랍 트레이더 온라인 지원가능. MT4,MT5