⇐ zurück zur Hauptseite

PC-Protokoll

  1. Kommunikation mit dem PC / Serielles Protokoll
  2. Funktionen
  3. Codierung der Befehle
  4. Fehlercodes/Rückmeldungen
  5. Timing und Reset
  6. Ideen für spätere Versionen

1. Kommunikation mit dem PC / serielles Protokoll:

Der PC sendet einen Befehl. Danach wartet er bis der TWI-Master mit einer Erfolgs- oder Fehlermeldung antwortet. Danach kann der nächste Befehl übertragen werden. Der aktuelle Befehl ist beendet, wenn sämtliche Antwort-Bytes übertragen wurden.

Die Zeitdauer zwischen den einzelnen Zeichen eines Befehls darf 250 ms nicht überschreiten. Ist sie länger, wird eine Zeitüberschreitung (Watchdog) erkannt und ein Reset ausgelöst.

Bei merkwürdigen Reaktionen des TWI-Masters ist davon auszugehen, dass die Synchronisation verloren gegangen ist. Die Firmware interpretiert Datenbytes als Kommandos. I.d.R. reicht es in diesem Fall, einfach zu warten. Nach einer kurzen Zeit (ca. 250 ms) wird die Watchdog-Einheit einen Reset auslösen. Dieser Reset kann anhand der folgenden Break-Bedingung auf dem seriellen Anschluss erkannt werden. Ab dann ist wieder eine synchrone Kommunikation möglich. Zuletzt besteht noch die Möglichkeit, aktiv einen Reset auszulösen.

TWI

Beim I²C (Inter-Integrated Circuit ) im Allgemeinen und beim Atmel TWI (Two-wire Serial Interface) im Speziellen gibt es mehrere Betriebszustände. Für diese Applikation sind nur die Zustände Master Transmitter Mode und Master Receiver Mode von Relevanz.

Je nach Betriebszustand und gerade ausgeführter Bus-Funktion können verschiedene Fehlersituationen auftreten, auf die angemessen reagiert werden muss. Der TWI-Master liefert i.d.R. eine treffende Fehlermeldung. Ist diese nicht ausreichend, kann über die Funktion GetTWIStatus u.a. der aktuelle Inhalt des TWI-Status-Registers abgefragt werden. Per GetExtendedError kann der Status der letzten durchgeführten TWI-Funktion abgefragt werden.

Bei den TWI-Funktionen, die das Erzeugen einer Starbedingung beinhalten, kann festgelegt werden, ob im Misserfolgsfall mehrfach versucht werden soll, die Startbedingung zu erzeugen. Es wird dann max. TwiTimeout Millisekunden lang versucht, die Arbitrierung des Busses zu übernehmen.

Bei einer TWI-Transferfunktion gibt es die Möglichkeit nach deren Beendigung den Bus freizugeben. Dies geschieht durch das Erzeugen einer Stopp-Bedingung. Alternativ verbleibt die Arbitrierung beim AVR und der nächste Übertragung wird mit dem Erzeugen einer Restart-Bedingung begonnen.

2. Funktionen

