sda что это в электронике

I2C интерфейс

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике
Интерфейс I2C является широко распространенным и популярным стандартом передачи данных между устройствами. Данный интерфейс поддерживают множество различных датчиков и микросхем, наиболее известные это микросхемы EEPROM памяти серии 24cXX. Для передачи данных используются всего две линии, которые представляют собой шину данных, причем на одну шину можно подключать несколько различных устройств. В этой статье я приведу описание интерфейса и реализацию на программном уровне.

Описание интерфейса I2C

Способ подключения

Адресация

В интерфейсе предусмотрена программная адресация устройств подключенных к шине, наиболее распространена длина адреса в 7 бит, теоретически это позволяет подключать на шину до 127 устройств, но часть адресов по спецификации зарезервированы и не могут использоваться разработчиками. Каждое устройство имеет свой уникальный адрес, который заложен производителем и указан в технической документации. Адрес устройства может быть фиксированным, или с возможностью аппаратной настройки, в этом случае устройство имеет дополнительные входы, в зависимости от уровня напряжения на входах (высокое или низкое), можно получить различные адреса. Обычно количество входов варьируется от 1-го до 3-х, которые задают значения определенных битов 7-битного адреса. Аппаратная настройка адреса предусмотрена для возможности подключения нескольких однотипных устройств на одну шину.

Также интерфейс предусматривает более редкую 10-битную адресацию, под которую зарезервирован 7-битный адрес 11110XX (XX-зависят от значения адреса), в этом случае сначала предается зарезервированный адрес, в котором два последних бита представляют собой старшие биты 10-битного адреса, затем передаются младшие 8 бит адреса. При использовании данной адресации на шину можно подключать более 1000 устройств.

Условия “Старт” и “Стоп”

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

Аналогично, сеанс передачи данных завершается специальным условием “Стоп”, это переключение линии SDA с низкого логического уровня на высокий, при высоком уровне на линии SCL. Данные условия генерирует ведущий (микроконтроллер).

Исходя из условий “Старт” и “Стоп”, во время передачи данных линия SDA может переключаться только при низком уровне на линии SCL, то есть установка новых данных на линии SDA возможна только после спада уровня на SCL. В течение импульса тактирования (высокий уровень на SCL), состояние линии SDA не должно меняться, в это время выполняется считывание данных на SDA.

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

Данные по интерфейсу передаются побайтно, старшим битом вперед, за каждым переданным байтом (8 бит) следует бит подтверждения, устройство (ведущий или ведомый) принявшее байт данных, устанавливает низкий уровень на линии SDA на следующем тактовом импульсе SCL, тем самым подтверждая получение байта. В это время передающее устройство должно опрашивать линию SDA, ожидая ответ об успешном получении байта. Ниже на картинке представлена диаграмма передачи данных по шине I2C:
sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике
Сначала передается байт с 7-битным адресом ведомого, значение 8-го бита (R/W) определяет направление передачи данных, нулевое значение соответствует записи данных, то есть передача от ведущего к ведомому. Если бит направления равен 1, то выполняется чтение данных из ведомого.

Ведомый сравнивает переданный адрес со своим и при совпадении откликается, устанавливая низкий уровень на линии SDA (бит подтверждения). Ведущий, получив подтверждение, начинает передавать байты с данными, или принимает их, в зависимости от направления передачи. На следующей картинке более подробно представлены различные варианты передачи данных по шине I2C:
sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике
После передачи адреса ведомого, передается адрес регистра, над которым будут производиться операции чтения/записи. Каждое устройство обладает своим набором внутренних регистров, назначение которых указано в технической документации.

Запись одного байта состоит из следующей последовательности: условие “Старт” – адрес ведомого (бит R/W сброшен) – адрес внутреннего регистра ведомого – данные (1 байт) – условие “Стоп”. Запись нескольких байтов практически ничем не отличается, после отправки первого байта данных, передаются остальные байты, сеанс заканчивается условием “Стоп”. При этом данные записываются в регистры последовательно, начиная с заданного адреса, обычно ведомый выполняет автоматический инкремент адреса внутренних регистров.

Для чтения одного байта данных, необходимо сначала передать адрес ведомого и адрес требуемого регистра, при этом бит направления должен быть сброшен на запись, после чего повторно передается условие “Старт”, затем снова адрес ведомого, в этот раз с установленным битом направления на чтение. Далее выполняется прием байта данных от ведомого, для окончания сеанса передачи ведущий не выдает подтверждения, то есть на линии SDA остается высокий уровень на время бита подтверждения, далее следует условие “Стоп”. Чтение нескольких байтов выглядит аналогично, ведущий выдает подтверждение после каждого принятого байта, за исключением последнего байта. Как и в случае записи, ведомый выполняет автоматический инкремент адреса, начиная с заданного.

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

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

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

По спецификации интерфейс поддерживает три скоростных режима передачи:

Стандартный режим до 100 Кбит/сек поддерживают все устройства, возможность функционирования на больших скоростях необходимо уточнять в технической документации на устройство.

Программная реализация интерфейса I2C

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

Источник

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

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

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

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

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

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

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

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

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

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

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

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

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

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

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

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

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике

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

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

Если Вам понравилась эта статья, поделитесь ссылкой на неё в социальных сетях. Это сильно поможет развитию нашего сайта!

Источник

Интерфейс I2C и Arduino

Инструкция по использованию протокола I 2 C совместно с Arduino

Нам понадобится:

1 Описание интерфейса I2C

Последовательный протокол обмена данными IIC (также называемый I2C – Inter-Integrated Circuits, межмикросхемное соединение) использует для передачи данных две двунаправленные линии связи, которые называются шина последовательных данных SDA (Serial Data) и шина тактирования SCL (Serial Clock). Также имеются две линии для питания. Шины SDA и SCL подтягиваются к шине питания через резисторы.

В сети есть хотя бы одно ведущее устройство (Master), которое инициализирует передачу данных и генерирует сигналы синхронизации. В сети также есть ведомые устройства (Slave), которые передают данные по запросу ведущего. У каждого ведомого устройства есть уникальный адрес, по которому ведущий и обращается к нему. Адрес устройства указывается в паспорте (datasheet). К одной шине I2C может быть подключено до 127 устройств, в том числе несколько ведущих. К шине можно подключать устройства в процессе работы, т.е. она поддерживает «горячее подключение».

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике Описание интерфейса I2C

Давайте рассмотрим временную диаграмму обмена по протоколу I2C. Есть несколько различающихся вариантов, рассмотрим один из распространённых. Воспользуемся логическим анализатором, подключённым к шинам SCL и SDA.

Мастер инициирует обмен. Для этого он начинает генерировать тактовые импульсы и посылает их по линии SCL пачкой из 9-ти штук. Одновременно на линии данных SDA он выставляет адрес устройства, с которым необходимо установить связь, которые тактируются первыми 7-ми тактовыми импульсами (отсюда ограничение на диапазон адресов: 2 7 = 128 минус нулевой адрес). Следующий бит посылки – это код операции (чтение или запись) и ещё один бит – бит подтверждения (ACK), что ведомое устройство приняло запрос. Если бит подтверждения не пришёл, на этом обмен заканчивается. Или мастер продолжает посылать повторные запросы.

Это проиллюстрировано на рисунке ниже. Задача такая: подключиться к ведомому устройству с адресом 0x27 и передать ему строку «SOLTAU.RU». В первом случае, для примера, отключим ведомое устройство от шины. Видно, что мастер пытается установить связь с устройством с адресом 0x27, но не получает подтверждения (NAK). Обмен заканчивается.

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике Попытка мастера установить соединение с ведомым по I2C

Теперь подключим к шине I2C ведомое устройство и повторим операцию. Ситуация изменилась. На первый пакет с адресом пришло подтверждение (ACK) от ведомого. Обмен продолжился. Информация передаётся также 9-битовыми посылками, но теперь 8 битов занимают данные и 1 бит – бит подтверждения получения ведомым каждого байта данных. Если в какой-то момент связь оборвётся и бит подтверждения не придёт, мастер прекратит передачу.

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике Временная диаграмма обмена по протоколу I2C

2 Реализация I2Cв Arduino

Arduino использует для работы по интерфейсу I2C два порта. Например, в Arduino UNO и Arduino Nano аналоговый порт A4 соответствует SDA, аналоговый порт A5 соответствует SCL.

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике Реализация I2C в Arduino UNO и Nano

Для других моделей плат соответствие выводов такое:

ПлатаПин SDAПин SCL
Arduino Uno, Nano, Pro и Pro MiniA4A5
Arduino Mega2021
Arduino Leonardo23
Arduino Due20, SDA121, SCL1

3 Библиотека «Wire» для работы с IIC

Для облегчения обмена данными с устройствами по шине I2C для Arduino написана стандартная библиотека Wire. Она имеет следующие функции:

ФункцияНазначение
begin(address)инициализация библиотеки и подключение к шине I2C; если не указан адрес, то присоединённое устройство считается ведущим; используется 7-битная адресация;
requestFrom()используется ведущим устройством для запроса определённого количества байтов от ведомого;
beginTransmission(address)начало передачи данных к ведомому устройству по определённому адресу;
endTransmission()прекращение передачи данных ведомому;
write()запись данных от ведомого в ответ на запрос;
available()возвращает количество байт информации, доступных для приёма от ведомого;
read()чтение байта, переданного от ведомого ведущему или от ведущего ведомому;
onReceive()указывает на функцию, которая должна быть вызвана, когда ведомое устройство получит передачу от ведущего;
onRequest()указывает на функцию, которая должна быть вызвана, когда ведущее устройство получит передачу от ведомого.

4 Подключение I2C устройствак Arduino

Давайте посмотрим, как работать с шиной I2C с помощью Arduino.

Сначала соберём схему, как на рисунке. Будем управлять яркостью светодиода, используя цифровой 64-позиционный потенциометр AD5171 (см. техническое описание), который подключается к шине I2C. Адрес, по которому мы будем обращаться к потенциометру – 0x2c (44 в десятичной системе).

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике Подключение цифрового потенциометра к Arduino по шине I2C

5 Управление устройством по шине IIC

Рассмотрим диаграммы информационного обмена с цифровым потенциометром AD5171, представленные в техническом описании:

sda что это в электронике. Смотреть фото sda что это в электронике. Смотреть картинку sda что это в электронике. Картинка про sda что это в электронике. Фото sda что это в электронике Рассмотрим диаграммы чтения и записи цифрового потенциометра AD5171

Нас тут интересует диаграмма записи данных в регистр RDAC. Этот регистр используется для управления сопротивлением потенциометра.

Откроем из примеров библиотеки «Wire» скетч: Файл Образцы Wire digital_potentiometer. Загрузим его в память Arduino.

После включения вы видите, как яркость светодиода циклически нарастает, а потом гаснет. При этом мы управляем потенциометром с помощью Arduino по шине I2C.

По ссылкам внизу статьи, в разделе похожих материалов (по тегу), можно найти дополнительные примеры взаимодействия с различными устройствами по интерфейсу IIC, в том числе примеры чтения и записи.

6 Дополнительно о шине I2C

Доступно и интересно рассказывает о шине I2C Джереми Блюм в своём видео:

Источник

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

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