Debugowanie sygnałów na szynach szeregowych przy użyciu oscyloskopów
| TechnikaChęć ograniczenia wymiarów urządzeń, poboru mocy i kosztów w przemyśle elektronicznym jest powodem coraz częstszego stosowania szyn szeregowych w urządzeniach embedded. Choć szyny szeregowe pozwalają ograniczyć liczbę wyprowadzeń układów scalonych, pobór mocy i powierzchnię płytki drukowanej, to jednak ich wadą jest większa złożoność projektu. Inżynierowie korzystający z tego typu szyn potrzebują szybkiej metody debugowania i walidacji swoich projektów.
Asynchroniczny tryb pracy przyjęty w wielu standardach transmisji szeregowej stanowi wyzwanie dla systemu rejestracji i dekodowania sygnałów. Podczas, gdy analizatory protokołów są doskonałymi narzędziami do identyfikacji błędów funkcjonalnych i czasowych pojawiających się na szynach szeregowych, oscyloskopy pozwalają inżynierom izolować źródła szumów, rejestrować zaburzenia impulsowe, przeprowadzać testy kompatybilności warstwy fizycznej i mierzyć pobór mocy.
Po wbudowaniu funkcji wyzwalania i dekodowania sygnałów na szynach szeregowych, oscyloskop staje się doskonałym wielofunkcyjnym narzędziem dla inżyniera pracującego nad systemami embedded.
Przechwytywanie i dekodowanie
Zanim w oscyloskopach pojawiły się dekodery sygnałów transmitowanych na szynach szeregowych, inżynierowie musieli ręcznie dekodować ramki danych. Wymagało to dobrej znajomości specyfikacji szyny szeregowej i nieco szczęścia potrzebnego podczas próby przechwycenia konkretnej ramki danych. Rysunek 1 przedstawia ramkę danych I2C przechwyconą na oscyloskopie z linią SCL (Serial Clock Line) podłączoną do kanału 1 i linią SDA (Serial Data Line) podłączoną do kanału 2. Zdekodowanie ręczne ramki danych wymaga zastosowania następującej procedury:
- zarejestrowania ramki za pomocą oscyloskopu,
- zarejestrowania zdjęcia ekranu,
- otwarcia obrazu na komputerze i dodania linii pomocniczej przy każdym narastającym zboczu zegarowym,
- przyporządkowania sygnałowi z linii SDA wartości logicznej 1 lub 0 w zależności od jego poziomu w momencie pojawienia się zbocza narastającego na linii SCL,
- przekonwertowania wartości binarnych na heksadecymalne, bazując na specyfikacji I2C. Zliczając takty zegara i wiedząc, że w specyfikacji I2C występuje impuls zerowy, 7 bitów adresowych, bit odczytu/zapisu, bit potwierdzenia, 8 bitów danych, kolejny bit potwierdzenia i w końcu bit stopu, możemy ustalić, że mamy do czynienia z ramką zapisu o polu adresu równym 0×29 i polu danych równym 0×04.
Taka metoda jest czasochłonna, a ponadto istnieje możliwość, że wychwycona ramka nie jest tą, której szukamy. Jeśli zachodzi potrzeba zdekodowania wielu ramek, potrzebny na to czas może być bardzo długi. W tej sytuacji zalety wbudowanej w oscyloskop funkcji wyzwalania i dekodowania sygnałów na szynach szeregowych stają się oczywiste. Na rysunku 2 uwidoczniono działanie tej funkcji.
Dodatkowo, zastosowano tu mechanizm wyzwalania sygnałem z szyny szeregowej pozwalający szybko odnaleźć konkretny pakiet danych. Przebieg niebieski w dolnej części ekranu odpowiada zdekodowanej ramce, a pomarańczowe znaczniki w górnej części ekranu oznaczają punkt wyzwalania. Użytkownik może wykorzystać wspomnianą funkcję do szybkiego odnalezienia konkretnych danych bez potrzeby wnikania w dokładną specyfikację szyny szeregowej.
Wykorzystanie pamięci segmentowanej
Przypuśćmy, że w systemie znajduje się kilka układów scalonych komunikujących się z mikrokontrolerem za pomocą szyny I2C i zachodzi potrzeba przeanalizowania wszystkich danych zapisywanych do konkretnego układu scalonego. Można to łatwo zrealizować ustawiając układ wyzwalania na wyszukiwanie konkretnego adresu zapisu.
W wyniku tego oscyloskop zostanie wyzwolony każdorazowo po pojawieniu się tego adresu na szynie, ale wciąż trudno byłoby przeanalizować wszystkie przesyłane dane z pojedynczego przebiegu rejestrowanego przez oscyloskop. Przychodzi tu z pomocą pamięć segmentowana.
Nakazuje ona oscyloskopowi czekać na pojawienie się warunku zdefiniowanego dla układu wyzwalania, a następnie przepisuje zarejestrowany przebieg do pamięci oscyloskopu, oznaczając go znacznikiem czasowym, ponownie uzbraja układ wyzwalania i oczekuje na ponowne pojawienie się warunku koniecznego do wyzwolenia oscyloskopu.
Na rysunku 3 uwidoczniono sytuację, gdy układ wyzwalania jest aktywowany każdorazowo po pojawieniu się komendy zapisu do układu scalonego o adresie wynoszącym 0×64, a licznik zapisu do pamięci segmentowanej ustalono na 1000. Dzięki temu można prześledzić kolejne dane zapisywane do konkretnego układu scalonego, ich częstotliwość występowania i obejrzeć fizyczny przebieg odpowiadający kolejnym ramkom. Jeśli w którejś z nich pojawią się nieoczekiwane wartości, użytkownik może łatwo podejrzeć fizyczny przebieg w celu sprawdzenia jego integralności. Błędy mogą być spowodowane szumem lub wystąpieniem przepięcia.
Wyszukiwanie impulsów zakłócających
Impulsy zakłócające sprzęgane z linią szeregową mogą powodować błędy danych lub powodować przypadkowe zresetowanie mikroprocesora. Przy użyciu tradycyjnych metod wyzwalania dostępnych w oscyloskopach mogą być one bardzo trudne do wyizolowania. Obecność cyfrowych danych szeregowych wraz z nałożonymi na nie impulsami zakłócającymi w dużym stopni utrudnia odnalezienie impulsu pojawiającego się sporadycznie.
Jedną z metod odnalezienia może być zastosowanie trybu nieskończonej poświaty. W trybie tym wyświetlacz nie jest wygaszany pomiędzy kolejnymi wyświetleniami przebiegów, lecz są one stale nanoszone na poprzednie. W wyniku wyświetlania wszystkich kolejnych ramek bez wygaszania, na ekranie pojawia się przebieg z wypełnionymi wszystkimi polami bitowymi.
Jeśli w przebiegu tym pojawiają się impulsy zakłócające, będą się one wyróżniały na ekranie i można je szybko zauważyć. Po stwierdzeniu obecności takiego impulsu należałoby go obejrzeć, a więc odpowiednio zaprogramować układ wyzwalania. Jak już wspomniano, używając tradycyjnych metod wyzwalania jest to bardzo trudne.
Jednak dzięki pojawieniu się oscyloskopów z ekranem dotykowym, pojawiła się też nieznana wcześniej metoda wyzwalania. Korzystając z funkcji Zone Trigger, wyzwalanie na impulsach zakłócających staje się trywialne. Na rysunku 4 widać sygnał na szynie USB z impulsem zakłócającym.
Aby wyzwolić oscyloskop na tym impulsie, należy jedynie narysować w odpowiednim miejscu pole i wybrać funkcję Zone 1 Must Intersect. Oscyloskop wyzwalał się wcześniej na początku ramki USB. Po włączeniu funkcji Zone Trigger otrzymuje dodatkowy warunek wyzwalania jedynie na tych ramkach, w których dodatkowo sygnał przecina narysowany obszar. Widać to na rysunku 5. Po takim zaprogramowaniu układu wyzwalania można analizować impuls zakłócający, próbując ustalić jego źródło.
Wyszukiwanie źródeł szumów
A co w sytuacji, gdy w systemie nie występują przypadkowe impulsy zakłócające, lecz zamiast tego obecny jest ciągły szum? Aby zidentyfikować jego źródło trzeba zastosować inną metodę, ponieważ oscyloskopu nie można wyzwolić na szumie. Przychodzi tu z pomocą matematyczna funkcja wyznaczania transformaty FFT (Fast Fourier Transform). FFT przekształca postać czasową sygnału na jego reprezentację w dziedzinie częstotliwości. Pozwala to identyfikować składowe w widmie będące źródłem szumu. Na rysunku 6 widoczny jest zaszumiony sygnał na szynie USB.
Już po pobieżnym przyjrzeniu się ramce danych USB widać, że napięcie międzyszczytowe szumu wynosi około 150 mV. Aby określić jego źródło zastosowana zostanie transformata FFT i markery szczytu (peak). Po pierwszym uruchomieniu FFT nie widać wyraźnie żadnego komponentu w widmie, odpowiedzialnego za szum. Wskazuje to na znacznie mniejszą częstotliwość sygnału zakłócającego od częstotliwości sygnału USB.
Aby zidentyfikować źródło szumu przeskalowano oś poziomą na zakres 10 ms/dz. Przy tej podstawie czasu FFT może identyfikować składowe o niskiej częstotliwości. Na rysunku 7 widać, że źródłem szumu jest składowa o częstotliwości równej około 61 Hz. Jest to więc szum pochodzący od sieci zasilającej, która w USA pracuje właśnie na tej częstotliwości.
Innym częstym źródłem szumów pojawiających się na szynach szeregowych są generatory zegarowe pracujące na częstotliwościach rzędu MHz. Na rysunku 8 przedstawiono transformatę FFT sygnału USB z sygnałem zakłócającym pochodzącym od zegara 16 MHz. Urządzenia korzystające z bezprzewodowych sieci LAN są ponadto narażone na szumy radiowe. Na rysunku 9 widać sygnał USB z sygnałem zakłócającym mającym swoje maksimum na częstotliwości 2,4 GHz, odpowiadającej właśnie częstotliwości pracy sieci WLAN.
Podsumowanie
Inżynierowie projektujący systemy embedded wciąż podejmują wyzwania związane z projektowaniem coraz mniejszych, tańszych i bardziej energooszczędnych urządzeń. Wymaga to korzystania z coraz lepszych narzędzi do debugowania i prowadzenia pomiarów. Nowoczesne oscyloskopy DSO z wbudowaną funkcją wyzwalania i dekodowania sygnałów z szyn szeregowych nadają się znakomicie do tego celu.
Konieczność ręcznego dekodowania ramek odchodzi dzięki nim do przeszłości. Zaawansowane tryby wyzwalania sygnałami z szyn szeregowych pozwalają rejestrować konkretne, interesujące użytkownika ramki znacznie łatwiej niż dotychczas. Pamięć segmentowana w połączeniu z układem wyzwalania sygnałami z szyn szeregowych umożliwia rejestrację i dekodowanie wielu konkretnych pakietów danych w długim okresie czasu.
Nowe techniki wyzwalania, które pojawiły się wraz z pojawieniem się w oscyloskopach ekranów dotykowych umożliwiają bardzo łatwe wyizolowywanie impulsów zakłócających. Z kolei źródła szumu ciągłego mogą być identyfikowane dzięki oscyloskopowej funkcji FFT. Inżynierowie mający na biurku nowoczesny oscyloskop zyskują więc równocześnie cały zestaw narzędzi przydatnych do debugowania.
AM Technologies
www.amt.pl