Funktion Beschreibung Parameter Rückgabe
Basis-Funktionen
SetTWI Schaltet die TWI-Einheit aus und belegt die I²C-Leitungen manuell. Je ein Bit für SDA und SCL Fehlercode
GetTWIState Liefert den Wert des TWI Status Registers (TWSR), den Zustand der TWI-Leitungen und den Wert von TWEN des TWI Control Registers (TWCR). - Fehlercode,
Status
TWIStart Erzeugt eine Start-Bedingung, wartet ggf. darauf, den BUS arbitrieren zu können. - Fehlercode
TWIStartNoWait Erzeugt eine Start-Bedingung, wartet nicht. - Fehlercode
TWIStop Erzeugt eine Stop-Bedingung. - Fehlercode
WriteByte Sendet ein einzelnes Byte. Byte Fehlercode,
Rückmeldung des Slaves
ReadByteACK Liest ein einzelnes Byte aus und sendet anschließend ein ACK-Bit. - Fehlercode, gelesenes Byte
ReadByteNAK Liest ein einzelnes Byte aus und sendet anschließend ein NAK-Bit. - Fehlercode, gelesenes Byte
SetTwiClockRate Legt die TWI-Übertragungsrate (Bit-Rate) fest. Takt-Code Fehlercode
GetTwiClockRate Liest die TWI-Übertragungsrate (Bit-Rate) aus. - Fehlercode,
Takt-Code
SetTwiTimeout Legt fest, ab wann bei der Erzeugung der Startbedingung auf Timeout erkannt wird. Anzahl ms (1..100) Fehlercode
GetTwiTimeOut Liest die Zeitdauer aus, nach der auf ein Timeout bei der Erzeugung der Startbedingung erkannt wird. - Fehlercode, Wert
SetTwiPullUp Schaltet die Pull-Up-Widerstände für die TWI-Bus-Leitungen. None, 5kΩ, 50kΩ Fehlercode
Stream-Funktionen
WritePacket Überträgt ein Datenpaket an den Slave. Slave-Adresse, Paketlänge, Nutzdaten Fehlercode
ReadPacket Fordert ein Datenpaket vom Slave ab. Slave-Adresse, Paketlänge Fehlercode, Paketlänge, Nutzdaten
Register-Funktionen
WriteRegisterPacket Kann durch WritePacket abgewickelt werden, indem zunächst die Registeradresse übertragen wird. - -
ReadRegisterPacket Fordert Inhalte aus einem Register ab. Slave-Adresse, Register-Adresse, Paketlänge Fehlercode, Paketlänge, Nutzdaten
Ergänzung-Funktionen
SetDDR Werte der DDR-Register für die IO-Pins festlegen. Pin#, Wert Fehlercode
SetPort Werte der PORT-Register für die IO-Pins festlegen. Pin#, Wert Fehlercode
GetDDR Werte der DDR-Register der IO-Pins auslesen. Pin# Fehlercode, Wert
GetPORT Werte der PORT-Register der IO-Pins auslesen. Pin# Fehlercode, Wert
GetPIN Werte der PIN-Register der IO-Pins auslesen. Pin# Fehlercode, Wert
ReadADC Liest die am Pin angelegte Spannung mittels des ADC aus. Der ADC-Pin wird NICHT selbständig auf Input geschaltet. Dies muss vorher per SetDDR und SetPORT geschehen.
Es wird jeweils der Mittelwert aus vier Messungen gebildet.
Pin#, Referenz-Spannung Fehlercode, Wert
ResetOut Legt die RstOut-Leitung auf Low für die per SetResetTime eingestellte Zeit. - Fehlercode
SetResetTime Legt die Zeit fest, wie lange die RstOut-Leitung auf Low gehalten wird (Standardeinstellung ist 10 ms). Anzahl ms (1..100) Fehlercode
GetResetTime Liest die vorgesehene Dauer des Reset-Pulses aus.   Fehlercode, Wert
Power Die anschaltbare Stromversorgung an- oder ausschalten. On/Off Fehlercode
GetPowerState Den aktuellen Status der anschaltbaren Stromversorgung auslesen. - Fehlercode, Wert
Trigger Auslösen des Trigger-Impulses. Die Dauer des Trigger-Pulses ist konstant 10µs. Der Ruhezustand dieser Leitung ist Low. Zum Triggern wird sie für die eingestellte Zeit auf High gelegt. - Fehlercode
NOP "No Operation", Synchronisation bzw. Lebenszeichen. - Fehlercode
GetExtendedError Zusätzliche Informationen bei Fehlercode FAIL abrufen. - Informationen zu Fehler
GetVersion Liefert die aktuelle Version der Firmware.   Fehlercode, Wert
Signal Signal-LED an- oder abschalten. On/Off Fehlercode
Reset Reset des ATmega per Watchdog. - Fehlercode

3. Codierung der Befehle

Das Bit 7 (MSB) wird nicht zur Befehlscodierung genutzt. Ist es bei der Übertagung gesetzt (= 1), wird vor der Ausführung des Befehls die Triggerleitung für 10 µs auf High gesetzt.

Mit den Fehlercodes OVERLAP und UNKNOWN muss immer gerechnet werden und werden deshalb nicht explizit erwähnt!

Einzel-Byte Befehle

Code Bedeutung Fehlercodes Anmerkung
0x00 SetTwi:
SDA=0, SCL=0
SUCCESS, FAIL FAIL: Der Befehl wurde ausgeführt, jedoch nehmen die Leitungen nicht den vorgesehenen Wert an. Ein anderer Bus-Teilnehmer beeinflusst den Leitungszustand.
0x01 SetTwi:
SDA=0, SCL=1
SUCCESS, FAIL - dito -
0x02 SetTwi:
SDA=1, SCL=0
SUCCESS, FAIL - dito -
0x03 SetTwi:
SDA=1, SCL=1
SUCCESS, FAIL - dito -
0x04 GetTWIStatus SUCCESS_1B Das folgende Datenbyte liefert den Wert des TWI Status Registers (TWSR) in den Bit 3..7, den Zustand  der SCL-Leitung in Bit 0, den der SDA-Leitung in Bit 1 und den Wert von TWEN des TWI Control Registers (TWCR) in Bit 2.
0x05 SendStart SUCCESS, FAIL FAIL: Das TWI-Interface des ATmega hat einen Fehler gemeldet.
0x06 SendStartNoWait SUCCESS, FAIL - dito -
0x07 SendStop SUCCESS, FAIL - dito -
0x08 Power Off SUCCESS -
0x09 Power On SUCCESS -
0x0A ResetOut SUCCESS -
0x0B NOP SUCCESS -
0x0C Trigger SUCCESS -
0x0D ReadByteACK SUCCESS_1B, FAIL SUCCESS_1B: Das folgende Datenbyte liefert den gelesenen Wert.
FAIL: Das TWI-Interface hat einen Fehler gemeldet.
0x0E ReadByteNAK SUCCESS_1B, FAIL SUCCESS_1B: Das folgende Datenbyte liefert den gelesenen Wert.
FAIL: Das TWI-Interface hat einen Fehler gemeldet.
0x0F ungültig UNKNOWN -
0x10 SetTwiPullUp
None: Kein Pull Up
SUCCESS -
0x11 SetTwiPullUp
Pull Up = 5kΩ
SUCCESS -
0x12 SetTwiPullUp
Pull Up = 50kΩ
SUCCESS -
0x13 GetVersion SUCCESS_NB Die folgenden Bytes enthalten die aktuelle Version der Firmware als String.
0x14 GetResetTime SUCCESS_1B Das folgende Datenbyte enthält die vorgesehene Dauer des Reset-Pulses in ms.
0x15 ungültig UNKNOWN  
0x16 GetExtendedError SUCCESS_2B Status des TWI-Moduls
0x17 GetPowerState SUCCESS_DATA LSB enthält den Status der anschaltbaren Stromversorgung: 0: aus, 1: an
0x18 GetTwiTimeout SUCCESS_1B Das folgende Datenbyte enthält die vorgesehene Dauer für das TWI-Timeout in ms.
0x19 GetTwiPullUp SUCCESS_DATA Status der geschalteten PullUp-Widerstände.
0x1A EnableTwi SUCCESS Die TWI-Einheit wird eingeschaltet.
0x1B GetBitRateCode SUCCESS_DATA Liest den aktuell gültigen Code für die I²C-Übertragungsrate (Bitrate) aus.
0x1C SignalOn SUCCESS Die Signal-LED wird angeschaltet.
0x1D SignalOff SUCCESS Die Signal-LED wird ausgeschaltet.
0x1E GetSignalState SUCCESS_DATA LSB enthält den Status der Signal-LED: 0: aus, 1: an
 0x1F ungültig UNKNOWN  
Befehle für die einzelnen IO-Pins
Die Pin-Nr. 0..3 wird in Bit 0..1 übertragen, Zusatzinformationen in Bit 3
0x2x x:0..7 SetDDR SUCCESS
0x2x x:8..F SetPORT SUCCESS  
0x3x x:0..3 GetDDR SUCCESS_DATA  
0x3x x:4..7 ungültig UNKNOWN -
0x3x x:8..B GetPORT SUCCESS_DATA  
0x3x x:C..F ungültig UNKNOWN -
0x4x x:0..3 GetPIN SUCCESS_DATA  
0x4x x:4..7 ungültig UNKNOWN -
0x4x x:8..B ReadADC
Ref. = VCC
ADC 0..3
SUCCESS_2B Die nachfolgenden beiden Bytes enthalten den ermittelten Wert. MSB zuerst.
0x4x  x:C..F ReadADC
Ref. = 2,56 V
ADC 0..3
SUCCESS_2B Die nachfolgenden beiden Bytes enthalten den ermittelten Wert. MSB zuerst.
Befehl zum Setzen der Bitrate
0x70 .. 0x7A SetBitrate SUCCESS Setzen der I²C-Übertragungsrate (Bitrate).
0x7B ..
0x7F
ungültig UNKNOWN -

Befehle mit fester Länge

Code Bedeutung 1. Folge-Byte 2. Byte 3. Byte Fehlercodes Anmerkung
0x50 WriteByte Daten-Byte - - SUCCESS_ACK, SUCCESS_NAK, FAIL  
0x51 SetTwiTimeout Anzahl ms (1..100) - - SUCCESS, INVALID INVALID: Anzahl ms = 0
0x52 ungültig - - - UNKNOWN  
0x53 SetResetTime Anzahl ms (1..100) - - SUCCESS, INVALID INVALID: Anzahl ms = 0 oder > 100
0x54 ReadPacket Slave-Adresse (0..127) Paketlänge N - SUCCESS_NB, INVALID, FAIL, SLAVE_ADDRESS INVALID: Adresse > 127
FAIL: Übertragungsproblem
0x57 ReadRegisterPacket Slave-Adresse (0..127) Register-Adresse Paketlänge N SUCCESS_NB, INVALID, FAIL, SLAVE_ADDRESS INVALID: Adresse > 127
FAIL: Übertragungsproblem
0x5B ..
0x5F
ungültig - - - UNKNOWN -

