Практична діагностика цифрових шин
Куди зникли біти?
Код компілюється, проводи наче на місці, а датчик мовчить. Розкладаємо збій на шари: від живлення й логічних рівнів до ACK, CPOL/CPHA, baud rate та форми фронтів. На кожному кроці ставимо приладу запитання, на яке він може відповісти.
Сім перевірок до першого декодера
Скетч компілюється, бібліотека не свариться, а периферія зберігає гідне мовчання. У цей момент дуже хочеться переписати половину програми. Не поспішайте: компілятор не перевіряє мідь, живлення, рівні напруги чи контакт у макетній платі.
Розглядайте обмін як ланцюг доказів. Спершу периферійний пристрій має отримати правильне живлення і спільну точку відліку. Потім перевіряємо, чи безпечні та розпізнавані сигнали. Тільки тоді беремося за адреси, режими й команди. Такий порядок здається повільним рівно до першого вечора, який він рятує.
- 01ЖивленняВиміряти напругу безпосередньо на виводах пристрою, перевірити reset та enable.
- 02GNDПереконатися, що передавач і приймач мають спільну опорну землю або задокументовану ізоляцію.
- 03Логічні рівніЗвірити гарантовані
VOH/VOLзVIH/VILі окремо перевірити absolute maximum. - 04ПідключенняЗвірити pinout, орієнтацію роз’єму, pin mux, CS, reset та адресу.
- 05АктивністьПобачити, чи контролер узагалі створює clock, start bit або CS frame.
- 06ВідповідьПеревірити ACK, MISO, RX та статусні біти, а не лише факт передачі.
- 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]
| Величина | Результат | Що це означає |
|---|---|---|
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 «надійнішим».
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]
Для розрахункового прикладу 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 її змінює.
| Mode | CPOL | CPHA | SCK idle | Фронт вибірки |
|---|---|---|---|---|
| 0 | 0 | 0 | LOW | перший, rising |
| 1 | 0 | 1 | LOW | другий, falling |
| 2 | 1 | 0 | HIGH | перший, falling |
| 3 | 1 | 1 | HIGH | другий, rising |
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]
Як провести чесний A/B тест
- Залиште ті самі firmware, clock/mode та джерело живлення.
- Змініть одну фізичну змінну: довжину джгута, роз’єм, трасування біля імпульсного вузла або зворотний провід.
- Зафіксуйте геометрію й точку вимірювання, а не тільки фразу «довгі дроти».
- Якщо можливо, порівняйте сигнал біля передавача й біля приймача.
- Повторіть кілька разів, щоб відрізнити закономірність від випадкового контакту.
Симптом «працює тільки з аналізатором» теж є підказкою. Щуп може додати ємність, демпфування, кращу опорну землю або просто притиснути поганий контакт. Повторюйте A/B із незмінними умовами запуску й не оголошуйте прилад лікувальним компонентом.[13]
Короткі діагностичні таблиці
Таблиця не замінює схему й datasheet, зате не дає перескочити від симптому одразу до улюбленої причини. Починайте з першого приладу, а наступний підключайте лише тоді, коли попередній шар уже перевірено.
| Симптом | Перший інструмент | Що шукаємо | Наступний крок |
|---|---|---|---|
| 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-комутатор |
| Симптом | Перший інструмент | Що шукаємо | Наступний крок |
|---|---|---|---|
| Повна тиша | Мультиметр + аналізатор | стан спокою, вивід TX, pin mux, спільна GND | перевірити джерело, потім приймач; звірити TX→RX |
| Працює тільки в один бік | Логічний аналізатор | активність кожного TX окремо, RX enable | простежити обидва напрями; перевірити flow control, якщо він використовується |
| «Кракозябри» | Логічний аналізатор | тривалість біта, формат кадру, parity та інверсію | виміряти амплітуду осцилографом; розрахувати BRG для конкретного MCU |
| Перші байти є, потім стоп | Аналізатор + прапорці MCU | передача триває, переповнення приймача або заповнений буфер | налагодити обслуговування ISR/task/FIFO за документацією MCU |
| Симптом | Перший інструмент | Що шукаємо | Наступний крок |
|---|---|---|---|
| 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. Потім знайдіть активність і відповідь, а вже тоді розбирайте налаштування протоколу. Якщо цифрове декодування не пояснює поведінку, спускайтеся до напруги й фронтів.
Хороша діагностика не вгадує одну причину. Вона ставить вузьке запитання правильному приладу й зберігає відповідь разом з умовами. Після цього навіть мовчазний датчик зазвичай залишає цілком балакучі докази.
Технічні джерела
- 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.
- Texas Instruments — SLVA689, I2C Bus Pullup Resistor Calculation, Feb 2015. Підтримує рівняння
Rp(min)іRp(max). Офіційний PDF. - Texas Instruments — SLVA675B, Voltage-Level Translation With the LSF Family, Dec 2014, rev. Mar 2015. Підтримує FET-switch translation і bidirectional I2C як документований клас застосування. Офіційний PDF.
- Texas Instruments — TCA9548A Low-Voltage 8-Channel I2C Switch, SCPS207H, rev. Sep 2024. Підтримує channel control та address options на рівні IC. Офіційний PDF.
- Texas Instruments — SBOA621, Understanding the SPI Bus, Aug 2025. Підтримує signal roles, CS, full-duplex transfer і CPOL/CPHA modes. Офіційний PDF.
- Microchip — 25AA256/25LC256 256-Kbit SPI EEPROM, DS20001822J, 2003–2021. Підтримує exact-target приклад CS, SPI modes, high-Z SO й timing. Офіційний PDF.
- Microchip — PIC32 Family Reference Manual, Section 21 UART, DS60001107H, 2007–2017. Підтримує one-family frame, BRG та error-state example. Офіційний PDF.
- Texas Instruments — MAX3232, SLLS410O, rev. Jun 2021. Підтримує межу між logic-level UART і RS-232. Офіційний PDF.
- Texas Instruments — Logic Guide, SDYU001AC, rev. Nov 2025. Підтримує
VIH,VIL,VOH,VOL, noise margins та translator context. Офіційний документ. - Texas Instruments — High-Speed Layout Guidelines, SCAA082A, rev. Aug 2017. Підтримує edge, return current, loop area, crosstalk, reflection, connector і probe-loading mechanisms. Офіційний PDF.
- Texas Instruments — The RS-485 Design Guide, SLLA272D, rev. May 2021. Підтримує differential signaling та system-specific cable/termination trade-offs. Офіційний PDF.
- Tektronix — Logic Analyzer Fundamentals. Підтримує thresholded logic-analyzer view та analog oscilloscope waveform view. Офіційний primer.
- Tektronix — ABCs of Probes Primer. Підтримує probe loading, ground-lead ringing і protective-earth safety. Офіційний primer.
- Saleae — What Sampling Rate Should I Use? Підтримує лише Saleae sample-rate rule of thumb і timing-resolution guidance. Офіційна документація.
- Saleae — Supported Voltages. Підтримує model-specific thresholds/protection і threshold artifacts. Офіційна документація.
- Saleae — analyzer guides for I2C, SPI та Async Serial. Підтримують decoder settings та interpretation, але не універсальні electrical limits.
- Fluke — What is a Digital Multimeter? та A Guide to Continuity Testing with a Multimeter. Підтримують voltage/resistance і continuity role DMM. Огляд DMM; continuity guide.
Написати коментар