Отладка обмена

Когда модуль не отвечает, причина не всегда в программе. Может быть перепутан провод, отсутствовать общий GND, не хватать подтяжки, быть неверным режим SPI или неподходящим уровень 5 В/3,3 В.
Отладку начинают с простых электрических проверок: распиновка, питание, общий GND, отсутствие короткого замыкания. Только после этого смотрят сигналы анализатором и настраивают декодер протокола.

Главная идея
Идём снизу вверх:
провода -> питание -> уровни -> сырые сигналы -> декодер -> команда устройства
Если поменять сразу адрес, скорость, библиотеку и провода, станет невозможно понять, что именно помогло. Лучше сделать одно изменение и повторить один короткий тест.
Подключение анализатора

Логический анализатор подключают к тем же сигналам, которые участвуют в обмене. Его GND обязательно соединяют с общим GND схемы.
| Протокол | Что подключить к анализатору |
|---|---|
| UART | TX, RX, GND |
| I2C | SDA, SCL, GND |
| 1-Wire | DQ, GND |
| SPI | SCK, MOSI, MISO, CS, GND |
Декодер протокола показывает байты только при правильной настройке. Для UART нужна скорость, для SPI — режим CPOL/CPHA, для I2C — правильные каналы SDA/SCL.
Типовые ошибки

| Симптом | Сначала проверить | Потом проверить |
|---|---|---|
| модуль молчит | питание на контактах, GND, распиновку | есть ли переходы на сигнальных линиях |
| UART показывает мусор | TX/RX, общий GND, скорость | формат кадра и переполнение буфера |
| I2C-сканер ничего не находит | уровни покоя SDA/SCL, подтяжки | адрес, питание, перепутанные линии |
| SPI возвращает одинаковое значение | CS, MISO, режим SPI | команду устройства и фиктивные байты |
1-Wire не даёт presence | DQ, подтяжку, GND | длительность reset и питание датчика |
Проверка по шагам
- Отключите питание и прозвоните провода по pinout.
- Проверьте, нет ли короткого замыкания между питанием и
GND. - Включите питание с разумным ограничением тока.
- Измерьте напряжение у модуля, а не только на источнике.
- Снимите сырые сигналы анализатором.
- Настройте декодер и сравните результат с документацией устройства.
Что записывать в журнал
| Поле | Пример |
|---|---|
| схема | Arduino Uno + BME280, A4/A5, питание 3.3 В |
| ожидание | адрес I2C должен быть 0x76 |
| измерение | SDA и SCL в покое высокие |
| изменение | заменил провод SCL |
| результат | сканер увидел 0x76 |
Запись нужна не для бюрократии. Она помогает не ходить по кругу, когда проблема исчезает на минуту и возвращается после сборки робота.
Что запомнить
- Сначала проверяют питание,
GNDи провода. - Логический анализатор должен иметь общий
GNDсо схемой. - Декодированный байт не является истиной, если декодер настроен неверно.
- Для каждого протокола есть свои частые ошибки:
TX/RX, подтяжки,CS, режим SPI,presence. - Без короткого повторяемого теста отладка быстро превращается в угадывание.
Практика
- Подключите анализатор к UART-линии и подпишите
TX,RX,GND. - Снимите I2C-сканирование и найдите
START, адрес иACK. - Для SPI запишите, какой канал анализатора соответствует
CS. - Для 1-Wire отметьте на захвате
resetиpresence.
Проверьте себя
- Почему прозвонку делают без питания?
- Зачем анализатору общий
GND? - Почему I2C-сканер не доказывает, что датчик измеряет правильно?
- Какие параметры нужно задать декодеру SPI?
Сначала ответьте без подсказки. Ответ можно считать полным, если вы:
- формулируете основную мысль своими словами;
- называете важные условия, ограничения или меры безопасности;
- для схемы, кода или расчёта показываете ход решения и ожидаемый результат.
Если один из пунктов объяснить не получается, найдите соответствующую главу статьи, перечитайте её и повторите ответ.
Словарь статьи
- Логический анализатор — прибор для записи цифровых уровней во времени.
- Декодер протокола — программа, которая превращает записанные фронты в биты, байты и события протокола.
- Прозвонка — проверка электрического соединения при отключённом питании.
- Осциллограмма — изображение изменения сигнала во времени.
- Повторяемый тест — короткий опыт с заранее известными условиями и ожидаемым результатом.
Связанные темы
- UART — проверка
TX/RXи скорости. - I2C — подтяжки, адреса и
ACK. - 1-Wire —
reset,presenceи подтяжкаDQ. - SPI —
CS, режимы и линии данных. - Сравнение протоколов — как выбрать интерфейс до отладки.
Источники
- Saleae. Getting Started with Logic.
- sigrok. PulseView.
- Arduino Docs. Communication.