Befehle mit variabler Länge

Code Bedeutung 1. Folge-Byte 2. Byte 3. Byte 4.Byte Fehlercodes Anmerkung
0x60 WritePacket Slave-Adresse (0..127) Paketlänge N 3. Byte & ff
Dtenpaket
- SUCCESS, INVALID, FAIL, SLAVE_ADDRESS INVALID: Adresse > 127
FAIL: Übertragungsproblem
0x63 ..
0x6F
ungültig - - - - UNKNOWN -

4. Fehlercodes/Rückmeldungen

Fehler Bedeutung Code Symbol
Erfolg Erfolgreiche Durchführung, kein Fehler 0x00 SUCCESS
Erfolg, Rückmeldung im niederwertigen Nibble Erfolgreiche Durchführung, kein Fehler. Das Ergebnis wird im niederwertigen Nibble zurückgeliefert. 0x1x SUCCESS_DATA
Erfolg, ein Byte Rückmeldung Erfolgreiche Durchführung, kein Fehler, es wird ein Byte zurückgeliefert 0x21 SUCCESS_1B
Erfolg, zwei Byte Rückmeldung Erfolgreiche Durchführung, kein Fehler, es wird ein Byte zurückgeliefert 0x22 SUCCESS_2B
Erfolg, N Byte Rückmeldung Erfolgreiche Durchführung, kein Fehler, es werden N Bytes zurückgeliefert. Das folgende Byte ist die Längenangabe N (1..255). Danach folgen N Bytes an Daten 0x23 SUCCESS_NB
Lebenszeichen Bei Befehlen, bei denen erwartet wird, dass die Ausführung länger dauert, wird nach jeweils 50 ms ein Lebenszeichen gesandt. 0x40 PATIENCE
Zeitüberschreitung Befehlsausführung Der Befehl konnte nicht in der vorgesehenen Zeit durchgeführt oder beendet werden. 0x80 TIMEOUT
Unbekannter Befehl Der Befehlscode ist unbekannt. 0xB0 UNKNOWN
Ungültiger Parameter Der gesendete Parameter liegt außerhalb des Wertebereichs. 0xC0 INVALID
Erfolglos - Befehl konnte nicht ausgeführt werden.
- Das TWI-Interface hat einen Fehler gemeldet. Details zum Fehler über GetExtendedError abrufen.
0xD0 FAIL
Slave unbekannt Kein Slave hat auf die angegebene Adresse mit ACK geantwortet 0xE0 SLAVE_ADDRESS

5. Timing und Reset

Timing

Nach Übertragung des Kommando-Bytes erfolgt ggf. die Übertragung der zur Ausführung des Kommandos notwendigen Daten. Danach beginnt der Watchdog zu laufen (s. auch Firmware/Reset-Einheit). Üblicherweise ist die Ausführungszeit der Befehle recht kurz und das Ergebnis wird unmittelbar zurück geliefert.

Bei länger dauernden Befehlsausführungen wird nach jeweils 50 ms ein Lebenzeichen gesendet (PATIENCE). Dies betrifft die Befehle RstOut und die TWI-Funktionen (s.o.). Erhält der TWI-Host während der Befehlsausführung jeweils innerhalb von 100 ms keine erneute Meldung kann davon ausgegangenen werden, dass eine Fehlfunktion des TWI-Master vorliegt. Ein Read-Timeout von 100 ms auf der seriellen Schnittstelle erlaubt es, die Befehlsausführung per Ausnahme-Behandlung abzubrechen und zur erneuten Synchronisation auf das Reset-Signal des TWI-Master zu warten.

Die Zeitdauer des ausgehenden Reset-Impulses ist einstellbar, kann aber 100 ms nicht überschreiten. Bei den TWI-Funktionen ist die Dauer der Befehlsausführung durch TwiTimeout begrenzt (ebenfalls max. 100 ms). Eine Watchdog-Reset nach 250 ms würde also keinen gültigen Befehl unterbrechen. Die beim Wiederanlaufen des TWI-Master gesendeten Signale (Break und APP_START) ermöglichen dem TWI-Host die erneute Synchronisation.

Erhält der TWI-Host die Reset-Meldung nicht innerhalb einer angemessen Zeit von ca. 1.000 ms kann er seinerseits versuchen einen Reset auszulösen. Hilft auch das nicht, muss der Anwender aufgefordert werden, einen manuellen Reset vorzunehmen.

Das ganze in einem Zustandsdiagramm: TWI-Host Zustandsdiagramm

6. Ideen für spätere Versionen


⇐ zurück zur Hauptseite