интерфейса i2c что это

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

I²C (Inter-Integrated Circuit Bus)

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.Авторство
Портнова А.С.
Согласовано: 15.04.2016
I²C

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.
TypeBus
Production history
DesignerPhilips Semiconductor, known today as NXP Semiconductors
Designed1982 ; 39 years ago ( 1982 )
Data
Data signalOpen-Drain
Width1 bit (SDA) + clock (SCL)
Bitrate0.1 / 0.4 / 1.0 / 3.4 / 5.0 Mbit/s
(depending on mode)
ProtocolSerial, Half Duplex

I²C (англ. Inter-Integrated Circuit Bus ) – последовательная шина данных для связи интегральных схем, использующая две двунаправленные линии связи (SDA и SCL). Используется для соединения низкоскоростных периферийных компонентов с материнской платой, встраиваемыми системами и мобильными телефонами. Двухпроводной последовательный интерфейс, разработанный корпорацией Philips.

Шина I2C широко используется в бытовой электронике, передаче данных и промышленной электронике. Простая двунаправленная 2-проводная шина для эффективного управления и взаимодействия различных блоков телевизоров, она стала применяться для связи между собой однокристальных микроконтроллеров, ЖКИ-индикаторов, портов ввода-вывода, микросхем памяти (особенно энергонезависимой), аналого-цифровых и цифро-аналоговых преобразователях, цепях цифровой настройки, DTMF кодеров и декодеров, часов реального времени и т.д

Содержание

История

Введение в спецификацию I²C

Обычно для многих приборов выдвигаются следующие критерии:

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

Концепция шины

Все операции по шине I²C осуществляются при помощи двух проводов:

Терминология шины I²C

I²C является многопрофильным master шины. Это означает, что еще одно устройство, способное контролировать шину можно подключить к нему. Так как в качестве master обычно являются микроконтроллеры, давайте рассмотрим случай передачи данных между двумя микроконтроллерами, подключенных к I²C.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Данные передаются по двум проводам — проводу данных и проводу тактов. Есть ведущий (master) и ведомый (slave), такты генерирует master, ведомый лишь «поддакивает» при приёме байта. Всего на одной двупроводной шине может быть до 127 устройств.

Общие характеристики

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Принцип работы

I²C использует две двунаправленные линии, подтянутые к напряжению питания и управляемые через открытый коллектор или открытый сток — последовательная линия данных (SDA, англ. Serial DAta) и последовательная линия тактирования (SCL, англ. Serial CLock). Стандартные напряжения +5 В или +3,3 В, однако допускаются и другие.

Классическая адресация включает 7-битное адресное пространство с 16 зарезервированными адресами. Это означает, что разработчикам доступно до 112 свободных адресов для подключения периферии на одну шину.

Основной режим работы — 100 кбит/с; 10 кбит/с в режиме работы с пониженной скоростью. Также немаловажно, что стандарт допускает приостановку тактирования для работы с медленными устройствами.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Все передачи производятся 8-разрядными байтами. Число байтов, которые могут быть переданы за одну передачу не ограничено. Каждый байт должен сопровождаться битом подтверждения (ACK). Данные передаются начиная со старшего бита (MSB). (Рис.6) Если приемник не может получать другой полный байт данных, он не выдает сигнал ACK, который используется передатчиком для синхронизации или сигнализации о неисправности приемника (или его отсутствии).

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Для подтверждения передачи байта передатчик устанавливает линию SDA в “1” в течение синхронизирующего импульса. (Рис.7) Приемник при этом должен выставить “0” на SDA. Естественно при этом должны бить выдержаны определенные временные соотношения. Обычно, приемник, который был адресован, должен генерировать сигнал ACK после того, как каждый байт был получен, за исключением того, когда сообщение начинается с адресом CBUS. Когда подчиненный приемник не подтверждает подчиненный адрес (например, устройство не готово, потому что это выполняет некоторую внутреннюю функцию), линия SDA данных должна быть оставлена в “1”. Мастер затем может выдать состояние STOP, чтобы прервать передачу. Если подчиненный приемник подтверждает подчиненный адрес, но, некоторое время позднее не может получать больше байты данных, мастер должен приостановить передачу. При приеме последнего байта в серии, вместо сигнала ACK мастер может выставить состояние STOP, при этом подчиненный передатчик должен освободить линию данных.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Каждое мастер-устройство генерирует собственные сигналы синхронизации на линии SCL. Данные на линии SDA действительны только течение ВЫСОКОГО уровня SCL. Синхронизация осуществляется благодаря “монтажному-И” на линии SCL. Это означает, что состояние “0” на линии SCL будет длиться до тех пор, пока все мастер-устройства не освободят линию синхронизации. Линия SCL будет, следовательно, задержана в уровне “0” элементом с самым длинным уровнем “0”. Элементы с более коротким уровнем “0” при этом входят в состояние ожидания.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Данные шлются пакетами, каждый пакет состоит из девяти бит. 8 данных и 1 бит подтверждения/не подтверждения приема. Первый пакет шлется от ведущего к ведомому это физический адрес устройства и бит направления. интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Сам адрес состоит из семи бит (вот почему до 127 устройств на шине), а восьмой бит означает что будет делать Slave на следующем байте — принимать или передавать данные. Девятым битом идет бит подтверждения ACK. Если Slave услышал свой адрес и считал полностью, то на девятом такте он придавит линию SDA в 0, сгенерировав ACK — то есть Понял! Мастер, заметя это, понимает, что все идет по плану и можно продолжать. Если Slave не обнаружился, прозевал адрес, неправильно принял байт, сгорел или еще что с ним случилось, то, соответственно, SDA на девятом такте будет прижать некому и ACK не получится. Будет NACK.

