I2C 버스에는 전원 및 접지 연결과 함께 두 개의 신호가 있다.
두 신호선의 역할은 다음과 같다
SDA: 양방향 데이터 선이다.
SCL: 클럭 신호이다.
각 신호 라인에는 2개의 풀업 저항이 연결되어 있으며 비활성 상태일 때 버스를 공급 전압까지 끌어 올린다. 공급 전압은 표준이 아니며 3.3V 또는 5V 일 수 있다. 또한 일부 고속 I2C 구현의 경우 더 낮은 전압일 수도 있다.
I2C 버스에 연결할 수 있는 것은 마스터 및 슬레이브 두 가지 유형이다. 마스터 장치는 버스를 제어하고 클럭신호를 공급한다. 슬레이브에서는 개별적으로 데이터를 요청한다. 버스에는 하나 이상의 마스터 장치가 있을 수 있지만 특정 순간에는 하나만 활성 마스터가 될 수 있다. 마스터 장치에는 할당된 주소가 없다.
슬레이브 장치에는 주소가 있으며 이 주소는 버스에서 고유해야한다. 7비트 주소 지정 체계를 사용하므로 하나의 I2C 버스에 최대 128개의 슬레이브를 사용할 수 있다. 실제로 이 대규모 장치 컬렉션은 사용되기 어렵다.
begin()
I2C통신 초기화 및 활성화하는 함수
Slave 모드일 경우 자신의 번호를 지정
번호가 지정되지 않으면 Master 모드로 설정requestFrom()
Slave로부터 데이터를 요청하기 위해 Master에 의해 설정beginTransmission()
Master에서 전송하기 위해 Slave의 주소 값을 지정
데이터를 버퍼에 저장 후 한꺼번에 전송
Master 모드에서만 사용endTransmission()
데이터 버퍼에 저장된 데이터를 전송
Master 모드에서만 사용available()
수신된 데이터의 Byte 수를 반환write()
I2C버스로 데이터를 보내기 위해 사용
Master/slave 모드에서 사용read()
I2C버스(버퍼)로부터 데이터를 읽어옴
available() 함수로 수신 여부가 확인된 후 사용SecClock()
특정 주파수를 설정하기 위해 Master에 의해 사용onReceive()
Master로부터 데이터가 수신되었을 때 호출될 이벤트 처리
수신된 데이터의 길이가 전달됨onRequest()
Master로부터 데이터를 요청받았을 때 호출되는 함수
이벤트 처리의 매개변수는 없음
I2C의 예제 코드는 아두이노 IDE 몌뉴의 "[파일] - [예제] - [Wire]" 에서 불러올 수 있다.
코드는 Master코드와 Slave 코드 쌍으로 사용하면 된다.
"master_writer/slave_receiver" : EEPROM에 쓰기
"master_reader/slave_sender" : 센서 값을 읽기