Zurück zur Hauptseite

 

In­halts­ver­zeich­nis

Aufbau einer I²C-Sequenz

I²C-Sequenz

Sende-Paket (XmitPacket)

Einleseauftrag (ReadPacket)

Analyse der I²C-Daten


Aufbau einer I²C-Sequenz

Das obige Beispiel zeigt eine I²C-Sequenz zum Testen eines MC23017.

Wie I²C-Testsequenzen in das Testschema eingebunden werden, ist in der Anleitung beschrieben.

I²C-Sequenz

Eine I²C-Sequenz besteht aus beliebig vielen Sende-Paketen (XmitPacket), optional gefolgt von einem Einleseauftrag (ReadPacket) mit Erwartungswerten. Sende-Pakete werden durch einen senkrechten Strich ("|") getrennt, der Einlese-Auftrag wird von einem Rautenzeichen ("#") eingeleitet.

I2C-Sequenz

Sende-Paket (XmitPacket)

Die Sende-Pakete wird werden direkt über die I²C-Schnittstelle an des zu testende IC gesendet. Vor jedem einzelnen Paket wird eine Start-Bedingung erzeugt und zum Abschluss des Pakets eine Stopp-Bedingung.

Ein Sende-Paket (XmitPacket) beginnt einer I²C-Geräteadresse (DeviceAddress) gefolgt von beliebig vielen, aber mindestens einem zu sendenden Byte (ByteDefinition). Die einzelnen Bytes müssen durch ein Separatorzeichen Komma (",") oder Semikolon (";") getrennt werden.

Sende-Paket

Die Gerätedresse ist eine Zahl zwischen 0 und 127 im Dezimal oder Hexadezimal-Format. Für die ByteDefinition sind Werte zwischen 0 und 255 erlaubt. Vor oder nach den Zahlenwerten dürfen Kommentare (Comment) eingefügt werden.

I2C-Byte-Angaben

Dezimalzahlen (DecimalNumber) sind eine Folge von Ziffern. Bei Hexadezimalzahlen (HexNumber) ist der Ziffernfolge ein "0X" oder einfaches "x" in Groß- oder Kleinschreibung vorausgestellt. Die Ziffernfolge darf außerdem die Zeichen "A", "B", "C", "D", "E" oder "F" in Groß- oder Kleinschreibung enthalten.

I2C-Zahlen

Ein Kommentar (Comment) ist eine beliebige Zeichenfolge, die in Apostrophe eingeschlossen ist. Die Zeichenfolge selbst darf kein Apostroph enthalten. Es gibt hierfür auch kein Fluchtsymbol (Escape-zeichen). Als Kommentar gilt auch eine beliebig lange Folge von Leerzeichen.

I2C-Kommentar

Einleseauftrag (ReadPacket)

Das Einlese-Paket besteht aus der Angabe einer Geräteadresse (DeviceAddress, Dezimal- oder Hexadezimalzahl zwischen 0 und 127, Definition s.o.) und einer Folge von Erwartungswerten (Expectation, Dezimal- oder Hexadezimalzahl zwischen 0 und 255, Definition s.o.). Es werden genau so viele Bytes eingelesen, wie Erwartungswerte angegeben wurden. Die eingelesen Bytes werden an den PC gesandt und dort mit den Erwartungswerten verglichen.

I2C-Einlese-Auftrag

Analyse der I²C-Daten

Die I²C-Kommunikation besteht aus dem Versand mehrerer Folgen von Bytes, ggf. gefolgt vom Einlesen einer Byte-Folge. Die Byte-Folgen müssen nach den folgenden Regeln erfasst werden. Zunächst ein Beispiel:

Es soll ein IC vom Typ MCP23017 (ein 16-Bit I/O Expander mit Serial Interface) getestet werden. Im Testschritt sollen alle GPIO-Pins auf OUTPUT mit dem Logikpegel HIGH gesetzt werden. Anschließend sollen die Werte der GPIO-Pins zur Kontrolle ausgelesen werden. Mit den IODIRx-Registern (Registeradresse 0x00 ff) des IC wird der OUTPUT-Modus festgelegt, über die GPIOx-Register (Registeradresse 0x12 ff) wird der Logikpegel festgelegt bzw. ausgelesen. Es müssen jeweils zwei Bytes (Bank A und Bank B) geschrieben bzw. gelesen werden. So sieht es aus:

I²C-Sequenz

Die Analyse der Eingabedaten erfolgt über einen Zustandsautomaten in der Klasse I2cHelpers:

Zustandsdiagramm für die Syntaxanalyse