После адресного пакета идут пакеты с данными в ту или другую сторону, в зависимости от бита RW в заголовочном пакете. Вот, например, Запись. В квадратиках идут номера битов. W=0

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Чтение практически также, но есть одна тонкость. При приеме последнего байта надо дать ведомому понять, что в его услугах больше не нуждаемся и отослать NACK на последнем байте. Если отослать ACK то после стопа Master не отпустит линию — такой уж там конечный автомат. Так что прием двух байтов будет выглядеть так (R=1):

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Есть еще одно состояние, как повторный старт. Это когда мы не объявляя STOP вкатываем на шину еще один START. После него мы можем обратиться к другому устройству не освобождая шину. Но чаще идет обращение к тому же самому устройству и это связано с особенностями организации памяти.

Применение

I²C находит применение в устройствах, предусматривающих простоту разработки и низкую себестоимость изготовления при относительно неплохой скорости работы.

Список возможных применений:

Пример системы с шиной I²C На рисунке: (a) Высокоинтегрированный телевизор

(b) базовая станция радиотелефона стандарта DECT

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Преимущества

Недостатки

Преимущества для конструкторов

Разработка

Каждая электронная система включает в себя 3 различных типа узлов:

В настоящее время ассортимент продукции Philips включает более 150 КМОП и биполярных I²C-совместимых устройств, функционально предназначенных для работы во всех трёх вышеперечисленных категориях электронного оборудования. Все I²C-совместимые устройства имеют встроенный интерфейс, который позволяет им связываться друг с другом по шине I²C. Это конструкторское решение разрешает множество проблем сопряжения различных устройств, которые обычно возникают при разработке цифровых систем.

На дешевых устройствах часто I²C эмулируется программно с использованием технологии Bit-banging.

Поддержка операционными системами

Производные технологии

I²C является основой ACCESS.bus, дисплейного интерфейсного канала данных (DDC) VESA, шины управления системными функциями SMBus. В этих технологиях возможно использование различных напряжений, частоты обмена и наличия отдельных линий прерываний.

Шина IPMB, основанная на использовании двух I²C с целью резервирования и являющаяся основой интерфейса IPMI, применяется в высоконадёжных системах стандартов AdvancedTCA и MicroTCA.

TWI (Two Wire Interface) или TWSI (Two Wire Serial Interface), по сути, та же самая шина I²C, но использует другое название по лицензионным причинам (патенты на I²C уже отменены, 1 октября 2006 года отменены лицензионные отчисления за использование протокола I²C. Однако отчисления сохраняются для выделения эксклюзивного подчинённого адреса на шине I²C.)

Источник

Электроника для всех

Блог о электронике

Интерфейсная шина IIC (I2C)

Логический уровень
Как передаются отдельные биты понятно, теперь о том что эти биты значат. В отличии от SPI тут умная адресная структура. Данные шлются пакетами, каждый пакет состоит из девяти бит. 8 данных и 1 бит подтверждения/не подтверждения приема.

