Каталог товарів
Клієнту
Тема сайту:
+38 (066) 305-77-25
Наша адреса
Україна, тимчасово - доставка тільки Новою Поштою, УкрПоштою, МістПошта, ROZETKA Delivery
Телефони
Графік роботи
  • Пн-Пт: з 9 до 18
  • Сб: з 10 до 17
  • Нд: з 11 до 16
E-mail
Ми в соцмережах
Перейти до контактів
0 0
Каталог
Головна
Закладки
0
Порівняти
0
Контакти

I2C, SPI та UART на практиці: типові помилки й діагностика

Чи була корисною ця стаття?
I2C, SPI та UART на практиці: типові помилки й діагностика

Практична діагностика цифрових шин

Куди зникли біти?

Код компілюється, проводи наче на місці, а датчик мовчить. Розкладаємо збій на шари: від живлення й логічних рівнів до ACK, CPOL/CPHA, baud rate та форми фронтів. На кожному кроці ставимо приладу запитання, на яке він може відповісти.

Сім перевірок до першого декодера

Скетч компілюється, бібліотека не свариться, а периферія зберігає гідне мовчання. У цей момент дуже хочеться переписати половину програми. Не поспішайте: компілятор не перевіряє мідь, живлення, рівні напруги чи контакт у макетній платі.

Розглядайте обмін як ланцюг доказів. Спершу периферійний пристрій має отримати правильне живлення і спільну точку відліку. Потім перевіряємо, чи безпечні та розпізнавані сигнали. Тільки тоді беремося за адреси, режими й команди. Такий порядок здається повільним рівно до першого вечора, який він рятує.

  1. 01ЖивленняВиміряти напругу безпосередньо на виводах пристрою, перевірити reset та enable.
  2. 02GNDПереконатися, що передавач і приймач мають спільну опорну землю або задокументовану ізоляцію.
  3. 03Логічні рівніЗвірити гарантовані VOH/VOL з VIH/VIL і окремо перевірити absolute maximum.
  4. 04ПідключенняЗвірити pinout, орієнтацію роз’єму, pin mux, CS, reset та адресу.
  5. 05АктивністьПобачити, чи контролер узагалі створює clock, start bit або CS frame.
  6. 06ВідповідьПеревірити ACK, MISO, RX та статусні біти, а не лише факт передачі.
  7. 07НалаштуванняЗіставити частоту, режим, формат кадру, послідовність команд і часові параметри з datasheet.

На третьому кроці назви «3,3 В» і «5 В» ще нічого не гарантують. Для HIGH потрібна умова VOH(min) ≥ VIH(min), для LOW — VOL(max) ≤ VIL(max). Після цього окремо перевіряють допустиму напругу на вході: absolute maximum є межею пошкодження, а не рекомендованим робочим режимом.[9] Детальніше цю тему розібрано у матеріалі «Таємниці логічних рівнів».

Сім кроків діагностики цифрової шини від живлення та землі до відповіді пристрою й налаштувань протоколу.
Стабільний порядок перевірок відсіює фізичні несправності раніше, ніж ми починаємо звинувачувати бібліотеку.

Три прилади, три різні запитання

Мультиметр, логічний аналізатор і осцилограф дивляться на ту саму лінію, але бачать різні речі. Суперечності між їхніми показами часто немає: просто один прилад говорить про напругу, другий про логічний стан, а третій про форму переходу.

Мультиметр

Відповідає на базові питання: чи є живлення, чи з’єднана земля, який рівень спокою, чи не обірвано провід. Для перевірки continuity живлення вимикають.[17]

Логічний аналізатор

Фіксує моменти перетину вхідного порога, показує часову послідовність і декодує елементи протоколу. Він знаходить неправильну адресу або межі CS, але не показує аналогову форму фронту.

Осцилограф

Показує напругу в часі: амплітуду, VOL/VOH, час наростання і спаду, шум, overshoot та ringing. З ним видно, чи має сигнал запас до порогів.

Чому мультиметр бачить «нормально», а шина не працює

