Peripheral과의 통신 - 3. I2C
I2C란?
I2C(Inter-Integrated Circuit [아이스퀘어드시])는 1980년대 초반 필립스에서 개발한 직렬 버스로, 임베디드 시스템 혹은 휴대전화 등에 저속의 Peripheral을 연결하기 위해 사용된다. 즉, 빠른 속도를 요구하지 않는 간단한 주변 장치들에 적합하며, 통신 길이가 짧은 통신에 적합하다.
I2C는 풀업 저항이 연결된 SDA(직렬 데이터), SCL(직렬 클럭) 이라는 두 개의 양 방향 라인을 사용한다. SDA는 데이터를 주고받는 라인, SCL은 타이밍을 동기화 하기 위한 클럭 라인이다.
이처럼 I2C는 CLK(클럭)이 있는 동기식 통신 방식이다.
동기식 통신이란 송/수신측 간 통신에서 데이터를 주고 받는 시점(타이밍)을 정확하게 일치&유지 시키는 것이다. 이때, 그 시점을 맞추기 위해서 CLK라인이 필요하다.
이렇듯 I2C는 SDA와 SCL 두 개의 선이 존재하며, master에서 나온 두 개의 라인 SDA, SCL에 여러 주변 장치들이 버스형으로 연결된 형태로, ' Master-Slave' 형태로 동작한다. 이 때 주변 장치(peripheral)가 Slave. Slave에게 명령을 내리는 장치가 Master가 된다.
peripheral은 각각의 slave address를 가지며, Master에서 데이터를 송신 할 때, 수신 할 slave의 주소를 패킷에 포함하여 전달한다.
I2C 통신 방식은?
위에서 I2C는 풀업 저항이 연결되어있다고 설명하였다.
I2C는 이러한 풀업 저항으로 인해 SDA와 SCL 모두 기본적으로 High상태이다.
위 파형에서 볼 수 있듯이 SDA가 Low로 떨어지면 통신이 시작된다. 즉, SDA의 LOW가 시작 신호이다.
시작 신호 후, 7비트의 slave의 주소값을 쓰고, 해당 slave에서 데이터를 읽어올지, 쓸지에 대한 1비트 read(1)/write(0) 신호를 보낸다.
master에서 수신 slave의 주소값과 read/write 까지 총 8비트를 보내고 나면, 수신 slave에서 수신 신호(응답 신호)로 1비트 ack 신호를 보낸다.
- I2C통신은 버스로 수신 slave의 주소를 보내는데, 이때 버스에 연결된 모든 slave들이 해당 주소값을 읽고 자신의 주소와 일치하는지 확인한다.
- 그 중, 자신의 주소와 일치하는 slave에서 ack비트에 '0'을 출력한다.
- 만약 master에서 보낸 주소값이 버스에 연결된 모든 slave 주소값과 일치하지 않는다면, 아무도 ack비트에 '0'을 출력하지 않기때문에 '1'이 유지된다. 이를 nack라고 하며, master가 nack를 받으면 이는 응답할 slave가 없다는 뜻이므로 통신을 종료한다.
master는 ack신호를 통해 slave가 수신함을 확인한 후 데이터 전송을 이어간다. 이때 데이터는 8비트까지 전송할 수 있다.
데이터 read/write 후, 다시 ack 신호가 발생한다.
- write의 경우, slave로 데이터를 다 전송하고 나면 slave가 ack를 보낸다.
- read의 경우, slave에서 데이터를 다 보내고 나면 master가 nack를 보내 slave에게 전송이 끝났다는 신호를 보낸다.
종료 ack신호까지 받고 나면(또는 nack신호를 보내고 나면) SDA가 High로 바뀌며 통신이 종료된다.
* 참고 사이트 :
https://ko.wikipedia.org/wiki/I%C2%B2C
I²C - 위키백과, 우리 모두의 백과사전
위키백과, 우리 모두의 백과사전. I²C(아이스퀘어드시, Inter-Integrated Circuit)는 필립스에서 개발한 직렬 버스이다. 마더보드, 임베디드 시스템, 휴대 전화 등에 저속의 주변 기기를 연결하기 위해
ko.wikipedia.org
I2C(Inter Integrated Circuit) 버스
1. I2C(Inter Integrated Circuit) 버스란 I2C(Inter Integrated Circuit) 버스는 마이크로 프로세스와 저속 주변 장치를 연결 시키기 위한 필립스에서 개발한 직렬 컴퓨터 버스이다. I2C버스는 양방향 오픈 드레인
twinw.tistory.com
https://mickael-k.tistory.com/184
I2C란? (엄청 쉽게 설명)
간단 정리 - I2C 통신은 2개의 선을 이용하는 통신 방식 - 하나의 마스터와 여러개의 슬레이브 기기가 물려 통신이 가능 - 클럭 신호를 사용하는 동기식 통신 방식이라 시간에 자유로움 - 슬레이브
mickael-k.tistory.com
https://velog.io/@chaeyoonl/STM32-I2C%EB%9E%80
[STM32] 시리얼 통신_I2C란?
I2C란?칩간의 통신을 의미한다.I2C 통신은 2개의 선을 이용하는 통신 방식하나의 마스터와 여러개의 슬레이브 기기가 물려 통신이 가능클럭 신호를 사용하는 동기식 통신 방식이라 시간에 자유로
velog.io
https://ohj-1129.tistory.com/38
I2C 통신에 대한 깔끔한 설명 - 원리부터 응용까지 (with 온도센서)-2
목차 1. I2C 통신이란? - I2C 통신이란? - I2C 통신의 특징 2. 왜 I2C 통신을 사용하는 가? - I2C통신과 SPI 통신,UART 통신과의 비교 3. I2C 통신을 위해 필요한 조건 - I2C 통신을 위해 하드웨어적으로 필요한
ohj-1129.tistory.com