В настоящее время протоколы играют важную роль в дизайн встроенной системы . Не вдаваясь в протоколы, если вы захотите расширить периферийные возможности микроконтроллера, сложность и энергопотребление увеличатся. Доступны различные типы протоколов шины, такие как USART, SPI, CAN, Протокол шины I2C и т. д., которые используются для передачи данных между двумя системами.
Протокол I2C
Что такое шина I2C?
Для передачи и приема информации между двумя или более чем двумя устройствами требуется канал связи, называемый шинной системой. Шина I2C - это двунаправленная двухпроводная последовательная шина, которая используется для передачи данных между интегральными схемами. I2C расшифровывается как «Inter Integrated Circuit». Впервые он был представлен компанией Philips Semiconductors в 1982 году. Шина I2C имеет три скорости передачи данных, такие как стандартный, быстрый и высокоскоростной. Шина I2C поддерживает устройства с 7-битным и 10-битным адресным пространством, и ее работа отличается при низких напряжениях.
Протокол шины 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 чаще всего используется при обмене данными между ведущим и ведомым устройством, при этом ведущее устройство называется «микроконтроллером», а ведомое устройство - другими устройствами, такими как АЦП, 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
- Состояние стартового бита
- Состояние стопового бита
- Условие подтверждения
- Главный к подчиненному Операция записи
- Прочитать операцию 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)
Программирование
Подтверждение
пустая функция()
{
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
На рисунке выше показана передача данных по протоколу I2C от устройства АЦП к микроконтроллеру 8051. Контакты ADC SCL и SDA подключены к контактам 1.7 и 1.6 микроконтроллера для установления связи между ними. Когда датчик передает аналоговые значения на АЦП, он преобразуется в цифровые и передает данные на микроконтроллер по протоколу I2C.
Речь идет об учебнике по протоколу шины I2C с соответствующими программами. Мы надеемся, что данный контент дает вам практическую концепцию взаимодействия нескольких устройств с микроконтроллерами с использованием связи I2C. Если у вас есть какие-либо сомнения в процедуре сопряжения этого протокола, вы можете связаться с нами, оставив комментарий ниже.