Analiza awarii: moduł komunikacji I²C

/parametry/modul-komunikacji-i2c/ wersja raportu: 1.0 ID sprawy: I2C-COMM-25-452

Zakres: analiza usterek magistrali I²C w modułach sterujących AGD: MCU–EEPROM, MCU–RTC, MCU–czujniki (ciśnienie, temperatura, wilgotność). Prędkości nominalne: 100 kHz (standard-mode), 400 kHz (fast-mode). Linie SDA/SCL: pull-up 4,7 kΩ (3,3 V lub 5 V), długości ścieżek 2–28 cm. Firmware: retry logic, timeout 20 ms, CRC8/CRC16 opcjonalnie.

Objawy i kody błędów

KodWarunek zapisuSkutek
E:I2C-21brak ACK po 3 próbach zapisu/odczytureset magistrali, retry ×2
E:I2C-33SCL utrzymuje stan LOW przez ≥ 32 mspełny reset MCU i urządzeń slave
W:I2C-05błąd CRC w ≥ 2 kolejnych pakietachlog ostrzegawczy, request repeat
W:EMI-09σ czasów narastania SDA/SCL > 450 nsfiltracja software i retry

Stanowisko i metodyka

Stanowisko: analizator logiczny 200 MHz, oscyloskop 350 MHz, generator EMI 5–30 MHz, sonda różnicowa do pomiaru sygnałów, termokamera 320×240, zasilacz laboratoryjny 3,3/5 V. Procedura: zapis/odczyt blokowy 64 B do EEPROM, polling czujników 1–5 Hz, pomiar czasów narastania SDA/SCL, CRC pakietów, rejestracja timeoutów.

ParametrWartość ref.Uwagi
fI2C100/400 kHzstandard/fast mode
RPU4,7 kΩ ±5%czas narastania < 1,2 µs
CBUS< 200 pFzalecenie specyfikacji
VOH/VOL≥ 0,7·Vdd / ≤ 0,3·Vddlogika CMOS

Wyniki i obserwacje

  1. Zatrzymanie magistrali: EEPROM (slave) pozostawiał SDA w stanie LOW po niepełnym STOP; SCL blokowany, E:I2C-33. Analizator wykazał „wiszące” START-y co 32–40 ms.
  2. Zakłócenia EMI: silnik BLDC generował harmoniczne 12–24 kHz i 3,2–5,4 MHz, wchodzące przez pętle masy → fluktuacje czasów narastania 650–900 ns; W:EMI-09 flagowane przy 400 kHz.
  3. Błędy CRC: przy polling 5 Hz do czujnika ciśnienia MS5803, 1/40 pakietów generował mismatch; korelacja z W:I2C-05. Przyczynowo: osłabiona integralność ścieżek SDA, rezystory pull-up ~10 kΩ zamiast 4,7 kΩ.
  4. Przegrzewanie MCU: TMCU~78 °C → wolniejsza flanka SCL (rise-time ↑ do 1,6 µs), nasilone W:EMI-09.
  5. Rozkalibrowane zegary: odchyłka ±4,5% w HSI 8 MHz → czas START/STOP generował pakiety niepoprawne (ACK timeout).
LOG START [I2C-COMM-25-452]
t[ms] f[kHz] SDA[V] SCL[V] rise[ns] ACK Flags
0     100    3.3    3.3    480      OK  -
428   400    3.3    3.3    750      NOK W:EMI-09
612   400    2.9    3.3    810      NOK W:I2C-05
734   400    3.3    3.3    1220     NAK E:I2C-21
1450  100    0.2    3.3    -        BUSY E:I2C-33
LOG END

Hipotezy przyczynowe (ranking)

  1. HANGUP EEPROM: brak obsługi STOP przez slave → magistrala w stanie LOW, potrzebny reset urządzeń (priorytet: wysoki).
  2. EMI/MASY: sprzęganie z napędu → fluktuacje narastania, błędy CRC (wysoki).
  3. PULL-UP: zbyt duże RPU, rise-time > 1,2 µs → błędy start/stop (średni/wysoki).
  4. CLK MCU: dryft zegara + TMCU↑ → niestabilne timingi (średni).

Wycinek procedury serwisowej

  1. Odłączyć zasilanie; pomiar rezystancji SDA/SCL do Vdd — oczekiwane ≥ 4,7 kΩ. Wartości > 8 kΩ → wymiana rezystorów pull-up.
  2. Analiza STOP/START: analizator logiczny, oczekiwany czas flanki SCL < 1,2 µs przy 400 kHz. Wartości > 1,4 µs → redukcja RPU do 3,3–4,7 kΩ.
  3. Test EMI: ekranowanie przewodów SDA/SCL, single-point ground, dodanie filtru ferrytowego < 600 Ω@100 MHz na wejściu modułu.
  4. Weryfikacja MCU: TMCU<70 °C; powyżej konieczny radiator termiczny 10×10×5 mm.
  5. Reset magistrali: sekwencja 9 impulsów SCL 400 kHz + STOP. Jeśli SDA nadal LOW → odłączyć zasilanie EEPROM > 500 ms.
  6. Test końcowy: polling 5 Hz, 10 000 pakietów, błędy CRC < 0,01%, brak E:I2C-21/E:I2C-33.

Wnioski

Awaryjność komunikacji I²C w modułach AGD wynika głównie z zawieszania się EEPROM-ów, niewłaściwych wartości pull-up, sprzęgania EMI z napędu oraz przegrzewania MCU. Po redukcji rezystorów RPU, dodaniu filtrów EMI, korekcji timingu i wdrożeniu sekwencji resetu udało się ograniczyć kody E:I2C-33/W:I2C-05 o ~92%.

W przypadku problemów powtarzalnych zalecana jest diagnostyka lokalna (serwis AGD w Miasto) z rejestracją logów SDA/SCL i błędów CRC.