I2C 버스 프로토콜 튜토리얼, 애플리케이션과의 인터페이스

문제를 제거하기 위해 도구를 사용해보십시오





오늘날 프로토콜은 임베디드 시스템 설계 . 프로토콜을 사용하지 않고 마이크로 컨트롤러의 주변 기능을 확장하려면 복잡성과 전력 소비가 증가합니다. USART, SPI, CAN 등 다양한 유형의 버스 프로토콜을 사용할 수 있습니다. I2C 버스 프로토콜 등 두 시스템간에 데이터를 전송하는 데 사용됩니다.

I2C 프로토콜

I2C 버스 란?




두 개 이상의 장치간에 정보를 송수신하려면 버스 시스템이라고하는 통신 경로가 필요합니다. I2C 버스는 집적 회로간에 데이터를 전송하는 데 사용되는 양방향 2 선 직렬 버스입니다. I2C는“Inter Integrated Circuit”을 의미합니다. 1982 년 Philips 반도체에 의해 처음 소개되었습니다. I2C 버스는 표준, 고속 모드 및 고속 모드와 같은 세 가지 데이터 전송 속도로 구성됩니다. I2C 버스는 7 비트 및 10 비트 주소 공간 장치를 지원하며 저전압에 따라 작동이 다릅니다.

I2c 버스 프로토콜

I2c 버스 프로토콜



I2C 신호 라인

I2C 신호 라인

I2C 신호 라인

I2C는 장치와 통신하는 데 사용되는 SCL 및 SDL 라인과 같은 두 개의 신호 라인으로 구성된 직렬 버스 프로토콜입니다. SCL은 '직렬 클록 라인'을 나타내며이 신호는 항상 '마스터 장치'에 의해 구동됩니다. SDL은 '직렬 데이터 라인'을 나타내며이 신호는 마스터 또는 I2C 주변 장치에 의해 구동됩니다. 이러한 SCL 및 SDL 라인은 모두 I2C 주변 장치간에 전송이없는 경우 오픈 드레인 상태입니다.

오픈 드레인 출력


오픈 드레인은 FET 트랜지스터의 개념 여기서 트랜지스터의 드레인 단자는 개방 상태이다. 마스터 디바이스의 SDL 및 SCL 핀은 트랜지스터가 열린 상태로 설계되었으므로 이러한 트랜지스터가 전도 될 때만 데이터 전송이 가능합니다. 따라서 이러한 라인 또는 드레인 단자는 전도 모드를 위해 VCC에 풀업 저항을 통해 연결됩니다.

I2C 인터페이스

많은 슬레이브 장치는 마이크로 컨트롤러에 연결됩니다. I2C 레벨 시프터 IC를 통해 I2C 버스를 통해 정보를 전송합니다. 마스터 장치 및 슬레이브 장치의 SCL 및 SDL 라인과 통신하기 위해 모두 연결된 최대 128 개의 장치를 연결하는 데 사용되는 I2C 프로토콜입니다. 멀티 마스터 통신을 지원합니다. 즉, 외부 장치와 통신하는 데 두 개의 마스터가 사용됩니다.

I2C 데이터 전송률

I2C 프로토콜은 고속 모드, 고속 모드 및 표준 모드의 세 가지 모드를 작동합니다. 표준 모드 데이터 속도 범위는 0Hz ~ 100Hz이고 고속 모드 데이터는 0Hz ~ 400KHz 속도로, 고속 모드는 10Hz로 전송할 수 있습니다. KHz ~ 100KHz. 9 비트 데이터는 각 전송에 대해 전송되며, 여기서 8 비트는 송신기 MSB에서 LSB로 전송되고 9 번째 비트는 수신기에서 전송 된 승인 비트입니다.

I2C 데이터 전송률

I2C 데이터 전송률

I2C 통신

I2C 버스 프로토콜은 마스터 및 슬레이브 통신에서 가장 일반적으로 사용되며 마스터는 '마이크로 컨트롤러'라고하며 슬레이브는 임베디드 시스템에서 ADC, EEPROM, DAC 및 유사한 장치와 같은 다른 장치라고합니다. 슬레이브 장치의 수는 I2C 버스를 통해 마스터 장치에 연결되며, 각 슬레이브는 통신을위한 고유 주소로 구성됩니다. 다음 단계는 마스터 장치를 슬레이브에 통신하는 데 사용됩니다.

1 단계: 첫째, 마스터 장치는 시작 조건을 발행하여 모든 슬레이브 장치에 알리므로 직렬 데이터 라인을 수신합니다.

2 단계: 마스터 장치는 SCL 및 SDL 라인에 연결된 모든 슬레이브 장치의 주소와 비교되는 대상 슬레이브 장치의 주소를 보냅니다. 일치하는 주소가 있으면 해당 장치가 선택되고 나머지 모든 장치는 SCL 및 SDL 라인에서 연결 해제됩니다.

Step3 : 마스터로부터 수신 된 일치 주소를 가진 슬레이브 장치는 마스터에 대한 확인 응답으로 응답 한 후 데이터 버스의 마스터와 슬레이브 장치간에 통신이 설정됩니다.

Step4 : 마스터와 슬레이브 모두 통신이 읽기인지 쓰기인지에 따라 데이터를 송수신합니다.

Step5 : 그런 다음 마스터는 1 비트 승인으로 응답하는 8 비트 데이터를 수신기로 전송할 수 있습니다.

I2C 튜토리얼

클록 펄스와 관련하여 순차적으로 정보를 단계적으로 송수신하는 것을 I2C 프로토콜이라고합니다. 시스템 간 및 근거리 프로토콜입니다. 즉, 회로 기판 내에서 마스터 및 슬레이브 장치와 통신하는 데 사용됩니다.

I2C 프로토콜 기본 사항

일반적으로 I2C 버스 시스템은 ADC, EEROM 및 RTC와 같은 입력 및 출력 주변 장치 기능을 쉽게 확장하는 데 사용되는 두 개의 와이어로 구성됩니다. 기타 기본 구성 요소 복잡성이 매우 적은 시스템을 만드는 것입니다.

예: 8051 마이크로 컨트롤러에는 ADC가 내장되어 있지 않으므로 아날로그 센서를 8051 마이크로 컨트롤러에 연결하려면 ADC0804-1 채널 ADC, ADC0808-8 채널 ADC 등과 같은 ADC 장치를 사용해야합니다. 이러한 ADC를 사용하면 아날로그 센서를 마이크로 컨트롤러에 연결할 수 있습니다.

프로토콜을 사용하여 마이크로 컨트롤러 또는 프로세서의 I / O 기능을 확장하지 않고도 8255 ICit 8 핀 장치로 이동할 수 있습니다. 그만큼 8051 마이크로 컨트롤러는 40 핀 마이크로 컨트롤러입니다. 8255 IC를 사용하여 각 포트에 8 핀이있는 3-I / O 포트를 확장 할 수 있습니다. 주변 회로를 확장하기 위해 RTC, ADC, EEPROM, 타이머 등과 같은 모든 장치를 사용함으로써 복잡성, 비용, 전력 소비 및 제품 크기도 증가합니다.

이 문제를 극복하기 위해 하드웨어 복잡성과 전력 소비를 줄이기위한 프로토콜 개념이 등장합니다. 이 I2C 프로토콜을 사용하여 I / 0 주변 장치, ADC, T / C 및 메모리 장치와 같은 더 많은 기능을 최대 128 개 장치까지 확장 할 수 있습니다.
I2C 프로토콜에 사용되는 용어

송신기: 버스로 데이터를 보내는 장치를 송신기라고합니다.

리시버: 버스에서 데이터를 수신하는 장치를 수신기라고합니다.

석사: 클록 신호를 생성하고 전송을 종료하기 위해 전송을 시작하는 장치를 마스터라고합니다.

노예: 마스터가 주소를 지정한 장치를 슬레이브라고합니다.

멀티 마스터 : 하나 이상의 마스터가 메시지를 손상시키지 않고 동시에 버스 제어를 시도 할 수있는 것을 멀티 마스터라고합니다.

중재: 둘 이상의 마스터가 동시에 버스를 제어하려고 시도하는 경우 하나만 허용되므로 우승 메시지가 손상되지 않도록하는 절차입니다.

동기화: 두 개 이상의 장치의 단일 클럭을 동기화하는 절차를 동기화라고합니다.

I2C 기본 명령 시퀀스

  1. 시작 비트 조건
  2. 정지 비트 조건
  3. 승인 조건
  4. 마스터 대 슬레이브 쓰기 작업
  5. 마스터에 작업 슬레이브 읽기

시작 및 중지 비트 조건

마스터 (마이크로 컨트롤러)가 슬레이브 장치 (예 : ADC)와 통신하기를 원하면 I2C 버스에서 시작 조건을 발행하여 통신을 시작한 다음 중지 조건을 발행합니다. I2C 시작 및 중지 로직 레벨이 그림에 나와 있습니다.

I2C 시작 조건은 SCL 라인이 하이 인 동안 SDA 라인의 하이에서 로우 전환으로 정의됩니다. I2C 정지 조건은 SDA 라인이 SCL 라인이 하이 인 동안 로우에서 하이로 전환 될 때 발생합니다.

I2C 마스터는 항상 S 및 P 조건을 생성합니다. I2C 마스터가 START 조건을 시작하면 I2c 버스는 사용 중 상태로 간주됩니다.

시작 및 중지 비트 조건

시작 및 중지 비트 조건

프로그램 작성:

시작 조건 :

sbit SDA = P1 ^ 7 // 마이크로 컨트롤러의 SDA 및 SCL 핀 초기화 //
sbit SCL = P1 ^ 6
무효 지연 (부호없는 정수)
무효 메인 ()
{
SDA = 1 // 데이터 처리 //
SCL = 1 // 클럭이 높음 //
지연()
SDA = 0 // 데이터 전송 //
지연()
SCL = 0 // 클럭 신호가 낮음 //
}
무효 지연 (int p)
{
unsignedinta, b
For (a = 0a<255a++) //delay function//
For (b = 0b}

정지 조건 :

무효 메인 ()
{
SDA = 0 // 데이터 처리 중지 //
SCL = 1 // 클럭이 높음 //
지연()
SDA = 1 // 중지됨 //
지연()
SCL = 0 // 클럭 신호가 낮음 //
}
무효 지연 (int p)
{
unsignedinta, b
For (a = 0a<255a++) //delay function//
For (b = 0b}

승인 (ACK) 및 승인 없음 (NCK) 조건

I2C 버스를 통해 전송되는 각 바이트 뒤에는 수신기의 확인 조건이 뒤 따릅니다. 즉, 마스터가 8 비트 전송을 완료하기 위해 SCL을 로우로 풀링하면 SDA가 수신기에 의해 마스터로 로우로 풀링됩니다. 수신기의 전송이 당겨지지 않으면 SDA 라인 LOW가 NCK 조건으로 간주됩니다.

승인 (ACK)

승인 (ACK)

프로그램 작성

승인
void main ()
{
SDA = 0 // SDA 라인이 낮음 //
SCL = 1 // 클럭이 높음에서 낮음 //
지연 (100)
SCL = 0
}
No Acknowledgement :
void main ()
{
SDA = 1 // SDA 라인이 높음 //
SCL = 1 // 클럭이 높음에서 낮음 //
지연 (100)
SCL = 0
}

마스터-슬레이브 쓰기 작업

I2C 프로토콜은 데이터를 패킷 또는 바이트 형태로 전송합니다. 각 바이트 뒤에는 승인 비트가옵니다.

데이터 전송 형식

데이터 전송 형식

데이터 전송 형식

스타트: 주로 시작 조건을 생성하는 마스터에 의해 시작된 데이터 전송 시퀀스입니다.

7 비트 주소 : 그 후 마스터는 단일 16 비트 주소 대신 두 개의 8 비트 형식으로 슬레이브 주소를 보냅니다.

R / W : 읽기 및 쓰기 비트가 높으면 쓰기 작업이 수행됩니다.

아아: 쓰기 작업이 슬레이브 장치에서 수행되면 수신기는 1 비트 ACK를 마이크로 컨트롤러로 보냅니다.

중지: 슬레이브 장치에서 쓰기 작업이 완료된 후 마이크로 컨트롤러는 중지 조건을 슬레이브 장치로 보냅니다.

프로그램 작성

쓰기 작업

voidwrite (부호없는 문자 d)
{
부호없는 문자 k, j = 0x80
For (k = 0k<8k++)
{
SDA = (d & j)
J = j >> 1
SCL = 1
지연 (4)
SCL = 0
}
SDA = 1
SCL = 1
지연 (2)
c = SDA
지연 (2)
SCL = 0
}

마스터-슬레이브 읽기 작업

데이터는 비트 또는 바이트 형태로 슬레이브 장치에서 다시 읽 힙니다. 최상위 비트를 먼저 읽고 최하위 비트를 마지막에 읽습니다.

데이터 읽기 형식

데이터 읽기 형식

데이터 읽기 형식

스타트: 주로 데이터 전송 시퀀스는 시작 조건을 생성하는 마스터에 의해 시작됩니다.

7 비트 주소 : 그 후 마스터는 단일 16 비트 주소 대신 두 개의 8 비트 형식으로 슬레이브 주소를 보냅니다.

R / W : 읽기 및 쓰기 비트가 낮 으면 읽기 작업이 수행됩니다.

아아: 쓰기 작업이 슬레이브 장치에서 수행되면 수신기는 1 비트 ACK를 마이크로 컨트롤러로 보냅니다.

중지: 슬레이브 장치에서 쓰기 작업이 완료된 후 마이크로 컨트롤러는 중지 조건을 슬레이브 장치로 보냅니다.

프로그램 작성

무효 읽기 ()
{
부호없는 문자 j, z = 0x00, q = 0x80
SDA = 1
for (j = 0j<8j++)
{
SCL = 1
지연 (100)
플래그 = SDA
if (플래그 == 1)
큐)
q = q >> 1
지연 (100)
SCL = 0

ADC를 8051 마이크로 컨트롤러에 인터페이스하는 실제 예

ADC는 아날로그 데이터를 디지털 형태로, 디지털에서 아날로그로 변환하는 데 사용되는 장치입니다. 8051 마이크로 컨트롤러에는 ADC가 내장되어 있지 않으므로 I2C 프로토콜을 통해 외부에서 추가해야합니다. PCF8591은 I2C 기반 아날로그에서 디지털로 그리고 디지털-아날로그 변환기. 이 장치는 2.5 ~ 6v 전압과 함께 최대 4 개의 아날로그 입력 채널을 지원할 수 있습니다.

아날로그 출력

아날로그 출력은 전압 형태로 제공됩니다. 예를 들어, 5v 아날로그 센서는 0.01v ~ 5v의 출력 로직을 제공합니다.
5v의 최대 디지털 값은 = 256입니다.
2.5v의 값은 최대 전압 값에 따라 = 123입니다.

아날로그 출력의 공식은 다음과 같습니다.

디지털 출력의 공식 :

ADC를 8051 마이크로 컨트롤러에 인터페이스

ADC를 8051 마이크로 컨트롤러에 인터페이스

위의 그림은 ADC 장치에서 8051 마이크로 컨트롤러로 I2C 프로토콜을 사용하여 데이터를 전송하는 것을 보여줍니다. SCL 및 SDA의 ADC 핀은 마이크로 컨트롤러의 1.7 및 1.6 핀에 연결되어 통신을 설정합니다. 센서가 ADC에 아날로그 값을 제공하면 I2C 프로토콜을 통해 데이터를 디지털로 변환하고 마이크로 컨트롤러로 전송합니다.

이것은 적절한 프로그램과 함께 I2C 버스 프로토콜 튜토리얼에 관한 것입니다. 주어진 콘텐츠가 I2C 통신을 사용하여 여러 장치를 마이크로 컨트롤러와 인터페이스하는 실용적인 개념을 제공하기를 바랍니다. 이 프로토콜의 인터페이스 절차에 의문이 있으시면 아래에 의견을 보내주십시오.