Школа для Электрика. Все Секреты Мастерства. Образовательный сайт по электротехнике   Искать в Школе для электрика:
 
 

 

Справочник электрика / Электротехнические устройства

 

Шина I2C - назначение, устройство, передача данных, адресация




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

Шина I2C - назначение, устройство, передача данных, адресация

Сегодня одна только компания Филипс выпускает более сотни I2C-совместимых устройств для электронного оборудования самого разного назначения: памяти, систем видеопроцессоров, аналого-цифровых и цифро-аналоговых преобразователей, драйверов дисплеев и т. д.

Шина I2C

Шина I2C представляет собой модификацию последовательного протокола обмена данными, способную в обычном «быстром» режиме передавать последовательные 8-битные данные на скоростях от 100 до 400 кбит/с. Процесс обмена данными реализуется здесь всего по двум проводам (не считая общего провода): линия данных SDA и линия синхронизации SCL.

Шина становится двунаправленной благодаря тому, что каскады выходов подключенных к шине устройств имеют открытые коллекторы или стоки, воспроизводя таким образом монтажное «И». В результате шина сводит к минимуму количество связей между микросхемами, на плате остается меньше необходимых контактов и дорожек. Сама плата в итоге получается проще, компактнее и технологичнее в производстве.

Данный протокол позволяет исключить дешифраторы адреса и прочую внешнюю логику согласования. Число микросхем, могущих одновременно работать с шиной I2C, ограничено ее емкостью — максимум 400 пФ.

Протокол I2C

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

Каждое из соединенных с шиной устройств имеет свой уникальный адрес, определяется по нему, и, в соответствии с назначением устройства, может работать как приемник либо как передатчик. При передаче данных эти устройства способны быть ведущими (master) или ведомыми (slave). Ведущим выступает то из устройств, которое начинает передачу данных и генерирует синхронизирующие сигналы на линии SCL. Ведомым, по отношению к ведущему, считается при этом устройство-адресат.

Схема соединения устройств

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

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

Синхронизация пары устройств обеспечивается тем, что все устройства присоединены к шине формируя монтажное «И». В первоначальном состоянии сигналы SDA и SCL — высокого уровня.

СТАРТ и СТОП

Обмен начинается с генерации ведущим состояния «СТАРТ»: на линии SDA сигнал переходит из высокого — в низкое состояние, пока на линии SCL стабильный высокий уровень. Данную ситуацию все устройства, подключенные к шине, воспринимают как команду к началу обмена.

Старт и стоп - сигнал синхронизации

Каждый ведущий создает индивидуальный сигнал синхронизации на линии SCL, когда передает данные по шине.

Обмен заканчивается формирование ведущим состояния «СТОП»: на линии SDA сигнал изменяется от низкого — к высокому состоянию, пока на линии SCL стабильный высокий уровень.

Источником сигналов «СТАРТ» и «СТОП» всегда выступает ведущий. Как только сигнал «СТАРТ» зафиксирован, это значит что линия занята. Линия свободна когда зафиксирован сигнал «СТОП».

Передача данных

Как только состояние «СТАРТ» объявлено, ведущий переводит линию SCL в состояние низкого уровня, и посылает на линию SDA старший бит первого байта сообщения. Количество байт в одном сообщение не ограничено. Изменения на линии SDA разрешены только при низком уровне сигнала на SCL-линии. Данные действительны и не должны изменяться лишь при высоком состоянии синхроимпульса.

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

ПОДТВЕРЖДЕНИЕ

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

Синхроимпульс подтверждения

Подтверждение — неотъемлемая составляющая процесса передачи данных. Ведущий генерирует импульс синхронизации. Передатчик посылает на SDA низкое состояние пока действует подтверждающий синхроимпульс. Пока синхроимпульс пребывает в высоком состоянии, приемник обязан держать SDA в низком состоянии.

