Учебное пособие по протоколу шины I2C, Интерфейс с приложениями

Попробуйте наш инструмент устранения неполадок





В настоящее время протоколы играют важную роль в дизайн встроенной системы . Не вдаваясь в протоколы, если вы захотите расширить периферийные возможности микроконтроллера, сложность и энергопотребление увеличатся. Доступны различные типы протоколов шины, такие как USART, SPI, CAN, Протокол шины I2C и т. д., которые используются для передачи данных между двумя системами.

Протокол I2C

Что такое шина I2C?




Для передачи и приема информации между двумя или более чем двумя устройствами требуется канал связи, называемый шинной системой. Шина I2C - это двунаправленная двухпроводная последовательная шина, которая используется для передачи данных между интегральными схемами. I2C расшифровывается как «Inter Integrated Circuit». Впервые он был представлен компанией Philips Semiconductors в 1982 году. Шина I2C имеет три скорости передачи данных, такие как стандартный, быстрый и высокоскоростной. Шина I2C поддерживает устройства с 7-битным и 10-битным адресным пространством, и ее работа отличается при низких напряжениях.

Протокол шины I2c

Протокол шины I2c



Сигнальные линии I2C

Сигнальные линии I2C

Сигнальные линии I2C

I2C - это протокол последовательной шины, состоящий из двух сигнальных линий, таких как линии SCL и SDL, которые используются для связи с устройствами. SCL означает «последовательную линию синхронизации», и этот сигнал всегда управляется «ведущим устройством». SDL означает «последовательную линию данных», и этот сигнал управляется либо ведущим устройством, либо периферийными устройствами I2C. И эти линии SCL, и SDL находятся в состоянии открытого стока, когда нет передачи между периферийными устройствами I2C.

Выходы с открытым стоком


Открытый сток - это концепция для полевого транзистора при этом вывод стока транзистора находится в открытом состоянии. Контакты SDL и SCL ведущего устройства спроектированы с транзисторами в открытом состоянии, поэтому передача данных возможна только тогда, когда эти транзисторы работают. Следовательно, эти линии или клеммы стока подключены к VCC с помощью подтягивающих резисторов для режима проводимости.

Интерфейсы I2C

Много ведомые устройства подключены к микроконтроллеру с помощью шины I2C через ИС сдвига уровня I2C для передачи информации между ними. Протокол I2C используется для подключения максимум 128 устройств, которые все подключены для связи с линиями SCL и SDL ведущего устройства, а также подчиненных устройств. Он поддерживает связь Multimaster, что означает, что два мастера используются для связи с внешними устройствами.

Скорость передачи данных I2C

Протокол I2C работает в трех режимах, таких как: быстрый режим, высокоскоростной режим и стандартный режим, в котором скорость передачи данных стандартного режима находится в диапазоне от 0 Гц до 100 Гц, а данные в быстром режиме могут передаваться со скоростью от 0 Гц до 400 кГц, а режим высокой скорости - со скоростью 10 Гц. КГц до 100 кГц. 9-битные данные отправляются для каждой передачи, при этом 8 бит передаются от MSB передатчика к LSB, а 9-й бит является битом подтверждения, отправленным приемником.

Скорость передачи данных I2C

Скорость передачи данных I2C

Связь I2C

Протокол шины I2C чаще всего используется при обмене данными между ведущим и ведомым устройством, при этом ведущее устройство называется «микроконтроллером», а ведомое устройство - другими устройствами, такими как АЦП, EEPROM, DAC и аналогичными устройствами во встроенной системе. Количество подчиненных устройств подключается к главному устройству с помощью шины I2C, при этом каждое подчиненное устройство имеет уникальный адрес для связи с ним. Следующие шаги используются для связи ведущего устройства с ведомым:

Шаг 1: Сначала главное устройство выдает условие запуска, чтобы проинформировать все подчиненные устройства, чтобы они прослушивали линию последовательных данных.

Шаг 2: Ведущее устройство отправляет адрес целевого ведомого устройства, который сравнивается с адресами всех ведомых устройств, подключенных к линиям SCL и SDL. Если какой-либо адрес совпадает, выбирается это устройство, а все остальные устройства отключаются от линий SCL и SDL.