Під час швидкого перемикання мультиметр зазвичай показує усереднений або нестабільний результат. На I2C він може чесно повідомити, що idle дорівнює 3,3 В, але нічого не сказати про фронт, який надто повільно проходить зону невизначеності. На UART він не покаже окремий start bit, а на SPI не відрізнить правильну фазу clock від неправильної. Це не вада мультиметра, а межа його роботи.

Що доводить логічний аналізатор

Аналізатор порівнює вхідну напругу зі своїм порогом і зберігає 0 або 1. Декодер складає з цих станів адресу, байт, ACK чи помилку кадру. Успішне декодування означає, що конкретний аналізатор за своїх порогів і налаштувань прочитав послідовність. Це ще не сертифікат здоров’я аналогового сигналу.[12]

Частоту дискретизації вибирають із запасом відносно найшвидших подій, які треба розрізнити. Для власних приладів Saleae радить цифрову частоту дискретизації щонайменше у чотири рази вищу за смугу пропускання сигналу. Це практична рекомендація виробника, а не універсальний закон для будь-якого аналізатора й будь-якого фронту.[14] Пороги, допустимі напруги та захист входів також залежать від моделі. Їх не можна переносити з оригінального Saleae на безіменну сумісну плату.[15]

Для першого знайомства з активністю на лініях і декодуванням протоколу підійде восьмиканальний USB-аналізатор із каталогу MyProject. Посилання допомагає знайти клас інструмента, але не встановлює точний поріг, смугу пропускання чи захист конкретної плати.

Коли потрібен осцилограф

Якщо декодер показує зайві фронти, обмін залежить від довжини проводу або пристрій працює тільки з під’єднаним щупом, потрібна аналогова картина. Повільний чи зашумлений фронт може кілька разів перетнути поріг аналізатора й створити хибний цифровий імпульс. Контролер та інший приймач можуть побачити його інакше.[16]

Щуп теж є частиною схеми. Його ємність навантажує лінію, а довгий провід землі може додати власний ringing. Фіксуйте модель щупа, коефіцієнт ослаблення, обмеження смуги пропускання і точку вимірювання. Для швидких фронтів використовуйте короткий шлях землі.[13]

Порівняння того, що показують мультиметр, логічний аналізатор та осцилограф на одному цифровому сигналі.
Прилади не дублюють один одного: вони дивляться на ту саму лінію на різних рівнях абстракції.

I2C: шина, яка відпускає HIGH через резистор

У звичайних режимах I2C виходи SDA і SCL стягують лінію до LOW, але не штовхають її в HIGH. Повернення в HIGH забезпечують підтягувальні резистори. Через це шина дуже чутлива не до «правильного номіналу з інтернету», а до поєднання опору, напруги, ємності та здатності пристроїв тягнути LOW.[1]

Спочатку практичне правило, потім формула

Надто великий pull-up дає повільний RC-фронт: лінія запізнюється з переходом у HIGH. Надто малий змушує open-drain транзистор пропускати більший струм у LOW і може підняти VOL вище гарантованої межі. Робочий опір має поміститися між цими двома обмеженнями.[2]

Rp(min) = (Vpullup − VOL(max)) / IOL

Rp(max) = tr(max) / (0,8473 × Cb)

У першій формулі IOL і VOL(max) беруть із гарантованих умов конкретного пристрою. У другій Cb охоплює входи, доріжки, проводи, роз’єми, перетворювачі рівнів і щуп. Ліміти часу наростання зі специфікації становлять 1000 нс для Standard-mode, 300 нс для Fast-mode та 120 нс для Fast-mode Plus. Це межі специфікації, а не типові результати вимірювання.[1]

Розрахунковий приклад: 3,3 В, VOL(max)=0,4 В, IOL=3 мА, Cb=100 пФ
Величина Результат Що це означає
Rp(min) 966,7 Ом Нижня межа за прийнятими VOL/IOL.
Rp(max), Standard-mode 11,80 кОм Верхня межа для tr(max)=1000 нс.
Rp(max), Fast-mode 3,54 кОм Верхня межа для tr(max)=300 нс.
Rp(max), Fast-mode Plus 1,42 кОм Верхня межа для tr(max)=120 нс.