Если ведомый-приемник не подтверждает свой адрес, например по причине занятости в текущий момент, линия данных должна удерживаться в высоком состоянии. После этого ведущий может выдать сигнал «СТОП» чтобы прервать отправку.

Если прием осуществляет ведущий-приемник, то он обязан сообщить по завершении передачи ведомому-передатчику — не подтверждением последнего байта. Ведомый передатчик освобождает линию данных для того чтобы ведущий мог выдать сигнал «СТОП» либо повторный сигнал «СТАРТ».

Синхронизация устройств обеспечивается тем, что подключения к линии SCL выполняются по принципу монтажного «И».

Ведущий не имеет права на то, чтобы единолично управлять переходом линии SCL из низкого состояния в высокое. Если ведомому нужно еще время на обработку принятого бита, он может самостоятельно удерживать SCL в низком состоянии до того, пока не будет готов к приему следующего бита данных. Линия SCL в такой ситуации будет пребывать в низком состоянии пока длится самый длинный низкий уровень синхроимпульса.

Устройства с наименее продолжительным низким уровнем будут находиться в состоянии ожидания все то время, пока не завершится длинный период. Когда у всех устройств период низкого уровня синхросигнала закончится, SCL перейдет в состояние высокого уровня.

Все устройства начнут отмечать высокий уровень своих синхросигналов, и первое из устройств, закончивших свой период, первым установит линию SCL в низкое состояние. В итоге продолжительность низкого состояния SCL будет определяться наиболее продолжительным низким состоянием синхроимпульса одного из устройств, а продолжительность высокого — более коротким периодом синхронизации одного из устройств.

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

Если устройство способно на высокой скорости принимать байты, но для этого ему требуется определенное время на процесс сохранения принятого или на подготовку к приему очередного байта, оно может продолжать удерживать SCL в низком состоянии после приема и подтверждения байта, вынужденно удерживая передатчик в состоянии ожидания.

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

Шина I2C

АДРЕСАЦИЯ

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

Обычный режим предполагает семибитную адресацию. Адресация работает так: после команды «СТАРТ» ведущий посылает первый байт, в котором определяется то, какой именно ведомый требуется для взаимодействия ведущему. Существует и адрес общего вызова, определяющий все устройства шины, на него все устройства (теоретически) отвечают подтверждением, но практически такое встречается редко.

Итак, первые семь битов самого первого байта — это адрес ведомого. Младший бит, восьмой, показывает направление отправки данных. Если там «0», то информация будет записываться ведущим в этого ведомого. Если «1», информация будет считываться ведущим с данного ведомого.

По завершении пересылки ведущим байта с адресом, каждый ведомый сравнивает свой адрес с ним. У кого адрес совпадает — тот ведомый и определяет себя как ведомый-передатчик или ведомый-приемник, в зависимости от значения младшего бита байта с адресом.

Адрес ведомого может включать в себя фиксированную и программируемую части. Нередко большое количество однотипных устройств работают в одной системе, тогда программируемая часть адреса позволяет использовать максимум однотипных устройств на шине. То, сколько бит в адресном байте являются программируемыми, зависит от количества свободных выводов микросхемы.

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

Комбинация «11110ХХ» зарезервирована для адресации по 10 битам. Если представить обмен данными от команды «СТАРТ» до команды «СТОП», это будет выглядеть так:

Адресация

Здесь допустимы простые и комбинированные форматы обмена данными. Комбинированный формат подразумевает то, что между «СТАРТ» и «СТОП» ведущий и ведомый могут выступать как приемниками, так и передатчиками, это например полезно в управлении последовательной памятью.

Пусть первый байт данных передает адрес в памяти. Тогда при повторе команды «СТАРТ» и оглашении адреса ведомого, будут работать данные из памяти. Решения об авто-инкременте или декременте адреса, к которому был осуществлен предыдущий доступ, принимает разработчик устройства, предварительно изучив документацию на микросхему. Так или иначе, все устройства по получении команды «СТАРТ» должны сбрасывать логику и готовиться к тому, что сейчас будет назван адрес.