После адресного пакета идут пакеты с данными в ту или другую сторону, в зависимости от бита RW в заголовочном пакете.
Вот, например, Запись. В квадратиках идут номера битов. W=0

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Задача решается так:

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.
Вот и славно. Часы установлены и начали тикать. Но вот надо нам считать те же данные, а вдруг изменились?
С записью все понятно — записали вначале адрес, а потом следом записали данные. А умная микросхема все прекрасно поняла и рассовала по ячейкам. А с чтением? А с чтением все через задницу, в смысле через запись.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Скриншот с осциллографа RIGOL 1042CD

Вроде бы все, практический пример с AVR будет потом, а пока помедитируйте над диаграммой работы конечного автомата TWI передатчика ATmega8. Скоро я вас буду этим грузить!

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Страшна? 😉 На самом деле там все не так брутально. Можно обойтись вообще парой десятков строк кода на ассемблере.

Спасибо. Вы потрясающие! Всего за месяц мы собрали нужную сумму в 500000 на хоккейную коробку для детского дома Аистенок. Из которых 125000+ было от вас, читателей EasyElectronics. Были даже переводы на 25000+ и просто поток платежей на 251 рубль. Это невероятно круто. Сейчас идет заключение договора и подготовка к строительству!

А я встрял на три года, как минимум, ежемесячной пахоты над статьями :)))))))))))) Спасибо вам за такой мощный пинок.

200 thoughts on “Интерфейсная шина IIC (I2C)”

(1) OpenID работает криво. Я зашёл как blacklion.livejournal.com и всё равно справа-сверху «войти» (а не «выйти») и не даю комментировать. Пришлось регистрироваться и теперь тут два меня.

(2) Софтового мастера сделать не сложно. А вот слейва как-то просто не получается.

Щас попробую с опен ид поиграться.

Более того, многие предпочитают делать софтовый И2С мастер чтобы не заморачиваться с встроенным в TWI конечным автоматом.

Более того, многие предпочитают делать софтовый И2С мастер чтобы не заморачиваться с встроенным в TWI конечным автоматом.
Я когда первый раз подходил к электронике смотрел на PIC (зачем я это делал!? Зачем на PIC?!) так реализовал мастера в качестве упражнения за вечер. А вот слейва так и не осилил…

Я сделал софтового слейва на AT89C2051, но работало жутко медленно.

плюсадин. я уже раз 5 жаловался что логины глючат 😀 нашел выход, что залогинился, пару минуток подождал и рефреш. работает, но бесит :\

DI HALT спасибо за статью. Давно ждал рассказ про I2C. 🙂

У меня их почти полный аналог ICL12008 ваще работать не хотят — не отзываются на свой адрес, не дают ACK

и у тебя, Брут? я изъебался с их инициализацией — не пашут и все. взял ds, который считал сгоревшим и не рабочим, по по недоразумению не выкинул — и он заработал. в топку эти ISL, от лукавого они..

А у меня 5 штук их лежит — сэмплы. Надо бы в ST гневный мессадж накатать. МОл чо вы за говно нам подсунули?

Да, есть такое дело 🙂 Вообще при начале работы с IIC девайсом, желательно вдоль и поперек изучить Datasheet к нему. В свое время тоже поломал голову с m41 от ST. Вроде все пишется, все читается, но часы стоят и все тут. Оказалось там есть хитрый битик, который при пропадании всего питания — Vcc и Vbat, останавливает часы и пока его не сбросишь они не пойдут.
Ну и еще обычный прикол с часами, что не все могут работать при отключенной батарейке — даже если Vcc есть, внутри у них стоит контроль, который проверяет разницу между напругой и Vbat, и если Vbat нет, то часы просто ни на что не отвечают 🙂

p.s. а про NACK в конце чтения это да, самые популярные грабли наверно. Кстати для отлаживания шины если нет крутого осцила, можно прикрутить I2C Sniffer на Atmega8 — оч удобная штука, она в консоли показывает полностью весь обмен в удобоваримом виде.

А чё с ним было голову ломать? Кстати, m41t56 рекомендую, простые и удобные I2C часы. Про битик я давно знал — он у всех часовых изделий от ST присутствует. Наверное, как совместимость с m48t08 — который с батареей на борту. Чтобы батарею не сажать, пока таймкипер лежит на складе, они глушат часы.

О)) На самом деле классная тема! Мне бы сначала с простым UARTом разобраться, а потом только к творению Philips)) Буду ждать исходников…