Ця таблиця не призначає резистор вашій шині. Вона показує, як один і той самий Cb звужує верхню межу зі зростанням швидкості. Перед вибором номіналу перевірте, чи конкретні пристрої підтримують потрібний режим, яке VOL вони гарантують за вказаного струму та яка сумарна ємність склалася на платі.

Чотири різні pull-up несправності

Pull-up немає

Лінія може не повертатися в HIGH або повертатися через слабкі внутрішні підтяги й leakage. Спершу перевірте схему та опір до лінії живлення у вимкненому стані.

Опір завеликий

Idle HIGH виглядає нормально, але фронт надто повільний. Типовий симптом: 100 кбіт/с працює, а 400 кбіт/с дає нестабільний ACK або extra edges.

Опір замалий

LOW-driver має стягувати більший струм. На осцилографі шукайте підвищений VOL, а при вимкненому живленні порахуйте всі паралельні підтягування.

Не та напруга

Pull-up до 5 В на 3,3-вольтовій нетолерантній шині є проблемою сумісності й можливого back-powering, а не способом зробити HIGH «надійнішим».

Чотири різні помилки підтягування I2C: резистора немає, опір завеликий, опір замалий або підтягування підключене до несумісної напруги.
Порада «поставте 4,7 кОм» пропускає чотири різні механізми, які потребують різних перевірок.
Схематичне, не масштабоване пояснення підйому лінії I2C через pull-up і сумарну ємність та інтервалу часу наростання між рівнями 30% і 70%.
Для ідеальної RC-моделі tr визначають між 30% і 70% амплітуди; ілюстрація пояснює принцип, але не є масштабованою кривою чи вимірюванням.

Коли на кожному модулі вже є «нормальні» 4,7 кОм

Підтягувальні резистори до тієї самої лінії живлення з’єднані паралельно. Два резистори по 4,7 кОм дають 2,350 кОм, чотири — 1,175 кОм. За ілюстративних 3,3 В і VOL=0,4 В open-drain вихід відповідно стягує приблизно 1,234 мА або 2,468 мА. Окремий модуль може бути цілком нормальним, а зібрана з чотирьох модулів шина вже опиниться біля нижньої межі.

Якщо резистори йдуть до різних напруг, проста формула паралельного опору вже не описує проблему. Потрібно простежити топологію, послідовність подавання живлення і можливий струм у вимкнену область. Для двонапрямної open-drain I2C можна розглядати документований клас FET-перетворювачів; чотириканальний модуль із каталогу є прикладом такого класу, але його точну схему та маркування слід перевірити перед використанням.

START є, ACK немає

Першим ділом подивіться, яку адресу передає контролер і в якому форматі її записано в datasheet. На шині I2C адреса зазвичай має 7 бітів, а напрямок читання або запису передається окремим бітом. Старі документи іноді друкують уже зсунуті 8-бітні значення. Якщо бездумно вставити таке значення в бібліотеку, яка очікує 7-бітну адресу, пристрій не зобов’язаний здогадуватися про наші наміри.[1]

NACK теж не перекладається одним реченням «пристрою немає». Специфікація описує кілька причин: за адресою ніхто не відповідає; адресований пристрій тимчасово зайнятий; команда або дані не підтримуються; приймач не може прийняти більше; контролер-приймач завершує читання. Тож дивіться не тільки на адресний байт, а на всю транзакцію.

Дві однакові адреси

Два пристрої з тією самою адресою можуть одночасно стягнути ACK у LOW. Сканер покаже, що адреса існує, але не порахує фізичні пристрої. Під час запису команду можуть отримати обидва; під час читання результат залежить від їхньої поведінки й open-drain взаємодії, тому передбачати конкретний байт без точних даних про обидва пристрої не можна.

