반도체 Study/STM32

STM32 - I2C 이론

잇(IT) 2024. 6. 9. 18:38
728x90

I2C

Inter-Integrated Circuit

 

반도체 칩과 반도체 칩간의 통신 방법으로 널리 사용된다.

 

Data(SDA) 선과 Clock(SCL) 선 2개로만 통신이 가능하다.

 

주로 control용으로 사용되며 저속이기 때문에 전용 HW없이 일반 GPIO로도 구현이 가능하다.

https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

 

I2C는 하나의 마스터와 여러개의 Slave로 구성되어 있다. 

 

Master의 SDA는 Slave의 SDA와 Master의 SCL은 Slave의 SCL과 연결되어 있다.

또한 각각의 라인들은 Pull Up 저항에 연결되어 있다.

 

Slave 장치에는 7bit 장치 주소가 있고, Slave 장치 내부에는 8bit or 16bit 내부 저장 영역 (또는 레지스터) 주소가 있다.

https://www.makeriot2020.com/index.php/2020/09/07/what-exactly-is-i2c/

위 그림은 Slave의 Address 주소와 내주 저장 영역 주소를 그림으로 나타낸 것이다.

위 그림은 Master와 Slave가 신호를 주고 받는 그림에 해당한다.

 

위 그림에 대한 예시를 들자면 ex) 0xB0 장치 내부의 0x22 저장 영역에 0x77라는 데이터를 쓰기

1. Master만 통신을 시작할 수  있기 때문에 BUS가 비어있는지 확인하고, 비어있다면 Start bit를 모든 Slave에게 전달한다.

2. 데이터를 받을 준비가 된 Slave들에게 Master는 통신할 Slave 주소를 전달한다. (0xB0, 끝에 R/W 비트까지 포함해서 전달한다.) 

3. 자신이 주소가 존재하는 Slave는 ACK 신호를 Master에게 다시 전달한다. (Master는 ACK 신호가 올때까지 기다린다. +오류가 발생할 경우를 대비하여 TimeOut 코드를 작성해줘야 한다. 일반적인 I2C 프로토콜에 TimeOut 기능이 없다.)

4. Master는 ACK 신호가 들어오면 Slave의 내부 저장 영역 데이터를 전달한다. (0x22)

5. Slave는 해당 저장영역이 있다면 ACK 신호를 다시 보내고 Master는 저장 영역에 쓸 데이터를 다시 전달한다. (0x77)

6. Slave는 ACK를 다시 Master에게 보내게 되면 통신이 끝나게 되고, Stop bit를 Slave에게 전달한다.

 

 

 

 

728x90