Как читать шину i2c на осциллографе

Как читать шину i2c на осциллографе
Как читать шину i2c на осциллографе
Anonim

Как прочитать шину 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, выполните следующие действия:

  1. GND от Arduino до GND на BD-LLC
  2. GND от BD-LLC до GND на 3D2GO
  3. 3, 3 В от Arduino до низкого напряжения (LV) на BD-LLC
  4. LV на BD-LLC до 3, 3 В на 3D2GO
  5. Arduino 5V - высокое напряжение (HV) на BD-LLC
  6. Arduino SDA для HV1
  7. Arduino SCL для HV2
  8. BD-LLC LV1 to 3D2GO SDA
  9. BD-LLC LV2 to 3D2GO SCL
Image
Image

Настройка осциллографа

Затем вам нужно настроить осциллограф. Для этого выполните следующие действия:

  1. Включите осциллограф и дождитесь завершения его самотестирования.
  2. Вставьте пробники в каналы 1 и 2.
  3. Подсоедините заземляющий зажим зонда к точке заземления в цепи (при необходимости используйте перемычку).
  4. Подключите пробник 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 (включите канал осциллографа 1)

    1. Нажмите «Метка» (отметьте свои входы, если сможете)
    2. Используйте Multipurpose b для прокрутки вниз до «DATA» (канал метки 1 «Данные»)
    3. Выберите «Вставить предустановленную метку»
    4. Используйте ручку вертикальной шкалы под кнопкой Channel 1, чтобы установить 2 вольта на деление (уменьшите высоту сигнала, чтобы он заполнил меньше половины вашего экрана)
    5. Используйте ручку над кнопкой Channel 1, чтобы переместить сигнал в верхнюю среднюю часть экрана.
  2. Нажмите стрелку «Вниз», чтобы перейти к «каналу 2» (включить канал осциллографа 2)

    1. Используйте Multipurpose b для прокрутки вниз до «CLK» (канал метки 2 «Часы»)
    2. Выберите «Вставить предустановленную метку»
  3. Нажмите кнопку « Выкл.»
  4. Нажмите кнопку « Канал 2»

    1. Используйте ручку под кнопкой Channel 2, чтобы установить 2 вольта на деление (уменьшите высоту сигнала, чтобы он заполнил меньше половины экрана)
    2. Используйте ручку над кнопкой Channel 2, чтобы переместить сигнал в нижнюю среднюю часть экрана (это отделяет трассировку для тактового сигнала от трассы для сигнала данных)
  5. Нажмите кнопку B1 (функциональность шины позволяет вам интерпретировать и отображать последовательные или параллельные данные, в этом случае мы имеем дело с данными I²C)

    1. Нажмите «Bus B1» и используйте Multipurpose a для выбора «I2C» (скажите осциллографу, какой тип данных ожидать)
    2. Выберите «Определить входы»

      1. Используйте Multipurpose a для выбора «SCL» на канале 2 (назначьте CLK-канал SCL)
      2. Используйте Multipurpose b для выбора «SDA» на канале 1 (назначьте канал DATA для SDA)
      3. Установите «Пороги» на «1 В» на обоих SDA и SCL, используя Multipurpose a и Multipurpose b
      4. Установите «Включить R / W In Address» в «yes»
      5. Установите «B1 Label» на «I2C» (просто для отслеживания вещей)
      6. Установите «Дисплей шины» на «Шина и форма волны»
      7. Установите «Hex»
  6. Нажмите кнопку Trigger Menu

    1. Выберите «Шина»
    2. Выберите «Источник B1-I2C»
    3. Выберите «Триггер при запуске»
  7. Нажмите Меню Выкл.
  8. Используйте ручку масштаба Scale для изменения шкалы времени до 1, 00 мс
  9. Нажмите Single, чтобы записать один сигнал
  10. Используйте поворотные регуляторы Wave Inspector для увеличения в любой части транзакции I²C, которую вы хотите проверить более тщательно. В моем случае ACK был получен после адреса 0x5E, потому что это адрес микросхемы магнитного датчика.
Image
Image

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

Как сохранить данные с осциллографа на компьютер

Декодированные данные хранятся в таблице событий. Вы можете сохранить его на USB-накопитель или на свой компьютер.

Image
Image

Поскольку подключение USB-накопителя является тривиальным примером, мы сделаем это с трудом, дистанционно управляя областью. Следующие шаги относятся к Microsoft Windows и сериям Tektronix MDO3000 и MDO4000.

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

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

  1. Запустите CMD. EXE в качестве администратора и введите следующую команду для создания общего ресурса:

    1. mkdir C: \ Осциллограф
    2. NET SHARE Scope = C: \ Осциллограф / примечание: «TEK3104 Data» / grant: domain \ user, FULL // Это создает общий ресурс с именем «Область» на вашем основном жестком диске. Вы можете изменить его в любом месте, которое вам нравится. Обязательно измените домен \ пользователь на имя домена, к которому подключен компьютер, или имя ПК, за которым следует имя пользователя, которое вы использовали для входа в Windows.
    3. ipconfig // Обратите внимание на адрес IPv4 для подключения к локальной сети. В моем примере это 192.168.0.18.
  2. Затем, пока все еще в CMD. EXE, используйте PuTTY или telnet для подключения к области:

    TELNET -O 192.168.0.40 4000 // Измените 192.168.0.40 на IP вашей области действия, отображаемый на главном экране при запуске.

  3. Теперь вы подключены к осциллографу по его IP-адресу на порту по умолчанию 4000. Введите следующее:

    1. ! d // Это очищает устройство.
    2. файлы: установить: список? // Это покажет все смонтированные диски.
    3. файлы: mount: drive "H:; 192.168.0.18; Scope; user; pass;" // Это создает постоянный диск на машине по адресу 192.168.0.18.
    4. файлы: установить: список? // Это должно привести к появлению нового диска.
    5. files: mkdir "H: / NewArticles" // Это делает каталог под названием «Новые статьи» на компьютере.
    6. files: cwd "H: / NewArticles" // Это изменяет фокус на этот каталог.
    7. save: eventtable: B1 "eventtable.csv" // Это (наконец) сохраняет данные на компьютере.
Image
Image
Image
Image

Данные таблицы событий

Вывод

Менее 15 минут мы расшифровали шину I²C и, со всех сторон, сохранили данные на компьютере для анализа.

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

Я использовал масштаб и процедуры, показанные в этой статье, для декодирования данных шины I²C для нескольких различных режимов 3D Magnetic Sensor 2 Go и определения того, какие команды соответствуют режимам питания.

Дальнейшее чтение

  • Введение в шину I2C
  • Шина I2C: сведения о реализации оборудования
  • Шина I2C: информация о внедрении встроенного ПО
  • Математика проектирования I2C: Емкость и сопротивление
  • Шина I2C: когда использовать буфер I2C