Найчистіші рішення: змінити address straps, керувати enable pins або рознести пристрої по каналах I2C-switch. TCA9548A має вісім керованих каналів і кілька варіантів власної адреси на рівні IC.[4] Модуль TCA9548A у каталозі MyProject доречний як приклад класу, але не як доказ невідомих onboard pull-up чи current limits його конкретної PCB.

Шина зависла LOW

Спочатку розрізніть SDA і SCL. Якщо SCL утримується LOW, причиною може бути коротке замикання, несправний пристрій або штатний clock stretching. Перевірте, чи підтримує його конкретний пристрій і який timeout очікує контролер. Коли SCL заблокований, надіслати ним імпульси відновлення фізично не вийде; специфікація радить апаратний reset або power-cycle.

Якщо SDA утримується LOW, а SCL можна керувати, процедура bus clear передбачає до дев’яти тактів SCL із перевіркою, чи пристрій відпустив SDA. Якщо ні, потрібен reset або power-cycle. Дев’ять імпульсів не є універсальним заклинанням для будь-якої I2C-несправності.[1]

UART: правильні біти з неправильним паспортом

UART не має адреси й окремої лінії clock, тому виглядає простіше за I2C та SPI. Натомість обидві сторони повинні однаково розуміти тривалість біта, довжину кадру, parity, stop bits і polarity. Провід передає напругу, а не напис «115200 8N1».

TX, RX і третій учасник — GND

У звичайному повнодуплексному UART логічних рівнів вихід TX однієї сторони йде на RX іншої, а другий напрямок підключають навхрест. Якщо немає гальванічної ізоляції або диференційного фізичного рівня, потрібна спільна опорна земля. Без неї приймач порівнює сигнал із невідомою точкою відліку, і навіть красиві 3,3 В на передавачі можуть перетворитися на випадковість на іншому кінці.

Під час діагностики двох уже живлених плат часто достатньо TX, RX і GND. Не з’єднуйте VCC або виводи 3V3/5V адаптера навмання: на різних платах вони можуть бути входами, виходами стабілізатора або мати інше призначення. USB–UART адаптер CP2102 зручний як інструмент класу, але його точний pinout і рівні конкретної ревізії треба звірити перед подачею живлення.

Baud rate — лише початок домовленості

Запис 8N1 означає вісім data bits, без parity та один stop bit. До цього додаються bit rate й polarity. Для неінвертованого CMOS UART idle зазвичай HIGH, start bit переходить у LOW, а data часто передаються від молодшого біта до старшого. Конкретна реалізація може мати inversion options та інші режими, тому фінальне слово належить manual контролера.[7]

Схематична будова кадру UART з idle, start, вісьмома бітами даних, parity option та stop bit.
Однакова швидкість не допоможе, якщо сторони по-різному домовилися про parity, stop bits або polarity.

Для розрахункового прикладу 115200 біт/с один біт триває приблизно 8,681 мкс. Кадр 8N1 має десять бітових інтервалів: start, вісім data bits і stop, отже займає близько 86,806 мкс. Це орієнтири для курсорів, а не універсальний допуск помилки. Реальна межа залежить від генераторів, baud-rate generator, oversampling, довжини кадру й логіки конкретного приймача.

Патерн 0x55 чергує біти та дає багато переходів. На ньому зручно виміряти ширину бітової комірки, побачити inversion і перевірити вирівнювання start. Змінюйте налаштування декодера на тому самому записі: провід і сигнал лишаються незмінними, а змінюється наше прочитання.[16]

Framing, parity та overrun — різні аварії

Framing error

Приймач не побачив очікуваного stop state в потрібний момент. Шукайте неправильний bit rate, format, inversion або пошкоджену лінію.

Parity error

Прийняті data bits не збігаються з очікуваною parity. Причиною може бути різне налаштування сторін або справжня помилка передачі.

Overrun

Нові дані прийшли раніше, ніж firmware спорожнив buffer або FIFO. Осцилограма може бути бездоганною, а байти губитиме програмний тракт.

Назви flags, спосіб очищення помилки й глибина FIFO залежать від MCU. У PIC32 ці стани розділено, але його register names не треба механічно переносити на AVR, STM32 чи ESP.[7]