Шаг 3: Подчиненное устройство с совпадающим адресом, полученным от ведущего, отвечает подтверждением ведущему, после чего устанавливается связь между ведущим и ведомыми устройствами по шине данных.

Шаг 4: И ведущий, и ведомый принимают и передают данные в зависимости от того, идет ли обмен данными на чтение или запись.

Шаг 5: Затем мастер может передать 8-битные данные получателю, который отвечает 1-битным подтверждением.

Учебник I2C

Последовательная передача и прием информации по тактовым импульсам называется протоколом I2C. Это межсистемный протокол на короткие расстояния, что означает, что он используется на печатной плате для связи между ведущими и ведомыми устройствами.

Основы протокола I2C

В общем, система шины I2C состоит из двух проводов, которые легко используются для расширения периферийных функций ввода и вывода, таких как ADC, EEROM и RTC, и другие основные компоненты сделать систему намного меньшей сложности.

Пример: Поскольку микроконтроллер 8051 не имеет встроенного АЦП - поэтому, если мы хотим связать какие-либо аналоговые датчики с микроконтроллером 8051 - мы должны использовать устройства АЦП, такие как ADC0804-1 канальный АЦП, ADC0808- 8-канальный АЦП и т. Д. Используя эти АЦП, мы можем подключить аналоговые датчики к микроконтроллеру.

Без использования протокола для расширения функций ввода-вывода любого микроконтроллера или процессора мы можем перейти к 8-контактному устройству 8255 ICit. В Микроконтроллер 8051 - это 40-контактный микроконтроллер Используя микросхему 8255, мы можем расширить 3 порта ввода / вывода до 8 контактов в каждом порту. Использование всех устройств, таких как RTC, ADC, EEPROM, таймеры и т. Д., Для расширения периферийной схемы, также увеличивает сложность, стоимость, энергопотребление и размер продукта.

Чтобы преодолеть эту проблему, используется концепция протокола для снижения сложности оборудования и снижения энергопотребления. Мы можем расширить больше функций, таких как периферийные устройства ввода / вывода, АЦП, T / C и устройства памяти, до 128 устройств, используя этот протокол I2C.
Терминология, используемая в протоколах I2C

Передатчик: Устройство, отправляющее данные на шину, называется передатчиком.

Приемник: Устройство, принимающее данные по шине, называется приемником.

Владелец: Устройство, которое инициирует передачи для генерации тактовых сигналов и завершения передачи, называется мастером.

Раб: Устройство, к которому обращается мастер, называется подчиненным.

Мультимастер: Несколько мастеров могут пытаться управлять шиной одновременно, не повреждая сообщение, это называется Multimaster.

Арбитраж: Процедура, гарантирующая, что, если более одного мастера одновременно пытаются управлять шиной, только одному разрешено это делать, чтобы выигравшее сообщение не было повреждено.

Синхронизация: Процедура синхронизации одиночных часов двух и более устройств называется синхронизацией.

Последовательность основных команд I2C

  1. Состояние стартового бита
  2. Состояние стопового бита
  3. Условие подтверждения
  4. Главный к подчиненному Операция записи
  5. Прочитать операцию Slave to Master

Состояние стартового и стопового бита

Когда главный (микроконтроллер) желает поговорить с подчиненным устройством (например, ADC), он начинает обмен данными, выдавая условие запуска на шине I2C, а затем выдает условие остановки. Логические уровни запуска и остановки I2C показаны на рисунке.

Условие запуска I2C определяется как переход с высокого уровня на низкий уровень линии SDA, в то время как линия SCL имеет высокий уровень. Состояние остановки AN 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
Для (a = 0a<255a++) //delay function//
Для (b = 0b}

Состояние остановки:

пустая функция ()
{
SDA = 0 // Остановить обработку данных //
SCL = 1 // часы высокие //
задерживать()
SDA = 1 // Остановлен //
задерживать()
SCL = 0 // тактовый сигнал низкий //
}
Пустая задержка (int p)
{
unsignedinta, b
Для (a = 0a<255a++) //delay function//
Для (b = 0b}

Состояние подтверждения (ACK) и отсутствия подтверждения (NCK)

За каждым байтом, передаваемым по шине I2C, следует условие подтверждения от приемника, что означает, что после того, как ведущий установит низкий уровень SCL для завершения передачи 8-битного сигнала, SDA будет переведен на низкий уровень приемником ведущему. Если после передачи приемник не тянет, НИЗКИЙ уровень линии SDA считается состоянием NCK.

Подтверждение (ACK)

Подтверждение (ACK)

Программирование

Подтверждение
пустая функция()
{
SDA = 0 // линия SDA идет на низкий //
SCL = 1 // часы идут от высокого к низкому //
задержка (100)
SCL = 0
}
Нет подтверждения:
пустая функция()
{
SDA = 1 // линия SDA переходит в высокий уровень //
SCL = 1 // часы идут от высокого к низкому //
задержка (100)
SCL = 0
}

Главный к подчиненному записывает операцию

Протокол I2C передает данные в виде пакетов или байтов. За каждым байтом следует бит подтверждения.

Формат передачи данных

Формат передачи данных

Формат передачи данных

Начинать: В первую очередь, последовательность передачи данных, инициированная мастером, генерирующим условие запуска.

7-битный адрес: После этого мастер отправляет подчиненный адрес в двух 8-битных форматах вместо одного 16-битного адреса.

R / W: Если бит чтения и записи высокий, выполняется операция записи.

УВЫ: Если операция записи выполняется в ведомом устройстве, то приемник отправляет 1-битный ACK на микроконтроллер.

Останавливаться: После завершения операции записи в подчиненном устройстве микроконтроллер отправляет условие остановки подчиненному устройству.

Программирование

Запись операции

voidwrite (символ без знака d)
{
Беззнаковый символ k, j = 0x80
Для (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-битный адрес: После этого мастер отправляет подчиненный адрес в двух 8-битных форматах вместо одного 16-битного адреса.

R / W: Если бит чтения и записи низкий, выполняется операция чтения.

УВЫ: Если операция записи выполняется в ведомом устройстве, то приемник отправляет 1-битный ACK на микроконтроллер.

Останавливаться: После завершения операции записи в подчиненном устройстве микроконтроллер отправляет условие остановки подчиненному устройству.

Программирование

Пустое чтение ()
{
Символ без знака j, z = 0x00, q = 0x80
SDA = 1
для (j = 0j<8j++)
{
SCL = 1
задержка (100)
flag = SDA
если (флаг == 1)
q)
д = д >> 1
задержка (100)
SCL = 0

Практический пример подключения АЦП к микроконтроллеру 8051

АЦП - это устройство, которое используется для преобразования аналоговых данных в цифровые и цифровых в аналоговые. Микроконтроллер 8051 не имеет встроенного АЦП, поэтому мы должны добавлять его извне через протокол I2C. PCF8591 основан на I2C аналог в цифровой и цифро-аналоговый преобразователь. Это устройство может поддерживать до 4 аналоговых входных каналов с напряжением от 2,5 до 6 В.

Аналоговые выходы

Аналоговые выходы имеют форму напряжения. Например, аналоговый датчик на 5 В дает выходную логику от 0,01 до 5 В.
Максимальное цифровое значение 5 В = 256.
Значение 2,5 В = 123 в соответствии с максимальным значением напряжения.

Формула аналогового выхода:

Формула цифровых выходов:

Подключение АЦП к микроконтроллеру 8051

Подключение АЦП к микроконтроллеру 8051

На рисунке выше показана передача данных по протоколу I2C от устройства АЦП к микроконтроллеру 8051. Контакты ADC SCL и SDA подключены к контактам 1.7 и 1.6 микроконтроллера для установления связи между ними. Когда датчик передает аналоговые значения на АЦП, он преобразуется в цифровые и передает данные на микроконтроллер по протоколу I2C.

Речь идет об учебнике по протоколу шины I2C с соответствующими программами. Мы надеемся, что данный контент дает вам практическую концепцию взаимодействия нескольких устройств с микроконтроллерами с использованием связи I2C. Если у вас есть какие-либо сомнения в процедуре сопряжения этого протокола, вы можете связаться с нами, оставив комментарий ниже.