데이터계측분석/데이터통신 기술자료

I2C 통신 프로토콜

에이티에스 2023. 9. 17. 11:59
728x90

I2C통신은  집적 회로를 기판에 연결하는 데 사용되는 가장 일반적인 통신 중 하나입니다.

I2C(I²C 또는 IIC라고도 함)는 집적 간 회로를 나타냅니다. 1982년 Phillips가 많은 칩을 위해 개발했습니다. 원래 I2C는 100kHz 통신만 사용할 수 있었습니다. 7비트 주소만 제공되었으므로 버스에 112개의 장치만 연결할 수 있었습니다. 400년 후, 1008kHz 고속 모드가 추가되었습니다. 10비트 주소로 인해 버스에 연결할 수 있는 장치 수가 2개로 증가했습니다. 이것은 최초의 표준화된 I2C 버전이었습니다.

I2C 목적

USB, 이더넷, Wi-Fi 또는 Bluetooth와 같은 프로토콜에 비해 I2C는 훨씬 느립니다. 그러나 훨씬 간단하고 하드웨어 및 시스템 리소스를 훨씬 적게 사용합니다. 따라서 마이크로 컨트롤러 또는 마이크로 컨트롤러와 센서 간의 통신에 이상적입니다. SPI(Serial Peripheral Interface)와 마찬가지로 I2C는 단거리에만 사용됩니다.

 

I2C의 일반적인 용도는 속도에서 벗어나 단순성과 저비용이 우선시되는 경우 다음과 같습니다:

  • 전원 공급 장치 켜기 및 끄기
  • 센서의 데이터 판독(예: 팬의 속도)
  • 스피커의 음량 변경하기
  • 더작은 OLED 또는 LCD 제어
  • 모니터의 색조, 색상 균형, 대비 및 밝기 설정 변경
  • RTC(실시간 클록)에 액세스
  • 저속 DAC(디지털-아날로그 변환기) 및 ADC(아날로그-디지털 변환기)에 액세스

OLED 또는 기압 센서를 사용하여 프로젝트를 진행하는 경우 I2C를 사용할 가능성이 높습니다.

 

I2C 동작방식

인간과 마찬가지로 장치는 서로를 이해하기 위해 동일한 언어를 사용해야 합니다. 전자 제품 세계에서는 이러한 언어를 통신 프로토콜이라고 합니다. 이러한 프로토콜은 메시지 전송의 보편성과 일관성을 만들기 때문에 매우 중요합니다.

 

몇 가지 통신 프로토콜이 있지만 대부분의 전자 프로젝트를 구축할 때 몇 가지만 알면 됩니다. I2C는 그 중 하나입니다.

 

I2C의 가장 큰 장점 중 하나는 마이크로 컨트롤러가 단 2개의 범용 I/O 핀과 소프트웨어로 많은 장치를 제어할 수 있다는 것입니다. 사용되는 두 개의 와이어는 SDA(직렬 데이터) 및 SCL(직렬 클럭) 라인입니다. 버스의 모든 I2C 장치는 이 두 개의 와이어만 사용하여 연결됩니다. 다른 많은 유사한 버스 기술은 더 많은 핀을 사용하여 여러 장치를 연결합니다.

 

모든 I2C 디바이스는 송신기(데이터 전송), 수신기(데이터 수신) 또는 둘 다일 수 있습니다. 일부 장치는 소위 컨트롤러(이전에는 마스터로 알려짐)입니다. 버스 클록을 생성하고, 통신 프로세스를 시작 및 중지하고, I2C 명령을 보냅니다. 버스에는 둘 이상의 컨트롤러가 있을 수 있습니다. 대부분의 다른 장치는 소위 주변 장치(이전에는 슬레이브로 알려짐)입니다. 버스의 명령에 응답하고 컨트롤러에 의해 처리됩니다.

 

컨트롤러가 특정 장치와 통신하려면 각 주변 장치에 버스에 고유한 주소가 있어야 합니다. 컨트롤러(일반적으로 마이크로 컨트롤러)는 주변 장치가 명령을 보내지 않으므로 주소가 필요하지 않습니다.

 

반응형

I2C 데이터 프레임

I2C 통신 프로토콜을 사용하면 데이터가 메시지로 전송됩니다. 각 메시지는 데이터 프레임으로 나뉩니다. 메시지는 시작 조건으로 시작하여 7비트 또는 10비트로 구성된 주소 프레임이 뒤따릅니다. 읽기/쓰기 비트는 그 뒤에 옵니다. 다음은 ACK/NACK 비트 또는 "승인/승인 없음" 비트입니다. 다음은 8비트로 구성된 데이터 프레임입니다. 데이터 프레임 수에는 제한이 없습니다. 각 뒤에는 ACK/NACK 비트가 옵니다. 메시지는 중지 조건으로 끝납니다.

 

이를 더 명확하게 설명하기 위해 아래 이미지를 살펴보겠습니다.

주소 프레임 시퀀스는 각 주변 장치에 고유합니다. 컨트롤러가 대화하려고 할 때 식별하는 데 사용됩니다.

 

읽기/쓰기 비트컨트롤러가 주변기기에 데이터를 전송하고 있는지, 아니면 컨트롤러로부터 데이터를 요청하고 있는지를 나타냅니다. 컨트롤러가 데이터를 전송하고 있을 때(write 또는 0), 컨트롤러가 주변기기에 데이터를 요청할 때(read 또는 1), 고전압 레벨에서 동작합니다.

 

주소와 모든 데이터 프레임 후에 "승인" 비트가 다른 방향으로 전송됩니다. 주변 장치가 보낸 주소 또는 데이터 프레임을 성공적으로 수신하면 ACK(0) 비트가 다시 전송됩니다. 데이터가 성공적으로 전송 또는 수신되지 않은 경우 NACK(1)이 다시 전송되어 승인되지 않았습니다.

 

컨트롤러가 주변 장치에서 ACK 비트를 수신하면 데이터 프레임을 보낼 차례입니다. 7비트 또는 10비트가 될 수 있는 주소 프레임과 달리 데이터 프레임의 길이는 항상 8비트입니다. 데이터 비트는 중요도 순으로 전송되며, 가장 중요한 비트가 먼저 전송되고 가장 적은 비트가 마지막에 전송됩니다. 모든 데이터 프레임 후에 프레임이 성공적으로 승인되었는지 확인하기 위해 ACK/NACK 비트가 전송됩니다. 다음 데이터 프레임이 전송되기 전에 ACK 비트를 수신해야 합니다.

 

각 메시지는 시작 조건으로 시작하고 중지 조건으로 끝납니다. 

 

시작 및 중지 조건

장치 간에 데이터를 전송하기 위해 컨트롤러는 먼저 SCL 라인을 통해 클록 신호를 생성합니다. 이렇게 하면 I2C 버스의 장치 간에 데이터 전송이 동기화됩니다. 컨트롤러는 승인 비트를 포함한 모든 데이터 비트에 대해 클럭 라인에서 클럭 펄스를 생성합니다. 클럭 펄스는 SCL 라인이 하이에서 로우로 그리고 순서대로 되돌아간다는 것을 의미합니다. 데이터는 단일 SDA 라인을 통해 전달됩니다.

 

이 두 라인은 오픈 드레인이므로 풀업 저항을 사용해야 합니다. 일반적으로 사용되는 저항 값의 범위는 약 2kbps에서 고속의 경우 400K, 약 10kbps의 저속의 경우 최대 100K입니다.

 

SCL 및 SDA 라인은 모두 낮거나 높을 수 있습니다. 시작 조건(S로 표시됨)은 SCL 라인이 여전히 높은 동안 SDA 라인이 낮게 떨어질 때 발생합니다. 메시지 끝에서 중지 조건(P로 표시됨)은 SCL 줄이 가거나 높을 때 발생하고 SDA 줄이 그 후에 높아질 때 발생합니다. 시작 및 정지 비트는 컨트롤러에 의해서만 생성될 수 있고 주변 장치에 의해서만 생성될 수 있는 고유한 신호입니다.

 

반응형

데이터 전송

