- Радиолюбительские измерения: анализ сигналов шины I2C
- Цифровой двухканальный осциллограф с памятью
- Логический анализатор цифровых сигналов
- Цифровой осциллограф vs логический анализатор
- И такое программное обеспечение существует
- Краткие выводы:
- Шина I2C. Подробности аппаратной реализации
- Дополнительная информация
- Иногда небольшое усложнение – это хорошо
- Открытый сток
- Если у вас есть R, то у вас есть RC
- Как выбрать номинал подтягивающих резисторов
- Заключение
- 🌟 Видео
Видео:Шина данных i2c - декодируем/синхронизируем с помощью осциллографа Lecroy!Скачать
Радиолюбительские измерения: анализ сигналов шины I2C
Как я уже неоднократно упоминал в своих публикациях, любительские проекты финансируются из семейного бюджета, и радиолюбитель, обычно, не может себе позволить покупку дорогостоящего измерительного оборудования. Приходится довольствоваться тем, что есть. Или тем, что удаётся взять попользоваться «на время». А иногда от безысходности радиолюбителю приходится «сверлить пилой и пилить буравчиком».
Недавно я испытал потребность выяснить, что на самом деле передаётся в разрабатываемом мной устройстве по шине I2C. Это был тот счастливый момент, когда можно было себе позволить «пилить пилой».
Как происходит обмен данными между устройствами по протоколу I2C можно узнать здесь. Для анализа сигналов на шине I2C можно применить, как цифровой двухканальный осциллограф с памятью, так и логический анализатор.
Видео:Логический анализатор шины i2cСкачать
Цифровой двухканальный осциллограф с памятью
При работе с радиоэлектронной аппаратурой осциллограф является наиболее универсальным инструментом. Современные цифровые осциллографы обладают рядом полезных свойств, позволяющих производить, в том числе, и анализ сигналов шины I2C.
В данном случае мне достался «на время» цифровой двухканальный осциллограф с памятью Rigol DS1102 (цена на сайте производителя $461). У этого прибора есть два канала измерения с полосой пропускания до 100 MHz и частотой выборки сигнала 1 GSa/s.
К сигналу SCL был подключен CH1. К сигналу SDA был подключен CH2. Для обоих каналов был установлен масштаб 1.00 V/дел. Масштаб развёртки – 10 us/дел. Для наглядности луч первого канала смещён в верхнюю половину экрана, а луч второго канала – в нижнюю.
В меню Trigger осциллограф был настроен на однократное измерение с запуском по достижению передним фронтом в канале CH1 уровня 1.00 V:
После включения тестируемого оборудования была нажата большая красная кнопка Run/Stop. Осциллограф встал в режим ожидания, затем запустился. Через несколько секунд запись была остановлена вручную.
Полученная осциллограмма записывалась на внешний носитель поэкранно:
Произведём разбор записанных сигналов. На первом экране мы видим отображение настроек прибора и осциллограмму сигналов SCL (верхняя часть) и SDA (нижняя часть экрана), на которой читаем слева направо:
- сигнал START: ведущее устройство выставляет низкий уровень сначала на шине SDA, а затем на шине SCL;
- 7-bit адрес: читаем 0x60 (1100000) на шине SDA по передним фронтам SCL;
- признак режима записи: читаем на шине SDA низкий уровень по следующему переднему фронту SCL;
- сигнал ACK: ведущее устройство после передачи байта переключается на приём по шине SDA, на SDA устанавливается высокий уровень, ведомое устройство по заднему фронту SCL выставляет на SDA низкий уровень (собственно, сигнал ACK), который ведущее устройство считывает по переднему фронту SCL;
- сигнал STOP: ведущее устройство выставляет высокий уровень сначала на шине SCL, а затем на шине SDA
Подобным образом, медленно, но верно, можно произвести вручную дешифровку остальных частей записи.
Видео:Лекция 308. Шина I2CСкачать
Логический анализатор цифровых сигналов
Дешифрацию протокола можно произвести более простым методом, используя логический анализатор и соответствующее программное обеспечение.
Для использования в качестве логического анализатора мне был любезно предоставлен коллегами Saleae Logic 8 (цена на сайте производителя $399). В качестве программного обеспечения использовалась демо-версия Saleae Logic 1.2.18, взятая с официального сайта. Устанавливая данное программное обеспечение, я принял лицензионное соглашение с условием, в том числе, не использовать данное программное обеспечение с оборудованием сторонних производителей.
В программе был включен анализатор протокола I2C. Для сигнала SCL был назначен канал CH0, а для сигнала SDA – канал CH1. Частота выборки сигнала 24 MSa/s.
Запуск был настроен по «переднему» фронту CH0. Для отображения данных был выбран шестнадцатеричный формат.
После включения тестируемого оборудования была нажата большая зелёная кнопка Start, и через несколько секунд на экран вывелась диаграмма:
Максимум пользы в применении логического анализатора я вижу в том, что программа сама дешифрует полученные данные. Результаты дешифровки заносятся построчно в окно Decoded Protocols. При выборе в окне строки данных, программа показывает расположение этих данных на диаграмме.
Видео:Работа с цифровым осциллографом (освоившим только кнопку AUTO посвящается ;)Скачать
Цифровой осциллограф vs логический анализатор
Для сравнения вариантов я «склеил» в графическом редакторе четыре снимка экрана осциллографа и фрагмент диаграммы логического анализатора:
Читайте также: Шины для автомобиля ивеко
Start обозначен зеленым кружочком, Stop – красным кружочком. На диаграмме сначала происходит проверка наличия на шине устройства с адресом 0x60, а затем производится запись в регистр 0xB7 этого устройства значения 0x80.
Если подходить к сравнению вариантов «с пристрастием», то можно заметить, что на диаграмме логического анализатора (частота выборки 24 MSa/s) присутствует «джиттер» сигнала SCL, которого нет, как такового, на осциллограмме с частотой выборки 1 GSa/s. В остальном картина совпадает, а логическим анализатором ещё и производится правильная дешифрация данных в автоматическом режиме.
При выборе «или-или» в «сухом остатке» имеем, в случае осциллографа, дорогое универсальное устройство, не такое удобное для анализа шины, как логический анализатор, но за сопоставимые с ним деньги. В этих условиях лично я, как инженер «старой закалки», приобрёл бы цифровой осциллограф.
Однако, если бы существовало программное обеспечение с лицензионным соглашением, позволяющим использование недорогих клонов популярных логических анализаторов, типа Saleae Logic 8 или DSLogic Plus…
Видео:Работа с логическим анализатором цифровой шины данныхСкачать
И такое программное обеспечение существует
Недорогие клоны популярных логических анализаторов, и не только их, поддерживает программное обеспечение open source проекта sigrok.
Было собрано рабочее место:
После чего начались «танцы с бубном». На Windows 10 запустилась только 32-разрядная версия PulseView. Наличие в системе недорогого китайского клона Saleae Logic (цена на сайте продавца $7) она не определила.
После этого, в Zadig для устройства Logic были установлены драйверы WinUSB, и после повторного сканирования оно определилось в Zadig, как устройство fx2latw:
После этого для устройства fx2latw в Zadig снова были установлены драйверы WinUSB, и только после этого PulseView увидела в списке устройство «Saleae Logic». Устройство было подключено.
После подключения устройства были произведены следующие настройки программы (слева направо по панели инструментов, начиная с надписи «Saleae Logic»):
- выставлено Pre-trigger capture ratio = 2% по нажатию кнопки с ключом и отвёрткой;
- отключены лишние входы по нажатию кнопки с красным щупом;
- выставлен объем записи 100 К выборок;
- выставлена частота выборки 24 MHz;
- включен анализатор протокола I2C по нажатию кнопки с жёлто-зелёным значком.
Далее в панели слева от каналов:
- каналам присвоены соответствующие сигналам текстовые метки;
- условием запуска назначен задний фронт сигнала SDA;
- сигналам I2C назначены соответствующие каналы.
После включения тестируемого оборудования была нажата кнопка Run. Получен уже знакомый результат:
Похоже, «танцы с бубном» того стоили!
UPD: После ручной установки в Диспетчере устройств для устройства USB Logic драйвера libusb-win32 программа PulseView начала стабильно определять наличие в системе «Saleae Logic» без манипуляций с Zadig.
Краткие выводы:
В статье была описана методика проведения анализа сигналов шины I2C с помощью цифрового осциллографа с памятью и логических анализаторов с пакетами прикладного программного обеспечения.
Универсальным методом анализа сигналов, но недешёвым и небыстрым, является применение цифрового осциллографа с памятью.
Быстрым и бюджетным методом анализа сигналов, но с нетривиальной задачей подключения оборудования, является применение недорогого клона логического анализатора в связке с PulseView.
Буду рад, если своей публикацией помог сэкономить читателям время и деньги.
В следующей публикации расскажу, как измерял частоту, на которой запустился кварцевый резонатор в синтезаторе частоты, без частотомера. Но это уже другая история…
Видео:SPI шина на осциллографеСкачать
Шина I2C. Подробности аппаратной реализации
Основная информация для понимания и проектирования аппаратного обеспечения, необходимого для шины I2C.
Видео:Введение в шину I2CСкачать
Дополнительная информация
Видео:I2C интерфейсСкачать
Иногда небольшое усложнение – это хорошо
Протокол I2C отличается некоторыми непростыми особенностями: вы не просто соединяете выводы нескольких микросхем вместе, а затем позволяете низкоуровневым аппаратным средствам брать управление на себя, пока вы читаете или записываете в соответствующий буфер, как это примерно происходит в случаях с SPI (последовательным периферийным интерфейсом) и UART (универсальным асинхронным приемником/передатчиком). Но сложность I2C небезосновательна; остальная часть данной статьи поможет вам понять несколько нюансов аппаратной реализации, которые делают I2C настолько универсальным и надежным вариантом для последовательной связи между несколькими независимыми микросхемами.
Читайте также: Шины кордиант кому принадлежит
Видео:Декодер протоколов | Часть первая I2C снифферСкачать
Открытый сток
Определяющей особенностью I2C является то, что каждое устройство на шине, должно подключаться к линиям тактового сигнала (сокращенно SCL) и сигнала данных (сокращенно SDA) через выходные драйверы с открытым стоком (или открытым коллектором). Давайте посмотрим, что это на самом деле означает. Сначала рассмотрим типовой CMOS (инвертирующий) выходной каскад:
Если на входе присутствует высокий логический уровень, NMOS транзистор открыт, а PMOS транзистор закрыт. Таким образом, выход имеет низкоомное соединение с землей. Если на входе присутствует низкий логический уровень, ситуация меняется на противоположную, а выход имеет низкоомное соединение с VDD. Это называется двухтактным выходным каскадом, хотя это название не особенно информативно, поскольку оно не подчеркивает низкое сопротивление соединений, которые управляют выходом. В общем случае вы не можете напрямую соединять два двухтактных выхода, поскольку ток будет свободно протекать от VDD до земли, если на одном выходе выдается логическая единица, а на другом – логический ноль.
Теперь рассмотрим схему с открытым стоком:
PMOS транзистор был заменен резистором, внешним по отношению к микросхеме. Если на входе присутствует высокий логический уровень, NMOS транзистор обеспечивает низкоомное соединение с землей. Но если на вход подается низкий логический уровень, NMOS транзистор выглядит как разомкнутая цепь, а это означает, что выход подтягивается к VDD через внешний резистор. Такой механизм приводит к двум важным отличиям. Во-первых, появляется неочевидное рассеивание мощности, когда на выходе низкий логический уровень, поскольку ток протекает через резистор, через канал NMOS транзистора на землю (в двухтактной схеме этот ток блокируется высоким сопротивлением закрытого PMOS транзистора). Во-вторых, выходной сигнал ведет себя по-другому, когда на выходе высокий логический уровень, так как выход подключен к VDD через гораздо более высокое сопротивление (обычно не менее 1 кОм). Эта особенность позволяет напрямую соединять два (и более) устройства с открытым стоком: даже если на одном из них низкий логический уровень, а на другом – высокий логический уровень, то подтягивающий резистор гарантирует, что ток не протекает свободно от VDD на землю.
Некоторые последствия использования на шине схемы с открытым стоком:
- Сигналы всегда по умолчанию находятся в состоянии логической единицы. Напримем, если ведущее устройство I2C пытается связаться с ведомым устройством, которое вдруг перестало функционировать, сигнал данных никогда не войдет в неопределенное состояние. Если ведомое устройство не управляет сигналом, то он будет считан как логическая единица. Аналогично, если ведущее устройство выключается в середине передачи, линии SCL и SDA вернутся в состояние логической единицы. Другие устройства могут определить, что шина доступна для новых передач, наблюдая, что и SCL, и SDA находятся в состоянии логической единицы в течении определенного периода времени.
- Любое устройство на шине может безопасно приводить сигналы в состояние логического нуля, даже если другое устройство пытается привести их в состояние логической единицы. Это является основой функции «тактовой синхронизации» или «растяжки тактового сигнала» на шине I2C: ведущее устройство генерирует последовательность тактовых импульсов, но при необходимости ведомое устройство может удерживать линию SCL на низком уровне и тем самым уменьшать тактовую частоту.
- Устройства с различными напряжениями питания могут сосуществовать на одной и той же шине, пока устройства с более низким напряжением не будут повреждены более высоким напряжением. Например, устройство 3,3 В может связываться с устройством 5 В, если SCL и SDA подтянуты до 5 В – схема с открытым стоком приводит к тому, что высокий логический уровень достигает напряжения 5 В, хотя устройство 3,3 В с типовым двухтактным каскадом не может управлять линией 5 В.
Видео:Логический анализатор с Алиэкспресс, клон Saleae LogicСкачать
Если у вас есть R, то у вас есть RC
Выходной каскад с открытым стоком ни в коем случае не является стандартной схемой среди цифровых микросхем, и для этого есть причина: он обладает некоторыми существенными недостатками. Один из этих недостатков становится очевидным, когда мы напоминаем, что емкость есть везде. Изменение напряжения ограничено временем, необходимым для заряда или разряда емкости, связанной с определенным узлом. Проблема в том, что подтягивающие резисторы на линиях SCL и SDA ограничивают ток заряда; другими словами, мы имеем гораздо большее сопротивление в RC цепи, постоянная времени которой регулирует переход напряжения от логического низкого уровня в логическому высокому уровню.
Читайте также: Сервис шина автозаводская 25
Как показывают эти диаграммы, переход от низкого уровня к высокому будет происходить значительно медленнее, чем переход от высокого уровня к низкому, что приводит к классической «пилообразной» форме сигналов I2C:
Эти две осциллограммы показывают переход от низкого уровня к высокому и от высокого уровня к низкому для тактового сигнала шины I2C с подтягивающим резистором 1 кОм и минимальной емкостью (только два устройства на шине с короткими дорожками на печатной плате).
Видео:Инструкция как научиться пользоваться карманным цифровым осциллографом.Скачать
Как выбрать номинал подтягивающих резисторов
На этом этапе должно быть очевидно, что подтягивающее сопротивление накладывает ограничения на максимальную тактовую частоту конкретной шины I2C. На самом деле здесь оказывают влияние и сопротивление, и емкость, хотя емкость от нас мало зависит, потому что она определяется, главным образом, тем, сколько устройств подключено к шине, и характером соединений между этими устройствами. Это приводит к важному вопросу: «Какой выбрать номинал для подтягивающего резистора?». Компромисс между скоростью и рассеиваемой мощностью: более низкое сопротивление уменьшает постоянную времени RC цепи, но увеличивает величину тока, протекающего от VDD на землю (через подтягивающий резистор), когда на SCL или SDA выставлен низкий логический уровень.
Официальная спецификация I2C (стр. 9) гласит, что напряжение не считается «логическим высоким уровнем», пока не достигнет 70% от VDD. Вы можете вспомнить, что постоянная времени RC цепи говорит нам, сколько времени потребуется, чтобы напряжение достигло примерно 63% от конечного напряжения. Таким образом, для простоты будем считать, что R×C говорит нам, сколько времени потребуется, чтобы уровень сигнала вырос от напряжения, близкого к потенциалу земли, до уровня логической единицы.
Теперь, как найти емкость? «Простой» способ – это сборка всей системы и измерение емкости; по крайней мере, это, вероятно, проще, чем пытаться выполнить точный расчет, который учитывает каждый источник емкости – как отмечает рекомендация от Texas Instruments, «при обычном построении электрических схем формируется невообразимое количество конденсаторов». Если подход с измерением не подходит (как это часто бывает), вы можете выполнить приблизительную оценку, определив емкость вывода для каждого устройства на шине (здесь вам поможет техническое описание), а затем добавить 3 пФ на дюйм дорожки на печатной плате и 30 пФ на фут коаксиального кабеля (эти цифры взяты из той же рекомендации, стр. 3).
Предположим, что у нас емкость шины составляет 50 пФ, и мы хотим соответствовать спецификации «стандартного режима» I2C, в которой указано, что максимальное время нарастания составляет 1000 нс.
\[t_ =1000\ нс=\left(R\right)\left(50\ пФ\right)\ \ \Rightarrow\ \ R=20\ кОм\]
Таким образом, можно соответствовать требованиям спецификации с Rподтягивающий = 20 кОм : это значение также дает минимальное энергопотребление. Как насчет скорости? Предположим, вы хотите, чтобы длительность присутствия высокого логического уровня на линии синхронизации было, по крайней мере, в три раза больше времени нарастания.
Если 167 кГц не достаточно много, вы можете снизить сопротивление (за счет увеличения энергопотребления), пока не достигните желаемой тактовой частоты. (Фактически, «стандартный режим» ограничивает тактовую частоту до 100 кГц, но вы можете адаптировать эти спецификации под потребности вашей системы.)
Это грубые расчеты, но, честно говоря, вам не нужно беспокоиться о том, чтобы найти идеальное сопротивление. Этот общий подход может помочь вам поставить резистор разумного номинала, и вы всегда можете поменять резисторы, если что-то работает не так, как вы хотите.
Видео:Анализатор сигналов SMBus на примере контроллера заряда батареи ноутбука.Скачать
Заключение
Если эта статья выполняет свою цель, то вы теперь хорошо знакомы с основными деталями, связанными с разработкой аппаратного обеспечения I2C. А реализацию программного обеспечения мы рассмотрим в отдельной статье.
🌟 Видео
Работа с цифровым осциллографом для начинающих 2Скачать
CAN шина на осциллографе FINIRSI ADS1013DСкачать
Передача данных - шина SPIСкачать
Осциллограф FNIRSI 1014D обзор функционала. Измеряем ШИМ сигналСкачать
Как безопасно использовать осциллографСкачать
I2c шина в iPhone, способы диагностики, причины циклического перезапуска.Скачать
Подключение нескольких устройств по шине i2cСкачать
25 Шина I2CСкачать