Hardware Reference
In-Depth Information
ser Befehle zur Gruppe der Query-Befehle gehören, würde der Parser nacheinander
mehrere Befehlsunterprogramme starten, die Antworten mitzuteilen haben. Die
einzelnen Antworten würden vom Response Formatter schön der Reihe nach in den
Ausgangsspeicher geschrieben werden, ebenfalls durch Semikolons voneinander
getrennt [IEEE488.2: 6.4.4]. Wenn nun aber bereits die erste Antwort das MAV-Bit
setzen würde, käme es eventuell doch wieder zu Synchronisationsproblemen. Der
Host würde das Status-Byte abholen und feststellen, dass eine Antwort bereitsteht,
obwohl der Parser noch gar nicht alle Befehle abgearbeitet hat. Für USBTMC-
Transfers macht es jedoch Sinn, dass wenigstens so viele Daten zum Senden bereit-
stehen, wie mit einer Transaktion übertragen werden können. Vorher ist es sinnlos,
Sendebereitschaft zu signalisieren. Demnach darf von antwortenden Befehlsunter-
programmen nicht von vornherein das MAV-Bit auf 1 gesetzt werden, sondern ein
Hilfsflag. Für Geräte, die 488.2 USB488 erfüllen sollen, ist allerdings nicht zulässig,
das MAV-Bit erst auf 1 zu setzen, wenn der Host einen Request des Typs
REQUEST_DEV_DEP_MSG_IN sendet [USB488: 4.3.1.3]. Deswegen wird in der
Software des Beispielgeräts das eigentliche MAV-Bit auf 1 gesetzt, sobald der Parser
alle Fernsteuerbefehle abgearbeitet hat, wenn das MAV-Hilfsflag ebenfalls 1 ist.
Diese Methode ist legal und eindeutig, wirft jedoch ein Problem auf, das im Zusam-
menhang mit dem Fernsteuerbefehl *STB? auftritt und in der Besprechung dieses
Befehls näher erläutert wird. An dieser Stelle reicht die Information, dass man sich
nicht auf den Zustand des MAV-Bits verlassen kann, wenn der Host versucht, das
Status Byte mit dem Fernsteuerbefehl *STB? (Status Byte Query) abzufragen. Daher
gibt es noch eine andere Methode, mit der der Host an das Status Byte gelangen
kann, bei der sichergestellt ist, dass das MAV-Bit korrekt übertragen wird. Das
geschieht mit der bereits angedeuteten Möglichkeit, sich Control Transfers zunutze
zu machen. Dazu wird der USB488 Subclass Device Request READ_STATUS_BYTE
verwendet, der bereits beschrieben wurde (Abschnitt 7.12.1). Hier kommt zusätz-
lich der Interrupt-IN Endpoint ins Spiel, auch das wurde bereits behandelt. An die-
serStelledesBuchsistessinnvoll,dasZusammenspiel aller Aktionen, die im
Zusammenhang mit demMEP ablaufen, einmal exemplarisch durchzuspielen, auch
wenn dazu etwas vorgegriffen werden muss (die verwendeten Fernsteuerbefehle
werden erst später im Buch ausführlich behandelt). Das folgende Beispiel kann wie-
der mit der USBIO Demo Application praktisch nachvollzogen werden.
Ein praktisches Beispiel für den Nachrichtenaustausch
An dieser Stelle soll nicht irgendein Beispiel herhalten, sondern das aus Abschnitt
3.2.2 des Standards USBTMC USB488. Dort wird der Fernsteuerbefehl *IDN?
behandelt.
Search WWH ::




Custom Search