Как прочитать шину I2C на осциллографе
Осциллографы предлагают различные инструменты для диагностики проблемных цепей. В этом уроке мы будем использовать осциллограф для чтения последовательной шины I²C.
Получение области
Для получения дополнительной информации о том, как получить осциллограф, обратитесь к части 1.
Обзор проекта
Я буду использовать многодоменный осциллограф 3104 Tektronix для декодирования данных I²C и определения адреса I²C для устройства путем последовательного опроса всех адресов и поиска сигнала подтверждения (ACK). Любое устройство I²C будет работать. Я получил оценочный комплект для Infineon 3D Hall-Effect Sensor, и я буду использовать его в качестве своего устройства I²C.
Продукт | Стоимость (и ссылка на продукт) | Дополнительная информация |
---|---|---|
Infineon 3D Магнитный датчик 2 Go Kit | $ 28 | Руководство по установке | Руководство по датчикам | Краткое описание продукта |
4 Position Header (0.100 ") | $ 1 | Техническая спецификация |
Arduino Uno R3 | $ 15 | Информация о товаре |
Двунаправленный логический преобразователь уровня | $ 3 | Техническая спецификация |
Провода для перемычек | $ 3 |
Как упоминалось выше, любой I²C-совместимый датчик или дисплей приемлемы здесь. Вам не нужно использовать комплект Magnetic Sensor 2 Go Kit.
Настройка цепи
Плата Arduino, которую я использовал, работает с логикой 5 В. Комплект оценки 3D2GO поставляется на 3, 3 В. Это означает, что между линиями данных Arduino и комплектом оценки должен быть вставлен двунаправленный конвертер уровня логики (BD-LLC).
Чтобы вставить BD-LLC между Arduino и вашим устройством I²C, выполните следующие действия:
- GND от Arduino до GND на BD-LLC
- GND от BD-LLC до GND на 3D2GO
- 3, 3 В от Arduino до низкого напряжения (LV) на BD-LLC
- LV на BD-LLC до 3, 3 В на 3D2GO
- Arduino 5V - высокое напряжение (HV) на BD-LLC
- Arduino SDA для HV1
- Arduino SCL для HV2
- BD-LLC LV1 to 3D2GO SDA
- BD-LLC LV2 to 3D2GO SCL

Настройка осциллографа
Затем вам нужно настроить осциллограф. Для этого выполните следующие действия:
- Включите осциллограф и дождитесь завершения его самотестирования.
- Вставьте пробники в каналы 1 и 2.
- Подсоедините заземляющий зажим зонда к точке заземления в цепи (при необходимости используйте перемычку).
- Подключите пробник 1 к SDA и зонд 2 к SCL (при необходимости используйте перемычку).
Теперь вы можете открыть IDE Arduino и загрузить на свой компьютер следующий код. Это сканер I²C, который сканирует все адреса для устройств и ищет ответы ACK.
// I2C Scanner from Arduino.cc // Attribution to Krodal, Nick Gammon, Anonymous #includevoid setup() { Wire.begin(); Serial.begin(9600); Serial.println("\nI2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning…"); nDevices = 0; for(address = 1; address <= 127; address+) { // The i2c_scanner uses the return value of // Wire.endTransmission to see if // a device acknowledged the address. Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.print(address, HEX); Serial.println(" !"); nDevices+; } else if (error==4) { Serial.print("Unknown error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); // wait 5 seconds for next scan }
Сканер I²C для Arduino
Теперь, каждые 5 секунд, Arduino будет опросить I²C адреса 1-127. Если устройство существует в запрошенном адресе, он отправит сигнал подтверждения в Arduino, потянув линию SDA на низком уровне после того, как адресный байт будет передан.
Теперь мы можем перейти к использованию осциллографа для декодирования шины I²C.
Используйте следующие шаги для осциллографа серии Tektronix MDO3000 или MDO4000 с общими инструкциями для любого осциллографа в круглых скобках.
- Нажмите кнопку канала 1 (включите канал осциллографа 1)
- Нажмите «Метка» (отметьте свои входы, если сможете)
- Используйте Multipurpose b для прокрутки вниз до «DATA» (канал метки 1 «Данные»)
- Выберите «Вставить предустановленную метку»
- Используйте ручку вертикальной шкалы под кнопкой Channel 1, чтобы установить 2 вольта на деление (уменьшите высоту сигнала, чтобы он заполнил меньше половины вашего экрана)
- Используйте ручку над кнопкой Channel 1, чтобы переместить сигнал в верхнюю среднюю часть экрана.
- Нажмите стрелку «Вниз», чтобы перейти к «каналу 2» (включить канал осциллографа 2)
- Используйте Multipurpose b для прокрутки вниз до «CLK» (канал метки 2 «Часы»)
- Выберите «Вставить предустановленную метку»
- Нажмите кнопку « Выкл.»
-
Нажмите кнопку « Канал 2»
- Используйте ручку под кнопкой Channel 2, чтобы установить 2 вольта на деление (уменьшите высоту сигнала, чтобы он заполнил меньше половины экрана)
- Используйте ручку над кнопкой Channel 2, чтобы переместить сигнал в нижнюю среднюю часть экрана (это отделяет трассировку для тактового сигнала от трассы для сигнала данных)
- Нажмите кнопку B1 (функциональность шины позволяет вам интерпретировать и отображать последовательные или параллельные данные, в этом случае мы имеем дело с данными I²C)
- Нажмите «Bus B1» и используйте Multipurpose a для выбора «I2C» (скажите осциллографу, какой тип данных ожидать)
- Выберите «Определить входы»
- Используйте Multipurpose a для выбора «SCL» на канале 2 (назначьте CLK-канал SCL)
- Используйте Multipurpose b для выбора «SDA» на канале 1 (назначьте канал DATA для SDA)
- Установите «Пороги» на «1 В» на обоих SDA и SCL, используя Multipurpose a и Multipurpose b
- Установите «Включить R / W In Address» в «yes»
- Установите «B1 Label» на «I2C» (просто для отслеживания вещей)
- Установите «Дисплей шины» на «Шина и форма волны»
- Установите «Hex»
-
Нажмите кнопку Trigger Menu
- Выберите «Шина»
- Выберите «Источник B1-I2C»
- Выберите «Триггер при запуске»
- Нажмите Меню Выкл.
- Используйте ручку масштаба Scale для изменения шкалы времени до 1, 00 мс
- Нажмите Single, чтобы записать один сигнал
- Используйте поворотные регуляторы Wave Inspector для увеличения в любой части транзакции I²C, которую вы хотите проверить более тщательно. В моем случае ACK был получен после адреса 0x5E, потому что это адрес микросхемы магнитного датчика.

Следующее видео проведет шаги, необходимые для декодирования шины I²C.
Как сохранить данные с осциллографа на компьютер
Декодированные данные хранятся в таблице событий. Вы можете сохранить его на USB-накопитель или на свой компьютер.

Поскольку подключение USB-накопителя является тривиальным примером, мы сделаем это с трудом, дистанционно управляя областью. Следующие шаги относятся к Microsoft Windows и сериям Tektronix MDO3000 и MDO4000.
С другой стороны, то, что мы собираемся сделать, - потенциальный риск безопасности данных. Поговорите со своим ИТ-отделом, прежде чем делать это на работе.
Мой компьютер находится на 192.168.0.18, а осциллограф - на 192.168.0.40. Внесите соответствующие настройки в свои команды.
- Запустите CMD. EXE в качестве администратора и введите следующую команду для создания общего ресурса:
- mkdir C: \ Осциллограф
- NET SHARE Scope = C: \ Осциллограф / примечание: «TEK3104 Data» / grant: domain \ user, FULL // Это создает общий ресурс с именем «Область» на вашем основном жестком диске. Вы можете изменить его в любом месте, которое вам нравится. Обязательно измените домен \ пользователь на имя домена, к которому подключен компьютер, или имя ПК, за которым следует имя пользователя, которое вы использовали для входа в Windows.
- ipconfig // Обратите внимание на адрес IPv4 для подключения к локальной сети. В моем примере это 192.168.0.18.
- Затем, пока все еще в CMD. EXE, используйте PuTTY или telnet для подключения к области:
TELNET -O 192.168.0.40 4000 // Измените 192.168.0.40 на IP вашей области действия, отображаемый на главном экране при запуске.
- Теперь вы подключены к осциллографу по его IP-адресу на порту по умолчанию 4000. Введите следующее:
- ! d // Это очищает устройство.
- файлы: установить: список? // Это покажет все смонтированные диски.
- файлы: mount: drive "H:; 192.168.0.18; Scope; user; pass;" // Это создает постоянный диск на машине по адресу 192.168.0.18.
- файлы: установить: список? // Это должно привести к появлению нового диска.
- files: mkdir "H: / NewArticles" // Это делает каталог под названием «Новые статьи» на компьютере.
- files: cwd "H: / NewArticles" // Это изменяет фокус на этот каталог.
- save: eventtable: B1 "eventtable.csv" // Это (наконец) сохраняет данные на компьютере.


Данные таблицы событий
Вывод
Менее 15 минут мы расшифровали шину I²C и, со всех сторон, сохранили данные на компьютере для анализа.
И теперь, когда установлена общая папка, будущая работа может быть выполнена всего за несколько минут. Этот процесс автоматического декодирования намного эффективнее, чем просто зондирование сигналов и попытка ручного интерпретации логических уровней.
Я использовал масштаб и процедуры, показанные в этой статье, для декодирования данных шины I²C для нескольких различных режимов 3D Magnetic Sensor 2 Go и определения того, какие команды соответствуют режимам питания.
Дальнейшее чтение
- Введение в шину I2C
- Шина I2C: сведения о реализации оборудования
- Шина I2C: информация о внедрении встроенного ПО
- Математика проектирования I2C: Емкость и сопротивление
- Шина I2C: когда использовать буфер I2C