Отличная статья! А есть последняя диаграмма только в чуть лучшем качестве? А то буквы трудно различить.

Красные пути — нормальная работа
Синие — возможные косяки.

Источник

Шина I2C. Основные понятия

В данной статье рассматриваются основные характеристики и преимущества протокола последовательной связи I2C (Inter-Integrated Circuit).

Связь через алфавитную кашу

Неудивительно, что общей особенностью электронных систем является необходимость обмена информацией между двумя или тремя или десятью отдельными компонентами. Инженеры разработали ряд стандартных протоколов, которые помогают различным микросхемам успешно общаться, что становится очевидным, когда вы сталкиваетесь с потоком сокращений в разделе «Связь» в списке характеристик микроконтроллера или сигнального процессора: UART, USART, SPI, I2C, CAN. Каждый протокол имеет свои плюсы и минусы, и важно немного знать о каждом из них, чтобы вы могли принимать обоснованные решения при выборе компонентов или интерфейсов.

Эта статья посвящена шине I2C, которая обычно используется для связи между отдельными интегральными микросхемами, расположенными на одной печатной плате. Два других распространенных протокола, которые также входят в эту основную категорию – это UART (универсальный асинхронный приемник/передатчик) и SPI (последовательный периферийный интерфейс). Вам необходимо знать основные характеристики I2C, прежде чем вы сможете полностью понять сравнение этих трех интерфейсов, поэтому обсудим эту тему в конце статьи.

Много названий, а шина одна

Дополнительная путаница вносится, когда вы замечаете, что SMB или SMBus явно используется в качестве еще одного способа обращения к шине I2C. Фактически эти сокращения относятся к шине управления системой SMB (System Management Bus), которая отличается, хотя и почти идентична, от шины I2C. Оригинальный протокол I2C был разработан компанией Phillips Semiconductor, а спустя годы Intel определил протокол SMBus как расширение I2C. Эти две шины в значительной степени взаимозаменяемы; если вас интересуют незначительные отличия между ними, то смотрите страницу 57 спецификации шины управления системой SMB.

Выглядит, как попытка обсудить что-то важное в комнате, полной людей.

Чтобы оценить ловкие технические приемы, которые делают I2C настолько эффективной, вам нужно подумать о трудностях достижения надежной, но универсальной связи между несколькими независимыми компонентами. Ситуация достаточно проста, если у вас есть одна микросхема, которая всегда является ведущей (master), и одна микросхема, которая всегда является ведомой (slave). Но что, если у вас есть несколько ведомых? Что если ведомые не знают, кто ведущий? Что, если у вас есть несколько ведущих? Что произойдет, если ведущий запросит данные у ведомого устройства, которое по какой-то причине перестало функционировать? Или что, если ведомый перестал функционировать в середине передачи? Что делать, если ведущий утверждает, что шина осуществляет передачу, а затем он выйдет из строя, прежде чем освободить шину?

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это. Возможные проблемы на шине

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

Обзор

Прежде чем вдаваться в детали, давайте рассмотрим ключевые характеристики I2C:

I2C против UART и SPI

Преимущества I2C можно резюмировать следующим образом:

А вот некоторые недостатки:

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

Возможно, вам придется сознательно избегать I2C, если пропускная способность является приоритетом; SPI поддерживает более высокие частоты тактового сигнала и минимизирует накладные расходы. Кроме того, разработка низкоуровнего аппаратного обеспечения для SPI (или UART) намного проще, поэтому, если вы работаете с FPGA и разрабатываете свой последовательный интерфейс с нуля, I2C, вероятно, стоит выбирать последним.

Заключение

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

Источник

Общие сведения:

Подключение:

Шина поддерживает подключение до 112 устройств (при 7-ми битной адресации) по двум проводам (плюс GND и Vcc), может иметь несколько ведущих и ведомых. При использовании нескольких ведущих, каждый из них должен поддерживать этот режим и уметь определять состояние занятой шины.

I²C на Arduino

Arduino UNO R3/Piranha UNO

На Arduino UNO R3/Piranha UNO шина I2C находится на выводах A4, A5. Также в эти выводы продублированы на колодке с цифровыми выводами рядом с кнопкой Reset.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Piranha ULTRA

