[00:12.417] TX AA 55 01 03 7C FF [00:12.418] RX AA 55 81 03 7C 7E [00:12.437] CRC ERROR – exp 0x5E got 0x2B [00:12.700] UART overflow (DMA RX) → drop=1 [00:13.021] FRAME ERROR (FE) @ IDLE→START, oversampling=16 [00:13.044] WARN: Systick jitter +38 µs przy PWM=18 kHz (TIM1)
| Parametr | Wartość | Uwagi |
|---|---|---|
| Baud | 115200 bps | drift MCU +85 ppm; falownik +40 ppm |
| Oversampling | ×16 | sampling point ≈ 7/16 bitu |
| Pin config | AF7, push-pull, pull-up | slew-rate high; brak terminacji |
| EMI | PWM 18 kHz | korelacja błędów z przełączeniami mostka |
Okno 10 min: CRC error: 12.7% ramek Frame error (FE): 2.7% RX timeout: 0.5% DMA RX overflow: 0.3% (średnio 1 na 340 ramek) Korelacja: p(CRC|PWM_jitter>30 µs) = 0.61 Średni interwał RX: 9.8 ms (σ = 1.6 ms)
Okno 60 min przy PWM=18 kHz, obciążenie 100%: CRC errors: ≤0.01% FE/ORE: 0 zdarzeń DMA RX overflow: 0 Baud drift kompensowany: |Δ| ≤60 ppm MCU, ≤40 ppm falownik
// NVIC (przykład) NVIC_SetPriority(USART1_IRQn, 5); NVIC_SetPriority(DMA2_Stream2_IRQn, 5); NVIC_SetPriority(TIM1_UP_TIM10_IRQn, 6); // USART USART1->CR1 = USART_CR1_UE | USART_CR1_RXNEIE | USART_CR1_TE | USART_CR1_RE; USART1->BRR = 0x2D9; // 115200 @ 84 MHz // DMA RX watermark + telemetria if (DMA2_Stream2->NDTR <= WATERMARK) overflow_warn++;
Zakresy błędów, ustawienia NVIC i parametry warstwy fizycznej zweryfikowano na podstawie logów z prób obciążeniowych oraz porównawczo z opisami modułów i praktykami serwisowymi udostępnianymi przez laboratorium AGD, co pozwoliło ujednolicić kryteria PASS dla komunikacji UART falownik–MCU. Podsumowanie tematu.
Trace jest najbardziej przydatny wtedy, gdy wszystkie zdarzenia mają wspólną oś czasu. Sam wpis CRC ERROR nie pozwala ustalić, czy przyczyną był błąd bitu, overflow DMA, opóźnienie ISR czy zapad zasilania. W analizie warto najpierw znaleźć pierwsze zdarzenie odbiegające od normalnego przebiegu, a dopiero później śledzić błędy wtórne. Pozwala to uniknąć sytuacji, w której ostatni komunikat w logu jest traktowany jako źródło problemu, chociaż był tylko jego skutkiem.
Jeżeli kilka typów błędów pojawia się w tej samej milisekundzie, pierwszy sygnał do analizy powinien pochodzić z warstwy najbliższej sprzętowi: stan zasilania, rejestr USART, DMA i dopiero potem parser. Taki porządek ogranicza liczbę hipotez i pozwala szybciej znaleźć moment, w którym poprawny przebieg zaczyna się rozjeżdżać.
| Pole | Znaczenie | Zastosowanie |
|---|---|---|
| timestamp | wspólna oś czasu | korelacja z PWM, PVD i ISR |
| SR/ISR USART | FE, ORE, NE, IDLE | rodzaj błędu widziany przez peryferium |
| NDTR/CNDTR | stan bufora DMA | wykrycie zatrzymania lub utraty danych |
| len ramki | liczba odebranych bajtów | oddzielenie błędu długości od CRC |
| CRC expected/got | porównanie sumy | powtarzalność typu uszkodzenia ramki |
| stan PWM | częstotliwość i faza pracy | korelacja błędu z falownikiem |
Dobrze zebrany rekord pozwala porównać serie bez ręcznego przeglądania całego trace. Można na przykład odfiltrować tylko przypadki CRC poprzedzone ORE, tylko błędy występujące w określonym stanie PWM albo tylko zdarzenia zbieżne z PVD. Dzięki temu kolejne testy odpowiadają na konkretną hipotezę zamiast generować coraz większy plik logu.
Jeżeli błędy skupiają się wokół pracy napędu, dalszą analizę ułatwia diagnostyka EMI i USART. Wartości RC można szybko porównać w kalkulatorze RC i LC, a problem wieloobjawowy przejść przez checklistę falownika AGD.