데이터는 시작 조건과 중지 조건 간에 전송됩니다. 8비트 패킷인 바이트 단위로 전송됩니다. 보낼 수 있는 바이트 수에는 제한이 없습니다. 모두 뒤에 ACK/NACK 비트가 와야 합니다. 이 비트는 장치가 다른 데이터 프레임으로 작업할 준비가 되었는지 여부를 나타냅니다.

시작 조건이 끝나면 컨트롤러는 SCL 라인에서 펄스를 보내기 시작합니다. 컨트롤러가 전송하는 각 클럭 펄스에 대해 1비트의 데이터가 전송됩니다. SDA 라인은 SCL 라인이 낮을 때만 변경할 수 있습니다. 높을 때 SDA 라인은 높거나 낮게 안정적으로 유지됩니다.

 

읽기/쓰기 비트에서 SDA 줄이 낮으면 컨트롤러가 주변 장치에 씁니다. 높으면 주변 장치에서 데이터를 읽도록 요청합니다.

 

승인 비트의 경우 SDA 라인이 낮으면 주변 장치가 프레임을 성공적으로 이해했습니다. SDA 라인이 높으면 주변 장치가 프레임을 이해하고 인식하지 못한 것입니다.

 

반복 시작

컨트롤러는 한 번에 둘 이상의 메시지를 교환해야 하는 경우가 있습니다. 하나의 버스에 여러 컨트롤러가 있을 수 있으므로 교환이 중단되지 않도록 해야 합니다. 그렇지 않으면 다른 컨트롤러가 버스를 방해하고 제어할 수 있으며 초기 메시지가 손실됩니다. 이것이 반복 시작 조건이 정의된 이유입니다.

 

이름에서 알 수 있듯이 반복된 시작은 시작 조건을 다시 수행합니다. 이를 수행하기 위해 SDA 라인은 높아질 수 있고 SCL 라인은 낮습니다. 그런 다음 SCL 라인도 높아집니다. 두 라인이 모두 높으면 새 시작 조건이 첫 번째 라인과 동일한 방식으로 시작됩니다. 이 새 메시지의 구조는 다른 메시지와 동일합니다. 주소 프레임은 다음과 같은 데이터 프레임으로 지정됩니다. 그 시점까지 정지 조건이 없었기 때문에 이전 메시지는 실제로 끝나지 않았습니다. 따라서 현재 컨트롤러는 여전히 버스를 제어합니다.

 

아래 이미지는 시작 조건이 반복되는 메시지의 예를 보여줍니다.

 

프레임이 승인되면 컨트롤러가 중지 조건을 시작할 때까지 모든 것이 정상적으로 계속됩니다. 그러나 주변 장치가 프레임을 인식하지 못하면 메시지가 확인될 때까지 반복되는 시작 조건이 사용됩니다.

 

반복되는 시작 조건은 기본적으로 시작 조건과 동일하지만 무한정 시작할 수 있다는 점만 다릅니다. 컨트롤러는 반복 시작 횟수에 관계없이 정지 조건을 발행할 때까지 버스를 계속 제어합니다.

 

메시지에는 하나의 중지 조건만 있을 수 있습니다. 그런 다음 다른 컨트롤러가 버스를 제어하고 메시지를 시작할 수 있습니다.

 

반응형

I2C의 장단점

I2C는 다른 프로토콜에 비해 복잡하게 들릴 수 있으므로 사용을 방해할 수 있습니다. I2C를 사용하는 데에는 몇 가지 장점과 단점이 있습니다. 사용 여부를 더 쉽게 결정할 수 있도록 몇 가지를 나열했습니다.

장점:

  • 두 개의 전선만 사용
  • 여러 컨트롤러 및 주변 장치 지원
  • 버스에 새 장치를 쉽게 추가 할 수 있습니다.
  • 모든 전송 바이트 후의 ACK/NACK 비트
  • 널리 사용되는 프로토콜

단점:

  • 데이터 프레임 크기는 8비트로 제한됩니다.
  • 느린 데이터 전송 속도
  • SPI보다 구현하는 데 더 복잡한 하드웨어가 필요합니다.
 

 

728x90
반응형
그리드형