На Piranha ULTRA шина I²C не занимает аналоговые выводы A4, A5 и находится на цифровой колодке рядом с кнопкой Reset, выводы обозначены SDA и SCL

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Arduino MEGA R3

На Arduino MEGA R3 шина I²C находится на цифровой колодке на крайних выводах, близких к разъёму USB и на выводах 20, 21. Выводы объединены.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Примеры для Arduino

В этом примере на матрицу выводится изображение стрелки. Стоит заметить, ко всем нашим модулям написаны библиотеки с высокоуровневым интерфейсом и вовсе не обязательно работать с матрицей на низком уровне. Подробнее о работе с библиотекой матрицы можно узнать по этой ссылке.

I²C на Raspberry Pi

На Raspberry Pi I²C выводы это 3-й и 5-й выводы колодки, GPIO2 и GPIO3 по номенклатуре BCM и выводы 8, 9 по номенклатуре WiringPi.

интерфейса i2c что это. интерфейса i2c что это фото. картинка интерфейса i2c что это. смотреть фото интерфейса i2c что это. смотреть картинку интерфейса i2c что это.

Примеры для Raspberry

Подробнее о шине I²C:

Резисторы, ёмкость и длина линий шины

В официальном описании от NXP ничего не сказано о максимальной длине шины, но не стоит этим злоупотреблять. Шина была придумана для обмена информации между интегральными схемами в пределах одной платы одного устройства. В расчёт бралась только паразитная ёмкость линии, которая сказывается на скорости нарастания фронта волны. От этой ёмкости зависит номинал подтягивающих резисторов. Можно подобрать резисторы так, чтобы фронт волны нарастал согласно спецификации и при 100-метровой длине проводов, но это не избавляет от помех, которые влечёт за собой несимметричная электрическая реализация. Опять же, при слишком маленьком сопротивлении качество сигнала улучшается, но при этом растёт ток который необходимо пропускать устройствам через выводы для притяжки линий.

При использовании шины на модулях не существует принятого стандарта установки подтягивающих резисторов на ведущем или ведомом. У Arduino подтягивающие резисторы отсутствуют и для работы с шиной нужен хотя бы один модуль с ними. У Raspberry Pi на плате установлены подтягивающие резисторы номиналом 1,7 килоОм и для неё нет необходимости в подтяжке на модулях.

Сигналы и специальные биты шины

Устанавливаемые только ведущим

Устанавливаемые ведущим и ведомым

Обмен данными

При обмене данными тактированием занимается только ведущий, а ведомый может удерживать линию тактирования только если не успевает за ведущим, так называемое растягивание тактирования (clock-stretching). Не все модули поддерживают удержание. Установка бита на линии данных может происходит в момент, когда линия тактирования прижата, а считывания, когда линия отпущена (подтянута к Vcc), но в большинстве случаев это происходит по фронту волны на линии тактирования.

Рассмотрим пример простого обмена данными:

Запись в регистры ведомого. Данные взяты из примеров, приведённых выше.

После сигнала Start и указания адреса ведущий записывает адрес регистра с которого будет производиться дальнейшая запись. Стоит заметить, что у ведомого есть внутренний счётчик и каждый последующий байт после подтверждения будет записан в следующий регистр. Таким образом байт со значением 0x00 будет записан в регистр 0x11, байт со значением 0x18 будет записан в регистр 0x12, байт со значением 0x3C будет записан в регистр 0x13 и т. д. В этом примере биты ACK устанавливает ведомый.

Вот так сигналы этого примера выглядят на осциллографе:

Чтение из регистров ведомого. Предположим, мы хотим прочитать байт из регистра 0x13.

После сигнала Start и указания адреса ведущий записывает адрес регистра, который необходимо прочитать. Далее следует сигнал Restart (или Stop, затем Start). Ведущий снова выводит адрес ведомого, но уже с битом Read (чтения). Ведомый устанавливает бит ACK и во время следующих 8-ти импульсов тактирования выводит данные на линию SDA. На девятом импульсе уже ведущий устанавливает бит ACK (или NACK, если данные не удалось прочитать) и завершает обмен сигналом Stop.

Скорость

Первоначальный стандарт I²C был реализован на скорости 100 кГц. С тех пор появились и другие реализации шины, но большинство устройств работают на этой скорости. Так же известны случаи когда скорость шины специально снижена, чтобы увеличить расстояние передачи и уменьшить чувствительность к помехам. Не все модули могут работать на сниженной скорости.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *