1. Introduction
- I2C(Inter-Integrated Circuit)는 마이크로컨트롤러나 주변 장치들 간에 데이터를 교환하는 표준 통신 프로토콜 중 하나입니다. 주로 짧은 거리에서 데이터를 전송하고 편리하게 여러 장치를 연결할 수 있도록 설계되었습니다. 센서, 메모리, 디스플레이 등과 같은 주변 장치들 간에 통신에 사용됩니다.
- I2C는 두 개의 선으로 데이터를 전송합니다. 하나는 데이터를 보내고 받는 SDA(Serial Data)선이고, 다른 하나는 클럭 신호를 제공하는 SCL(Serial Clock)선입니다. 이 두 선은 마스터와 슬레이브 장치 간에 연결되며, 각 장치는 고유한 주소를 가지고 있습니다. 마스터는 슬레이브의 주소를 지정하여 특정 장치와 통신할 수 있습니다.
- I2C 통신은 주로 두 단계로 이루어집니다. 첫 번째는 주소를 지정하여 특정 장치에게 메시지를 보내는 단계이고, 두 번째는 데이터를 전송하거나 받는 단계입니다. 데이터 전송은 마스터가 클럭 신호를 생성하고 SDA선을 통해 데이터를 보내는 방식으로 이루어집니다.
- I2C Bus Speed는 보통 100KHz, 400Khz, 1Mhz를 지원합니다.
2. Features
- I2C 버스에서 각 장치는 고유한 7비트 또는 10비트 주소를 가지고 있습니다. 이 주소는 각 장치를 식별하는 데 사용됩니다. 따라서 특정 장치와 통신하려면 해당 장치의 주소를 알아야 합니다
- 일반적으로 I2C 버스에서 SCL(Serial Clock) 신호는 마스터(Master) 장치가 생성하고 제어합니다. 마스터는 SCL 신호를 생성하여 데이터 전송의 타이밍을 조절하고, 슬레이브(Slave) 장치들과의 통신을 관리합니다.
- 슬레이브 장치들은 마스터가 생성하는 SCL 신호를 사용하여 데이터를 전송하거나 수신합니다. 슬레이브는 마스터의 제어에 따라 데이터를 샘플링하고, 데이터를 보내거나 받습니다. 따라서 마스터가 SCL 신호를 생성하고 제어함으로써 전체 통신이 동기화되고 조율됩니다.
- 일반적으로 I2C 통신에서 슬레이브(Slave)는 직접적으로 데이터를 마스터(Master)에게 보낼 수 없습니다.
- I2C 통신은 주로 마스터가 데이터를 요청하고 슬레이브가 응답하는 방식으로 이루어집니다. 마스터는 슬레이브의 주소를 지정하여 데이터를 요청하고, 슬레이브는 해당 요청에 따라 데이터를 제공합니다. 이런 구조 때문에 슬레이브가 직접적으로 데이터를 마스터에게 보내는 것은 일반적으로 지원되지 않습니다.
- 또한 I2C 버스에서는 일반적으로 슬레이브(Slave) 간 직접적인 통신은 지원되지 않습니다.
- 일반적으로 I2C에서 pull-up 저항은 2.2kΩ에서 10kΩ 사이의 값이 사용됩니다. 더 낮은 값의 저항은 높은 전력 소모를 초래할 수 있고, 더 높은 값은 장치 간의 통신을 불안정하게 할 수 있습니다.
- I2C 통신에서 Open Drain은 데이터와 클럭 라인을 신호 전송에 사용하는 방식을 가리킵니다. 이 방식은 특정한 신호를 표현하기 위해 저항으로 연결된 풀-업 장치를 사용하는 것을 의미합니다.
- Open Drain 구성에서, 마스터 및 슬레이브 장치는 데이터(SDA) 및 클럭(SCL) 라인을 제어하기 위해 단지 접지(Ground)로 끌어내리는 것만을 책임집니다. 데이터 전송이 있을 때, 해당 라인은 마스터 또는 슬레이브에 의해 끌어내려지고, 전송이 끝나면 다시 풀업 저항에 의해 끌어올려집니다.
- Open Drain 구성은 다중 마스터 및 다중 슬레이브 환경에서 특히 유용합니다. 이는 여러 디바이스가 버스를 공유할 때 충돌을 방지하고, 하드웨어 간의 간섭을 최소화하기 위해 중요합니다. Open Drain 구성은 마스터와 슬레이브 간의 데이터 전송을 안정화시키는 데 도움이 됩니다. 이러한 이유로 대부분의 I2C 디바이스는 Open Drain 출력을 제공하며, 이는 I2C 통신에서 주로 사용되는 방식 중 하나입니다. Open Drain은 I2C 프로토콜의 핵심 요소 중 하나이며, 이를 통해 안정적이고 신뢰할 수 있는 통신을 가능하게 합니다.
3. How to work
- Start Condition(시작 조건):
- 마스터가 통신을 시작하기 위해 SCL을 high로 유지한채로, SDA선을 LOW로 설정한 직후, SCL을 high에서 low로 떨어뜨립니다.
- 주소 전송:
- 마스터는 슬레이브의 주소와 읽기 또는 쓰기 작업을 결정하여 주소 바이트를 SDA 선으로 전송합니다.
- I2C 통신은 7비트 또는 10비트의 주소를 사용할 수 있습니다.
- Read/Write
- 주소 전달을 마친 후, 마스터가 Read 할지, Write 할지 각각 high, low로 전달합니다.
- 응답(ACK 또는 NACK):
- 슬레이브 장치는 주소를 받으면 ACK(Acknowledge) 또는 NACK(Not Acknowledge) 신호를 보냅니다. ACK는 슬레이브가 주소를 인식했다는 것을 나타내며, NACK는 그렇지 않다는 것을 나타냅니다. ACK는 low로, NACK은 high로 표현합니다.
- 데이터 전송:
- 마스터가 쓰기 작업을 선택한 경우, 마스터는 데이터를 SDA 선으로 전송합니다. 슬레이브는 각 데이터 바이트를 받고 ACK를 반환합니다.
- 읽기 작업을 선택한 경우, 슬레이브는 요청된 데이터를 SDA 선으로 전송하고, 마스터는 각 데이터 바이트를 받은 후 ACK를 반환합니다.
- Stop Condition(정지 조건):
- 데이터 전송이 완료되면 마스터는 SCL을 Low에서 High로 변경시키고 유지한채로, SDA 선을 Low에서 High로 설정합니다.
4. Regitsters
- Control Register (제어 레지스터): I2C 디바이스의 동작 모드, 속도 및 다른 설정을 제어하는 데 사용됩니다. 이 레지스터는 I2C 통신 프로토콜을 활성화하거나 비활성화하고, 클럭 속도를 설정하고, 다른 I2C 기능을 활성화하거나 비활성화할 수 있습니다.
- Status Register (상태 레지스터): I2C 통신 상태 및 오류를 나타내는 데 사용됩니다. 이 레지스터는 주로 디바이스가 현재 통신 중인지, 데이터 전송이 완료되었는지, 오류가 발생했는지 등을 나타냅니다.
- Data Register (데이터 레지스터): 데이터 전송을 위한 레지스터로, 마스터와 슬레이브 간의 실제 데이터 교환에 사용됩니다. 마스터는 이 레지스터를 통해 데이터를 슬레이브에게 전송하고, 슬레이브는 이 레지스터를 통해 데이터를 마스터에게 응답합니다.
- Address Register (주소 레지스터): 슬레이브 디바이스에 대한 주소를 설정하는 데 사용됩니다. I2C 통신에서 슬레이브 디바이스는 각각 고유한 주소를 가지며, 마스터는 특정 슬레이브 디바이스와 통신하기 위해 해당 주소를 사용합니다.
- Interrupt Register (인터럽트 레지스터): 특정 이벤트가 발생했을 때 인터럽트를 생성하고 처리하기 위한 레지스터입니다. 이 레지스터는 보통 특정 조건이 충족되었을 때, 예를 들어 데이터가 수신되었거나 전송이 완료되었을 때 인터럽트를 발생시킵니다.
'- Tech > Hardware' 카테고리의 다른 글
[핵심만] I3C 기술적 분석 (0) | 2024.05.15 |
---|---|
[핵심만] UART 기술적 분석 (0) | 2024.05.11 |
[핵심만] SPI 기술적 분석 (0) | 2024.04.28 |