[SPI i I2C] Analiza protokołów szeregowych oscyloskopami Rohde&Schwarz, część 2

Na rys. 5 przedstawiono kilka możliwych błędów transmisji interfejsem SPI. W opisanym przykładzie Master 3-krotnie przesyła znak ASCII „A”. Za każdym razem układ Slave jest wybierany linią SS (niskim poziomem). Pierwszy bajt został przesłany bezbłędnie, w drugim pojawił się dodatkowy, dziewiąty impuls zegarowy. W tym przypadku jego lokalizacja po 8 prawidłowych impulsach nie zakłóciła interpretacji danej. Bajt został prawidłowo rozpoznany jako „A”, jednak na wykresie BUS zawierającym dekodowane znaki został wyświetlony czerwony znacznik błędu. Kolorem czerwonym zostały także narysowane znaczniki początku i końca bloku, które normalnie mają kolor zielony. W trzecim bajcie z kolei zabrakło jednego impulsu zegarowego. Dana została zinterpretowana błędnie jako znak „@” i w całości wyświetlona w kolorze czerwonym.

 

Rys. 5. Błędy transmisji obserwowane w interfejsie SPI

 

Jak już było wspomniane, w specyficznym trybie pracy interfejsu SPI linia SS nie musi być wykorzystywana. Kolejne bloki danych są rozróżniane na podstawie czasu przerwy między nimi. Na rys. 6. przedstawiono analizę wykonaną w takim przypadku. Przyjęto, że timeout jest tu równy 400 ms. Jest to czas odmierzany od początku ostatniego impulsu zegarowego. Jeśli w tym czasie nie wystąpi nowy impuls zegarowy, analizator uznaje, że blok został zakończony i na oscylogramie umieszczany jest odpowiedni znacznik. Ale uwaga, aby blok mógł być prawidłowo rozpoznany, analizator musi prawidłowo zlokalizować jego początek. Jeśli znajdzie się on poza lewą krawędzią ekranu, to cały blok nie jest dekodowany, mimo że doskonale można rozpoznać poszczególne bajty transmisji. Jest to dobrze widoczne na rys. 6.

 

 

Rys. 6. Transmisja via SPI bez linii SS – koniec bloku rozpoznawany na podstawie wykrycia przekroczenie timeoutu

 

Wyzwalanie zdarzeniami protokołu SPI

W interfejsie SPI występuje stosunkowo mało charakterystycznych zdarzeń, które mogłyby być wykorzystywane do wyzwalania. Pierwszym, nasuwającym się intuicyjnie, jest początek bloku. Zdarzenie to jest rozpoznawane po uaktywnieniu linii SS lub po przekroczeniu timeoutu rozdzielającego bloki (rys. 7). Opcja związana z timeoutem jest dostępna oczywiście tylko wtedy, gdy w definicji protokołu zaznaczono opcję „Frame condition -> CLK Timeout” (rys. 2).

 

Rys. 7. Opcje wyzwalania po wykryciu początku ramki

 

Jedną z metod poszukiwania określonej danej lub sekwencji danych przesyłanych liniami MOSI lub MISO jest wyzwolenie oscyloskopu po wykryciu obecności takich danych na tych liniach (rys. 8). W zakładce wyzwalania należy więc wybrać opcje: Protokol->SPI i Type->MOSI, lub w zależności od potrzeb Type->MISO, a nawet Type->MOSI/MISO, a następnie wprowadzić wzorzec poszukiwanych danych (rys. 8). Ostatnia opcja oznacza, że do wyzwolenia oscyloskopu konieczne jest jednoczesne spełnienie warunku dla linii MOSI i MISO. Przykładowe wyzwolenie po wykryciu sekwencji znaków ‘B’, ‘C’ na linii MOSI przedstawiono na rys. 9.

 

Rys. 8. Zakładka z wyborem opcji wyzwalania po detekcji określonej sekwencji na linii MOSI (także MISO i MOSI/MISO)

 

Rys. 9. Wyzwolenie po wykryciu sekwencji znaków ‘B’, ‘C’ na linii MOSI

 

O autorze