Aus Raspberry Pi Geek 09/2023

Datenaustausch zwischen Komponenten analysieren (Seite 2)

Abbildung 1: Der Versuchsaufbau mit dem Testobjekt unten und dem Pico mit LogicAnalyzer oben.

Abbildung 1: Der Versuchsaufbau mit dem Testobjekt unten und dem Pico mit LogicAnalyzer oben.

Nach dem Start von LogicAnalyzer verbinden Sie sich mit der Messsonde, indem Sie oben links in der Ausklappliste die serielle Leitung auswählen, an der die Sonde hängt. Wenn sonst kein Pico am PC steckt, ist das /dev/ttyACM0. Anschließend wählen Sie Open device. Die Schaltfläche Refresh aktualisiert die Liste der Geräte, was notwendig ist, wenn Sie die Sonde erst nach dem Programmstart angesteckt haben.

Über die Schaltfläche Capture (oben rechts) konfigurieren Sie die Kanäle für die Messung. Für unser Anwendungsbeispiel sieht das so aus wie in Abbildung 2. Der Edge trigger (der Auslöser für die Messung) liegt hier auf dem zweiten Kanal (SCL) beim Übergang von High auf Low (Negative edge). Die anderen Felder konfigurieren die Frequenz (400 kHz für I2C), die Anzahl der Samples vor dem Auslösen der Messung (Presamples) und danach (Postsamples). Für Letzteres ist hier ein hoher Wert sinnvoll, da wir die gesamte Kommunikation mitschneiden wollen.

Abbildung 2: Die Messparameter lassen sich in LogicAnalyzer ausführlich konfigurieren.

Abbildung 2: Die Messparameter lassen sich in LogicAnalyzer ausführlich konfigurieren.

Die Messung

Das Ergebnis der Messung sehen Sie in Abbildung 3. Im unteren Bereich (grüne Kurve) wechselt SCL von High auf Low, bei jedem Übergang greift der Host den Bit-Wert in SDA ab. Die manuelle Übersetzung der Messung wäre extrem aufwendig und fehleranfällig, aber diese Arbeit übernimmt die Software. Im Menü unter Protocol analyzers konfigurieren Sie deshalb das verwendete Protokoll (hier I2C) und geben an, welcher Kanal welche Rolle hat.

Abbildung 3: Ein ausgewerteter Messdurchlauf mit den sehr hilfreichen Anmerkungen von LogicAnalyzer.

Abbildung 3: Ein ausgewerteter Messdurchlauf mit den sehr hilfreichen Anmerkungen von LogicAnalyzer.

Damit wird klar, was passiert (obere rote Kurve): Der Host startet die Kommunikation, in dem er ein Schreibkommando auf die Adresse 0x38 absetzt – das ist die I2C-Adresse des AHT20. Er schreibt dabei drei Bytes (0xAC, 0x33 und 0x00). Anschließend liest er von der Device-Adresse und erhält ein Byte (0x9C) zurück.

Um zu sehen, wie es weitergeht, müssen Sie nach rechts scrollen. Dafür gibt es einen so gut wie unsichtbaren Rollbalken ganz unten am Bildschirm (das Programm würde alleine deswegen durch jede Ergonomieprüfung fallen). Beim Scrollen fällt auf, dass der Host in regelmäßigen Abständen von 0x38 liest und immer wieder 0x9C zurückbekommt. Beim siebten Versuch gibt der AHT20 dann den Wert 0x1C zurück.

Was nun passiert, zeigt Abbildung 4. Links sehen Sie noch die erste 0x1C-Rückmeldung. Anschließend liest der Host dann sechs Bytes auf einmal. Die Interpretation der ganzen Kommunikation fällt leicht, auch wenn man den Treiber oder das Datenblatt nicht vorliegen hat: Mit dem ersten Befehl (Schreiben auf die Device-Adresse) fordert der Mikrocontroller Daten vom Sensor an. Anschließend fragt er mehrmals den Sensor ab, bis dieser seine Messung vorgenommen und aufbereitet hat. Wenn es so weit ist, liest der Controller dann die Daten.

Abbildung 4: Hier durchleuchtet LogicAnalyzer das Auslesen der Sensordaten vom AHT20.

Abbildung 4: Hier durchleuchtet LogicAnalyzer das Auslesen der Sensordaten vom AHT20.

Der ganze Vorgang lässt sich auch im Quellcode des AHT20-Treibers gut nachvollziehen [4]. Dort sehen Sie in der Methode _readdata() (in den Zeilen ab 141) den Schreibvorgang, das Polling und das finale Auslesen der Daten.

Fazit

Das kleine Anwendungsbeispiel kratzt nur an den Möglichkeiten von LogicAnalyzer. Es zeigt aber, mit wie wenig Mitteln Sie interessante Einsichten gewinnen können. Die Fehleranalyse ist dabei nur einer von vielen Anwendungsfällen. Ein weiterer wäre das Reverse Engineering, wenn etwa ein Hersteller kein Datenblatt bereitstellt oder Sie Zweifel an dessen Korrektheit haben. Unabhängig davon hilft die Visualisierung durch das Tool auch einfach beim Lernen: An praktischen Beispielen erkennen Sie, wie I2C oder andere Protokolle funktionieren.

Bei den Tests gab es nie Performance-Probleme oder Abstürze. Fehlerfrei ist die Software aber noch nicht. Aktuell stört vor allem, dass man das Protokoll für jede Messung erneut konfigurieren muss. Daneben gibt es diverse weitere kleinere Probleme. Dank der offenen Entwicklung auf Github hat der Autor diese schon an den Entwickler berichtet. Für die gelegentliche Nutzung im heimischen Elektroniklabor eignet sich die Anwendung trotzdem schon perfekt. (jlu)

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben