[기술노트_통신] I2C 통신이란?

May 9, 2018

아두이노의 입출력(I/O) 핀을 보다 효율적으로 활용하고 싶다면 I2C에 주목해보시죠~

앱스킷(APPSKIT)은 I2C 통신을 많이 사용합니다.

 

I2C는 두 개의 신호선(SDA, SCL)으로 다수의 I2C 통신을 지원하는 디바이스와 데이터를 송/수신할 수 있는 통신방식입니다.

 

 

하나의 마스터와 다수의 슬레이브로 연결이 구성되며, 마스터에서 기준클럭(SCL)을 생성하고, 이 클럭에 맞춰 데이터(SDA)를 전송 및 수신합니다.

 

각 송신과 수신은 구분(송신과 수신이 동시에 이루어지지 않음)되어 있는 반이중(Half-Duplex) 방식입니다.

 

각 슬레이브는 개별 주소(어드레스)를 가지고 있으며, 이 주소를 통해 식별이 가능합니다.

즉, 기준클럭과 데이터는 I2C 네트워크의 모든 디바이스에게 전달되고, 해당 주소를 가진 디바이스만 응답하는 방식으로 서로 데이터를 주고 받습니다.

 

 

마스터에서 슬레이브로 1바이트 데이터를 쓸 때 데이터 규격은 다음과 같습니다.

(주황색: 마스터,  흰색: 슬레이브)

 

마스터에서 슬레이브로 1바이트 데이터를 읽을 때 데이터 규격은 다음과 같습니다.

 

START BIT는 SCL이 HIGH를 유지하고 있을 때, SDA가 HIGH에서 LOW로 변화하면 START로 인식합니다.

 

 

 

 

 

 

 

ADDRESS필드는 SCL이 LOW일 때 데이터를 바꾸고, SCL이 HIGH일 때 데이터를 확정합니다.

 

 

 

 

 

 

 

 

 

WRITE 필드는 "LOW", READ는 "HIGH" 입니다.

ACK 필드는 "LOW", NACK는 "HIGH"입니다.

 

위에서 설명한 내용을 요약하면 I2C의 데이터 규격은 다음과 같습니다.

 

ATmega328P MCU가 내장된 아두이노(아두이노 우노 외)는 I2C 통신기능을 내장하고 있습니다,

참고로 SDA 핀은 A4(아날로그 4번핀), SCL 핀은 A5(아날로그 5번핀)입니다.

 

I2C의 기준클럭은 100[kHz]로 설정되어 있습니다.

 

아두이노 IDE에서 Wire 라이브러리를 사용하면 I2C를 편리하게 사용할 수 있습니다.

 

관련 주요 라이브러리 함수는 다음과 같습니다.

 

begin()

beginTransmission(address)

write(value)

read()

requestFrom(address, byte num)

available()

onReceive()

onRequest()

endTransmission()

 

이상으로 I2C 통신에 대해 살펴보았습니다.

 

감사합니다.

 

Tags:

Share on Facebook
Share on Twitter
Please reload

 상호  주식회사 디벨롭테인먼트 / Developtainment Co., Ltd

 대표  이종건

 주소  대전광역시 유성구 가정로 218 ETRI 융합기술연구생산센터 1층 108호 (34129) 

           108, 1F, Convergence Technology Commercialization Center, 218 Gajeongro, Yuseong-gu, Daejeon, 34129, Korea​​

메일  appskit@appskit.co.kr

 전화  070-4028-1165

© 2017. Developtainment Co., Ltd All rights reserved.

본 홈페이지에 게시된 이메일 주소가 자동수집되는 것을 거부하며, 이를 위반시 정보통신망법에 의해 처벌됨을 유념하시기 바랍니다.

 참고  본 사이트는 구글 크롬 브라우저로 보시면 원활합니다.