UART не дорівнює RS-232

UART описує формат асинхронного кадру всередині мікроконтролера. RS-232 задає інший електричний фізичний рівень, зокрема біполярні й інвертовані відносно звичайного logic UART сигнали. GPIO не під’єднують безпосередньо до роз’єму RS-232; між ними ставлять відповідний transceiver, наприклад мікросхему класу MAX3232.[8]

Для довгої або шумної лінії часто доречні диференційні RS-485 чи RS-422, але вони не мають універсальної пари «довжина/швидкість». Результат залежить від кабелю, termination, topology, common-mode range і transceiver.[11]

SPI: коли всі лінії рухаються, але розмова не складається

SPI не має однієї універсальної транзакції. Контролер створює SCK, активує CS і одночасно зсуває біти через MOSI та MISO, але polarity CS, mode, bit order, command phases і dummy cycles визначає конкретний периферійний пристрій.[5]

Тиша, 0xFF і 0x00 — це підказки

  • CS змінюється, SCK мовчить. Перевірте peripheral enable, pin mux, zero-length transfer і правильний instance контролера.
  • SCK та MOSI є, MISO постійно HIGH. Пристрій може бути не вибраний, не живлений або не підтримувати команду; floating MISO часто читається як одиниці через pull-up.
  • MISO постійно LOW. Шукайте short, reset state, bus contention або пристрій, який не звільнив лінію.
  • Байти стабільно зсунуті. Звірте CPOL/CPHA, bit order, bits per word і decoder settings з firmware та datasheet.

0xFF не означає автоматично «поганий MISO», а 0x00 не доводить короткого замикання. Вони лише звужують список наступних перевірок.

CPOL і CPHA без ворожіння над номером mode

CPOL визначає idle state SCK. CPHA задає, на першому чи другому clock edge приймач бере зразок. Замість запам’ятовування числа mode корисніше запитати: який рівень clock у спокої, на якому фронті data має бути стабільною і коли transmitter її змінює.

Чотири режими SPI: leading edge означає перший фронт після активації CS
Mode CPOL CPHA SCK idle Фронт вибірки
000LOWперший, rising
101LOWдругий, falling
210HIGHперший, falling
311HIGHдругий, rising
Чотири режими SPI з різним idle рівнем SCK та позначеними фронтами вибірки даних для CPOL і CPHA.
CPOL визначає спокій clock, а CPHA — на якому з двох фронтів приймач бере зразок.

CS — рамка речення

Деякі пристрої очікують, що CS підніметься після кожної команди. Інші зберігають внутрішній стан, доки CS активний. Команда може містити opcode, адресу, dummy clocks і фазу даних. Якщо перший байт правильний, а далі все зсувається, перевірте не тільки mode, а й межі транзакції та кількість імпульсів clock.

Datasheet 25LC256 дає точний приклад для одного пристрою: він документує підтримувані SPI modes, поведінку CS, command format і high-Z стан SO після deselect.[6] Ці деталі пояснюють спосіб читання datasheet, але не переходять автоматично на дисплей, АЦП чи радіомодуль.

Спільна MISO і кілька пристроїв

На спільній MISO тільки вибраний пристрій має активно керувати лінією. Решта повинні перейти у high-Z у строк, визначений їхніми datasheets. Якщо кожен пристрій працює окремо, а разом вони ламають обмін, запишіть усі CS lines одночасно з MISO. Один короткий імпульс CS може активувати двох співрозмовників, і тоді на шині починається не SPI, а дуже неввічлива нарада.

Правильний mode, погана форма сигналу

Навіть правильно налаштований декодер не гарантує setup/hold біля виводу пристрою. Перевіряйте осцилографом SCK і data на приймачі, а не тільки біля MCU: оцініть амплітуду, часові співвідношення фронтів, ringing і взаємне положення сигналів. Максимальну SCK, CS setup/hold та data timing беруть із datasheet конкретного пристрою.

Зниження SCK корисне як A/B перевірка: воно дає більше часу між подіями. Водночас воно не обов’язково сповільнює фронт вихідного драйвера, тому ringing від довгого проводу або поганого зворотного шляху струму може лишитися. У SPI немає універсальної максимальної довжини кабелю; низька clock frequency сама по собі не перетворює швидкий CMOS edge на повільний.[10]

На столі працює, у корпусі — ні

Макетна плата не отримує імунітету від законів фізики. Просто після монтажу змінюються довжина та геометрія провідників, площа контуру, зворотний шлях струму, шлях через роз’єм, сусідство з DC-DC перетворювачем або мотором і сумарна ємність.

Особливо підступний зворотний струм. Сигнал і його зворотний шлях утворюють контур. Якщо сигнальний провід і GND розходяться різними маршрутами, площа контуру зростає, а разом із нею чутливість до завад та випромінювання. Розрив опорної площини, слабкий контакт у роз’ємі або загальна тонка земля для моторного струму й UART здатні зіпсувати обмін без жодної зміни коду.[10]

Схематичне порівняння короткого стендового підключення та проводки в корпусі з вузькою і більшою площею контуру сигналу та GND.
Корпус змінює геометрію провідників, зворотний шлях струму, шлях через роз’єм і сусідство з DC-DC; в A/B тесті змінюйте одну фізичну змінну за раз.

Як провести чесний A/B тест

  1. Залиште ті самі firmware, clock/mode та джерело живлення.
  2. Змініть одну фізичну змінну: довжину джгута, роз’єм, трасування біля імпульсного вузла або зворотний провід.
  3. Зафіксуйте геометрію й точку вимірювання, а не тільки фразу «довгі дроти».
  4. Якщо можливо, порівняйте сигнал біля передавача й біля приймача.
  5. Повторіть кілька разів, щоб відрізнити закономірність від випадкового контакту.

Симптом «працює тільки з аналізатором» теж є підказкою. Щуп може додати ємність, демпфування, кращу опорну землю або просто притиснути поганий контакт. Повторюйте A/B із незмінними умовами запуску й не оголошуйте прилад лікувальним компонентом.[13]

Короткі діагностичні таблиці

Таблиця не замінює схему й datasheet, зате не дає перескочити від симптому одразу до улюбленої причини. Починайте з першого приладу, а наступний підключайте лише тоді, коли попередній шар уже перевірено.

I2C: симптом → перша перевірка → наступна дія
СимптомПерший інструментЩо шукаємоНаступний крок
SDA і SCL idle LOWМультиметрживлення, коротке замикання, пристрій утримує LOW, resetізолювати пристрої; окремо діагностувати SDA та SCL
START/address є, ACK немаєЛогічний аналізатор7-bit address, R/W, стан пристрою, каналперевірити осцилографом VOL/VIH біля пристрою; звірити всю команду
100 кбіт/с працює, 400 кбіт/с ніОсцилограф30–70% rise time, Cb, parallel pull-upsзменшити навантаження або підібрати Rp у розрахованому вікні
Два пристрої, одна адресаЛогічний аналізатородна адреса з ACK, конфлікт данихвід’єднати по одному; адресні перемички, enable або I2C-комутатор
UART: симптом → перша перевірка → наступна дія
СимптомПерший інструментЩо шукаємоНаступний крок
Повна тишаМультиметр + аналізаторстан спокою, вивід TX, pin mux, спільна GNDперевірити джерело, потім приймач; звірити TX→RX
Працює тільки в один бікЛогічний аналізаторактивність кожного TX окремо, RX enableпростежити обидва напрями; перевірити flow control, якщо він використовується
«Кракозябри»Логічний аналізатортривалість біта, формат кадру, parity та інверсіювиміряти амплітуду осцилографом; розрахувати BRG для конкретного MCU
Перші байти є, потім стопАналізатор + прапорці MCUпередача триває, переповнення приймача або заповнений буферналагодити обслуговування ISR/task/FIFO за документацією MCU
SPI: симптом → перша перевірка → наступна дія
СимптомПерший інструментЩо шукаємоНаступний крок
CS рухається, SCK ніЛогічний аналізаторenable, pin mux, transfer lengthперевірити осцилографом короткі імпульси біля MCU
MISO постійно 0xFFЛогічний аналізаторполярність CS, живлення, контакт, командаперевірити осцилографом CS біля пристрою; звірити його часові параметри
Байти зсунутіЛогічний аналізаторCPOL/CPHA, порядок бітів, довжина словаперевірити setup/hold на виводі пристрою
На коротких проводах працюєОсцилографспотворення фронтів, зворотний шлях струму, роз’єм, перехресні завадиA/B однієї фізичної змінної; перевірити осцилографом обидва кінці

Що записати перед запитом про допомогу

Фраза «не працює I2C» змушує інших вгадувати. Невеликий технічний паспорт несправності перетворює форумну археологію на нормальну діагностику.

  • точні назви плат, маркування IC, ревізії та фото обох боків модуля;
  • напруга живлення на виводах пристрою, рівні спокою і спосіб з’єднання GND;
  • схема або чіткий pin map, орієнтація роз’єму, стани reset та enable;
  • для I2C: 7-бітна адреса, режим шини і список усіх pull-up із напругою підтягування та виміряним опором;
  • для UART: bit rate, data bits, parity, stop bits, inversion і фізичний рівень;
  • для SPI: CPOL/CPHA, bit order, SCK, полярність CS і повна послідовність команд;
  • сирий файл логічного аналізатора, а не тільки обрізаний скриншот одного байта;
  • для осцилографа: модель щупа, коефіцієнт ослаблення, обмеження смуги, частота дискретизації, volts/div, time/div і точка вимірювання;
  • що саме змінилося між робочою та неробочою конфігураціями.

Навіть якщо відповідь не знайдеться одразу, ці дані не пропадуть: вони дозволяють повторити тест і не порівнювати два різні стенди під одним словом «так само».

Поширені запитання

Чи завжди для I2C потрібні 4,7 кОм?
Ні. Pull-up обирають між нижньою межею за VOL/IOL і верхньою за rise time та Cb. Кілька onboard резисторів треба враховувати паралельно.
Чому I2C-сканер бачить адресу, а драйвер не читає регістр?
ACK на адресу доводить тільки, що хтось відповів. Далі можуть бути неправильна адреса регістра, порядок команд, repeated START, формат даних, busy state або конфлікт двох пристроїв з однаковою адресою.
Чому аналізатор декодує, а пристрій все одно помиляється?
Аналізатор бачить сигнал через власний поріг. Приймач може мати інші пороги, а на його виводі фронт може бути повільнішим або зашумленішим. Порівняйте аналогову форму й декодування тієї самої події.
Чи можна подати 5-вольтовий UART на 3,3-вольтовий MCU?
Тільки якщо datasheet конкретного MCU гарантує відповідну tolerance для цього виводу й режиму. Назва напруги живлення не замінює перевірку VIH/VIL, VOH/VOL та absolute maximum.
Чому SPI ламається після подовження проводів?
Змінюються ємність, зворотний шлях струму, відбиття, перехресні завади і шлях через роз’єм. Перевірте сигнал біля пристрою та зробіть A/B з однією фізичною змінною. Універсальної безпечної довжини немає.
Коли достатньо мультиметра?
Для живлення, continuity, статичного рівня і грубої перевірки idle. Для окремих бітів потрібен аналізатор, а для rise/fall, noise, ringing і voltage margin — осцилограф.
Чи лікують дев’ять імпульсів SCL будь-яку завислу I2C?
Ні. Це шлях відновлення для SDA, що утримується LOW, коли SCL ще можна перемикати. SCL stuck LOW, коротке замикання, штатний clock stretching або неправильне живлення потребують іншої діагностики.

Біти рідко зникають без сліду

Коли інтерфейс мовчить, не починайте з перестановки бібліотек. Виміряйте живлення на виводах пристрою, перевірте GND, логічні рівні та pin mapping. Потім знайдіть активність і відповідь, а вже тоді розбирайте налаштування протоколу. Якщо цифрове декодування не пояснює поведінку, спускайтеся до напруги й фронтів.

Хороша діагностика не вгадує одну причину. Вона ставить вузьке запитання правильному приладу й зберігає відповідь разом з умовами. Після цього навіть мовчазний датчик зазвичай залишає цілком балакучі докази.

Технічні джерела

  1. NXP — UM10204, I2C-bus specification and user manual, Rev. 7.0, 1 Oct 2021. Підтримує open-drain SDA/SCL, ACK/NACK, addressing, clock stretching, timing/rise-time limits і bus clear. Офіційний PDF.
  2. Texas Instruments — SLVA689, I2C Bus Pullup Resistor Calculation, Feb 2015. Підтримує рівняння Rp(min) і Rp(max). Офіційний PDF.
  3. Texas Instruments — SLVA675B, Voltage-Level Translation With the LSF Family, Dec 2014, rev. Mar 2015. Підтримує FET-switch translation і bidirectional I2C як документований клас застосування. Офіційний PDF.
  4. Texas Instruments — TCA9548A Low-Voltage 8-Channel I2C Switch, SCPS207H, rev. Sep 2024. Підтримує channel control та address options на рівні IC. Офіційний PDF.
  5. Texas Instruments — SBOA621, Understanding the SPI Bus, Aug 2025. Підтримує signal roles, CS, full-duplex transfer і CPOL/CPHA modes. Офіційний PDF.
  6. Microchip — 25AA256/25LC256 256-Kbit SPI EEPROM, DS20001822J, 2003–2021. Підтримує exact-target приклад CS, SPI modes, high-Z SO й timing. Офіційний PDF.
  7. Microchip — PIC32 Family Reference Manual, Section 21 UART, DS60001107H, 2007–2017. Підтримує one-family frame, BRG та error-state example. Офіційний PDF.
  8. Texas Instruments — MAX3232, SLLS410O, rev. Jun 2021. Підтримує межу між logic-level UART і RS-232. Офіційний PDF.
  9. Texas Instruments — Logic Guide, SDYU001AC, rev. Nov 2025. Підтримує VIH, VIL, VOH, VOL, noise margins та translator context. Офіційний документ.
  10. Texas Instruments — High-Speed Layout Guidelines, SCAA082A, rev. Aug 2017. Підтримує edge, return current, loop area, crosstalk, reflection, connector і probe-loading mechanisms. Офіційний PDF.
  11. Texas Instruments — The RS-485 Design Guide, SLLA272D, rev. May 2021. Підтримує differential signaling та system-specific cable/termination trade-offs. Офіційний PDF.
  12. Tektronix — Logic Analyzer Fundamentals. Підтримує thresholded logic-analyzer view та analog oscilloscope waveform view. Офіційний primer.
  13. Tektronix — ABCs of Probes Primer. Підтримує probe loading, ground-lead ringing і protective-earth safety. Офіційний primer.
  14. Saleae — What Sampling Rate Should I Use? Підтримує лише Saleae sample-rate rule of thumb і timing-resolution guidance. Офіційна документація.
  15. Saleae — Supported Voltages. Підтримує model-specific thresholds/protection і threshold artifacts. Офіційна документація.
  16. Saleae — analyzer guides for I2C, SPI та Async Serial. Підтримують decoder settings та interpretation, але не універсальні electrical limits.
  17. Fluke — What is a Digital Multimeter? та A Guide to Continuity Testing with a Multimeter. Підтримують voltage/resistance і continuity role DMM. Огляд DMM; continuity guide.

© 2026 Мій Проект. Автор: Jazzzman. Використання матеріалів дозволено лише з посиланням на джерело.

Рекомендовані товари
Схожі статті
Таємниці логічних рівнів
Таємниці логічних рівнів
Блог, Електроніка для початківців
25 травня 2025
I2C, SPI, UART - що це таке і як працюють інтерфейси мікросхем
I2C, SPI, UART - що це таке і як працюють інтерфейси мікросхем
Блог, Електроніка для початківців
26 травня 2025