-
Die
Erfindung betrifft ein Schnittstellenmodul für einen Universellen Seriellen
Bus (USB) zur Verbindung mit einem USB über eine Programmierschnittstelle
für eine
USB-Funktion, insbesondere die Bereitstellung einer Synchronisation
zwischen einem Hardware-Schnittstellenmodul
und der Steuersoftware.
-
Der
USB ist eine normierte Peripherieschnittstelle für den Anschluß von Personalcomputern
an eine große
Vielzahl von Geräten,
beispielsweise digitale Telefonleitungen, Monitore, Modems, Mäuse, Drucker, Scanner,
Spielcontroller, Tastaturen und andere Peripheriegeräte. Der
USB ersetzt deshalb bekannte Schnittstellen, wie serielle Anschlüsse RS-232C,
parallele Anschlüsse,
PS/2-Schnittstellen und Spiel/MIDI-Anschlüsse.
-
Beim
USB nutzen alle angeschlossenen Geräte, die mit einem Personalcomputer
mit Hilfe einer einzigen Verbindungsart verbunden sind, einen "Tiered Star"-Aufbau. Ein Host-Personalcomputer
umfaßt
einen einzigen USB-Controller. Der Host-Controller bildet die Schnittstelle
zwischen dem USB-Netzwerk und dem Host-Personalcomputer. Der Host-Controller
steuert alle Zugriffe auf USB-Mittel und überwacht die Bus-Topologie.
Ein USB-Hub bildet USB-Anschlußpunkte
für USB-Geräte.
-
Die
USB-Hubs und -Geräte
können
ohne einen kompletten Neustart des USB-Netzwerkes miteinander verbunden
oder voneinander getrennt werden. Auf die Verbindung eines Gerätes oder
eines Hubs an einen Aufwärts-Hub
wird der Aufwärts-Hub
den Host-Controller über
eine Statusänderung
informieren. Gemäß dem USB-Protokoll
wird der Host-Controller den Anschluß des Hubs aktivieren, an welchen
das Gerät
angeschlossen wurde. Der Host-Controller wird anschließend jedem
Gerät eine
einmalige funktionelle Adresse zuweisen. Die Anschlüsse werden
bei der Zuweisung der einmaligen funktionellen Adressen durch den
Host-Controller, 102 der Reihe nach aktiviert. Nach dem Anschluß eines
Verbindungsgerätes
weist der Host-Controller
jedem Gerät
in dem Verbindungsgerät
eine einmalige funktionelle Adresse zu.
-
Eine
USB-Funktion ist ein Teil eines USB-Gerät, welches in der Lage ist,
Informationen auf dem Bus zu übertragen
und zu empfangen. Eine Funktion kann eine oder mehrere Konfigurationen
haben, wobei jede aus einem oder mehreren Endpunkten gebildet ist.
-
Ein
Endpunkt ist das Datenzuflußende
oder Datenabflußende.
Ein Endpunktkanal dient der Bewegung der Daten zwischen USB und
Speicher, und vervollständigt
den Weg zwischen dem USB-Host und dem Endpunkt der Funktion. Ein
USB-Gerät
kann zu jeder Zeit bis zu 16 derartige Endpunktkanäle unterstützen. Jeder Endpunktkanal
hat dieselbe funktionelle Adresse.
-
Bei
der Initialisierung eines Gerätes
assoziiert der Host-Controller einen Kanal mit den Endpunkt-Funktionen.
Der Kanal ermöglicht
es dem Host-Controller Daten in und aus einem Host-Speicherpuffer an
die und von den Endpunkten zu bewegen. Auf dem USB können zwei
Arten von Kanal-Kommunikationsbetriebsarten implementiert werden:
Strom und Nachricht. Stromdaten haben keine definierte USB-Struktur. Nachrichtendaten
haben eine definierte USB-Struktur.
-
Nachdem
der Initialisierungsprozeß abgeschlossen
ist, können
die Endpunktkanäle
speziellen Endpunkten zugeordnet werden. Entsprechend wird Geräten mit
einer Vielzahl von Endpunkt-Funktionen
eine Vielzahl von Kanälen
zugeordnet, die jeder mit einem speziellen Endpunkt verbunden sind.
-
Jeder
Endpunkt ist eine adressierbare Einheit auf dem USB. Von ihnen wird
verlangt, daß sie
auf Token von dem USB-Host-Controller antworten.
-
Obwohl
ein Gerät
ein Vielzahl von Endpunkt-Funktionen umfassen kann, arbeiten diese
Endpunkt-Funktionen nicht notwendigerweise gleichzeitig. Beispielsweise
kann ein Multi-Funktionsgerät eine Fax- und
eine Digitaltelefon-Funktion umfassen. Im Verlauf der Initialisierung
wird dem Multi-Funktionsgerät
eine einmalige funktionelle Adresse zugewiesen, und die Fax- und
die Digitaltelefonfunktion werden jeweils mit unterscheidbaren Endpunkt-Zahlen verbunden.
Während
der Initialisierung werden in gleicher Weise Ausganskanäle zur Datenübertragung
jeder Funktion zugeordnet. Ein Ausgangskanal ist mit einer Endpunkt-Nummer für die Fax-Funktion
assoziiert und ein Ausgangskanal ist mit einer Endpunkt-Nummer für die Druckerfunktion
assoziiert. Ein Fax und ein Digitaltelefon werden typischerweise
jeder einen isochronen Ausgangskanal verlangen, weil ihre Transaktionen
im Echtzeitbetrieb erfolgen sollten.
-
Das
Betreiben eines USB-Geräts
schließt
typischerweise ein Schnittstellenmodul ein, welches mit einem USB-Netzwerk
verbunden ist. Das Schnittstellenmodul umfaßt eine Programmierschnittstelle,
auf welche für
jede Operation einer Endpunkt-Funktion zugegriffen werden kann.
Die Endpunkt-Funktion schickt Daten an einen Endpunktkanal, so daß diese über ein
USB- Netzwerk übertragen
werden können.
In gleicher Weise empfängt
die Endpunkt-Funktion Daten von einem Endpunktkanal zur Nutzung
durch die Funktion.
-
Um
derartige Operationen über
ein USB-Netzwerk ausführen
zu können,
muß die
Funktion die Aktionen auf dem Schnittstellenmodul sorgfältig koordinieren.
Beispielsweise muß die
Funktion sichern, daß Bulk (Massen-)-Übertragungen
ohne Fehler abgeschlossen werden. Dieses verlangt das Bereitstellen
und Akzeptieren passender Handshakes (Quittierungen) mit einem Host-Controller. Die Zeit,
die eine Funktion zur Ausführung
derartiger Handshakes benutzt, begrenzt deren Fähigkeit, andere Operationen
auszuführen.
Weiterhin können
auf einem verrauschten USB-Netzwerk viele der übertragenen Daten beschädigt werden.
Dies erschwert die Arbeit der Funktion, welche passende Antworten
auf beschädigte
Daten liefern muß.
-
WO
99/08196 offenbart einen Mehrzweck-USB-Controller mit einer seriellen
Schnittstelle zur Verbindung mit einem Host. Die Schnittstelle kann
eine Trennungs-Nerbindungssequenz simulieren, wenn ein Reboot der
Vorrichtung vorgesehen ist. Der USB-Controller umfaßt Endpunkt-Steuerregister,
die für
jeden Endpunkt Steuerinformationen enthalten. Diese Steuerinformationen
sind in einem Byte pro Endpunkt gespeichert. Die Anmeldung wurde
nach dem Prioritätstag
dieser Anmeldung veröffentlicht.
-
Die
Druckschrift
EP 0 772
130 A1 betrifft die Übertragung
von Kommentaren und zugehörigen
Daten für
einen Cache-Speicher. Einzeldaten werden übertragen, die mit einem Befehl
verknüpft
sind, welcher zu einer Einrichtung übertragen wird, die einen Cache-Speicher
umfaßt,
welcher eine Vielzahl virtueller Geräte vorsieht. Der Puffer ist
für eine
ATM-Netzschnittstelle vorgeehen.
-
Deshalb
besteht Bedarf an einem USB-Schnittstellenmodul, welches eine effiziente
Programmierschnittstelle für
eine Funktion liefert, und welches von der Funktion einen minimalen
Aufwand für
die Ausführung
der Antworten auf typische USB-Netzwerk Bedingungen erlaubt.
-
Aufgabe
der Erfindung ist es, eine effiziente Schnittstelle für eine Funktion
zu schaffen.
-
Aufgabe
der Erfindung ist es, die Synchronisation zwischen der Hardware
eines USB-Geräts
und der Steuersoftware zu verbessern.
-
Aufgabe
der Erfindung ist es weiterhin, ein Programmiermodel mit definierten
Endpunkt-Zuständen zu schaffen.
-
Es
ist weiterhin Aufgabe der Erfindung, ein Endpunkt-Befehlsregister
zur Steuerung von Operationen eines Endpunktes mittels einer Funktion
zu schaffen.
-
Es
ist Aufgabe der Erfindung, auf Datentransaktionen ohne die Intervention
einer Funktion zu antworten.
-
Es
ist weiterhin Aufgabe der Erfindung, einer Funktion zu ermöglichen,
alle Pakete für
eine Transaktion gleichzeitig zu etablieren.
-
Aufgabe
der Erfindung ist es weiterhin, ein einzelnes leicht erweiterbares
Programmiermodel zur Handhabung aller Arten von Endpunkten und Schnittstellen
zu schaffen.
-
Die
Erfindung sieht ein Schnittstellenmodul für einen Universellen Seriellen
Bus mit den Merkmalen von Anspruch 1 und eine Vorrichtung zum Anschluß an einen
Universellen Seriellen Bus (USB), gemäß Anspruch 17 vor.
-
Dies
und andere Aufgaben, Eigenschaften und Vorteile sind in der folgenden
Beschreibung und den dazugehörigen
Zeichnungen offenbart.
-
1 zeigt
ein Blockdiagramm eines USB-Geräts
mit einem erfindungsgemäßen Schnittstellenmodul.
-
2 zeigt
ein Blockdiagramm einer bevorzugten Ausführungsform eines erfindungsgemäßen Schnittstellenmoduls
für ein
USB-Gerät.
-
3 zeigt
ein Blockdiagramm einer bevorzugten Ausführungsform des Endpunkt-Controllers gemäß 2.
-
4 zeigt
ein Blockdiagramm einer bevorzugten Ausführungsform eines Abbildungsregisters.
-
5 zeigt
ein Blockdiagramm mit einer bevorzugten Ausführungsform eines Programmiermodels
für ein
USB-Gerät.
-
6 zeigt
ein Flußdiagramm
einer bevorzugten Ausführungsform
von Zuständen
und Zustandsübergängen des
Endpunktes während
einer Steuertransaktion.
-
7 zeigt
ein Flußdiagramm
einer bevorzugten Ausführungsform
mit Zuständen
und Zustandsübergängen des
Endpunktes.
-
Die
in dieser Anmeldung beschriebene Erfindung ist Bestandteil einer
größeren Anzahl
von Erfindungen, die in weiteren Patent-anmeldungen desselben Anmelders
offenbart sind, und die mittels Referenz zum Bestandteil der vorliegenden
Anmeldung gemacht werden. Es handelt sich um die folgenden Patentanmeldungen:
(i) US-Patentanmeldung Nr. 09/003,963 mit dem Titel "Apparatus and Method
of Implementing a Versatile USB Endpoint Pipe", (ii) US-Patentanmeldung Nr. 09/004,003 mit dem
Titel "An Apparatus
and Method for Implementing a USB Endpoint Pipe with Double Buffering
Support", (iii)
US-Patentanmeldung Nr. 09/004,004 mit dem Titel "An Apparatus and Method for Transmitting
and Receiving Data Into and Out of a Universal Serial Bus Device", (iv) US-Patentanmeldung
Nr. 09/003,897 mit dem Titel "Apparatus
und Method of Transmitting and Reiceiving USB Isochronous Data", (v) US- Patentanmeldung Nr.
09/004,002 mit dem Titel "An
Apparatus and Method for Handling Universal Serial Bus Control Transfers", und (vi) US-Patentanmeldung
Nr. 09/003,925 mit dem Titel "An
Apparatus and Method for Initializing a Universal Serial Bus Device".
-
Darüberhinaus
ist das Dokument "USB
Node Interface Architecture Specification" (Version 0.6) der National Semiconductor
Corporation als Anhang A Bestandteil der vorliegenden Anmeldung.
-
Unter
Bezugnahme auf 1 wird ein erfindungsgemäßes USB-Gerät 110 beschrieben.
Die bevorzugte Ausführungsform
des Geräts
erfüllt
die USB-Vorschrift, Version 1.0. Sie weist jedoch gegenüber herkömmlichen
USB-Geräten
eine Anzahl von Vorteilen auf. Das USB-Gerät 110 umfaßt ein USB-Schnittstellenmodul 120,
eine Registergruppe 114, einen RAM 112 und eine
Bus-Schnittstelleneinheit (BIU) 116. Das Schnittstellenmodul
ist mit einem USB-Netzwerk verbunden, um Daten senden und empfangen
zu können.
-
Das
Schnittstellenmodul 120 ist auch mit der Registergruppe 114,
dem RAM 112 und der BIU 116 über einen Kernbus 118 verbunden.
Der Kernbus 118 ermöglicht
dem Schnittstellenmodul 120 den Zugriff auf die Registergruppe 114 und
den RAM 112. Die BIU 216 liefert mittels der Ausführung von
Schreib- und Leseübertragungen
als ein Master Zugriff auf den Kern-Adressraum, und liefert Registerzugriff
als ein Slave. Zusätzlich stellt
die BIU eine Datenleitung zur Verfügung. Die Datenleitung kann
genutzt werden, um Daten zeitweise auf Ihren Weg zu einem Speicherstelle
zu halten.
-
In 2 ist
das USB-Schnittstellenmodul 120 aus 1 beschrieben.
Das USB-Schnittstellenmodul 120 liefert
die Schnittstelle, um ein USB-Gerät 110 mit einem USB-Netzwerk zu verbinden.
Das Schnittstellenmodul 120 umfaßt einen integrierten USB-Sender-Empfänger 214,
eine serielle Schnittstellenmasehine (SIE) (212) und den
Endpunkt-Controller 210.
-
Der
Sender-Empfänger 214 liefert
die physikalische Schnittstelle mit einem USB-Netzwerk. Der Sender-Empfänger umfaßt zwei
Treiber und Empfänger,
welche die physikalischen Schichtvorschriften der Version 1.0 der
USB-Vorschriften erfüllen.
-
Die
serielle Schnittstellenmaschine 212 ist betreibbar mit
dem Sender-Empfänger 214 verbunden
und weist ein physikalisches (PHY)-Niveau und ein Medienzugriffs-Steuer
(MAC)-Niveau auf.
Das physikalische Niveau umfaßt
einen digitalen Zeittakt-Wiederaufnahmeschaltkreis, einen digitalen
Pannenfilter, einen End_Of_Packet-Erkennungsschaltkreis und einen Bit-Stuff-und
Bit-Destuff-Logikschaltkreis auf.
-
Das
Medienzugriffs-Steuerniveau umfaßt ein Paket zur Formatierung,
zur Erzeugung und zur Überprüfung der
zyklischen Redundanzüberprüfung, und
zur Erkennung der Endpunktadresse, und liefert die notwendige Steuerung,
für das
Geben der durch den Endpunkt-Controller 210 für den spezifizierten
Endpunktkanal bestimmten NAK-, ACK- und STALL-Antworten. Die serielle
Schnittstellenmaschine 212 ist auch dafür verantwortlich, daß USB-spezifische
Ereignisse, wie ein Reset, Suspend und Resume erkannt und übermittelt werden.
-
Der
Endpunkt-Controller 210 ist betreibbar mit der seriellen
Schnittstellenmaschine 212 verbunden und liefert die Schnitt-stelle
für die
USB-Funktionsendpunkte.
-
Der
Endpunkt-Controller 210 arbeitet als ein Master/Slave auf
dem Kernbus 118 und unterstützt alle USB-Endpunkt-Klassen:
Steuerung, Bulk, Isochron und Interrupt. Der Slave-Zugriff wird benutzt,
um auf interne Steuerregister der Registergruppe 114 zuzugreifen.
Der Master-Zugriff wird benutzt, um Daten zwischen Endpunkten und
einem RAM 112 zu übertragen.
-
Der
Endpunkt-Controller 210 bewahrt separate Zustandsinformation
für jeden
Endpunktkanal. Zustandsinformation, die für unmittelbare Entscheidungen
verlangt wird, wie z.B. zum Antworten mit einem NAK- oder STALL-Handshake,
wird in dem Endpunkt-Controller 210 zu jeder Zeit für alle Endpunktkanäle in einem teilweisen
Endpunktkanal-Speicher gehalten.
-
Diese
Information wird benutzt, um die Medienzugriffs-Steuerschicht der
seriellen Schnittstellenmaschine 212 beim Geben der passenden
ACK-, NAK- und STALL-Antwort zu führen. Andere für den Endpunkt-Betrieb
notwendige Information wird in einer Entpunkt-Anordnung des RAMs 112 gehalten.
-
Unter
Bezugnahme auf 3 wird die Struktur des Endpunkt-Controllers 210 im
Detail beschrieben. Der Endpunkt-Controller 210 umfaßt einige
funktionelle Blöcke.
Insbesondere umfaßt
der Endpunkt-Controller 210 eine Medienzugriffs-Steuerschnittstelle 302,
einen Gerätefunktionsblock 304,
eine Endpunkt-Zu-standsmaschine 306, einen Endpunktkanal-Teilspeicher (PEPS) 308,
einen Adressgenerator 310 und ein Daten-Ausrichtungsmultiplexer 312.
-
Die
Medienzugriffs-Steuerschnittstelle 302 ist mit der Endpunkt-Zustandsmaschine 306 und
dem Daten-Ausrichtungsmultiplexer 312 verbunden, um für das Medienzugriffs-Steuerniveau
der seriellen Schnittstellenmaschine 212 eine Schnittstelle
zu liefern. Einige Bereiche des Endpunkt-Controllers 202 arbeiten
mit einem Taktgeber auf dem Kernbus 118. Andere Bereiche
arbeiten mit einem lokalen Taktgeber des Endpunkt-Controllers 210.
Die Medienzugriffs-Steuerschnittstelle 302 synchronisiert
die Datenbytes zwischen den verschiedenen Bereichen mit einem asynchronen
Handshake für
jedes aus dem Endpunkt-Controller 210 übertragene Byte.
-
Der
Gerätefunktionsblock 304 führt Gerätefunktionen
aus, wie die Adressüberprüfung und – erzeugung.
Der Gerätefunktionsblock
ist betreibbar mit der Endpunkt-Zustandsmaschine 306 verbunden,
um Informationen in Bezug auf den Endpunktkanal zu liefern, auf
welchen gegenwärtig
zugegriffen wird.
-
Die
Endpunkt-Zustandsmaschine 306 führt Funktionen bezüglich der
Bewahrung des Zustandes eines aktiven Endpunktkanals aus. Die Zustandsmaschine 306 bewahrt
den Zustand eines aktiven Endpunktkanals mit definierten Übergängen, um
Hardware- und Software-Wechselwirkungen
zu synchronisieren. Der gegenwärtige
Zustand ist für
einen Host- Controller über ein
Endpunkt-Zustandsregister sichtbar. Alle Endpunktkanäle teilen
sich deshalb die Endpunkt-Zustandsmaschine 306.
-
Der
Endpunktkanal-Teilspeicher 308 speichert zu jeder Zeit
für jeden
Endpunktkanal Zustandsinformationen, welche für unverzügliche Entscheidungen, wie
das Antworten mit einem NAK- oder STALL-Handshake verlangt wird.
-
Der
Adressgenerator 310 liefert die Adressen, die für das Lesen
und Schreiben in den RAM über
den Kernbus notwendig sind.
-
Der
Daten-Ausrichtungsmultiplexer 312 stellt die vor der Übertragung
auf dem Kernbus notwendigen Datenbyte-Ausrichtungen zur Verfügung.
-
Eine
bevorzugte Ausführungsform
der erwähnten
Endpunktkanal-Anordnung wird im folgenden im Detail beschrieben.
In 5 ist ein bevorzugtes Programmierungsmodell gezeigt.
Das Programmierungsmodel zeigt eine Vielzahl von Registern 510,
welche dazu genutzt werden, die Operationen auf einem USB-Gerät zu steuern
und zu überwachen.
Das Modell umfaßt
weiterhin eine in dem Speicher 520 angeordnete Endpunktkanal-Anordnung 522.
Die Endpunktkanal-Anordnung 522 wird benutzt, um die für eine bestimmte
Endpunkt-Übertragung
spezifischen Endpunkt-Parameter zu steuern.
-
Teile
der Registergruppe 510 und Teile des Speichers 520 sind
aufeinander abgestimmt, um eine spezielle Endpunkt-Übertragung
zu überwachen
und zu steuern. In 5 ist auch eine bevorzugte
Ausführungsform
der Beziehung zwischen der Registergruppe 510 und dem Speicher 520 dargestellt.
-
Die
Endpunktkanal-Anordnung 522 umfaßt für jeden der sechzehn Endpunktkanäle ein erstes
Steuerwort CW0 und ein zweites Steuerwort CW1. Die Endpunktkanal-Anordnung 522 ist
in dem Speicher auf einer Adresse angeordnet, die in einem Endpunkt-Anordnungs-Basisadressregister
(EABAR) 512 gespeichert ist. Diese Endpunktkanal-Anordnung
ist mit tels einer vier-Bit-Endpunktkanal-Zahl und eines Ein-Bit-Endpunktkanal-Steuerwortzeigers
indiziert. Wie dargestellt ist, zeigt eine Endpunkt-Zahl von null,
EP0 532 auf das erste Paar Steuerwörter in der Endpunktkanal-Anordnung 522.
In gleicher Weise zeigt EP1 534 auf das zweite Paar Steuerwörter, und
EP2 536 zeigt auf das dritte Paar usw. EP15 538 zeigt
auf das letzte Paar der Steuerwörter in
der bevorzugten Ausführungsform.
-
Die
Steuerwörter
umfassen die gesamte verlangte Information, um einen aktiven Endpunktkanal
zu betreiben. Wie in dem Block 524 dargestellt ist, weist
jedes Steuerwort die Information über den Zustand, den Parameter,
die Adresse und den Umfang eines Endpunktkanales auf. Es existieren
zwei solche Einträge
für jeden
Endpunktkanal. Mittels des Wertes des Endpunktkanal-Steuerwortzeigers
CWP wird das Steuerwort bestimmt, auf welches als nächstes zugegriffen
wird.
-
Unmittelbar
nach dem Empfang eines IN-, OUT- oder SETUP-Tokens an einem gegenwärtig in
einem Ready-Zustand befindlichen Endpunktkanal wird das Steuerwort
des ausgewählten
Endpunktkanales am gegenwärtigen
Steuerwort-Zeiger gelesen, um zu bestimmen, wie auf den Token zu
antworten ist. Wenn am Ende einer Übertragung der Abschluß-Status
geschrieben ist, wird das Steuerwort mit dem gegenwärtigen Status
aktualisiert, das CWP wird inkrementiert, und das andere Steuerwort
wird gelesen. Wenn ein Zwischenstatus geschrieben wird, wird nur
das signifikanteste Byte des Steuerworts aktualisiert. Das Format
des Steuerwortes ist im folgenden dargestellt:
Bits | Funktionsbezeichnung |
31 – 28 | Buffer
State (Pufferzustand) |
27 | (Reserviert) |
26 – 16 | Buffer
Address BA (Pufferadresse) |
15 | Buffer
Page BP (Pufferseite) |
14 | Buffer
Rounding (Pufferrunden) |
13 | Toggle
Enable TE (Umschaltaktivierung) |
12 | Type
Isochronous TI |
11 | Interrupt
on Packet Complete (Interrupt auf Paketabschluß) |
10 | Interrupt
on Packet Error IE (Interrupt auf Paketfehler) |
9 – 0 | Byte
Count BC (Byte-Zähler) |
-
Der
4-Bit-Pufferzustand BS ist ein Paket des Steuerwortes, welches für die Anwendung
der Erfindung relevant ist. Der Pufferzustand wird mittels Software
und mittels des Endpunkt-Controllers
(EPC) aktualisiert, um die Steuerung dieses Puffers und zwischen
den Puffern zu synchronisieren. Der EPC schreibt den die Nutzung
des Puffers anzeigenden Status. Dieses Feld wird mittels Firmware
für den
Knoten auf Output Ready, Input Ready, Setup Ready, Skip, Stall und
Disable (siehe unten) gesetzt. Alle anderen Werte werden mittels des
EPC gesetzt. Der STALL- und der Disable-Wert können von dem EPC bei Fehlerbedingungen
geschrieben werden. Der Puffer kann mittels Knoten-Firmware wieder
beansprucht werden, wenn der Pufferzustand irgendein Complete (Fertigstellungs-)-Wert
ist. Dieses umfaßt
den Eingangs-/Ausgangs-Complete-Status und die Fehlercode.
-
Der
Pufferzustand BS kann die folgenden Werte annehmen:
- 0: Skip. Dieser Wert wird zusammen mit dem Output Ready-Befehl
genutzt. Skip führte
dazu, daß das nächste empfangene
Datenpaket ignoriert wird, und daß der Steuerwort-Zeiger inkrementiert
wird. Für Steuer-Endpunkte
führt es
weiterhin dazu, daß der
Endpunktkanal-Zustand
von dem Input/Ready-Zustand in den Output/Input-Idle (Leerlauf)-Zustand
geschaltet wird. Das Setzen von TE und TI bestimmt, welcher Handshake
zurückgesendet
wird, und bestimmt den nächsten
Zustand des Endpunktkanals. Ein NAK wird zurückgesendet, wenn entweder TE
oder TI gesetzt ist. Wenn TI und nicht TE gesetzt ist, wird kein
Handshake zurückgesendet.
Wenn TE gesetzt ist, wird ein ACK zurückgesendet, und der komplette
Status wird geschrieben, wenn ein Paket mit einem geeigneten PID
empfangen wurde.
- 1: Input Ready IRDY. Dieser Wert zeigt an, daß in den
Puffer Daten geschrieben wurden, um diese als Reaktion auf einen
IN-Token zu übertragen.
- 2: Output Ready ORDY. Dieser Wert zeigt an, daß der Puffer
für das
Schreiben zugeordnet wurde.
- 3: Setup Ready SRDY. Dieser Wert zeigt an, daß der Puffer
für das
Schreiben zugeordnet wurde. Dieses wird an einem Steuerendpunkt
nur während
der ersten Übertragung
von Steuer-Lese-
und Steuer-Schreib-Operationen genutzt. Schreib nur in das Steuerwort
0.
- 4: Output Wait OWT. Dieser Wert zeigt an, daß ein Fehler während des
Empfangs der OUT-Daten
von dem Host aufgetreten ist. Dieses umfaßt das Erkennen eines Bit-Überlauf-Fehlers.
Da dies als ein Zwischenstatus betrachtet wird, wird ein erneuter
Versuch erwartet. Ausnahme ist der Fall eines isochronen OUT-Endpunktes,
bei dem es als ein Fertigstellungs-Status behandelt wird.
- 5: CRC Error CRCE. Dieser Wert zeigt an, daß am Ende einer Out-Transaktion
ein schlechtes CRC erkannt wurde. Da dies als ein Zwischenstatus
betracht wird, wird ein erneuter Versuch erwartet. Die Ausnahme
ist der Fall eines isochronen Out-Endpunktes, bei dem es als ein
Fertigstellungs-Status behandelt wird.
- 6: Buffer Error BUFE. Dieser Wert zeigt an, daß während einer
OUT-Transaktion, Daten von dem USB schneller empfangen wurden, als
sie in den Speicher geschrieben werden konnten. Während einer IN-Transaktion
wurden die Daten aus dem Speicher nicht schnell genug gelesen, um
mit der USB-Datenrate mitzuhalten. An diesem Endpunkt wird eine
Wiederholung erwartet.
- 7: Input Wait IWT. Dieser Wert zeigt an, daß der Puffer durch einen Endpunkt-Controller
gehalten wird, und daß der
Puffer auf die nächste
Gelegenheit wartet, um zu versuchen oder erneut zu versuchen, diesen
Puffer zu übertragen.
Dieses tritt auf, wenn eine Quittierung fehlt.
- 8: Input Complete ICMP. Dieser Wert zeigt den erfolgreichen
Abschluß dieser
Eingabeoperation an. Der Puffer kann freigegeben werden.
- 9: Output Complete OCMP. Dieser Wert zeigt an, daß der Puffer
mit Daten voll ist, und daß kein
Fehler erkannt wurde.
- 10: Token Error TKNE. Dieser Wert zeigt an, daß ein Token
des falschen Typs für
den momentanen Kontext dieses Steuer-Endpunktkanals empfangen wurde.
Wenn dieses ein Ausgabepuffer war, wird der Endpunkt gehalten. Wenn
dies ein Eingabepuffer war, wird ein NAK gesendet, und der Zustand
des anderen Steuerwortes wird untersucht. Dieses wird als Abschlußstatus
betrachtet.
- 11: Isochronous Synchronization Error SYNE. Dieser Wert zeigt
an, daß Daten
in einem Puffer mit TE = 1 und TI = 1 empfangen wurden, wobei der
CWP nicht gleich dem LSB des FNR war. Dies wird als ein Abschlußstatus
betrachtet.
- 12: Data Error DATE. Dies tritt für OUT-Daten auf, wenn CW.BR
nicht gesetzt ist, und der vom Host empfangene Datenumfang geringer
als erwartet war, oder der zugeordnete Puffer nicht groß genug
war, um die OUT-Daten zu speichern. Für IN-Daten wird dieses gesetzt,
wenn ein Pufferfehler auftritt, und CW.TE nicht gesetzt oder CW.TI
gesetzt war. Dies wird als ein Abschlußstatus betrachtet.
- 13: (Reserviert).
- 14: Halt. Dieses bringt den gegenwärtigen Endpunktkanal dazu,
seinen HALT-Zustand einzunehmen, oder zeigt an, daß der Endpunkt
den HALT-Zustand eingenommen hat.
- 15: Disable. Dieses bringt den momentanen Endpunktkanal dazu,
seinen DISABLE-Zustand einzunehmen, oder zeigt an, daß der Endpunktkanal
den DISABLE-Zustand eingenommen hat.
-
Die
Puffer-Adresse BA hält
die unteren 11 Bits der Pufferadresse. Puffer müssen an einer ausgerichteten
Doppelwort-Grenze beginnen und können
an jeder Byte-Grenze enden. Am Ende aller abgeschlossenen Übertragungen
wird der verbleibende Wert der Pufferadresse geschrieben. Dieses
Feld wird am Ende von nicht vollständig ausgeführten Übertragungen nicht überschrieben,
z.B. wenn der Status auf Eingangs- oder Ausgangswarten geschrieben
ist. Für
OUT-Puffer ist das erste gespeicherte Byte das dem PID folgende
Byte. Ähnlich
ist es für
IN-Puffer. Die Adresse
zeigt auf das erste Byte der zu übertragenden
Daten, d.h. das Byte, welches im Paket unmittelbar auf das PID folgt.
Der CRC wird automatisch berechnet und an das Paket angehangen,
es sei denn, ein IN-Token wird vom IS_RDY-Zustand empfangen, und
in dem Steuerwort ist das IS-Feld nicht auf 1 gesetzt.
-
Das
Puffer-Seiten-Bit, BP, wählt
zwischen einem Puffer-Seiten-A-Register, BPA 512, und einem
Puffer-Seiten-B-Register, BPB 516 aus. Das BP wählt das
BPA in einem Null-Zustand und wählt
das BPB in einem Zustand, in dem es als die obere Speicheradresse
des gegenwärtigen
Eingangs-/Ausgangspuffers benutzt wird.
-
Das
Pufferrundungsbit BR wird für
Out-Transaktionen genutzt. Es zeigt an, ob ein empfangenes Datenpaket
kleiner als der Datenpuffer sein kann. Wenn das BR null ist, sollte
das Datenpaket den definierten Datenpuffer exakt füllen. Ein
Pufferüberlauf-
oder Pufferunterschreitungs-Status wird angezeigt, wenn das Paket
nicht exakt in den Puffer paßt.
-
Wenn
das BR zusammen mit einem Ausgangsabschluß- oder Datenfehler-Pufferstatus
gelesen wird, zeigt das BR den Wert des empfangenen PIDs an. Es
ist null für
DATA0 und 1 für
DATA1.
-
Das
Toggle-Enable-Bit (Umschaltaktivierungs-Bit), TE, wird benutzt,
um den. Steuerwort-Zeiger
für ein OUT-Token
mit dem Datenpaket-Identifizierer, PID, welcher einen Wert von entweder
DATA0 oder DATA1 hat, zu vergleichen, und wird benutzt, um einen
Datenpaket-Identifizierer
für einen
IN-Token zu erzeugen.
-
Wenn
das TE in einem Null-Zustand ist, wird das Daten-Toggle-PID einer
OUT-Transaktion nicht überprüft. Das
Daten-Toggle-PID wird auf der Basis des gegenwärtigen Wertes des CWP als Antwort
auf IN-Token erzeugt. Das CWP wird nach jeder Transaktion inkrementiert
(invertiert), auch wenn ein ACK nicht empfangen wurde. Für Isochrone
Endpunkte werden OUT-Daten nicht in dem Speicher geschrieben, bis
das CWP gleich dem letzten signifikanten Bit der Frame-Zahl, FNR,
ist. Dieses hat keinen Einfluß auf
die als Antwort auf die IN-Token gesendeten Daten. Das Datenumschalten
sollte nicht für
Puffer aktiviert werden, die zugeordnet wurden, um Daten mit einem
SETUP-Token zu empfangen.
-
Wenn
das TE in einem Eins-Zustand ist, wird das Daten-Toggle-PID einer
OUT-Transaktion geprüft. Das
Daten-Toggle-PID wird auf der Basis des gegenwärtigen Wertes des CWP als Antwort
auf IN-Token erzeugt. Für
OUT-Transaktionen verursacht das TE, daß ein ACK als Antwort auf die
OUT-Pakete gesendet wird, dessen PID-Wert (DATA0 oder DATA1) nicht
mit dem CWP übereinstimmt.
Für IN-Transaktionen
wird das CWP nur nach jeder Transaktion inkrementiert (invertiert),
wenn innerhalb der Antwortzeitperiode ein ACK-Handshake zurückgesendet
wurde. Für
Isochrone Endpunkte werden die OUT-Daten immer in den Speicher geschrieben.
Wenn jedoch das letzte signifikante Bit der FNR nicht gleich dem
CWP ist, wird der ISO-Sync-Fehlerpufferzustand zurückgeschrieben.
-
Das
Isochron-Typenbit TI zeigt an, ob der Endpunktkanal isochron ist.
Wenn das TI in einem Eins-Zustand ist, sind die Daten isochron.
Wenn das TI in einem Null-Zustand ist, kann der Endpunktkanal ein
Steuer-, Bulk- oder Interrupt-Endpunktkanal sein.
-
Ein
Interrupt-Paketabschluß-Bit,
IC, wird immer gesetzt, wenn der Pufferstatus nach einem Paketfehler
auf Eingangs- oder Ausgangsabschluß geschrieben wird, oder wenn
der Endpunktkanal verstopft ist.
-
Ein
Interrupt-Paketfehler-Bit, IE, wird immer gesetzt, wenn der Pufferstatus
auf einen der Puffer-Fehlercodes geschrieben wird, oder wenn der
Endpunkt verstopft ist.
-
Wenn
das IC und der IE gesetzt sind, veranlassen die CRC- und Bit-Stuff-Fehler,
daß die
entsprechenden Puffer nicht in einer normalen Operation erneut genutzt
werden. Dieses ermöglicht
die nachfolgende diagnostische Überprüfung der
entsprechenden Puffer.
-
Byte-Zählbits,
BC, zeigen den Umfang des zu nutzenden Datenpuffers an. Ein Puffer
muß an
einer geraden Doppelwortgrenze beginnen, kann jedoch an jeder beliebigen
Byte-Grenze enden. Für
IN-Transaktionen zeigt das BC den Umfang der zu übertragenden Daten an. Für OUT-Transaktionen
zeigt das BC den Umfang des Puffers an, in welchem die Daten empfangen
werden können.
Das BC kann eine Null halten, um ein Null-Längen-Datenpaket anzuzeigen.
Am Ende aller abgeschlossenen Übertragungen
wird der Restwert des Byte-Zählers
geschrieben. Am Ende einer nicht abgeschlossenen Übertragung,
z.B., wenn der Status Eingangs- oder Ausgangswarten anzeigt, wird
dieses Feld nicht überschrieben.
-
Bei
einer bevorzugten Ausführungsform
weist das Endpunkt-Befehl-Register, ECR
518, die Breite
eines Wortes auf, und ist ein Lese-/Schreibregister. Das ECR
518 wird
genutzt, um Befehle an einem spezifizierten Endpunkt auszuführen. Durch
ein Reset wird das Register geleert. Das ECR-Registerformat ist
im folgenden dargestellt:
Bits | Funktionsbezeichnung |
15 – 8 | (Reserviert) |
7 – 4 | Endpoint
Pipe Number (EPN) (Endpunktkanal-Zahl) |
3 – 0 | Endpoint
Command (CMD) (Endpunkt-Befehl) |
-
Die
Endpunktkanal-Zahl EPN bestimmt den Endpunktkanal, auf welchem der
Befehl ausgeführt
wird. Bei einer bevorzugten Ausführungsform
kann dieses Register in die Hochgeschwindigkeits-Bus-Schnittstellenlogik
implementiert sein. Die Daten laufen über die asynchrone Schnittstelle.
Zwei Signale werden vom Endpunkt-Controller zurückgeschickt, wobei eines anzeigt,
daß der
Befehl ausgeführt
wurde, und daß der
Befehlswert auf "0" gesetzt wer den sollte,
und wobei ein weiteres anzeigt, daß der Befehl nicht ausgeführt werden konnte,
und daß es
auf "F" gesetzt werden sollte.
-
Der
Endpunkt-Befehl CMD kann die folgenden Werte annehmen:
- 0000: Complete. Dieser Wert zeigt an, daß der vorhergehende Befehl
abgeschlossen ist, und daß der
Endpunkt-Controller zur Aufnahme eines anderen Befehls bereit ist.
- 0001: Input Enable (CMD.IENB). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal aus dem Stall (Halt)- oder Disable-Zustand in den
Input Idle-Zustand I_IDL zu gehen. Der Steuerwort-Zeiger für den spezifizierten
Endpunktkanal wird auf 0 zurückgesetzt.
Wenn der momentane Zustand nicht der Disable- oder Stall-Zustand
ist, wird ein "F" zurückgeschickt,
um anzuzeigen, daß versucht
wurde, einen nicht erlaubten Befehl an diesem Endpunkt auszuführen, und
daß der
Befehl ignoriert wird.
- 0010: Input Ready (CMD.IRDY). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal in den Input Ready-Zustand I_RDY zu gehen, wenn dieser
momentan in dem Input Idle-Zustand I_IDL ist. Dieser Befehl wird ausgegeben,
nachdem ein Steuerwort mit einem Input Ready-Pufferzustand I_RDY in die Endpunkt-Anordnung
des entsprechenden Endpunktes geschrieben wurde. Dieser Befehl veranlaßt nicht,
daß das
Steuerwort im Speicher gelesen wird; es erlaubt hingegen, daß es als
Antwort auf den Empfang eines IN-Tokens gelesen wird. Wenn der gegenwärtige Zustand
des Endpunktes nicht Input Idle I_IDL ist, wird der Befehl ignoriert.
Wenn der gegenwärtige
Zustand der Output-, der Setup-, der Disable- oder der Stall-Zustand ist, wird
ein "F" zurückgesendet,
um anzuzeigen, daß versucht
wurde, einen nicht ausführbaren
Befehl an diesem Endpunkt auszuführen.
- 0011: Input Isochronous Ready (CMD.ISRDY). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal in den Input Isochronous Ready-Zustand IS_RDY zu gehen,
wenn er momentan in dem Input Idle-Zustand I_IDL ist. Dieser Befehl
wird ausgegeben, nachdem ein Steuerwort mit dem Input Ready-Puffer-Zustand
in die Endpunkt-Anordnung für
den entspre chenden Endpunkt geschrieben wurde. Diese Befehk1 veranlaßt nicht,
daß das
Steuerwort in dem Speicher gelesen wird; es erlaubt hingegen, daß es als
Antwort auf den Empfang eines IN-Tokens gelesen wird. Es wird erwartet,
daß das
Typenfeld des Steuerwortes (TI) auf Isochron gesetzt ist. Dieses
wird jedoch nicht überprüft. Wenn
der gegenwärtige
Zustand des Endpunktes nicht Input Idle I_IDL ist, wird der Befehl
ignoriert. Wenn der gegenwärtige
Zustand der Output-, Setup-, Disable- oder der Stall-Zustand ist,
wird ein "F" zurückgesendet,
um anzuzeigen, daß versucht
wurde, einen nicht ausführbaren
Befehl an diesem Endpunkt auszuführen.
- 0100: Output Enable (CMD.OENB). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal aus dem Stall- oder Disable-Zustand in den Output
Idle-Zustand O_IDL zu gehen. Der Steuerwort-Zeiger für den spezifizierten
Endpunkt wird auf 0 gesetzt. Wenn der gegenwärtige Zustand nicht der Disable-
oder Stall-Zustand ist, wird ein "F" zurückgesendet,
um anzuzeigen, daß versucht
wurde, an diesem Endpunkt einen nicht ausführbaren Befehl auszuführen, und
der Befehl wird ignoriert.
- 0101: Output Ready (CMD.ORDY). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal in den Output Ready-Zustand O_RDY zu gehen, wenn er
gegenwärtig
in dem Output Idle-Zustand
O_IDL ist. Dieser Befehl wird ausgegeben, nachdem ein Steuerwort
mit einem Output Ready-Zustand in die Endpunkt-Anordnung für den entsprechenden
Endpunkt geschrieben wurde. Dieser Befehl verursacht nicht, daß das Steuerwort
in dem Speicher gelesen wird; es erlaubt hingegen, daß es als
Antwort auf den Empfang eines OUT-Tokens gelesen wird. Wenn der
gegenwärtige
Zustand des Endpunktes nicht Output Idle ist, wird der Befehl ignoriert.
Wenn der gegenwärtige
Zustand der Input-, der Stall- oder der Disable-Zustand ist, dann wird
ein "F" zurückgesendet,
um anzuzeigen, daß versucht
wurde, einen nicht ausführbaren
Befehl an diesen Endpunkt auszuführen.
- 0110: Output Isochronous Enable (CMD.OSENB). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal aus dem Stall- oder Disable-Zustand in den Output
Isochronous Idle-Zustand OS_IDL zu gehen. Der Steuerwort-Zeiger
führt den
spezifizierten Endpunkt wird auf 0 ge setzt. Wenn der gegenwärtige Zustand
nicht der Disable- oder Stall-Zustand ist, wird ein "F" zurückgesendet,
um anzuzeigen, daß versucht
wurde, einen nicht ausführbaren
Befehl an diesem Endpunkt auszuführen,
und der Befehl wird ignoriert.
- 0111: Output Isochronous Ready (CMD.OSRDY). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal in den Output Isochronous Ready-Zustand OS_RDY zu
gehen, wenn dessen momentaner Zustand der Output Isochronous Idle-Zustand
OS_IDL ist. Diese Befehl wird ausgegeben, nachdem ein Steuerwort
mit einem Output Ready-Zustand in die Endpunkt-Anordnung für den entsprechenden Endpunkt
geschrieben wurde. Dieses Kommando veranlaßt nicht, daß das Steuerwort
in dem Speicher gelesen wird; es erlaubt hingegen, daß es als
Antwort auf den Empfang eines OUT-Tokens gelesen wird. Wenn der
momentane Zustand des Endpunktes nicht der Output Isochronous Idle-Zustand
ist, wird der Befehl ignoriert. Wenn der gegenwärtige Zustand der Input-, Stall-
oder Disable-Zustand ist, wird ein "F" zurückgesendet,
um anzuzeigen, daß versucht
wurde, einen nicht ausführbaren
Befehl an diesem Endpunkt auszuführen.
- 1000: Setup Ready (CMD.SRDY). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal in den Setup Ready-Zustand S_RDY zu gehen. Dieser
Befehl wird ausgegeben, nachdem ein Steuerwort mit einem Output
Ready-Zustand in die Endpunkt-Anordnung für den entsprechenden Endpunkt
geschrieben wurde. Diese Befehl veranlaßt nicht, daß das Steuerwort
in dem Speicher gelesen wird; es erlaubt hingegen, daß es als
Antwort auf den Empfang eines SETUP-Tokens gelesen wird. Wenn der
gegenwärtige
Zustand des Endpunktes nicht der Stall- oder Disable-Zustand ist,
wird der Befehl ignoriert.
- 1001: Disable (CMD.DISAB). Dieser Wert veranlaßt den spezifizierten
Endpunktkanal in den DISABLE-Zustand zu gehen. Dieses erfolgt unmittelbar
aus jedem Zustand. Wenn der Endpunktkanal gegenwärtig aktiv ist, wird der Status
in die Steuerung geschrieben, so daß angezeigt ist, daß der Endpunkt
nicht aktiviert ist.
- 1010: Stall (CMD.HALT). Dieser Wert veranlaßt den spezifizierten Endpunkt
aus einem beliebigen Zustand in den Stall-Zustand HALT zu gehen.
Dieses erfolgt unmittelbar aus jedem Zustand. Wenn der Endpunktkanal
gegenwärtig
aktiv ist, wird der Status in die Steuerung geschrieben, so daß angezeigt
ist, daß der Endpunkt
blockiert ist.
- 1011 – 1101:
Reserviert. Diese Werte verursachen nicht die Ausführung von
Aktionen und senden eine 0 zurück.
- 1110: Toggle CWP. Dieser Wert veranlaßt ein Umschalten des Steuerwort-Zeigers.
Dieses wird im Zusammenhang mit Steuerübertragungen mit einer ungeraden
Anzahl gesendeter oder empfangener Pakete während einer Datenphase genutzt.
- 1111: Error. Dieser Wert zeigt an, daß versucht wurde, einen für den Zustand
des gegenwärtigen
Endpunktkanals nicht ausführbaren
Befehl auszuführen,
und daß ein
neuer Befehl aufgenommen werden kann.
-
Der
für die
Erfindung in der vorliegenden Anwendung relevante Teil des UDR 519 ist
der 8-Bit-Entpunktkanal-Zustand.
Dieser Zustand wird für
jeden Endpunkt gespeichert, der für den gegenwärtig indizierten Endpunktkanal
zurückgesendet
wird. Wenn ein ungültiger
Endpunktkanal indiziert ist, wird eine 0 zurückgesendet. Das UDR-Registerformat
ist im folgenden dargestellt:
-
Bits |
Funktionsbezeichnung |
7 |
Control
(CTL) |
6 |
Control
Word Pointer (CWP) (Steuerwort-Zeiger) |
5 – 4 |
(Reserviert) |
3 – 0 |
Endpoint
Pipe State (EPS) (Endpunktkanal-Zustand) |
-
Control
CTL: Dieses wird geltend gemacht, wenn dieser Endpunktkanal in der
Lage ist, Steuersequenzen aufzunehmen, die mit SETUP-Token zu tun
haben. Dieses Bit wird gesetzt, nachdem der CMD.SRDY für diesen
Endpunktkanal ausgeführt
wurde, und verbleibt gesetzt, bis der Endpunkt deaktiviert (Disable)
wird.
-
Control
Word Pointer CWP: Wenn das Steuerwort-Bit 0 ist, wird auf das Steuerwort
0 dieses Endpunktes in der Endpunkt-Anordnung als nächstes zugegriffen.
Wenn das Steuerwort 1 ist, wird auf das Steuerwort 1 für diesen
Endpunkt als nächstes
zugegriffen. Dieses ist auf 0 gesetzt, wenn der Endpunkt aktiviert
ist.
-
Der
Endpunktkanal-Zustand (EPS) kann die folgenden Werte annehmen:
Wert | Zustand |
0 | Disabled
DIS |
1 | Input
Idle I_IDL |
2 | Input
Ready I_RDY |
3 | Input
Active I_ACT |
4 | Stalled
HALT |
5 | Input
Missed ACK I_MAK |
6 | Input
Isochronous Ready IS_RDY |
7 | Input
Isochronous Active IS_ACT |
8 | Setup
Ready S_RDY |
9 | Output
Idle O_IDL |
10 | Output
Ready O_RDY |
11 | Output
Active O_ACT |
12 | Setup
Active S_ACT |
13 | Output
Isochronous Idle OS_IDL |
14 | Output
Isochronous Ready OS_RDY |
15 | Output
Isochronous Active OS_ACT |
-
Bei
einer bevorzugten Ausführungsform
ist zu jeder Zeit nur ein Endpunktkanal aktiv.
-
Bei
einer bevorzugten Ausführungsform
bewahrt jeder Endpunktkanal einen Zustand mit definierten Bedingungen
für die Übertragung
zwischen den Zuständen,
welche eine impliziete Hardware/Software-Synchronisation umfassen.
-
Übergänge zwischen
Endpunkt-Zuständen
erfolgen:
- – auf
einen expliziten Software-Befehl an einen Endpunkt durch das Endpunkt-Befehlsregister ECR;
- – durch
das Lesen des Pufferstatus des anderen Puffers in dem anderen Steuerwort
für diesen
Endpunkt am Ende einer Übertragung;
und
- – als
Ergebnis von Ereignissen auf dem USB, wie der Empfang von IN, OUT-
und SETUP-Token und von ACK-Handshakes.
-
7 zeigt
die vereinfachte Endpunktkanal-Zustandsmaschine für die Handhabung
von SETUP-Transaktionen. Der gegenwärtige Endpunktkanal-Zustand
ist in einem Endpunkt-Zustandsregister sichtbar, auf welches mit
einem USB-Index- und einem Daten-Register zugegriffen werden kann.
Bei einer bevorzugten Ausführungsform
ist zu jeder Zeit stets höchstens
ein Endpunktkanal in irgendeinem der aktiven Zustände. Dies
ermöglicht
das gemeinsame Nutzen der aktiven Zustandslogik durch alle Endpunktkanäle.
-
Wie
in 7 gezeigt ist, kann ein Endpunktkanal die folgenden
Zustände
aufweisen:
Disable. Der DIS-Zustand 710 wird auf ein
Reset, auf einen Disable-Befehl an diesen Endpunktkanal, und auf das
Erkennen eines Disable-Zustandes in dem Pufferzustand des Steuerwortes
eingenommen. Während
dieser Endpunktkanal in diesem Zustand ist, wird jeder an diesem
Endpunkt empfangene Token ohne Handshake zurückgesendet. Eine Software-Intervention ist
notwendig, um den Endpunktkanal aus diesem Zustand zu entfernen.
Typischerweise geschieht dies durch einen Enable-Befehl (Aktivierungsbefehl)
an einen der Idle-Zustände.
Halt/Stall:
Der HALT/STL-Zustand 770 wird auf den Stall-Befehl an diesen
Endpunkt, auf das Erkennen eines Stall-Zustandes in dem Pufferzustand
eines Steuerwortes, und bei bestimmten Fehlerbedingungen eingenommen.
Während
dieser Endpunktkanal in diesem Zustand ist, wird jeder an diesem
Endpunkt empfangene Token als ein Stall-Handshake zurückgesendet,
um anzuzeigen, daß der
Endpunkt gegenwärtig
blockiert ist. Eine Software-Intervention
ist notwendig, um den Endpunktkanal aus diesem Zustand zu bringen.
Typischerweise geschieht dies durch einen Enable-Befehl an einen
der Idle-Zustände.
Setup
Ready S_RDY. Dieser Zustand 720 wird eingenommen, nachdem
dieser Endpunktkanal einen Puffer erhalten hat, in welchen die Daten
zu schreiben sind. Dieser Zustand wird auf das Erkennen des Setup
Ready-Pufferzustandes oder mittels eines Setup Ready-Befehls eingenommen,
nachdem das geeignete Wort in die Endpunkt-Anordnung geschrieben
wurde.
Setup Active S_ACT. Dieser Zustand 730 wird
auf den Empfang eines Setup-Tokens aus dem Setup Ready-Zustand eingenommen.
In diesem Zustand werden die Daten vom USB in den Speicher geschrieben.
Am Ende einer Ausgangsübertragung
wird der Status in das Steuerwort am CWP geschrieben, das CWP wird
invertiert, und das andere Steuerwort für diesen Endpunktkanal wird
gelesen. Es wird der passende Übergang in
den Output Idle-, Output Ready, Input Idle oder Input Ready-Zustand
gemacht. Er hängt
von der An der Steuerübertragung
und dem gelesenen Pufferzustand ab, und basiert weiterhin auf dem
Pufferstatus.
Input Idle I_IDL. In diesem Zustand 750 erwartet
der Endpunkt, daß bald
ein Puffer zugeordnet wird. Ein NAK-Handshake wird als Antwort auf
einen IN-Token, welcher diesem Endpunktkanal zugeordnet ist, zurückgesendet.
Für OUT-Token
wird von diesem Endpunktkanal keine Antwort zurückgesendet.
Input Ready
I_RDY. Dieser Zustand 752 wird über einen Input Ready-Befehl
an diesen Endpunktkanal oder auf das Erkennen eines anderen Eingangspuffers
am Ende einer Übertragung
eingenommen. Der Befehl sollte nur gegeben werden, wenn diesem Endpunkt
mit Hilfe des Schreibens des Steuerwortes an einem geeigneten Ort
in der Endpunkt-Anordnung ein Puffer zugeordnet worden ist. Dieses
Steuerwort sollte auf einen Datenpuffer mit Daten zeigen, die an
den Host als Antwort auf den nächsten
an diesem Endpunktkanal empfangenen IN-Token zurückgesendet werden sollen. Der
PID-Wert wird als DATA0 übertragen,
wenn der CWP 0 ist und wird als DATA1 übertragen, wenn der CWP gleich
1 ist.
Input Active I_ACT. Dieser Zustand 754 wird
auf den Empfang eines IN-Tokens eingenommen, wenn der ausgewählte Endpunkt-Zustand
gegenwärtig
Input Ready ist. In diesem Zustand werden die Daten von dem Speicher
auf den USB übertragen.
Auf den Abschluß der
Datenübertragung
sollte ein ACK-Handshake innerhalb der 16 Bit-Zeit empfangen werden.
Am Ende dieses Zeitlimits wird der Puffer-Wartestatus in das Steuerwort zurückgeschrieben,
wenn ein ACK nicht empfangen wurde. Die Adress- und Byte-Zähler werden
jedoch nicht überschrieben,
da eine erneute Übertragung
erfolgen wird und die gegenwärtigen
Werte erneut gebraucht werden. Wenn ein ACK empfangen wird, wird
der Pufferstatus zusammen mit den gegenwärtigen Werten des Adress- und
Byte-Zählers
geschrieben. Danach wird das andere Steuerwort an diesem Endpunkt
gelesen, um den nächsten
Zustand des Endpunktes zu bestimmen, welcher benutzt werden wird,
wenn das nächste
Mal ein Token an diesen Endpunkt gerichtet ist. Wenn dieser Endpunkt
für eine
Steuerübertragung
genutzt wird, kann eine Übertragung
auf den Ausgangs-Ready- oder Output-Idle-Zustand erfolgen, um die
Statusphase einer Steuer-Lese-Übertragung
zu vervollständigen.
Output
Idle 0_IDL. In diesem Zustand 740 erwartet der Endpunktkanal,
daß bald
ein Puffer zugeordnet wird. Ein NAK-Handshake wird als Antwort auf
ein OUT-Token, welcher diesem Endpunktkanal zugeordnet ist, zurückgesendet.
Für IN-Token
auf diesem Endpunktkanal wird keine Antwort zurückgesendet.
Output Ready
0_IDL. Dieser Zustand 742 wird eingenommen, nachdem dieser
Endpunktkanal einen Puffer erhalten hat, in welchen die Daten geschrieben
werden. Dieser kann auf das Erkennen eines anderen Ausgangspuffers
am Ende einer Übertragung
oder über
einen Output Ready-Befehl von dem 0_IDL-Zustand 740 eingenommen
werden, nachdem das passende Wort in die Endpunkt-Anordnung geschrieben
wurde.
Output Active 0_ACT. Dieser Zustand 744 wird
auf den Empfang eines OUT-Tokens eingenommen. In diesem Zustand
werden die Daten aus dem USB in den Speicher geschrieben. Am Ende
einer Ausgangsübertragung wird
der Status auf das Steuerwort am CWP geschrieben. Wenn die Übertragung
nicht erfolgreich war, d. h. ein CRC- oder Bit-Blockier-Fehler wurde
erkannt, wird dieses als der Pufferstatus geschrieben. Wenn die Übertragung
erfolgreich war, wird der Output Complete-Pufferstatus geschrieben,
wird der CWP invertiert, und wird das andere Steuerwort für diesen
Endpunktkanal gelesen. Die geeignete Übertragung wird basierend auf den
Pufferzustand ausgeführt.
Wenn dieser Endpunkt für
eine Steuerübertragung
genutzt wird, kann ein Übergang
in den Input Ready- oder Input Idle-Zustand erfolgen, um die Statusphase
eines Steuer-Schreib-Überganges
zu vollenden.
-
Zusätzlich zu
den oben beschriebenen Zuständen,
werden die folgenden Zustände
für In(Eingangs-) und
Out-(Ausgangs-) Daten-Transaktionen genutzt. Dieses wird unter Bezugnahme
auf 6 beschrieben:
Input Isochronous Ready IS_RDY.
Der IS_RDY-Zustand 610 wird über einen Input Ready-Befehl an diesen Endpunkt
oder auf das Erkennen eines anderen Eingabepuffers am Ende einer Übertragung
eingenommen. Dieser Befehl sollte nur angewendet werden, nachdem
diesem Endpunkt mit Hilfe des Schreibens des Steuerwortes an einen
geeigneten Ort in der Endpunkt-Anordnung
ein Puffer zugeordnet worden ist. Dieses Steuerwort sollte auf einen
Datenpuffer mit Daten zeigen, die an den Host als Antwort auf den
als nächstes
an diesem Endpunktkanal zu empfangenden IN-Token zurückzusenden
sind. Der PID-Wert wird unabhängig
von dem Wert des CWP immer als DATA0 übertragen.
Input Isochronous
Active IS_ACT. Der IS_ACT-Zustand 612 wird auf den Empfang
eines IN-Tokens
eingenommen, wenn der ausgewählte
Endpunkt-Zustand gegenwärtig
in Input Ready ist. In diesem Zustand werden die Daten von. dem
Speicher auf. den USB übertragen:
Auf den Aschluß der
Datenübertragung
wird der Pufferstatus zusammen mit den gegenwärtigen Werten des Adress- und
Byte-Zählers
am Ende einer Übertragung geschrieben.
Danach wird das andere Steuerwort an diesem Endpunkt gelesen, um
den nächsten
Zustand des Endpunktes zu bestimmen, wobei dieser nächste Zustand
genutzt wird, wenn das nächste
Mal ein Token an diesen Endpunktkanal gerichtet ist.
Output
Isochronous Idle OS_IDL. In dem OS_IDL-Zustand 620 erwartet
der Endpunkt, daß bald
ein Puffer zugeordnet wird. Als Antwort auf einen OUT-Token, welcher
diesem Endpunktkanal zugeordnet ist, wird kein Handshake zurückgesendet.
Auf diesem Endpunktkanal werden für IN-Token keine Daten oder
Handshakes zurückgesendet.
Output
Isochronous Ready OS_RDY. Der OS_RDY-Zustand 622 wird eingenommen,
nachdem dieser Endpunktkanal einen Puffer erhalten hat, in welchen
die Daten zu schreiben sind. Dieser kann auf das Erkennen eines
anderen Ausgangspuffers am Ende einer Übertragung oder über ein
OSRDY-Befehl aus dem OS_IDL-Zustand eigenommen werden, nachdem das
geeignete Wort in die Endpunktanordnung geschrieben worden ist.
Output
Isochronous Active OS_ACT. Der OS_ACT-Zustand 624 wird
auf den Empfang eines OUT-Tokens aus dem OS_RDY-Zustand eingenommen.
In diesem Zustand werden die Daten von dem USB in den Speicher geschrieben.
Am Ende einer Ausgangsübertragung
wird der Status auf ein Steuerwort am CWP geschrieben. Wenn die Übertragung
nicht erfolgreich war, d. h. ein CRC- oder ein Bit-Blockier-Fehler
wurde erkannt, wird dieses als der Pufferstatus geschrieben. Wenn
die Übertragung
erfolgreich war, wird der Ausgangs-Complete-Pufferstatus geschrieben.
Am Ende der Statusübertragung
wird der CWP invertiert, und das andere Steuerwort für diesen
Endpunktkanal wird gelesen. Der passende Übergang wird basierend auf
dem Pufferzustand gemacht.
-
Nach
einem Reset sind alle Endpunkte inaktiviert. Ein Endpunkt ist mittels
eines Aktivierungsbefehls an den Endpunkt aktiviert. Dieses sollte
nur dann getan werden, wenn die Eingangs- und/oder Ausgangspuffer diesem
Endpunkt bald zugeordnet werden. Alle Endpunkte, die gegenwärtig nicht
einem Endpunktkanal zugeordnet sind, werden als inaktiviert betrachtet.
-
Die
Software ordnet den Endpunktkanälen
Puffer nach Bedarf zu. Nachdem jeder Puffer zugeordnet ist, führt sie
den Input Ready- oder Output Ready-Befehl an dem Endpunktkanal aus.
Wenn der Endpunktkanal gegenwärtig
im Idle-Zustand ist, nimmt er den geeigneten Ready-Zustand ein. Wenn
der Endpunktkanal gegenwärtig
im Ready- oder Active-Zustand ist, werden alle Befehle ignoriert,
mit Ausnahme der Disable- und Stall-Befehle an den Endpunktkanal,
welche dieser unverzüglich
ausführt.
Dieses Schreiben muß von
der Software ausgeführt
werden, um in der Lage zu sein, potentielle Synchronisationsprobleme
zu verhindern, da das Handling des UNIM-Endpunktkanals asynchron
zum Betrieb der Software ist.
-
Weil
jedem Endpunkt bis zu zwei Puffer zugeordnet werden können, kann
der nächste
Puffer vorbereitet werden, während
der gegenwärtige
Puffer abgearbeitet wird, um die Datenübertragung zu beschleunigen,
und um unnötige
NAK-Handshakes zu vermeiden.
-
Eine
bevorzugte Ausführungsform
der Erfindung umfaßt
weiterhin einen Abbildungsmechanismus für Token. Der Endpunkt-Controller 210 liefert
an einen der Endpunktkanäle
speziell ein Abbild der funktionellen Adresse, der Tokenart (In,
Out, Setup), und der Endpunkt-Zahl. Eine bevorzugte Ausführungsform
unterstützt zwei
feste Abbildungen auf die Endpunktkanäle. Die Auswahl dieses Abbildens
wird mittels des Setzens von Endpunktkanal-Abbildungs-Auswahlbits
eines in der Registergruppe 114 angeordneten Gerätekonfigurationsregisters
gesteuert. Ein Host-Controller kann das Setzen der Kanal-Abbildungs-Auswalbits steuern.
-
Wie
in 4 dargestellt ist, nutzt der Endpunkt-Controller 210 ein
Tokenpaket, um einen Kanal-Abbildungsindex 400 mit einer
Breite von einem Byte zu erzeugen. Die Bits 0-3 des Kanal-Abbildungsindex 400 werden
zur Identifizierung der Endpunkt-Zahl (EN) genutzt. Die Bits 4-5
werden zur Identifizierung der Tokenart genutzt, wobei 00 einen
Out-Token, 10 einen IN-Token, 11 einen Setup-Token und 01 einen
SOF-Token anzeigt. Die Bits 6-7 werden benutzt, um die letzten signifikanten
Bits der funktionellen Adresse anzuzeigen.
-
Auf
den Empfang eines Tokens erzeugt der Endpunkt-Controller 210 den
Kanal-Abbildungsindex 400. Der
Endpunkt-Controller 210 greift danach auf die Endpunkt-Abbildungs-Auswahlbits
zu, um das passende Abbilden für
den Token auszuwählen.
-
Eine
bevorzugte Ausführungsform
des USB-Geräts 110 unterstützt zwei
feste Abbildungen. Dementsprechend umfassen die Endpunktkanal-Auswahlbits
ein einzelnes Bit. Wenn das Bit in einem ersten Zustand ist, wird
der Token direkt nach der funktionellen Adresse und der Endpunkt-Zahl
abgebildet. Wenn das Bit in einem zweiten Zustand ist, wird jeder
der ersten acht Endpunkte auf zwei Endpunktkanäle abgebildet, wobei einer
für den
Eingang und einer für
den Ausgang genutzt wird.
-
Mittels
des Änderns
des Endpunktkanal-Auswahlbits kann der Host-Controller die Abbildung
der Endpunktkanäle über die
Funktionen verändern.
Deshalb ist der Host-Controller in der Lage ein Gerät so zu
konfigurieren, daß es
Mehrfachidentitäten
hat. Der Host-Controller kann die Geräteidentität mittels des Zugriffs auf die
Endpunkt-Abbildungs-Auswahlbits dynamisch ändern. Dieses ermöglicht dem
Host-Controller weiterhin, Endpunktkanäle über die funktionellen Adressen,
die Tokenart und den Endpunkt dort zuzuordnen, wo der Endpunktkanal
als Betriebsmittel am meisten gebraucht wird.
-
Ein
bevorzugte Ausführungsform
eines derartigen Geräts
mit einer Vielzahl funktioneller Adressen bildet alle Steuerfunktionen
zusammen auf einen Endpunktkanal ab.
-
Wenn
ein Token empfangen wird, bildet der Endpunkt-Controller 202 den
Token zuerst auf den entsprechenden Endpunktkanal ab. Wenn der Token
auf einen Endpunktkanal mit einem Puffer abgebildet ist, liest der
Endpunkt-Controller 210 das entsprechende Steuerwort. Dieses
Steuerwort teilt dem Endpunkt-Controller 210 mit, wie die
Transaktion zu beenden ist. Am Ende einer Transaktion schreibt der
Endpunkt-Controller das Steuerwort mit dem Status, welcher mittels
Software als ein Indikator für
die Freigabe dieses Puffers genutzt wird, und liefert ein neues
Steuerwort.
-
In
Anbetracht der vorhergehenden Beschreibung wird im folgenden der
Betrieb des Geräts
aus der Sicht der funktionellen Steuersoftware im Detail beschrieben.
Als erstes wird die Initialisierung beschrieben. Danach werden Interrupt-,
Bulk-, Isochron- und Steuerendpunkte beschrieben. Nach einem Reset
eines Moduls erscheint ein Gerät
als ein nicht angeschlossenes Gerät auf dem USB. Zu diesem Zeitpunkt
sind alle Endpunktkanäle
deaktiviert und der funktionelle Zustand ist reset. Um die Erkennung
eines Gerätes
als ein an ein Aufwärts-USB-Anschluß angeschlossenes
Gerät zu
ermöglichen,
wird ein Knoten-Anschluß-Bit
des Geräte-Steuerregisters gesetzt.
Wenn das Gerät
angeschlossen ist, müssen
die Endpunktkanal-Operationen
initialisiert werden. In Abhängigkeit
von der speziellen Anwendung muß die
Software bestimmen, wieviele Endpunkte für die Anwendung notwendig sind,
weiterhin sind die Arten der Endpunkte und der Umfang des für die Operation
zuzuweisenden Speichers zu bestimmen. Hierauf basierend werden die
EABAR, BPA und BPB initialisiert. Für jeden Endpunkt werden zwei
Doppelwörter
als Steuerwörter
zugeordnet. Der EABAR-Zeiger muß innerhalb
einer 128-Byte-Grenze liegen. Der BPA und BPB werden zugeordnet,
wenn notwendig, um einen Basiszeiger für alle Datenübertragungen
zu liefern.
-
Da
zu diesem Zeitpunkt nicht exakt klar sein kann, welche Endpunkte
aktiviert sind und wieviel Speicher ihnen zuzuordnen ist, muß die Software
nur EABAR und BPA laden, so daß der
erste Steuerübergang ausgeführt werden
kann. Die Software muß dann
einen SRDY-Puffer in CW0 des Endpunktkanals 0 anordnen, und ein
SRDY-Befehl an den Endpunktkanal ausgeben. Danach wird der Zustand
in einen Betriebszustand gesetzt. Ein von einem Host empfangenes
Setup wird dann in den SRDY-Puffer geladen.
-
Nachdem
das Setup empfangen wurde, wird es überprüft, um festzustellen, wie zu
antworten ist. Wenn es ein Set Adress-Setup-Paket ist, wird die
funktionelle Adresse (FA) mit der empfangenen Adresse geladen, und
das Aktivierungsbit wird gesetzt. Das DEF-Bit wird mittels der Hardware
auf das nächste
als Antwort auf IN-Token empfangene ACK oder auf das nächste durch
diesen Endpunkt im Fall des Verlustes des ACK empfangene Setup neu
gesetzt.
-
Auf
den Empfang eines IN-Tokens liefern die Interrupt-Endpunkte neue
Interrupt-Informationen an den Host, wenn derartige Information
verfügbar
ist. Wenn keine Interrupt-Information anhängig ist, wird ein NAK zurückgesendet.
Die Software gibt ein Input-Enable-Befehl an den entsprechenden
Eingangskanal aus, um einen Interrupt-Endpunktkanal zu initialisieren.
Dieses veranlaßt
den Endpunktkanal seinen Input-Idle-Zustand (I_IDL) einzunehmen.
In diesem Zustand wird ein NAK als der Handshake der Antwort auf
irgendein auf diesen Endpunktkanal abgebildeten IN-Token zurückgesendet.
-
Wenn
Interrupt-Daten verfügbar
sind, werden diese in einen Puffer geschrieben, das nächste Steuerwort
an dem Endpunkt wird auf den IRDY geschrieben und die Software gibt
einen Befehl, um den Endpunktkanal zu veranlassen, in den I_RDY-Zustand
zu gehen.
-
Als
Antwort auf den nächsten
empfangenen IN-Token wird das Steuerwort an EABAR + EBN + CWP gelesen
und die Daten werden danach übertragen.
Wenn das Umschaltprotokoll folgt, muß das Umschaltaktivierungsbit
des Steuerwortes in dem Steuerwort gesetzt sein. Wenn der Endpunkt
als ein Ratensteuer-Feedback genutzt wird, muß das Umschaltaktivierungsbit
nicht gesetzt sein. Wenn am Ende der Übertragung das ACK von de Host
empfangen wird, wird der Abschlußstatus in den Puffer geschrieben.
Dieses liefert eine Bestätigung
an die Software, daß die Übertragung
abgeschlossen ist. Wenn kein ACK empfangen wurde, und die Umschaltung
es aktiviert, wird ein Zwischen-Verlust-ACK-Status geschrieben.
-
Nachdem
der Status geschrieben wurde, wird der andere Endpunkt-Puffer gelesen.
Wenn dieses ein Abschlußstatus
ist, dann wird der Input-Idle-Zustand eingenommen. Wenn in der Zwischenzeit
ein anderes Ereignis aufgetreten ist, und ein anderer IRDY-Puffer
wurde in dem anderen Steuerwort angeordnet, dann wird es zu diesem
Zeitpunkt gelesen und der Endpunkt geht erneut in den I_RDY-Zustand.
-
Bulk-Endpunkte
arbeiten ähnlich
wie Interrupt-Endpunkte, mit der Ausnahme, daß typischerweise größere Datenübertragungen
involviert sind, und daß diese
in In-(Eingangs-) und Out-(Ausgangs-)Richtungen erfolgen. Für Bulk-Endpunkte
folgt stets das Umschaltprotokoll, so daß in allen Steuerwörtern TE
gesetzt ist. Ein spezieller Bulk-Endpunkt wird entweder in Eingangs-
oder Ausgangsrichtung benutzt. Zur Initialisierung eines Bulk-Endpunktes
gibt die Software einen Eingangs- oder Ausgangs-Aktivierungsbefehl
an die geeignete Endpunktkanal-Zahl.
-
Wenn
Daten für
Bulk-Eingangsendpunkte verfügbar
sind, sollte die Software diese in einen Puffer schreiben, und einen
Befehl zum Übergang
in einen IRDY-Zustand ausgeben. Das TE sollte gesetzt werden. Die
Software gibt dann einen IRDY-Befehl aus. Zu einer beliebigen Zeit
können
höchstens
zwei Puffer mit Daten an einem Endpunktkanal hängen. Dieses erlaubt ein Doppelpuffer-Schema,
wenn dieses notwendig ist, um während
einer großen
Datenübertragung
das Senden irgendeines NAKs zu verhindern. Die Software-Synchronisation
erfolgt mit Hilfe der Überprüfung des
Pufferzustands. Nur ein abgeschlossener Pufferzustand kann überschrieben
werden. Für
Bulk-Ausgangsendpunkte muß die
Software einen Puffer vorbereiten, in welchen die empfangenen Daten
zu übertragen
sind. Wenn dieser Puffer verfügbar
ist, wird ein Steuerwort mit einem Zeiger auf diesem Puffer in ein
geeignetes Steuerwort geschrieben. Das Umschalt-Aktivierungsbit
(Toggle Enable Bit) sollte ebenfalls gesetzt werden. Anschließend gibt
die Software einen ORDY-Befehl an den Endpunktkanal aus.
-
Nachdem
Daten als Teil eines Out-Tokens in diesem Puffer empfangen wurden,
wird das Steuerwort im Speicher aktualisiert. Wenn der Umfang des
Datenpakets bekannt ist, sollte das Puffer-Rundungsbit des Steuerworts
gesetzt sein. Dieses erlaubt, daß Pakete, die kleiner als der
Pufferumfang sind, empfangen werden können, ohne daß ein Fehlerstatus
geschrieben wird. Wenn das Puffer-Rundungsbit nicht gesetzt ist,
werden empfangene Pakete, die den zugeordneten Puffer nicht exakt
auffüllen,
mit einem Daten-Statusfehler geschrieben. In allen Fällen wird
der Daten-Statusfehler geschrieben, wenn mehr Daten als erwartet
für diesen Endpunktkanal
empfangen wurden. Wenn das Auftreten eines Fehlers während des
Empfangs dieser Daten erkannt wird, wird ein Zwischen-Pufferstatus
in den Speicher zurück
geschrieben, und beim nächsten
Out-Token wird der Puffer erneut genutzt. Deshalb muß sich die
Software nur um die Bereitstellung von Puffern kümmern, in welche die Daten
empfangen werden. Die Software muß sich nicht um Interna des
Wiederholungsprotokolls kümmern.
-
Isochrone
Endpunkte folgen dem Programmiermodel für Bulk-Endpunkte, mit der Ausnahme,
daß sie nicht
einem Umschaltprotokoll folgen. Statt dessen sind sie zu dem letzten
signifikanten Bit des Frame-Zahkegisters synchronisiert.
-
Für isochrone
Eingangsendpunkte werden die Daten mittels desselben IRDY-Puffers
in der Warteschlange gehalten. Wenn ein IN-Token an einem isochronen
Endpunkt empfangen wird, wird das Datenpaket gesendet, wenn das
letzte signifikante Bit des Frame-Zahkegisters mit dem Steuerwort-Zeiger übereinstimmt. Wenn
dies nicht der Fall ist, werden keine Daten gesendet. Dieses ermöglicht es,
die Datenübertragung
mit einer speziellen Frame-Zahl zu synchronisieren. Um die Übertragung
einer speziellen Frame-Zahl auszulösen, kann das Frame-Zahlregister
gelesen werden. Die Software kann mit dem Wert einer Frame-Zahl,
welche übereinstimmen
muß, einen
Interrupt verlangen. Eine Anpassung wird nur für die unteren acht Bits ausgeführt. Dieses
ermöglicht
das Halten dieses Ereignisses in der Warteschlange bis zu 256 ms,
bevor die Frame-Zahl über
das USB-Netzwerk empfangen wird. Wenn dieser Interrupt ausgeführt wird,
kann die Software den passenden Puffer in der Warteschlange auf
dem Endpunktkanal halten.
-
Für isochrone
Ausgangsendpunkte bestimmt das Umschaltaktivierungsbit, wie das
LSB des Frame-Zahlregisters genutzt wird. Wenn das Umschalt-Aktivierungsbit
nicht besetzt ist, werden alle Daten in den Speicher geschrieben.
Wenn das letzte signifikante Bit des Frame-Zahlregisters jedoch
nicht gleich dem CWP ist, wird ein Synchronisations-Fehlerstatus
als Pufferzustand geschrieben. Wenn das TE gesetzt ist, werden die
Daten nur gespeichert, wenn das letzte signifikante Bit des Frame-Zahlregisters
gleich dem CWP ist. Bei der Synchronisation eines isochronen Ausgangsdatenstroms
mit der Frame-Zahl, kann die Software den ersten Puffer mit TE setzen,
so daß das
Schreiben nur beginnt, wenn eine Frame-Zahl-Übereinstimmung gegeben ist.
Es können
dann alle folgenden Frames mittels eines einfachen Vergleichs der
Frame-Zahlen erkennen, ob ein Synchronisationsfehler aufgetreten
ist.
-
Das
Frame-Zahkegister wird für
bis zu zwei Frames weiter nötig
sein, auch wenn das SOF zeitweise verloren wird. Sollte das SOF
für mehr
als zwei Frames verloren gehen, wird der Software ein Freigabeereignis signalisiert.
Hierauf sollten alle folgenden isochronen Übertragungen mit besonderer
Beachtung behandelt werden, oder unterbrochen werden, bis der Frame-Zahl-Zähler erneut
geschlossen wird.
-
Endpunkt
0 ist typischerweise ein Steuerendpunkt. Zusätzlich erlaubt es der beschriebene
Abbildungsmechanismus, daß andere
Endpunkte Steuerendpunkte werden. Für einen Steuerendpunkt sollten
das Steuerwort 1 und das Steuerwort 0 stets zusammen geschrieben
werden. Beispielsweise sollte das SRDY für die nächste Steuerübertragung
zusammen mit dem Puffer oder dem Paket für die Statusübertragung
der momentanen Steuerübertragung
geschrieben werden. Wenn während
einer Datenphase einer Steuer-Lese- oder Steuer-Schreib-Operation eine ungerade
Anzahl von Datenpaketen gesendet wird, bevor die Statusphase gesendet
ist, muß die
Software den Steuerwortzeiger anpassen, weil die Statusphase in
dem Steuerwort 1 und der nächste
SRDY-Puffer in dem Steuerwort 0 abgelegt werden müssen. Um
dies zu erreichen, kann die Software einen SKIP-Puffer einfügen oder
einen Umschalt-CWP-Befehl
ausgeben. Die Software kann danach den Ready-Befehl für den Statusphasen-Puffer
ausgeben. Sollte ein Setup-Token an einem Steuerendpunkt, für welchen
ein SRDY-Puffer gegenwärtig
nicht verfügbar
ist, erkannt werden, wird ein beträchtlicher Aufwand betrieben,
um den Setup-Token zu empfangen. Der Setup-Token wird in der Datenleitung
gespeichert, während darauf
gewartet wird, daß die
Software einen Puffer zuordnet.
-
Wenn
ein gültiges
Setup empfangen wird, wird ein Interrupt durchgesetzt. Als Antwort
sollte die Software einen Puffer auf Steuerwort 0 schreiben, und
einen SRDY-Befehl ausgeben. Dieses veranlaßt, daß das anhängende Setup in den Speicher
geschrieben wird. Der SRDY-Befehl verursacht, daß der Endpunkt als ein Steuerendpunkt
betrachtet wird und daß er
gesetzt bleibt, bie ein Eingangsaktivierungs- oder Ausgangsaktivierungs-Befehl
ausgeführt
wird. Der SRDY-Puffer
sollte so schnell wie möglich
bereitgestellt werden, da der Datenweg für jede zusätzliche Datenübertragung
blockiert ist, wenn der Interrupt durchgesetzt ist. Allen über des
USB-Netzwert empfangenen
Token wird ein NAK zurückgesendet,
während
auf den Puffer gewartet wird.
-
Nachdem
ein Setup empfangen wurde, muß es überprüft werden,
und es ist eine passende Antwort zu bestimmen. Zu diesem Zeitpunkt
plaziert die Firmware geeigneterweise zusätzliche Eingangs- oder Ausgangspuffer.
Wenn das Setup ein Befehl ist, welcher durch die Funktion nicht
unterstützt
wird, wird ein neuer SRDY-Puffer auf das Steuerwort 0 gegeben, und
der SRDY-Befehl wird ausgegeben. Dieses verursacht, daß allen
Token an diesem Endpunkt ein NAK-Handshake zurückgesendet wird, bis das nächste Setup
empfangen wird. Während
die Software in der Zwischenzeit das Setup analysiert, werden NAKs
als Antwort auf die Token gesendet.
-
Obwohl
die Ausführungsformen
unter Bezugnahme auf spezielle Gerätestrukturen, Programmierzustände und
Programmiermodelle beschrieben wurden, kann die Erfindung auf eine
Vielzahl anderer Geräte
angewendet werden, welche verschiedene Programmierzustände und
-modelle implementieren. Der Fachmann entnimmt den Ausführungsformen,
daß viele
Modifikationen möglich
sind, ohne deren Lehre zu verlassen. All diese Modifikationen sollen
von den folgenden Ansprüchen
umfaßt
sein.
-
Die
Architektur der USB-Knotenschnittstelle ist in dem folgenden Anhang,
der Teil der Beschreibung ist, näher
spezifiziert.
-
Vorläufige Version
-
Spezifikation für USB-Knotenschnittstellenarchitekturs
-
Überarbeitete Version 0.6
-
Kapitel 1
-
Einführung
-
Das
USB-Schnittstellenmodul (UNIM) bildet eine Schnittstelle zu dem
universellen seriellen Bus für
einen Hochgeschwindigkeitsknoten auf einem USB-Bus. Das Modul entspricht
der Version 1.0 der USB-Spezifikation.
-
Das
Modul umfaßt
einen integrierten USB-Transceiver, eine vollständige serielle Schnittstelleneinrichtung
und den Endpunkt-Controller. Der Endpunkt-Controller arbeitet als
Master und Slave auf dem Kernbus (Core Bus) und unterstützt alle
USB-Endpunktklassen: Steuerung, große Mengen (Bulk), Isochron
und Unterbrechung (Interrupt). Der Slavezugang wird dazu verwendet,
auf interne Steuerregister zuzugreifen, und der Masterzugang wird
dazu verwendet, Endpunktdaten zu und von einem RAM zu übertragen.
-
-
1.1 Externe Schnittstelle
-
Tabelle
1-1. Modulpins, die mit externen Pins verbunden sind
-
-
1.2 Interne Architektur
auf Chipebene
-
1-2.
Blockdiagramm des USB-Knotenschnittstellenmoduls
-
1.2.1 Endpunktcontroller
-
Der
Endpunktcontroller verarbeitet auf den Endpunkt bezogene Operationen
einschließlich
des Endpunktkanalzustands, der Pufferung und Übertragungen. Bis zu 16 Endpunktkanäle können zu
jeder gegebenen Zeit unterstützt
werden. Jeder Endpunktkanal kann in dem Adreßraum des Kernbusses zwei Puffern
zugewiesen werden, die für
Empfangs- und Sendeoperationen verwendet werden. Wenn einem Endpunktkanal keine
Puffer zugewiesen sind, ist der Controller verantwortlich, die richtigen
Handshakes (Quittungen) für
Eingangs- und Ausgangstoken vorzusehen.
-
1.2.2 Serielle USB-Schnittstelleneinrichtung
-
Die
serielle USB-Schnittstelleneinrichtung umfaßt USB PHY und USB MAC. USB-PHY
ist verantwortlich für
die NRZI-Codierung, die Erfassung des Anfangs und Endes von Paketen,
Bitstuffing und Unstuffing und für
die Parallel-Seriell- und Seriell-Parallel-Wandlung. USB MAC ist
verantwortlich für
das Erkennen und Erzeugen geeigneter Paketformate und für das Verarbeiten
der Handshakesequenzen zusammen mit dem Endpunktkanal-Controller.
USB MAC ist auch verantwortlich zum Erzeugen und Überprüfen der
geeigneten CRCs in den Paketformaten. Es gibt eine eng gekoppelte
Schnittstelle zwischen dem USB MAC und dem Endpunkt-Controller.
-
1.2.3 USB-Transceiver
-
Der
USB-Transceiver sieht die analoge Verbindbarkeit zu dem USB-Bus
gemäß Kapitel
7 der Universal Serial Bus Specification Version 1.0 vor. Dies umfaßt die notwendige
Signalformung und Erfassungsfunktionen. Das Modul unterstützt den
Hochgeschwindigkeitsbetrieb. Der Betrieb mit niedriger Geschwindigkeit
ist für
diese Anwendung kein Erfordernis. Das Modul unterstützt auch
einen Niederleistungsbetrieb, bei dem der Transceiver sehr wenig
Leistung benötigt
(die ganze USB-Einrichtung erhält
nur 100 μA)
und dennoch der Walk-up-Übergang
auf den Bus erfassen kann.
-
Das
Modul unterstützt
auch eine Verbindung zu einem externen Stand-Alone USB-Transceiver,
wie dem PDIUSBP11 von Phillips.
-
1.2.4 Zukünftige Modulerweiterungen
-
Da
die Architektur des Endpunktcontrollers modular ist, kann die Anzahl
der unterstützten
Endpunktkanäle
verändert
werden, indem die Anzahl der gespeicherten Teilendpunktkanal-Zustandsvektoren
verändert wird.
Zusätzlich
kann die Abbildung von
- a) bis zu vier Funktionsadressens
- b) des Tokentyps
- c) der Endpunktnummer
auf die Endpunktkanalnummer über die
Kanalabbildungsfunktion programmiert werden.
-
Ein
USB HUB-Schnittstellenmodul kann hinzugefügt werden, um eine HUB-Funktion
mit bis zu vier zusätzlichen
stromabwärtigen
Ports zu ermöglichen.
Dieses Modul wird zwischen dem USB SIE-Modul und dem USB-Transceivermodul
eingefügt.
Dadurch kann die Einrichtung die Verbindungsmöglichkeit zu einem oder mehreren
zusätzlichen
Peripheriegeräten
schaffen.
-
Die
Architektur ermöglicht
eine Realisierung eines Stand-Alone-USB-Knotencontrollers mit internem oder
externem RAM. Zusätzlich
könnte
die Architektur für
Peripheriegeräte
mit unterschiedlichem Leistungsniveau und für einen 16-Bit-Bus oder den
Peripheriebus mit einem privaten Speicher verwendet werden. Zusätzlich könnten mehrere
solche Zellen in einer Ausführung
eingerichtet werden, um zusammengesetzte Multifunktionsgeräte zu unterstützen.
-
Das
Design ist für
Niedergeschwindigkeits-Knoten nicht optimiert, es könnte jedoch
modifiziert werden, um auch mit Niedergeschwindigkeits-Geräten zu arbeiten.
-
Kapitel 2 UNIM Modul
-
2.1 USB-Knotenschnittstelle
-
Das
USB-Knotenschnittstellenmodul (UNIM) bildet die Schnittstelle zu
einem universellen seriellen Bus (USB). Das Modul umfaßt einen
integrierten USB-Transceiver, eine vollständige serielle Schnittstelleneinrichtung
(SIE; Serial Interface Engine) und den Endpunktcontroller. Der Endpunktcontroller
arbeitet als Master und Slave auf dem Kernbus und unterstützt alle
USB-Entpunktklassen: Steuerung, Bulk, Isochron und Interrupt. Der
Slavezugang wird dazu verwendet, auf interne Steuerregister zuzugreifen,
und der Masterzugang wird dazu verwendet, Daten zwischen Endpunkten
und dem RAM zu übertragen.
-
2.1.1 Merkmale
-
- • Kompatibilität mit der
USB 1.0 Spezifikation
- • Unterstützt eine
USB-Funktion und bis zu 16 Endpunktkanäle
- • Unterstützt alle
Klassen der USB-Endpunkte
- • Unterstützt Doppelpuffer
auf jedem Endpunktkanal
- • Unterstützt Betrieb
als eine Bus-getriebene Einrichtung
- • Optimiert
für Hochgeschwindigkeitsknotenbetrieb
- • USB-kompatible
serielle Schnittstelleneinrichtung (SIE)
- • USB-kompatible
Hochgeschwindigkeitstransceiver
- • Unterstützt Niederleistungs-Aussetzbetrieb
- • Unterstützt Aufwecken
von Normandy aufgrund USB-Wiederaufnahme
- • Unterstüzt Auslösung von
Wiederaufnahme durch Fern-Weckruf
- • Unterstützt Synchronisierung
des USB-Takts zu externem Bezugstakt.
-
2.1.2 Funktionsbeschreibung
-
Das
USB-Knotenschnittstellenmodul sieht eine Schnittstelle zum USB für verschiedene
Anwendungen vor. Der Endpunkt-Controller sieht eine vielseitige
Anordnung zum Steuern mehrere USB-Endpunkte vor. Die USB-Knotenschnittstelle
umfaßt
eine voll anpassungsfähige
serielle Schnittstelleneinrichtung (SIE) und einen intgrierten Transceiver.
Zusätzlich
unterstützt
sie einen externen Transceiver.
-
Figur 2-1 zeigt die obere
Ebene dieses Moduls.
-
Figur
2-1. Diagramm des USB-Knotenmoduls
-
2.1.3 Transceiver
-
Der
interne USB-Transceiver umfaßt
drei Hauptfunktionsblöcke:
Den Differentialempfänger,
den unsymmetrischen Empfänger
und den Sender. Zusätzlich
sind eine Bezugsspannung für
den unsymmetrischen Empfänger
und eine Stromquelle für
den Sender vorgesehen.
-
Normandy
unterstützt
nur einen Hochgeschwindigkeitstransceiver. Die Leistungserfordernisse
dieses Transceivers sind im Kapitel 7 der Universal Serial Bus Specification
Version 1.0 angegeben.
-
Um
die Signalverschiebung zu minimieren, werden Differentialausgangsschwingungen
des Senders gut ausgeglichen. Für
den Treiber wird eine Anstiegsgeschwindigkeitssfeuerung verwendet,
um abgestrahltes Rauschen und Übersprechen
zu minimieren. Die Treiber unterstützen den TRI-STATE-Betrieb,
um einen bi-direktionalen Half-Duplex-Betrieb des Transceivers zu
ermöglichen.
-
Der
Differentialempfänger
muß im
gesamten Gleichtaktbereich arbeiten, und er muß eine Verzögerung aufweisen, die sicher
größer als
die des unsymmetrischen Empfängers
ist, um Spannungsspitzen in der seriellen Schnittstelleneinrichtung
(SIE) nach unsymmetrischen Nullen (Single-Ended Zeros) zu vermeiden.
-
Unsymmetrische
Empfänger
sind auf jeder der beiden Datenleitungen vorhanden. Diese sind zusätzlich zu
den Differentialempfängern
erforderlich, um eine Absolutspannung mit einer Schaltschwelle zwischen 0,8
V und 2,0 V (TTL-Eingänge)
zu erfassen. Zur Erhöhung
der Vcc-Unterdrückung ohne Spannungsspitzen wird
der unsymmetrische Schalt-Bezugswert mit einer Bezugsspannung eingestellt.
Ein externer 1,5 ± 5
% kOhm Widerstand, der mit einer Spannungsquelle zwischen 3,0 V
und 3,6 V bezogen auf lokale Masse verbunden ist, ist an D+ erforderlich, um anzuzeigen, daß es sich
um einen Hochgeschwindigkeitsknoten handelt.
-
Verwendung
eines externen Transceivers
-
Es
kann auch ein externer Transceiver verwendet werden. Um den Betrieb
für einen
externen Transceiver zu konfigurieren, muß das externe Transceiver-Enable-Bit
(NCR.ETE) gesetzt werden. Wenn es gesetzt ist, gibt es an, daß die Ausgänge ihre „1"-Zustände verlassen
sollten, und alle Eingänge
sollten gewählt
sein.
-
2.1.4 Serielle Schnittstelleneinrichtung
(SIE; serial interface engine)
-
Die
serielle Schnittstelleneinrichtung des USB besteht aus einer PHY
und einer MAC-Ebene. Die PHY-Ebene umfaßt die digitale Taktwiedergewinnungsschaltung,
ein digitales Spannungsspitzenfilter, eine Paket-Ende-Erfassungsschaltung
und eine bit-stuffing und de-stuffing Logik. Die MAC-Ebene umfaßt die Paketformatierung,
CRC-Erzeugung und -Überprüfung, Endpunktadressenerfassung,
und sie sieht die notwendige Steuerung vor, um NAK, ACK und STALL
Antworten zu liefern, die von dem Endpunktcontroller für den spezifizierten
Endpunktkanal ermittelt werden. Die SIE ist auch verantwortlich
für die
Erfassung und Mitteilung von Ereignissen bei Erfassung von 11SB-spezifischen
Ereignissen, wie Reset, Warten und Wiederaufnehmen. Die Ausgangssignale
des Senders des UNIM-Moduls, die zu dem Transceiver gehen, sind
gut abgeglichen (unter 1 ns), um Verschiebungen auf den USB-Signalen zu minimieren.
-
2.1.5 Endpunktkanal-Controller
(EPC)
-
Der
Endpunktkanal-Controller (EPC) bildet die Schnittstelle für USB-Funktionsendpunkte
vor. Ein Endpunkt ist die letztendliche Quelle oder der Ursprung
der Daten. Ein Endpunktkanal sorgt für die Bewegung der Daten zwischen
dem USB und dem Speicher und vervollständigt den Weg zwischen dem
USB-Host und dem Funktionsendpunkt. Bis zu 16 solche Endpunktkanäle werden
zu jeder gegebenen Zeit unterstützt,
jeder mit derselben Funktionsadresse.
-
Eine
USB-Funktion ist eine USB-Einrichtung, die Informationen auf dem
Bus senden und empfangen kann. Eine Funktion kann eine oder mehrere
Konfigurationen haben, von denen jede die Schnittstellen definiert,
welche die Einrichtung umfaßt.
Jede Schnittstelle weist ihrerseits einen oder mehrere Endpunkte
auf.
-
Jeder
Endpunkt ist eine adressierbare Einheit auf dem USB und ist erforderlich,
um auf IN- und OUT-Token
von dem USB-Host (üblicherweise
ein PC) zu reagieren. IN Token geben an, daß der Host angefordert hat,
von einem Endpunkt Informationen zu empfangen, und OUT-Token geben
an, daß der
Host dabei ist, Information zu einem Endpunkt zu senden.
-
Bei
Erfassung eines IN-Tokens, der an einen Endpunkt gerichtet ist,
ist dieser Endpunkt dafür
verantwortlich, mit einem Datenpaket zu antworten. Wenn der Endpunkt
momentan unterbrochen ist, wird ein STALL-Handshakepaket gesendet.
Wenn der Endpunkt enabelt ist, jedoch keine Daten vorliegen, wird
ein NAK (negative Bestätigung)
zum Handshakepaket gesendet.
-
Ähnlich ist
bei der Erfassung eines OUT-Tokens, der an einen Endpunkt gerichtet
ist, der Endpunkt dafür
verantwortlich, ein Datenpaket zu empfangen, das von dem Host gesendet
wird, und in einem Puffer zu speichern. Wenn der Endpunktkanal momentan
blockiert ist, wird am Ende der Datenübertragung ein STALL-Handshakepaket
gesendet. Wenn der Endpunktkanal momentan disabled ist, wird am
Ende der Datenübertragung
kein Handshakepaket gesendet. Wenn der Endpunktkanal enabled ist,
jedoch kein Puffer vorhanden ist, in dem die Daten gespeichert werden
können,
wird ein NAK- (negative Bestätigung)
Handshakepaket gesendet.
-
Ein
disabelter Endpunkt oder Endpunkte, die momentan nicht auf einen
Endpunktkanal abgebildet sind, reagieren nicht auf IN-, OUT- oder
SETUP-Token.
-
Der
EPC bewahrt getrennte Zustandsinformation für jeden Endpunktkanal auf.
Die Zustandsinformation, die für
unmittelbare Entscheidungen erforderlich ist (z. B. für das Antworten
mit einer NAK oder STALL-Quittung) wird zu allen Zeiten für jeden
Endpunkt in dem Modul bereitgehalten. Andere Information, die für den Endpunktbetrieb
notwendig ist, wird in dem Endpunktfeld (Array) aufbewahrt. Da zu
einer gegebenen Zeit nur ein Endpunktkanal aktiv ist, wird die Endpunktkanal-Ablaufsteuereinheit
(state machine) von allen Endpunktkanälen gemeinsam benutzt.
-
Bei
IN-Token ist der EPC für
die Übertragung
der Daten von dem definierten Puffer zum Host verantwortlich. Bei
OUT-Token ist der EPC für
die Übertragung
von Daten von dem Host zu dem definierten Puffer verantwortlich.
Um eine größere Flexibilität zu ermöglichen,
wenn Puffer einem Endpunktkanal zugewiesen werden, ist für jeden
Endpunktkanal ein Doppelpufferverfahren zulässig. Dadurch dann der EPC
eine schnelle Antwort auf alle Transaktionen an dieses Modul liefern,
ohne auf NAKs zurückzugreifen.
-
Abbildung
auf Endpunktkanäle
-
Der
EPC sieht die Abbildung der Funktionsadresse, Tokentyp (IN, OUT,
SETUP) und Endpunktnummer auf einen der Endpunktkanäle vor.
Zwei feste Abbildungen auf Endpunktkanä le werden unterstützt und von
den Einstellungen des Endpunktkanal-Abbildungsauswahl-Bits des Einrichtungs-Konfigurationsregisters (DCR.EPMS)
gesteuert.
-
-
-
Endpunktsteuerung
-
Alle
von den Endpunktkanälen
während
der Datenübertragungen
verwendete Information wird in dem Endpunktfeld aufbewahrt, das
im RAM liegt. Dieses Feld ist durch den Endpunktkanal auf der Basis
indexiert, die in dem Endpunktfeld-Basisadressen-Register (EABA)
definiert ist. Dieses Feld enthält
zwei Doppelworte pro Endpunkt. Jedes Doppelwort ist ein Steuerwort,
das Steuer- und Statusinformation für den Endpunktkanal enthält, wie
einen Zeiger zum Anfang des Puffers, die Größe des Puffers, den Zustand
des Puffers und andere relevante Parameter.
-
Der
Pufferzustand definiert, ob der Puffer für Eingangs- oder Ausgangstransaktionen
verwendet werden soll und ob auf ihn momentan zugegriffen wird oder
ob er die gewünschte
Operation beendet hat.
-
Wenn
eine IN- oder OUT-Übertragung
von einem Endpunktkanal angefordert wird und ein Puffer vorhanden
ist, wird das geeignete Steuerwort gelesen. Dieses Steuerwort teilt
dem Endpunkt-Controller mit, wie die Transaktion zu beenden ist.
Am Ende einer Transaktion wird in das Steuerwort der Status geschrieben,
der von der Software als Anzeige zum Freigeben dieses Puffers verwendet
wird, und ein neues wird vorgesehen.
-
Endpunkt-Controller-Blockdiagramm
-
Der
Endpunkt-Controller besteht aus mehreren Funktionsblöcken. Die
Endpunkt-Ablaufsteuereinrichtung
(state machine) sieht die zentralisierte Steuerung für die Dienstblöcke des
Datenausricht-Mux (DALM; data alignment max), Adressengenerators
(ADGen), Teilendpunktkanal-Speichers (PEP-Speichers) vor. Die Gerätefunktion,
wie die Adreßüberprüfung und
-erzeugung werden in dem Gerätefunktionsblock
realisiert.
-
Alle
Ablaufsteuereinrichtungen laufen mit dem USB-Takt von 12MHz. Alle
Datenübertragungen
arbeiten mit dem Kernbus-Takt. Teile des ADGen-Blocks und der gesamte
DALM-Block arbeiten
mit dem Kernbus-Takt. Alle anderen Blöcke des Endpunkt-Controllers
verwenden ausschließlich
den lokalen Takt von 12 MHz. Datenbytes zwischen den Bereichen werden
bei der MAC-Benutzerschnittstelle mit einem asynchronen Handshake
für jedes übertragene
Byte synchronisiert.
-
Figur
2-2. Vereinfachtes Blockdiagramm des Endpunkt-Controllers
-
Speicherzugriffsleistung
-
Der
Endpunktcontroller minimiert die Anzahl der erforderlichen Speicherzugriffe.
Nur bei Empfang eines Tokens ist ein Speicherzugriff auf das Endpunktfeld
notwendig. Ein einzelner Doppelwort-Zugriff, zusammen mit dem systemeigenen
Endpunktzustand, ist ausreichend, damit der Endpunktkanal die Hostanfrage
verarbeiten kann. Dieser Zugriff liest die Positions- und Größeninformation
für die
Datenübertragung.
Die Datenübertragung
erfolgt in aufeinanderfolgenden Doppelwort-Lese- oder Schreib-Operationen.
-
Das
Modul hat die höchste
Priorität
auf dem Kernbus für Übertragungen,
und die Übertragungsrate
ist deutlich höher
als die des USB. Es besteht somit eine minimale Notwendigkeit der
Datenpufferung innerhalb des Endpunkt-Controllers, abgesehen von
einem extra Wort, um nachfolgende Zugriffe mit dem aktuellen Zugriff überlappen
zu lassen. Ein Bytezähler überwacht
die Anzahl der Bytes, die übertragen
werden. Der letzte Zugriff einer Übertragung kann ein teilweises
Lesen oder Schreiben des Speichers erfordern. Das teilweise Schreiben
des letzten Zugriffs wird von dem letzten Bytezählwert bestimmt. Am Ende einer Übertragung
wird der Status für
die Übertragung
in das aktuelle Steuerwort geschrieben, und das andere Steuerwort
für diesen Endpunkt
wird gelesen, um zu überprüfen, ob
ein weiterer Puffer vorbereitet wurde. Nach den Steuerwort-Operationen
wird der Zustand des Endpunktkanals akualisiert.
-
Synchronisationssupport
-
Durch
eine Kombination aus Hardware und Software unterstützt das
UNIM alle drei USB- definierten Synchronisationsklassen,
asynchron, synchron und adaptiv. Der Endpunkt-Controller sieht eine
Hardwareunterstützung
für die Überwachung
des USB-Bustaktes von 1 kHz im Verhältnis zu einem externen Bezugstakt, von
z. B. 8 kHz, und zum Überwachen
der Qualität
und Konsistenz des USB-Bustaktes von 1 kHz vor.
-
Steigende
Flanken eines externen Bezugstaktes werden in dem Bezugs-Zähkegister
gezählt.
Es kann dazu verwendet werden, die USB-Blocknummer zu vergleichen.
Die Frequenzdifferenz zwischen dem Bezugstakt und dem USB-Takt kann
dem Host in Paketen signalisiert werden, so daß der Host die USB-Bustaktfrequenz
einstellen kann; somit kann der USB-Takt mit dem Bezugstakt synchronisiert
werden.
-
Der
Endpunkt-Controller hält
auch einen Status aufrecht, um anzuzeigen, wenn er zu dem USB-Bustakt
von 1 kHz sychronisiert ist und wenn aufgrund eines fehlenden oder
falschen Block-Anfang-Pakets eine Diskontinuität in dem USB-Bustakt auftritt.
Er wird von der Software dazu verwendet, die Warteschlange der isochronen
Pakete einzustellen. Die aktuelle Blocknummer wird von dem Endpunkt-Controller
dazu verwendet, zu ermitteln, welcher isochrone Puffer als nächstes gesendet
werden soll.
-
Betrieb aussetzen/wieder
aufnehmen
-
Aussetzbetrieb.
-
Es
wird erwartet, daß eine
USB-Einrichtung abhängig
von dem Aussetzereignis, das auftritt, nachdem 3 ms verstrichen
sind, ohne daß irgendwelche
Busaktivität
erfaßt
wurde, in den Aussetzzustand geht. Das UNIM erfaßt dieses Ereignis und zeigt
es dem CR32A an, indem das ISR.SD Bit gesetzt und ein Intenupt gesendet
wird, wenn es enabelt ist. Das CR32A sollte abhängig davon das UNIM in den
Aussetzzustand versetzen und nach 5 ms ohne Erfassung irgendwelcher
Aktivität
in den Haltemodus umschalten (ISR.SDS).
-
Im
Aussetzzustand geht der Transceiver in einen speziellen Niederleistungsmodus,
und die Takte können
unterbrochen werden. Der gespeicherte Zustand und das Kernbus-RAM
bleiben statisch, so daß bei
der Wiederaufnahme keine weiteren Operationen notwendig sind.
-
Normandy
kann aufgrund eines für
den CR32A lokalen Ereignisses den Betrieb nach dem Aussetzzustand
wieder aufnehmen, wodurch seinerseits der USB-Bus über eine
Fern-Wiederaufnahme oder bei Erfassung eines Fern-Befehls auf dem
USB-Bus, der den CR32A über
die MIWU unterbricht, geweckt werden kann.
-
Man
beachte, daß eine
Einrichtung im Aussetzbetrieb maximal 500 μA von dem Bus ziehen darf, siehe „GERÄTESPEZIFIKATIONEN" auf Seite 3-55 für Einzelheiten
des Stromverbrauchs von Normandy.
-
Fernwiederaufnahme
-
Wenn
der Host Fernweckrufe von diesem Knoten enabelt hat, sendet Normandy
einen solchen abhängig
von einem lokalen Ereignis, wie einem Interrupt.
-
Wenn
die Firmware das Ereignis erfaßt,
nimmt sie die Prozessoraktivität
im aktiven Modus wieder auf. Sie weckt dann das UNIM aus dem Niederleistungs-Aussetzzustand
und löst
eine Fernwiederaufnahme auf dem USB unter Verwendung des FSR-Registers
aus. Die Knotenfirmware muß sicherstellen,
daß wenigstens 5
ms Leerlauf auf dem USB stattfanden. Im Wiederaufnahmezustand wird
auf dem USB eine Konstante „K" angezeigt. Diese
sollte wenigstens 1 ms andauern, wobei danach der USB-Host damit
fortfährt,
das Wiederaufnahmesignal während
wenigstens zusätzlicher
20 ms zu senden, und dann die Wiederaufnahmeoperation abschließt, indem
er die Paketende-Sequenz ausgibt. Sollte innerhalb von 100 ms kein
Paketende-Signal vom Host empfangen werden, sollte die Fernwiederaufnahme
erneut durch Software gestartet werden.
-
USB-Wiederaufnahmeoperation
-
Bei
Erfassung eines Wiederaufnahme- oder Reset-Signals während des
Aussetzzustands ist das UNIM-Modul dafür verantwortlich, Normandy
aufzuwecken. Dies erfolgt, indem das UNIM ein Signal (ohne Beitrag
irgendwelcher Takte) an die MIWU sendet, das die Erfassung einer
Wiederaufnahme auf dem USB anzeigt und den Normandy-Weckruf anfordert,
um den CR32A zu aktivieren und zu unterbrechen. Dabei werden die Takte
für das
USB-Modul erneut enabelt, und der Rest des Chips wird aufgeweckt.
-
Die
USB Spezifikation erfordert, daß eine
Einrichtung innerhalb von 10 ms auf USB-Token antworten kann.
-
Einschalt-Resets
-
Es
gibt zwei Fälle,
in denen dieser Knoten aktiviert werden kann; wenn der Knoten in
einen bereits aktivierten USB-Verteilerport eingesteckt wird, und
wenn bei dem Verteilerknoten die Energie eingeschaltet wird. Um
eine Interoperabilität
zwischen den Bus-Geräten
zu erreichen, erfordert die USB-Spezifikation, daß der Knoten
innerhalb von 100 ms auf einen USB-Reset reagiert können muß, nachdem
die Energie eingeschaltet und beim Verteilerport stabil ist. Ähnlich muß ein Knoten,
der in Betrieb eingesteckt wird, auf ein USB-Reset innerhalb von
100 ms reagieren, nachdem seine Verbindung von einem Verteilerport
erfaßt
wurde. Der USB-Reset wird während
wenigstens 10 ms beibehalten. Nachdem der USB-Reset gelöst wurde,
liefert der Verteiler 100 mA Busleistung an das Gerät. Erst
nachdem das Gerät
konfiguriert wurde, darf es die in der USB-Standardkonfiguration
beschriebene Energiemenge aufnehmen (bis zu 500 mA). Das UNIM führt eine USB-definierte,
Bus-getriebene Hochleistungs-Funktion aus.
-
2.1.6 UNIM Programmiermodel
-
Das
USB-Model enthält
Register, die dazu verwendet werden, den Betrieb der USB-Einrichtung
und ein Endpunktfeld im Speicher zu steuern und zu überwachen,
das zum Steuern der Endpunkparameter verwendet wird, die für eine bestimmte
Endpunktübertragung
spezifisch sind. Die Beziehung zwischen den verschiedenen Registern
und Speicherparametern ist unten angegeben.
-
Figur
2-3 USB-Modul-Programmiermodel
-
Endpunktkanalfeld
-
Das
Endpuntkanalfeld besteht aus 32 Steuerworten, 2 für jeden
Endpunktkanal. Das Endpunktkanalfeld liegt im Speicher bei einer
Adresse, auf die EABAR weist. Diese Adresse muß eine ausgerichtete 128-Byte Adresse
sein (d. h. 7 LSBs der Adresse sind 0). Das Endpunktkanalfeld erhält über die
4-Bit Endkanalnummer einen Index, und das Steuerwort, auf das zugegriffen
wird, wird von dem 1-Bit Zeiger des Endpunktkanal-Steuerwortes bestimmt.
Zusammen erzeugen das 250-Bit EABR, das 4-Bit EP und das 1-Bit CW
eine 32-Bit Adresse, die zu einer Doppelwort- (32-Bit) Grenze ausgerichtet
ist, und sie werden dazu verwendet, auf das 32-Bit Steuerwort zuzugreifen.
Das Format jedes Eintrags in der Tabelle ist unten beschrieben.
-
Steuerwortformat
-
Das
32-Bit Steuerwort enthält
die gesamte Information, die zum Betreiben dieses Endpunktkanals
notwendig ist, wenn er aktiv ist. Es gibt zwei solche Einträge für jeden
Endpunktkanal.
-
Das
Steuerwort, auf das als nächstes
zugegriffen werden soll, wird von dem Wert des Endpunktkanal-Steuerwortzeigers
(CWP) bestimmt. Unmittelbar nach dem Empfang eines Tokens IN, OUT
oder SETUP durch einen Endpunktkanal, der momentan in einem betriebsbereiten
Zustand ist, wird das Steuerwort des ausgewählten Endpunktkanals bei dem
aktuellen Steuerwortzeiger gelesen, um zu ermitteln, wie auf den
Token reagiert werden soll. Am Ende einer Übertragung, wenn ein Beendigungsstaatus
geschrieben wird, wird das Steuerwort mit dem aktuellen Status aktualisiert,
der CWP wird inkrementiert, und das nächste Steuerwort wird gelesen.
Wenn ein Zwischenstatus geschrieben wird, wird nur das höchstwertige
Byte des Steuerwortes aktualisiert.
-
-
BS Pufferzustand.
-
4-Bit-Wert.
Von Software und EPC aktualisiert, um die Steuerung dieses Puffers
zwischen ihnen zu synchronisieren. Der EPC schreibt den Status,
der die Verwendung des EPCs angibt. Dieses Feld wird von der Knoten-Firmware
auf Ausgang bereit (Output Ready), Eingang bereit (Input Ready)
Setup bereit (Setup Ready), Überspringen
(Skip), Unterbrechen (Stall) und Disable eingestellt . Alle anderen
Werte werden von dem EPC eingestellt. Der EPC kann auch die Werte
von Stall und Disable bei Fehlerbedingungen schreiben. Der Puffer
kann von der Knoten-Firmware wieder beansprucht werden, wenn der
Pufferzustand den Wert eines Fertig-Status hat; dies umfaßt den Eingabe/Ausgabe-Fertigstatus
und die Fehler Codes.
-
- 0: Skip Skip. Wird zusammen mit dem Ausgabe-Fertigbefehl
verwendet. Skip bewirkt, daß das
nächste empfangene
Datenpaket ignoriert und der Steuerwortzeiger inkrementiert wird.
Bei Steuerendpunkten bewirkt es auch, daß der Endpunktkanalzustand
von dem Eingabe/Ausgabe-Bereitzustand auf den Eingabe/Ausgabe-Wartezustand
schaltet. Das Einstellen von TE und TI bestimmt, welche Quittung
(Handshake) zurückgegeben
wird, sowie den nächsten
Zustand des Endpunktkanals. NAK wird zurückgegeben, wenn entweder TE
oder TI gesetzt ist. Wenn TI gesetzt ist und nicht TE, wird keine
Quittung zurückgegeben. Wenn
TE gesetzt ist, wird ACK zurückgegeben,
und ein vollständiger
Status wird geschrieben, wenn ein Paket mit der richtigen PID empfangen
wird.
- 1: IRDY Input Ready (Eingang bereit). In den Puffer wurden Daten
geschrieben, die abhängig
von einem IN-Token gesendet werden sollen.
- 2: ORDY Output Ready (Ausgang bereit). Der Puffer wurde für das Schreiben
zugewiesen.
- 3: SRDY Setup Ready. Der Puffer wurde für das Schreiben zugewiesen.
Dies wird nur während
der ersten Übertragung
von Steuerlese- und Schreiboperationen bei einem Steuerendpunkt
verwendet. Es wird nur in das Steuerwort 0 geschrieben.
- 4: OWT Output Wait (Ausgabe warten). Gibt an, daß ein Fehler
aufgetreten ist, während
OUT-Daten von dem Host empfangen wurden. Dies umfaßt die Erfassung
eines Bit-Stuffing-Fehlers.
Ein erneuter Versuch wird erwartet, weil dies als Zwischenzustand
betrachtet wird, außer
in dem Fall eines isochronen OUT-Endpunkts, wo es als Beendigungsstatus
behandelt wird.
- 5: CRCE CRC Error. Gibt an, daß ein fehlerhafter CRC am Ende
einer Ausgabetransaktion erfaßt
wurde. Ein erneuter Versuch wird erwartet, weil dies als Zwischenzustand
betrachtet wird, außer
in dem Fall eines isochronen OUT-Endpunkts, wo es als ein Beendigungszustand
behandelt wird.
- 6: BUFE Buffer Error (Pufferfehler). Während einer Ausgabetransaktion,
wurden Daten von dem USB schneller Empfangen, als sie in den Speicher
geschrieben werden konnten. Während
einer Eingabe wurden Daten aus dem Speicher nicht schnell genug
gelesen, um mit der USB-Datenrate mitzuhalten. An diesem Endpunkt
wird ein erneuter Versuch erwartet.
- 7: IWT Input Wait (Eingabe warten). Der Puffer wird von dem
Endpunkt-Controller angehalten und wartet darauf, diesen Puffer
bei der nächsten
Gelegenheit zu senden oder erneut zu senden. Dies gilt für den Fall einer
fehlenden Bestätigung
(ACK).
- 8: ICMP Input Complete (Eingabe beendet). Erfolgreiche Beendigung
der Eingabe-Operation.
Der Puffer kann freigegeben werden.
- 9: OCMP Output Complete (Ausgabe beendet). Der Puffer ist mit
Daten gefüllt,
und es wurde kein Fehler erfaßt.
- 10: TKNE Token Error. Ein Token des falschen Typs für den momentanen
Kontext des Steuerendpunktkanals wurde empfangen. Wenn es ein Ausgangspuffer
war, wird der Endpunkt angehalten. Wenn es ein Eingangspuffer war,
wird NAK gesendet, und der Zustand des anderen Steuerworts wird
untersucht. Dies wird als ein Beendigungsstatus angesehen.
- 11: SYNE Iso Synchronisation Error. Daten wurden in einem Puffer
mit TE = 1 und TI = 1 empfangen, der CWP war jedoch nicht gleich
dem LSB des FNR. Dies wird als ein Beendigungsstatus angesehen.
- 12: DATE Data Error (Datenfehler). Für OUT-Daten, wenn CW.BR nicht
gesendet wurde und die Menge der vom Host empfangenen Daten geringer
als erwartet war oder der zugewiesene Puffer war nicht groß genug, um
die OUT-Daten zu speichern. Für
Eingangsdaten wird es gesetzt, wenn ein Pufferfehler aufgetreten
ist und CW.TE nicht gesetzt oder CW.TI gesetzt war. Dies wird als
ein Beendigungsstatus angesehen.
- 13: rsvd Reserviert.
- 14: HALT Halt. Bewirkt, daß der
aktuelle Endpunktkanal in seinen Halt-Zustand geht, oder gibt an,
daß der Endpunkt
in den Halt-Zustand gegangen ist.
- 15: DIS Disable. Bewirkt, das der aktuelle Endpunktkanal in
seinen Disable-Zustand geht, oder zeigt an, daß der Endpunktkanal in den
Disable-Zustand gegangen ist.
-
TI
Type isochron. 1 isochron, 0 Steuerung, Bulk, Interrupt.
-
TE
Toggle Enable. Wird zum Vergleichen/Erzeugen des Wertes des Datenpaket-Identifikators (PID) (Data0/Datal)
mit dem Steuerwortzeiger verwendet.
- 0: Der
Daten-Toggle-PID wird bei Ausgangstransaktionen nicht überprüft, und
er wird gestützt
auf den aktuellen Wert des CWP abhängig von IN-Token erzeugt.
Der CWP wird nach jeder Transaktion inkrementiert (invertiert),
selbst wenn kein ACK empfangen wurde. Bei isochronen Endpunkten
werden Ausgangsdaten nicht in den Speicher geschrieben, bis der
CWP gleich dem niedrigstwertigem Bit der Blocknummer FNR.FN(0) ist.
Dies hat keinen Einfluß auf
Daten, die abhängig
von IN-Token gesendet werden. Daten-Toggle sollte für Puffer
nicht enabelt werden, die dafür
bestimmt sind, mit dem SETUP-Token gesendete Daten zu empfangen.
- 1: Der Daten-Toggle-PID wird bei Ausgangstransaktionen überprüft und gestützt auf
den aktuellen Wert von CWP abhängig
von IN-Token erzeugt. Bei Ausgangstransaktionen wird ein ACK abhängig von
Ausgangspaketen gesendet, deren PID-Wert (Data 0/1) nicht mit dem
CWP übereinstimmt.
Bei Eingangstransaktionen wird CWP nach jeder Transaktion nur inkrementiert
(invertiert), wenn eine ACK-Quittung abhängig von einer Zeitablaufperiode
zurückgegeben
wurde. Bei isochronen Endpunkten werden die Ausgangsdaten immer
in den Speicher geschrieben, wenn jedoch FNR.FN(0) nicht gleich
CWP ist, wird der ISO-Sync-Fehlerpufferzustand zurückgeschrieben.
-
BR
Buffer Rounding (Pufferrundung). Gibt für Ausgangstransaktionen an,
ob es zulässig
ist, einen Puffer mit einer anderen Größe als der des empfangenen
Datenpakets zu verwenden.
- 0: Das Datenpaket
sollte den definierten Datenpuffer genau füllen. Der Pufferüberlauf- oder Unterlaufstatus wird
zurückgegeben,
wenn das Datenpaket nicht genau in den Puffer paßt.
- 1: Das Datenpaket kann kleiner als der definierte Puffer sein,
ohne eine Fehlerbedingung am Endpunkt zu erzeugen.
-
Wenn
es zusammen mit einem Ausgabeende- oder Datenfehlerpuffer-Status
gelesen wird, gibt dieses Feld den Wert des empfangenen PID an – 0 für Data0,1
für Data1.
-
IC
Interrupt on Packet Complete (bei Paketende). Dies bewirkt, daß an diesem
Endpunkt ein Ereignis gesetzt wird, (EER.EPn), wenn der Pufferstatus
mit Eingabeende oder Ausgabeende beschrieben wird, bei einem Paketfehler,
oder wenn der Endpunktkanal unterbrochen wird.
-
IE
Interrupt on Packet Error (bei Paketfehler). Dies bewirkt, daß an diesem
Endpunkt ein Ereignis gesetzt wird (EER.Epn), wenn der Pufferzustand
einem der Pufferfehlercodes entspricht, oder wenn der Endpunkt unterbrochen
wird. Wenn sowohl IC als auch IE gesetzt sind, bewirken auch CRC-
und Bit-Stuffingfehler, daß ein
Ereignis erzeugt wird und diese Puffer nicht mehr verwendet werden,
wie im normalen Betrieb. Dies dient hauptsächlich der Diagnose.
-
res
Reserviert. 1 Bit.
-
BP
Buffer Page (Pufferseite).
- 0: Verwende Pufferseite
A als obere Adresse des Eingabe/Ausgabepuffers.
- 1: Verwende Pufferseite B als obere Adresse des Eingabe/Ausgabepuffen.
-
BA
Buffer Address (Pufferadresse). 11 Bit. Die unteren 11 Bit der Pufferadresse.
Der Puffer muß bei einer
ausgerichteten Doppelwortgrenze beginnen, und er kann bei jeder
Byte-Grenze enden. Am Ende aller vollständigen Übertragungen wird der Restwert
der Pufferadresse geschrieben. Am Ende unvollständiger Übertragungen, z. B. wenn der
Status mit Eingab- oder Ausgabe-Warten beschrieben wird, wird dieses
Feld nicht überschrieben.
Bei OUT-Puffern ist das erste gespeicherte Byte das Byte, daß dem PID
folgt. Ähnlich zeigt
bei IN-Puffern die Adresse auf das erste Byte der zu übertragenden
Daten, d. h. das Byte, das dem PID in dem Paket unmittelbar folgt.
Der CRC wird automatisch berechnet und an das Paket angehängt, außer wenn der
IN-Token aus dem IS RDY-Zustand empfangen wird und das IS-Feld des
Steuerworts nicht auf 1 gesetzt ist.
-
BC
Byte Count. 10 Bit. Die Größe des zu
verwendenden Datenpuffers. Der Puffer beginnt bei einer geraden
Doppelwortgrenze, und er kann bei jeder Bytegrenze enden. Bei IN-Transaktionen zeigt
dies die Größe der zu übertragenden
Daten an. Bei OUT-Transaktionen
gibt dies die Größe des Puffers
an, in dem Daten empfangen werden können. 0 ist ein zulässiger Wert
für den
Byte-Zählwert.
Am Ende aller vollständigen Übertragungen
wird der Restwert des Bytezählers
geschrieben. Am Ende unvollständiger Übertragungen,
z. B. wenn der Zustand als Eingabe-Warten oder Ausgabe-Warten beschrieben
wird, wird dieses Feld nicht überschrieben.
-
2.1.7 Endpunktkanalbetrieb
-
Endpunktkanalzustände
-
Um
den Betrieb und die Steuerung aufrechtzuerhalten, hält jeder
Endpunktkanal einen Zustand mit genau definierten Bedingungen für Übertragungen
zwischen den Zuständen
aufrecht, die eine implizite Hardware/Software-Synchronisierung
benötigen.
Endpunktkanal-Zustandsübergänge treten
auf:
- – bei
expliziten Softwarebefehlen an einen Endpunkt über das Endpunktbefehlsregister
(ECR)
- – durch
Lesen des Pufferstatus des anderen Puffers in dem anderen Steuerwort
für diesen
Endpunkt am Ende einer Übertragung,
und
- – als
eine Folge von Ereignissen auf dem USB, wie dem Empfang von IN,
OUT und SETUP-Token und ACK-Quittungen.
-
2-4 zeigt
eine vereinfache Endpunktkanal-Ablaufsteuereinrichtung zum Verarbeiten
von IN und OUT-Transaktionen. Die Verarbeitung von Steuer-Lese-
und Schreibtransaktionen erfolgt auf ähnliche Weise.
-
Figur
2-4. Vereinfachtes Endpunktzustandsdiagramm
-
Der
aktuelle Endpunktkanalzustand ist im Endpunktzustandsregister sichtbar,
auf das über
den USB-Index und Datenregister zugegriffen werden kann. Maximal
ist immer ein Endpunktkanal zu einer gegebenen Zeit in einem der
aktiven Zustände.
Dies ermöglicht
eine gemeinsame Nutzung der aktiven Zustandslogik durch alle Endpunktkanäle.
-
Disable.
Der Disable-Zustand wird bei einem Reset, bei einem Disable-Befehl
an diesen Endpunktkanal und bei Erfassung eines Disable-Zustands
im Pufferzustand eines Steuerwortes ausgelöst. Jeder Token, der von diesem
Endpunktkanal empfangen wird, während
er in diesem Zustand ist, wird ohne Handshake zurückgegeben.
Ein Eingreifen mittels Software ist notwendig, um den Endpunktkanal
aus diesem Zustand zu holen, üblicherweise über einen
Enable-Befehl an einen der Wartezustände.
-
Halt.
Der Halt-Zustand wird aktiviert, wenn der Stall-Befehl (Unterbrechen)
an den Endpunktkanal geht, wenn ein Stall-Zustand im Pufferzustand
eines Steuerworts erfaßt
wird, sowie bei bestimmten Fehlerbedingungen. Jeder von diesem Endpunktkanal
empfangene Token wird als Stall-Handshake zurückgegeben, während dieser
in diesem Zustand ist, um anzuzeigen, daß der Endpunkt momentan unterbrochen
ist. Ein Eingreifen mittels Software ist erforderlich, um den Endpunktkanal
aus diesem Zustand zu bringen, üblicherweise über einen
Enablebefehl an einen der Wartezustände.
-
Input
Idle I_IDL. In diesem Zustand erwartet der Endpunkt, daß bald ein
Puffer zugewiesen wird. Ein NAK-Handshake wird zurückgegeben,
wenn ein IN-Token auf diesen Endpunktkanal abgebildet wird. Keine Antwort
wird bei Out-Token von diesem Endpunktkanal zurückgegeben.
-
Input
Ready I_RDY. Dieser Zustand wird über einen Eingang-Bereit-Befehl
an diesen Endpunktkanal oder bei Erfassung eines anderen Eingabepuffers
am Ende einer Übertragung
aktiviert. Der Befehl sollte nur erfolgen, nachdem diesem Endpunkt
ein Puffer zugewiesen wurde, indem das Steuerwort bei der richtigen
Position in dem Endpunktfeld geschrieben wird. Diese Steuerwort
sollte auf einen Datenpuffer zeigen, der Daten enthält, die
abhängig
von dem nächsten
IN-Token, welcher von diesem Endpunktkanal empfangen wird, an den
Host zurückgegeben
werden sollen. Der PID-Wert wird als Data0 übertragen, wenn CWP gleich
0 ist, und als Data1, wenn CWP gleich 1 ist.
-
Input
Active I_ACT. Dieser Zustand wird bei Empfang eines IN-Tokens aktiviert,
wenn der ausgewählte Endpunktzustand
momentan Eingang-Bereit ist. In diesem Zustand werden Daten von
dem Speicher an den USB übertragen.
Bei Beendigung der Datenübertragung
sollte ein ACK-Handshake innerhalb von 16 Bitzeiten empfangen werden.
Am Ende dieser Zeitablaufperiode wird der Pufferwartezustand in
das Steuerwort zurückgeschrieben,
wenn kein ACK empfangen wurde. Der Adreß- und Bytezähler werden
jedoch nicht überschrieben,
weil eine erneute Übertragung
erfolgt und die momentanen Werte nicht neu verwendet werden müssen. Wenn
ein ACK emfpangen wird, werden der Pufferstatus zusammen mit dem
aktuellen Wert des Adreß-
und Bytezählers
geschrieben. Dann wird das andere Steuerwort an die sem Endpunkt
gelesen, um den nächsten Zustand
des Endpunktes zu ermitteln, der das nächste Mal verwendet werden
soll, wenn ein Token an diesen Endpunktkanal gerichtet wird. Wenn
dieser Endpunkt für
eine Steuerübertragung
verwendet wird, kann ein Übergang
zu dem Ausgang-Bereit- oder Ausgang-Ruhe-Zustand erfolgen, um die
Statusphase der Steuer-Leseübertragung
zu beenden.
-
Input
ISO Ready IS_RDY. Dieser Zustand wird über einen Eingang-Bereit-Befehl
an diesen Endpunktkanal oder bei Erfassung eines weiteren Eingangspuffers
am Ende einer Übertragung
aktiviert. Der Befehl sollte nur erfolgen, nachdem diesem Endpunkt
ein Puffer zugewiesen wurde, indem das Steuerwort an die geeignete
Stelle in dem Endpunktfeld geschrieben wird. Dieses Steuerwort sollte
zu einem Datenpuffer weisen, der Daten enthält, die abhängig von dem nächsten,
von diesem Endpunktkanal empfangenen IN-Token an den Host zurückgegeben
werden sollen. Der PID-Wert wird unabhängig vom Wert des CWP immer
als DAT0 übertragen.
-
Input
ISO Active IS_ACT. Dieser Zustand wird bei Empfang eines IN-Tokens
aktiviert, wenn der ausgewählte
Endpunktzustand Eingang-momentan-bereit ist. Während dieses Zustands werden
Daten vom Speicher zu dem USB übertragen.
Bei Beendigung der Datenübertragung
werden der Pufferstatus zusammen mit dem aktuellen Wert des Adreß- und Bytezählers am
Ende der Übertragung
geschrieben. Dann wird das andere Steuerwort bei diesem Endpunkt
gelesen, um den nächsten
Zustand des Endpunktes zu bestimmen, der das nächste Mal verwendet werden
soll, wenn ein Token an diesen Endpunktkanal gerichtet wird.
-
Output
Idle O_IDL. In diesem Zustand erwartet der Endpunkt, daß bald ein
Puffer zugewiesen wird. Ein NAK-Handshake wird zurückgegeben,
wenn ein OUT-Token auf diesen Endpunktkanal abgebildet wird. Keine
Antwort wird zurückgegeben,
wenn IN-Token an diesen Endpunktkanal gehen.
-
Output
Ready O_RDY. Dieser Zustand wird aktiviert, nachdem dem Endpunktkanal
ein Puffer zugewiesen wurde, in den Daten geschrieben werden sollen.
Er kann über
einen Ausgangs-Bereit-Befehl von dem O_IDL-Zustand aktiviert werden,
nachdem das passende Wort aus dem Endpunktfeld geschrieben wurde, oder
bei Erfassung eines weiteren Ausgabepuffers am Ende einer Übertragung.
-
Output
Active O_ACT. Dieser Zustand wird bei Empfang eines OUT-Tokens aktiviert.
Während
dieses Zustandes werden Daten von dem USB in den Speicher geschrieben.
Am Ende einer Ausgangsübertragung wird
der Status in das Steuerwort bei dem CWP geschrieben. Wenn die Übertragung
nicht erfolgreich war, d.h. wenn ein CRC oder Bitstuffing-Fehler
erfaßt
wurde, wird dies als Pufferstatus geschrieben. Wenn die Übertragung
erfolgreich war, wird der Ausgabe-Beendet-Pufferstatus geschrieben,
CWP wird invertiert, und das andere Steuerwort für diesen Endpunktkanal wird
gelesen. Gestützt
auf den Pufferzustand erfolgt der richtige Übergang. Wenn dieser Endpunkt
für eine
Steuerübertragung
verwendet wird, kann ein Übergang
zu dem Eingang-Bereit- oder zu dem Eingang-Warte-Zustand erfolgen,
um die Statusphase einer Steuer-Schreibübertragung zu beenden.
-
Output
ISO Idle OS_IDL. In diesem Zustand erwartet der Endpunkt, daß bald ein
Puffer zugewiesen wird. Kein Handshake wird zurückgegeben, wenn ein OUT-Token
auf diesen Endpunkt ausgebildet wird. Keine Daten oder Handshakes
wird bei IN-Token auf diesem Endpunktkanal zurückgegeben.
-
Output
ISO Ready OS_RDY. Dieser Zustand wird aktiviert, nachdem diesem
Endpunktkanal ein Puffer zugewiesen wurde, in den Daten geschrieben
werden sollen. Er kann über
einen OS-Bereit-Befehl von dem OS_IDL-Zustand aktiviert werden,
nachdem das entsprechende Wort aus dem Endpunktfeld geschrieben
wurde, oder bei Erfassung eines weiteren Ausgabepuffers am Ende
einer Übertragung.
-
Output
ISO Active OS_ACT. Dieser Zustand wird bei Empfang eines OUT-Tokens
von dem OS_RDY-Zustand aktiviert. Während dieses Zustandes werden
Daten in dem USB in den Speicher geschrieben. Am Ende einer Ausgangsübertragung
wird der Status bei dem CWP in das Steuerwort geschrieben. Wenn
die Übertragung
nicht erfolgreich war, d.h. wenn ein CRC oder Bitstuffing-Fehler
erfaßt
wurde, wird dies als der Pufferstatus geschrieben. Wenn die Übertragung
erfolgreich war, wird der Ausgabe-Beendet-Pufferstatus geschrieben.
Am Ende der Statusübertragung
wird CWP invertiert, und das andere Steuerwort für diesen Endpunktkanal wird
gelesen. Der richtige Übergang
erfolgt gestützt
auf den Pufferzustand.
-
Setup
Ready S_RDY. Dieser Zustand wird aktiviert, nachdem diesem Endpunktkanal
ein Puffer zugewiesen wurde, in den Daten geschrieben werden sollen.
Dieser Zustand wird über
einen Setup-Bereit-Befehl aktiviert, nachdem das richtige Wort aus
dem Endpunktfeld geschrieben wurde, oder bei Erfassung des Setup-Bereit-Pufferzustands.
-
Setup
Active S_ACT. Dieser Zustand wird bei Empfang eines Setup-Tokens
von dem Setup-Bereit-Zustand
aktiviert. In diesem Zustand werden Daten von dem USB in den Speicher
geschrieben. Am Ende einer Ausgangsübertragung wird der Status
bei CWP in das Steuerwort geschrieben, CWP wird invertiert, und
das andere Steuerwort für
diesen Endpunktkanal wird gelesen. Der richtige Übergang erfolgt gestützt auf
den Pufferzustand zu Ausgang-Warten, Ausgang-Bereit, Eingang-Warten
oder Eingang-Bereit, abhängig
vom Typ der Steuerübertragung
und des gelesenen Pufferzustands.
-
Hardware/Software-Synchronisierung
-
Nach
dem Reset werden alle Endpunkte disabelt. Ein Endpunkt wird enabelt,
indem ein Enable-Befehl an den Endpunkt geschickt wird. Dies sollte
nur erfolgen, wenn die Eingabe- und/oder
Ausgabepuffer diesem Endpunkt bald zugewiesen werden. Alle Endpunkte,
die momentan nicht auf einem Endpunktkanal abgebildet sind, werden
als disabelt angesehen.
-
Die
Software weist den Endpunktkanälen
Puffer nach Bedarf zu. Nachdem jeder Puffer zugewiesen ist, führt er den
Eingang- oder Ausgang-Bereit-Befehl an dem Endpunktkanal durch.
Wenn der Endpunktkanal momentan im Ruhezustand ist, geht er in den
geeigneten Bereit-Zustand. Wenn der Endpunktkanal momentan in einem
Bereit- oder Aktiv-Zustand ist, ignoriert er alle Befehle außer den
Disable- und Stall-Befehlen an den Endpunktkanal, die er sofort
verarbeitet. Die Software muß diese
Schreiboperation durchführen,
um mögliche Synchronisierungsprobleme
zu verhindern, weil die Behandlung des Endpunktkanals durch das
UNIM zu den Softwareoperationen asynchron erfolgt.
-
Da
jedem Endpunkt bis zu zwei Puffer zugewiesen werden können, kann
der nächste
Puffer vorbereitet werden, während
der aktuelle abgearbeitet wird, um die Datenübertragung zu beschleunigen
und unnötige NAK-Handshakes
zu vermeiden.
-
2.1.8 UNIM-Register
-
Beim
Lesen sollten Daten aus reservierten Registern ignoriert werden,
und beim Schreiben sollten diese Bits auf 0 geschrieben werden. – Dieser
Vermerk ist in dem Chip global gültig.
-
Gerätesteuerregister (DCR)
-
Ein
ein Wort breites Lese/Schreibregister. Das Gerätesteuerregister steuert die
Einschaltsequenz des USB-Knotens. Bei einem Reset wird dieses Register
gelöscht.
Das DCR-Registerformat
ist unten angegeben:
-
NAT.
Node Attached (Knoten angeschlossen). Gibt an, daß dieser
Knoten bereit ist und als an den USB angeschlossen erfaßt werden
kann. Wenn es nicht gesetzt ist, erzwingt der Transceiver, daß das SE0
an dem USB-Port verhindert, daß der
Verteiler (Hub), mit dem dieser Knoten verbunden ist, eine Verbindung
erfaßt.
Nach einem Reset ist es nicht gesetzt, so daß das Gerät Zeit hat, bevor es auf Befehle
reagieren muß. Nachdem
dieses Bit gesetzt ist, steuert das Gerät den USB nicht mehr an und
sollte bereit sein, Reset-Befehle von dem Verteiler zu empfangen.
-
ECE.
Endpunkt Controller Enable. Enabelt den Betrieb der Endpunktkanäle des Endpunktcontrollers, der
die Endpunktfeld-Basisadresse und die Einstellung des Kanalabbildungs-Auswahlregisters
verwendet. Wenn nicht gesetzt, werden alle Endpunkte als disabelt
angenommen.
-
DEF
0-3. Default Address (Voreinstellungsadresse) 0-3. Enabelt die Voreinstellungsadresse
und ignoriert den aktuellen Wert von FA. Dieses Bit wird gelöscht, wenn
das entsprechende Adreß-Enable-Bit
(AE) gesetzt wird, wenn das nächste
Mal ein ACK abhängig
von dem nächsten
IN-Token empfangen wird, der seinerseits von einem Endpunktkanal
empfangen wird, der für
Steueroperationen verwendet wird. Wenn kein ACK innerhalb der Zeitablaufperiode
empfangen wird, wird das nächste
Mal auch dieses Bit zurückgesetzt,
wenn ein Setup unmittelbar vor dem neuen Adreßfeld empfangen wird.
-
Man
beachte, daß dann,
wenn mehr als eine Adresse unterstützt wird, das niedrigstwertige
DEF-Bit, für
das das entsprechende AE-Bit gesetzt ist, das DEF-Bit ist, das beim
nächsten
Eintritt in den aktiven Eingabezustand auf einem Steuerendpunktkanal
gelöscht
wird. Es wird empfohlen, daß dann,
wenn mehrere Funktionsadressen zugewiesen werden, dies von der niedrigsten
zur höchsten
Zahl erfolgt.
-
EPMS.
Endpoint Pipe Map Select (Endpunktkanal-Abbildungsauswahl). Wählt die
aktuelle Einstellung der Kanalabbildungstabelle aus. Eine Funktionsadreßübereinstimmung
wird als gültig
betrachtet, wenn das entsprechende AE-Bit gesetzt ist und das entsprechende
DEF-Bit nicht gesetzt ist und die empfangene Adresse mit dem FA übereinstimmt.
Wenn das DEF-Bit gesetzt ist, wird eine Übereinstimmung angenommen,
wenn die 0-Adresse empfangen wird. Sollte mehr als eine Adresse
realisiert sein, hat im Falle, daß mehrere DEF-Bits gesetzt
sind, die niedrigste Zahl Priorität. In dem UNIM wird das Blocknummernregister
als der SOF-Kanal(Paketanfang)
angesehen. Bei anderen Ausführungsformen
ist denkbar, sie an andere SOF-Kanäle zu senden.
-
ETE.
External Transceiver Enable. Enabelt die Verwendung eines externen
USB-Transceivers,
im Gegensatz zu dem internen USB-Transceiver. Die Voreinstellung
ist 0. Wenn sie nicht enabelt sind, werden alle Ausgaben der externen
Transceiver-Schnittstelle bestätigt
und alle Eingaben werden ignoriert. Dieses Bit kann nur modifiziert
werden, wenn der Funktionszustand rückgesetzt ist (FSR.FS = 0).
-
SFM.
Short Frame (Kurzblock) Enable. Enabelt die Verwendung kürzerer Blockgrößen. Dies
wird exklusiv für
die Diagnose und Prüfung
verwendet, um die Zeit zum Emulieren eines gesamten Blockes zu reduzieren.
-
DIAG.
Diagnostic Mode (Dioagnosemodus). Enabelt den Diagnosemodus, in
dem zusätzliche
Diagnosefunktionen zugänglich
sind. Dies umfaßt
den Zugriff auf Diagnoseregister und die Möglichkeit in solche Register,
wie das TCR (siehe unten), zu schreiben.
-
Funktions-Zustandsregister
(FSR)
-
Ein
ein Wort breites Lese/Schreibregister. Es wird zum Steuern des Funktionszustands
des Gerätes verwendet.
Beim Reset wird dieses Register gelöscht. Das FSR-Registerformat
ist unten angegeben:
-
FS1,
FS0 wird von der Software verwendet, um den Funktionszustand des
Gerätes
zu steuern.
-
Funktionszustand
-
- 00: USB-Reset. Dies ist der USB-Reset-Zustand.
Er wird bei einem Modulreset oder mittels Software bei Erfassung
eines USB-Resets aktiviert. Bei Aktivierung werden alle Endpunktkanäle disabelt.
DCR.DEF und DCR.AE sollten mittels Software bei Aktivierung dieses
Zustandes gelöscht
werden. Bei Verlassen dieses Zustandes sollte DCR.DEF gesetzt werden,
so daß das
Gerät auf
die voreingestellte Adresse anspricht.
- 01: Resume. In diesem Zustand wird eine Wiederaufnahme-„K"-Signal erzeugt.
Dieser Zustand wird abhängig
von einer externen Weckanforderung von dem Gerät aktiviert. Der Knoten muß während wenigstens einer
Millisekunde in diesem Zustand sein und darf nicht länger als
fünfzehn
Millisekunden in diesem Zustand bleiben.
- 10: Operational. Dies ist der normale Betriebszustand. In diesem
Zustand ist der Knoten für
den Betrieb auf dem USB konfiguriert.
- 11: Suspend. Der Aussetzzustand wird bei Erfassung eines Aussetzereignisses
während
des Betriebszustandes aktiviert. Während des Aussetzzustandes
arbeiten die Transceiver in ihrem Niederleistungs-Aussetzmodus,
und es ist zulässig,
Takte von dem USB-Modul zu nehmen, um zusätzlich Energie zu sparen. Alle
Endpunktfeld- und interne Zustände
bleiben konserviert. Bei Erfassung von Busaktivität werden
die Takte wieder aufgenommen, und das Bit ISR.RSMD wird gesetzt.
Davon abhängig
kann Software den Wiedereintritt in den Betriebszustand bewirken.
Bei Erfassung einer externen Weckanforderung durch das Gerät löst die Software
die Fernwiederaufnahme aus und erzwingt den Eintritt in den Wiederaufnahmezustand.
-
Man
beachte: Bei Realisierungsformen mit der HUB-Funktion (Verteiler)
kann der Übergang
vom Aussetzen zum Wiederaufnehmen und vom Wiederaufnehmen zum Betrieb
automatisch erfolgen. Bei der Schnittstellendefinition sollten Vorkehrungen
für Signale
getroffen werden, welche die Zeitbereiche überschreiten, um diese Übergange
zu erzeugen.
-
Transceiver-Konfigurationsregister
(TCR)
-
Ein
ein Wort breites Lese/Schreib-Register. Dieses Register steuert
den Betrieb des Transceivers. Die unsymmetrischen Empfängerschwellwerte
und die Treiberflankensteigungen können eingestellt werden. Dieses
Register kann nur modifiziert werden, wenn DCR.DIAGE 1 ist. Bei
HUB-Ausführungsformen
steuert dieses Register alle Transceiver. Der Rücksetzwert ist {8'b00000000, 3'b100, 5'b10000}. Das TCR-Registerformat
ist unten gezeigt:
-
VADJ
Spannungsschwellwert-Einstellung. Steuert die unsymmetrischen Empfängerschwellwerte.
-
CADJ
Stromeinstellung. Steuert den Steuerstrom für die Treiberflankensteigung.
-
Funktionsadreßregister
(FAR)
-
Ein
doppelwortbreites Lese/Schreibregister. Enthält das Adreß-Enablebit und die sieben
Bit breite USB-Funktionsadresse, die während des normalen Betriebs
verwendet wird, nachdem alle Setup-Operationen beendet sind. Bei
einem USB-Reset wird dieses Register gelöscht. Bis zu vier Funktionsadressen
können
in diesem Register unterstützt
werden – FA0
bis FA3. Das FAR-Registerformat ist unten gezeigt:
[Entwurfsverbesserung
für Mehrfachendpunktgerät]
-
FA[6:0]
Funktionsadresse. Die 7 Bit breite Funktionsadresse wird von diesem
Gerät verwendet.
-
AE
Adreß-Enable.
Enabelt die Verwendung der Funktionsadresse, die in FAR gesetzt
ist, wenn das entsprechende Voreinstellungsadreßbit (DEF) nicht gesetzt ist.
-
Endpunktsteuerregister
(ECR)
-
Ein
ein Wort breites Lese/Schreibregister. ECD wird verwendet, um Befehle
bei einem spezifizierten Endpunkt auszuführen. Bei einem Reset wird
dieses Register gelöscht.
Das ECR-Registerformat
ist unten gezeigt:
-
CMD
Command. Dieser Befehl betrifft den Betrieb eines Endpunktes. Ein
Wert 0 zeigt an, daß der
Befehlsprozessor bereit für
den nächsten
Befehl ist.
- 0000: Complete. Gibt an, daß der vorhergehende
Befehl abgeschlossen ist und der Endpunktcontroller bereit ist,
einen weiteren Befehl anzunehmen.
- 0001: Input Enable. Bewirkt, daß der spezifizierte Endpunktkanal
aus dem Stall- oder Disable-Zustand in den Eingang-Wartezustand
geht. Der Steuerwortzeiger für
den spezifizierten Endpunktkanal wird auf 0 zurückgesetzt. Wenn der aktuelle
Zustand nicht Disable oder Stall ist, wird ein „F" zurückgegeben,
um anzuzeigen, daß ein
unzulässiger
Befehl bei diesem Endpunkt versucht wurde, und der Befehl wird ignoriert.
- 0010: Input Ready. Bewirkt, daß der spezifizierte Endpunktkanal
in den Eingang-Bereit-Zustand
geht, wenn er momentan in dem Eingang-Warte-Zustand ist. Dieser
Befehl wird nach einem Steuerwort ausgegeben, wobei ein Eingang-Bereit-Pufferzustand
in das Endpunktfeld für
den entsprechenden Endpunkt geschrieben wird.
Dieser Befehl
bewirkt nicht, daß das
Steuerwort in dem Speicher gelesen wird, sondern er erlaubt vielmehr, daß es abhängig von
dem Empfang eines IN-Tokens
gelesen wird. Wenn der aktuelle Zustand des Endpunkts nicht der
Wartezustand ist, wird der Befehl ignoriert. Wenn der aktuelle Zustand
der Ausgabe- oder Setup-Zustand
oder Disable oder Stall ist, wird ein „F" zurückgegeben,
um anzuzeigen, daß bei
diesem Endpunkt ein unzulässiger
Befehl versucht wurde.
- 0011: Input Iso Ready. Bewirkt, daß der spezifizierte Endpunktkanal
in den Eingang-ISO-Bereit-Zustand geht,
wenn er momentan in dem Eingang-Wartezustand ist. Dieser Befehl
wird nach einem Steuerwort ausgegeben, wobei der Eingang-Bereit-Puffer-Zustand
in das Endpunktfeld für
den entsprechenden Endpunkt geschrieben wird.
Dieser Befehl
bewirkt nicht, daß das
Steuerwort in dem Speicher gelesen wird, sondern erlaubt vielmehr, daß es abhängig von
dem Empfang eines IN-Tokens gelesen wird. Es wird erwartet, daß das Typfeld
des Steuerwortes (TI) auf isochron gesetzt wird, dies wird jedoch
nicht überprüft. Wenn
der aktuelle Zustand des Endpunktes nicht Eingang-Warten ist, wird
der Befehl ignoriert. Wenn der aktuelle Zustand einer der Ausgangs-
oder Setupzustände
oder Disabled oder Stall ist, wird „F" zurückgegeben,
um anzuzeigen, daß bei
diesem Endpunkt ein unzulässiger
Befehl versucht wurde.
- 0100: Output Enable. Bewirkt, daß der spezifizierte Endpunktkanal
aus dem Stall- oder
Disabled-Zustand in den Ausgang-Wartezustand geht. Der Steuerwortzeiger
für den
spezifizierten Endpunkt wird auf 0 zurückgesetzt. Wenn der aktuelle
Zustand nicht Disable oder Stall ist, wird ein „F" zurückgegeben,
um anzuzeigen, daß ein
unzulässiger
Befehl bei diesem Endpunkt versucht wurde, und der Befehl wird ignoriert.
- 0101: Output Ready. Bewirkt, daß der spezifizierte Endpunktkanal
in den Ausgang-Bereit-Zustand
geht, wenn er momentan in dem Ausgang-Wartezustand ist. Dieser Befehl
wird nach einem Steuerwort ausgegeben, wobei ein Ausgang-Bereit-Zustand in das Endpunktfeld
für den
entsprechenden Endpunkt geschrieben wird.
Dieser Befehl bewirkt
nicht, daß das
Steuerwort in dem Speicher gelesen wird, sondern erlaubt vielmehr, daß es abhängig von
dem Empfang eines OUT-Tokens gelesen wird. Wenn der aktuelle Zustand
des Endpunktes nicht Ausgang-Warte ist, wird der Befehl ignoriert.
Wenn der aktuelle Zustand einer der Eingangszustände, Stall oder Disable ist,
wird ein „F" zurückgegeben,
um anzuzeigen, daß bei
diesem Endpunkt ein unzulässiger
Befehl versucht wurde, und dieser Befehl wird ignoriert.
- 0110: Output Iso Enable. Bewirkt, daß der spezifizierte Endpunktkanal
aus dem Stall- oder Disable-Zustand in den Ausgang-Isochron-Wartezustand
geht. Der Steuerwortzeiger für
den spezifizierten Endpunkt wird auf 0 zurückgesetzt.
Wenn der aktuelle
Zustand nicht Disable oder Stall ist, wird ein „F" zurückgegeben,
um anzuzeigen, daß bei
diesem Endpunkt ein unzulässiger
Befehl versucht wurde, und der Befehl wird ignoriert.
- 0111: Output Iso Ready. Bewirkt, daß der spezifizierte Endpunktkanal
in den Ausgang-Iso-Bereit-Zustand geht, wenn er momentan in dem
Ausgang-Iso-Wartezustand
ist. Dieser Befehl wird nach einem Steuerwort ausgegeben, wobei
ein Ausgang-Bereit-Zustand in das Endpunktfeld für den entsprechenden Endpunkt
geschrieben wird.
Dieser Befehl bewirkt nicht, daß das Steuerwort
im Speicher gelesen wird, sondern er erlaubt vielmehr, daß es abhängig von
dem Empfang eines OUT-Tokens gelesen wird. Wenn der aktuelle Zustand
des Endpunktes nicht Ausgang-Iso-Warten
ist, wird der Befehl ignoriert. Wenn der aktuelle Zustand einer
der Eingangszustände,
Stall oder Disable ist, wird ein „F" zurückgegeben,
um anzuzeigen, daß bei
diesem Endpunkt ein unzulässiger
Befehl versucht wurde.
- 1000: Setup Ready. Bewirkt, daß der spezifizierte Endpunktkanal
in den Setup-Bereit-Zustand
geht. Dieser Befehl wird nach einem Steuerwort ausgegeben, wobei
ein Ausgang-Bereit-Zustand in das Endpunktfeld für den entsprechenden Endpunkt
geschrieben wird.
Dieser Befehl bewirkt nicht, daß das Steuerwort
im Speicher gelesen wird, sondern er erlaubt vielmehr, daß es abhängig von
dem Empfang eines SETUP-Tokens
gelesen wird. Wenn der aktuelle Zustand des Endpunktes nicht Stall
oder Disable ist, wird der Befehl ignoriert.
- 1001: Disable. Bewirkt, daß der
spezifizierte Endpunktkanal in den Disable-Zustand geht. Dies erfolgt
unmittelbar nach einem beliebigen anderen Zustand. Wenn der Endpunktkanal
momentan aktiv ist, wird der Status bei der Steuerung geschrieben,
wodurch angezeigt wird, daß der
Endpunkt disabelt wurde.
- 1010: Stall. Bewirkt, daß der
spezifizierte Endpunkt aus einem beliebigen Zustand in den Stall-Zustand geht.
Dies erfolgt unmittelbar nach jedem beliebigen Zustand. Wenn der
Endpunktkanal momentan aktiv ist, wird der Zustand in die Steuerung
geschrieben, wodurch angezeigt wird, daß der Endpunkt angehalten wurde.
- 1011-1101: Reserviert. Bewirkt die Ausführung keiner Funktion. Gibt
0 zurück.
- 1110: Toggle CWP. Bewirkt, daß der Steuerwortzeiger umgeschaltet
(getoggelt) wird. Dies wird in Verbindung mit Steuerübertragungen
verwendet, wenn eine ungerade Anzahl Pakete während der Datenphase gesendet
oder empfangen wird.
- 1111: Error. Gibt an, daß ein
für den
momentanen Zustand unzulässiger
Befehl des aktuellen Endpunktkanals versucht wurde, und daß ein neuer
Befehl angenommen werden könnte.
-
EPN
Enpoint Pipe Number (Endpunktkanalnummer). Dieser Parameter bestimmt
den Endpunktkanal, auf den der Befehl ausgeführt werden soll.
-
Vermerk
für den
Entwurf: Dieses Register sollte in der Hochgeschwindigkeitsbus-Schnittstellenlogik realisiert
werden, wobei Daten über
die asynchrone Schnittstelle weitergegeben werden. Zwei Signale
werden von dem Endpunktcontroller zurückgegeben – eines, um anzu zeigen, daß der Befehl
verarbeitet wurde und daß der
Befehlswert auf „0" gelöscht werden
sollte, und ein anderes, um anzuzeigen, daß der Befehl nicht verarbeitet
werden konnte und auf „F" gesetzt werden sollte.
-
Interrupt Status Register
(ISR)
-
Ein
ein Wort breites Lese/Schreibregister. Benachrichtigt die Software über Ereignisse,
die aufgetreten sind, die einen Interrupt verursacht haben und weitere
Verarbeitung erfordern. Bits werden gelöscht, indem 1 in das Bit/die
Bits geschrieben wird, welche gelöscht werden sollen. Beim Reset
wird dieses Register gelöscht. Das
ISR-Registerformat ist unten gezeigt:
-
ECI
Endpoint Controller Interrupt (Endpunktcontroller-Interrupt). Es
ist an einem der Endpunkte ein Ereignis aufgetreten, daß Softwareunterstützung benötigt. Dies
ist das ODER aller EER.Epn, die mit EEM.Epn UND-verknüpft sind.
-
SECI
Synchronized Endpoint Controller Interrupt (synchronisierter ECI.
Eine verzögerte
Version des ECI, der bei einem Inkrement oder dem Laden von FNR.FN
abgetastet wird.
-
RSTD
Reset Detected (Reset erfaßt).
Ein Übergang
auf SEO wurde erfaßt
und während
minimal 2,5 μs
gehalten, während
der Funktionszustand nicht USB Reset war. Als Reaktion sollte der
Funktionszustand (DCR.FS) auf USBReset gesetzt werden und während wenigstens
100 μs USBReset
bleiben. Nach dem Reset kann der Funktionszustand auf dem USB-Betriebszustand zurückgehen.
-
SD
Suspend Detected (Aussetzen erfaßt). Ein Minimum von 3,0 μs Wartezustand
wurde erfaßt,
wodurch angezeigt wird, daß der
Betrieb dieses Gerätes
ausgesetzt werden sollte. Das Aussetzen (Suspend) erfolgt softwaregesteuert
durch Schreiben von DCR.FS in den Aussetzwert.
-
SDS
Suspend Detected (Aussetzen erfaßt) 5. Ein Minimum von 5,0 μs Wartezustand
wurde erfaßt, wodurch
angezeigt wird, daß dieses
Gerät nun
eine Fern-Weckrufoperation ausführen
darf. Sollten die Takte in dem Intervall, nachdem SD gesetzt, SDS
jedoch nicht gesetzt ist, disabled werden, dann sollte der verbleibende
Teil der zusätzlichen
2 ms abgemessen werden, wenn die Takte wieder aufgenommen werden.
-
RSMD
Resume Detected (Wiederaufnahme erfaßt). Ein Wiederaufnahmesignal
wurde auf dem USB erfaßt,
während
dieses Gerät
in dem Aussetzzustand (DCR.FS = Suspend) war, wodurch angezeigt
wird, daß dieses
Gerät seine
Aufwecksequenz beginnen und in den Betriebszustand gehen sollte.
Wenn die Takte disabled sind, wenn die Wiederaufnahme neu erfaßt wird,
wird dieses Bit gesetzt, nachdem die Takte wieder enabelt sind.
Diese Wiederaufnahmebedingung sollte in dem USB-Modul ohne Taktunterstützung zwischengespeichert
und dann gelöscht
werden, wenn das Wiederaufnahme-Erfaßt-Bit gesetzt ist.
-
EOPD
End of Packet Detected. Eine gültige
Packetendesequenz wurde auf dem USB erfaßt. Dies wird verwendet, wenn
das Gerät
eine Fernwiederaufnahme auslöst,
um anzuzeigen, daß die
Wiederaufnahmesequenz bestätigt
und von dem Host beendet wurde.
-
SOFD
Start of Frame Detected. Ein gültiges
Blockanfangspacket wurde auf dem USB erfaßt.
-
FCI
Frame Counter Interrupt. Der Blockzähler hat den programmierten
Offset erreicht, d.h. TR.TI[7:0] = FNR.FN[7:0].
-
ULD
Unlocked Locked Detected. Gibt an, daß der Blockzeitgeber aus einem
verriegelten in einen unverriegelten Zustand gegangen ist oder aus
einem unverriegelten in den verriegelten Zustand zurückgegangen ist,
was durch den aktuellen Wert von FNR.UL bestimmt wird, das Unlocked-Statusbit.
-
Man
beachte, daß eine
Einstellung der isochronen Warteschlange bei isochronen Endpunkten
notwendig sein kann, weil FNR.FN[0] verwendet wird, um die nächste isochrone Übertragung
zu wählen.
-
HST
Holding Setup Token. Ein Setup-Token wurde empfangen, für den im
voraus kein SRDY-Puffer zugewiesen wurde. Dieses Setup-Paket wird
in dem Datenpfad gehalten, während
darauf gewartet wird, daß dem
Steuerendpunkt ein SRDY-Puffer zugewiesen wird.
-
Wenn
dies bei mehr als einem Endpunkt möglich ist, muß der Endpunktzustand
untersucht werden, um zu ermitteln, welcher Endpunkt auf den Puffer
wartet. In diesem Fall sollte ein SRDY-Puffer auf CW0 gesetzt werden,
ein OCMP-Puffer wird auf CW1 gesetzt, und ein SRDY-Befehl wird an
den zugehörigen
Endpunktkanal übergeben.
Man beachte, daß dieser
Zustand vermieden wird, außer
bei ungünstigen
Bedingungen. Im Intervall zwischen dem Setzen dieses Bits und dem
Zuweisen des Puffers werden alle gültigen IN- und OUT-Token mit
NAK quittiert.
-
Man
beachte: Eines der reservierten Bits ist für einen Hub-Interrupt reserviert,
falls diese Funktion enthalten ist.
-
Interrupt Maskenregister
(IMR)
-
Ein
ein Wort breites Lese/Schreibregister. IMR hat dasselbe Bitlayout
wie das Interrupt-Statusregister. Die
Bits werden mit den entsprechenden Bits in dem Interrupt-Statusregister
UND-verknüpft,
das Ergebnis wird ODER-verknüpft,
um das USB INT-Signal zu erzeugen. Bei einem Reset wird dieses Register
gelöscht.
-
Endpunkt Ereignisregister
(EER)
-
Ein
doppelwortbreites Lese/Schreibregister. EER wird verwendet, um anzuzeigen,
auf welchem Endpunktkanal Ereignisse aufgetreten sind, die einen
Dienst erfordern. Bei einem Reset wird dieses Register gelöscht. Das
EER-Registerformat ist unten angegeben:
{Konzept
für zukünftige Verbesserungen}:
-
EE(0:15)
Endpoint Event. Ein Bit pro Endpunkt. Das Bit 0 wird dem Endpunkt
0 zugewiesen. Das Bit 1 dem Endpunkt 1, etc. Gibt an, daß ein Ereignis
bei einem Endpunkt aufgetreten ist, daß Softwareunterstützung benötigen könnte. Die
Bits werden gelöscht,
indem 1 in die zu löschenden
Bits geschrieben wird.
-
Dieses
Bit wird gesetzt, nachdem der Status von dem Endpunktcontroller
in dem Speicher auf CW.BS geschrieben wurde.
-
Wenn
das CW.IC-Bit des Steuerwortes für
diesen Endpunkt gesetzt ist, tritt das Ereignis auf, wenn CW.BS
in eine der Fertig- oder Fehlerbedingungen geschrieben wird oder
disabled oder unterbrochen ist. {8, 9, 10, 11,12, 13, 14, 15}. Für isochrone Übertragungen
wird der Ausgangs-Wartestatus auch als Beendigungsstatus angesehen
{4, 5, 6}.
-
Wenn
das CW.IE-Bit des Steuerwortes für
diesen Endpunkt gesetzt ist, tritt das Ereignis auf, wenn CW.IS
in einen der Fehlercodes geschrieben wird oder disabelt {10, 11,12,
13, 14, 15}. Dies umfaßt
nicht den CRC-Fehler und Bitstuffingfehler-Codes außer für isochrone Übertragungen.
-
Wenn
sowohl das CW.IC- als auch das CW.IE-Bit des Steuerwortes für diesen
Endpunkt gesetzt sind, tritt das Ereignis auf, wenn CW.IS in einen
der Fehlercodes geschrieben wird oder disabled oder unterbrochen ist.
Dies umfaßt
den CRC-Fehler und Bitstuffingfehler-Codes {3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15}.
-
Bemerkung
für den
Entwurf Diese Ereignisbits sollten erst nach dem Aktualisieren des
Speicherwortes im Speicher gesetzt werden, nicht nach dem Schreiben
des internen CW.BS-Wertes.
Dies dient dazu, zu verhindern, daß der Software-Interrupt angezeigt
wird, bevor die Software den richtigen Status lesen kann.
-
Endpunktmaskenregister
(EMR)
-
Ein
doppelwortbreites Lese/Schreibregister. Beim Reset wird dieses Register
gelöscht.
Das EMR-Registerformat ist unten angezeigt:
{Entwurf
für zukünftige Verbesserungen}:
-
EM(0:15)
Endpoint Mask. Wird für
jeden Endpunkt enabelt, um zu ermitteln, ob ein Interrupt erzeugt werden
sollte, wenn das entsprechende Bit gesetzt ist. Das Bit 0 wird dem
Endpunkt 0 zugeordnet, das Bit 1 dem Endpunkt 1, etc.
-
Blocknummernregister (FNR)
-
Ein
ein Wort breites Nur-Lese-Register. FNR sieht die aktuelle Blocknummer
vor, die in dem SOF-Packet empfangen wird. Bei USB-Reset wird dieses
Register auf C000h gesetzt. Das FNR-Registerformat ist unten gezeigt:
-
FN
Frame Number (Blocknummer). Die aktuelle Blocknummer, wie sie in
dem letzten SOF-Paket empfangen wurde. Der Wert wird inkrementiert,
wenn ein SOF vergaßt
wird. Wenn zwei aufeinanderfolgende Blöcke fehlen oder fehlerhaft
sind, wird die Blocknummer mit der nächsten Blocknummer aus einem
gültigen SOF-Paket
geladen. Das niedrigstwertige Bit der Blocknummer wird dazu verwendet,
zu ermitteln, welcher isochrone Puffer als nächstes verwendet werden sollte.
-
UL
Unlocked Flag. Das unlocked Flag (UL) wird gesetzt, um anzuzeigen,
daß wenigstens
zwei Blöcke ohne
eine erwartete Blocknummer empfangen wurden und daß diese Blocknummer
aus dem nächsten SOF-Paket
in FN geladen wird. Bei einem Reset wird dieses Flag auf 1 gesetzt.
-
MF
Missed SOF-Flag. Das verpaßte
SOF-Flag (MF) wird gesetzt und zeigt eine Diskontinuität der Blocknummer
an. Dieses Flag wird gesetzt, wenn die Blocknummer in einem gültigen empfangen
SOF nicht mit dem erwarteten nächsten
Wert übereinstimmt.
Das Flag wird auch gesetzt, wenn innerhalb von 12060 Bitzeiten (FLMAX
mit Toleranz) nach einer vorhergehenden Änderung von FNR.FN kein SOF
empfangen wird. Bei einem Reset wird dieses Flag auf 1 gesetzt.
-
Blocknummer-Operation:
-
Bei
Empfang eines gültigen
SOF-Pakets:
-
Ohne
Empfang eines gültigen
SOF-Pakets innerhalb von 12060 Bitzeiten (oder 796, wenn das Kurzblockbit
DCR.SFM gesetzt ist) seit dem vorhergehenden Laden von FNR.FN
-
Referenzzählregister
(RCR)
-
Ein
ein-Wort-breites Nur-Leseregister. Wird zum Überwachen eines externen Bezugstaktes
verwendet. Bei Reset wird dieses Register gelöscht. Das RCR-Registerformat
ist unten gezeigt:
-
RC
Reference Count (Bezugszählwert).
Dies ist ein Zählwert
der Anzahl der steigenden Flanken, die bei dem Bezugseingangssignal
des Taktes des UNIM erfaßt
werden (siehe TBD). Wenn es zusammen mit der Blocknummer gelesen
wird, kann es einen präzise
Erfassung der relativen Frequenz des externen Bezugstaktes im Verhältnis zum
USB-Takt liefern. Die Differenz kann dem USB-Host über Feedback-Pakete
angezeigt werden, um das SOF-Paket zu verzögern oder zu beschleunigen,
damit der USB-Takt sich mit dem externen Takt synchronisiert. Um
für die
Software einen gemeinsamen Bezugspunkt aufrechtzuerhalten, wird
der Referenzzählwert
in dieses Register eingelesen, wenn FNR.FN mit einem neuen Wert
geladen oder inkrementiert wird.
-
Zeitintervallregister
(TIR)
-
Ein
ein Wort breites Lese/Schreibregister. Enthält eine Anforderung eines Interrupts,
wenn der Blockzähler
den programmierten Offset das nächste
Mal erreicht. Bei Reset wird dieses Register gelöscht. Das TIR-Registerformat
ist unten gezeigt:
-
TI
Timer Interrupt Interval. Bewirkt, daß ISR.FCI das nächste Mal
gesetzt wird, wenn der Blockzähler FNR.FN
diesen Wert erreicht.
-
USB-Indexregister (UIR)
-
Ein
ein Wort breites Lese/Schreibregister. Indexiert die Register, die
in dem USB-Bereich liegen und auf die nicht häufig zugegriffen werden muß. Das UIR-Registerformat
ist unten gezeigt:
-
SEL
Selector. Wählt
den Block der Register, auf die zugegriffen werden soll.
- 0: Endpunktkanal-Zustandsregister
- 1: Kanalabbildungsregister
- 2: Reserviert für
USB-Hubregister
- 3: Diagnoseregister
- andere: reserviert
-
Index
Index. Sieht den Blockindex für
den ausgewählten
Registerblock gemäß nachstehender
Beschreibung vor.
-
USB-Datenregister (LTDR)
-
Ein
ein Wort breites Nur-Lese/Schreibregister. Lesezugriffe sind auf
alle Stellen erlaubt. Das Datenregister wird mit den Daten geladen,
die für
das von dem UIR zu jeder Zeit ausgewählte Register gelesen werden.
Das Schreiben in dieses Register ist in dem USB-Hubregister nur
erlaubt, wenn UIR.SIL 2 ist. Ein Statusbit wird im Bit 15 definiert,
um anzuzeigen, daß eine
Schreiboperation erfolgreich war. Dies ist nur notwendig, wenn die
Hubfunktion enthalten ist.
-
Endpunktkanal-Zustandsindex
-
Indexiert
den Endpunktkanal-Zustandsvektor gemäß des unten gezeigten Indexierschemas:
-
EPN
Endpoint Pipe Number (Endpunktkanalnummer). Gibt die Endpunktkanalnummer
an, für
die der Endpunktkanal-Zustandsvektor in dem USB-Datenregister lesen
kann.
-
Endpunktkanalzustand
-
Dies
ist der 8 Bit-Endpunktkanalzustand, der für jeden Endpunktkanal gespeichert
ist, und der für
den momentan indexierten Endpunktkanal zurückgegeben wird. Wenn ein ungültiger Endpunktkanal
indexiert wird, wird 0 zurückgegeben.
-
-
EPS
Endpoint Pipe State (Endpunktkanalzustand). Der 4-Bit-Endpunktkanalzustand:
-
Man
beachte: Zu einer gegebenen Zeit ist nur ein Endpunktkanal aktiv.
-
CTL
Control. Dies wird bestätigt,
wenn der Endpunktkanal Steuerfolgen annehmen kann, welche den SETUP-Token
betreffen. Dieses Bit wird gesetzt, nachdem für diesen Endpunktkanal CMD.Setup-Bereit
vorlag, und bleibt gesetzt, bis der Endpunkt disabled wird.
-
CWP
Control Word Pointer (Steuerwortzeiger). Wenn das Steuerwortbit
0 ist, wird auf das Steuerwort 0 dieses Endpunkts in dem Endpunktfeld
als nächstes
zugegriffen. Wenn das Steuerwortbit 1 ist, wird auf das Steuerwort
1 für diesen
Endpunkt als nächstes
zugegriffen. Es wird auf 0 gesetzt, wenn der Endpunkt enabelt wird.
-
Kanalabbildungsindex
-
Indexiert
die Kanalabbildung, um die Abbildung auf den Endpunktkanal mit den
folgenden Eingangsparametern zu bestimmen:
-
FAN
Function Address Number (Funktionsadreßnummer). Gibt bis zu einer
von vier möglichen
Funktionsadressen an. Bei allen Ausführungsformen ist die Funktionsadresse
0 immer vorhanden.
-
TT
Token Type. Gibt den Tokentyp an:
00 | OUT |
10 | IN |
11 | SETUP |
01 | SOF |
-
EN
Endpoint Number (Endpunktnummer). Gibt die Endpunktnummer an, die
auf dem USB empfangen wird – 0
bis 15 einschließlich.
-
Kanalabbildungsdaten
-
Ein
ein Byte breites Register. Gibt dem Endpunktkanal den aktuellen
Wert des USB-Indexregisters
zurück,
das sich hierauf bezieht. Das Lesen und Schreiben dieses Registers
ist nur gültig
wenn DCR.ECE gleich 0 ist. In dieses Register kann nicht bei allen
Ausführungsformen
geschrieben werden. Bestimmte Werte der Endpunktnummer sind reserviert.
-
'h FF zeigt an, daß der Wert
von PMIR nicht auf einen Endpunktkanal abgebildet wird. 'h FE zeigt an, daß der Wert
von PMIR auf den speziellen SOF-Kanal abgebildet wird, der das FNR-Register
enthält.
-
EPN
Endpoint Pipe Number. Gibt die Endpunktkanalnummer an, auf welche
die Funktionsadresse, der Tokentyp und die Endpunktnummer abgebildet
werden.
-
Hub-Register
-
Indexiert
die USB-Hubregister gemäß dem folgenden
Format:
-
HREG
Hub Register. Gibt die Hub-Register an, auf die über das USB-Datenregister zugegriffen
werden soll. Für
die tatsächlichen
Registerdefinitionen dieser Register
-
Hub
Data. Ein ein Byte breites Register. Erlaubt das Lesen und Schreiben
der einzelnen Hubregister. Siehe das LM1050-Datenblatt für Einzelheiten
dieser Register.
-
Diagnose-Register
-
Indexiert
die USB-Diagnoseregister gemäß dem folgenden
Format:
-
DREG
Diagnostic Register. Gibt die Diagnose-Register an, auf die durch
das USB-Datenregister
zugegriffen werden soll.
-
-
-
Endpunktfeld-Basisadreßregister
(EABAR)
-
Ein
Doppelwort-breites Lese/Schreibregister. Basisadresse im Speicher
des Blocks, der das Endpunktfeld enthält. Es muß zu einer 128-Bytegrenze ausgerichtet
werden, d.h. die unteren sieben Bits werden auf 0 gesetzt (dies
ist eine 25 Bit-Adresse). Bei Reset wird dieses Register gelöscht. Das
EABAR-Registerformat ist unten gezeigt:
-
Merke:
Diese Basisadresse kann modifiziert werden, um schnell zwischen
verschiedenen Konfigurationen umzuschalten. Nach dem Aufwecken aus
einem Aussetzmodus während
der Konfiguration kann zum Beispiel eine Konfiguration der Endpunkte
wünschenswert
sein, und nach der Konfiguration mehrerer verschiedener Konfigurationen
kann es wünschenswert
sein, verschiedene Kombinationen aus Schnittstellen und Endpunkten
zu verwenden. Beim Umschalten der Konfigurationen sollten alle Endpunkte
disabelt oder angehalten werden, und der Kontext aller Endpunkte
wird dann durch einen Schreibvorgang in dieses Register verändert.
-
Pufferseite A-Register
(BPA)
-
Ein
Doppelwort-breites Lese/Schreibregister. Die oberen Bits der Pufferseite
A. Ein 21 Bit-Register, das
eine 2K-Byte-Seite definiert, in der Puffer für die Datenübertragung definiert sind.
Diese Pufferseite wird von dem Pufferseitenauswahl-Bitwert in dem
Steuerwort bestimmt, das in den Speicher des Endpunktfeldes geschrieben
ist. Bei einem Reset wird dieses Register gelöscht. Das BPA-Registerformat
ist unten gezeigt:
-
Pufferseite B-Register
(BPB)
-
Ein
Doppelwort-breites Lese/Schreibregister. Die oberen Bits der Pufferseite
B. Ein 21-Bit-Register, das
eine 2K-Byte-Seite definiert, in der Puffer für die Datenübertragung definiert sind.
Diese Pufferseite wird von dem Pufferseitenauswahl-Bitwert von dem
Steuerwort bestimmt, das in den Speicher in dem Endpunktfeld geschrieben
ist. Bei einem Reset wird dieses Register gelöscht. Das BPB-Registerformat
ist unten gezeigt:
-
2.1.9 Verwendungstips
-
Dieser
Abschnitt sieht Anmerkungen vor, die zum Entwickeln von Treibern
nützlich
sind, welche das UNIM verwenden. Dies umfaßt die Initialisierung, Setup/Aufzählung und
Datenübertragung
für die
Steuerung, Bulk-Endpunkte, Interrupt-Endpunkte und isochrone Endpunkte.
-
Initialisierung
-
Nach
einem Modul-Reset erscheint das Modul als ein nichtangeschlossenes
Gerät auf
dem USB, weil beide USB-Datenleitungen auf einen niedrigen Pegel
gezogen sind. Zu dieser Zeit sind alle Endpunktkanäle disabelt,
und der Funktionszustand ist zurückgesetzt.
-
Um
ein Gerät
als an einen stromaufwärtigen
USB-Port angeschlossen zu erfassen, muß DCR.NAT gesetzt sein. Dadurch
zieht das Gerät
die USB-Datenleitung nicht mehr auf den niedrigen Pegel.
-
Wenn
das Gerät
einmal angeschlossen ist, muß der
Endpunktkanalbetrieb initialisiert werden. Zunächst wird ermittelt, wieviele
Endpunkte für
eine Anwendung notwendig sind, sowie die Arten der Endpunkte und
die Speichermenge, die für
den Betrieb zugewiesen werden muß. Gestützt hierauf werden EABAR, BPA und
BPB initialisert. Das EABAR ist der Basiszeiger für das Feld,
welche die Steuerworte enthält.
Für jeden Endpunkt
werden zwei Doppelworte zugewiesen. Dieser Zeiger muß in eine
128-Byte-Grenze fallen. Die BPA und BPB werden, wenn notwendig,
zugewiesen, um den Basiszeiger für
alle Datenübertragungen
vorzusehen.
-
Da
zu dieser Zeit noch nicht ganz feststehen kann, welche Endpunkt
enabelt werden sollen und wieviel Speicher diesen zugewiesen werden
soll, müssen
nur EABAR und BPA geladen werden, damit die erste Steuerübertragung
verarbeitet werden kann.
-
Ein
SRDY-Puffer wird in den CW0 des Endpunktkanals 0 gelegt und ein
SRDY-Befehl wird ausgegeben, ECR.(SRDY,0).
-
Zu
dieser Zeit werden die anderen Bits in dem DCR-Register modifiziert,
einschließlich
ETE, EPMS nach Bedarf, und ECE und DEF0 werden gesetzt.
-
Danach
wird das Funktionszustandsregister in den Betriebszustand gesetzt
(FSR.Operational).
-
Der
empfangene Setup wird in den SRDY-Puffer geladen. Nachdem der Setup
empfangen wurde, wird er analysiert, um zu ermitteln, wie reagiert
werden muß.
Wenn es sich um ein SET-ADDRESS-Setup-Paket handelt, wird die Funktionsadresse
(FAR) mit der empfangenen Adresse geladen und das Enable-Bit wird
gesetzt (FAR.AE). Das DEF-Bit wird mittels Hardware beim nächsten ACK
zurückgesetzt,
welches abhängig
von einem IN-Token empfangen wird, oder bei dem nächsten Setup,
der an diesem Endpunkt empfangen wird, falls das ACK verloren wurde.
-
Interrupt
Endpunkt Operation
-
Interrupt-Endpunkte
sehen neue Interruptinformation für den Host vor, falls vorhanden.
Wenn keine Interruptinformation anhängig ist, wird NAK zurückgegeben.
Zum Initialisieren eines Interrupt-Endpunktkanals wird ein Eingang-Enable-Befehl
an den richtigen Eingangskanal gegeben (ECR.(IENB, EPN)). Dies bewirkt, daß der Endpunktkanal
in seinen Eingangs-Wartezustand
geht, I_IDL. Abhängig
von dem Empfang eines IN-Tokens bei einem Endpunkt, der auf diesen
Endpunktkanal abgebildet ist, wird NAK als Handshake zurückgegeben.
Wenn Interruptdaten vorhanden sind, werden sie in einen Puffer geschrieben,
das nächste
Steuerwort an dem Endpunkt wird in I_RDY geschrieben, und ein Befehl
wird ausgegeben (ECR.(IRDY, EPN)), damit der Endpunktkanal in den
IRDY-Zustand geht. Abhängig
vom Empfang des nächsten
IN-Tokens wird das Steuerwort bei EABAR + EPN + CWP gelesen, und
dann werden die Daten übertragen.
Wenn dem Toggle-Protokoll gefolgt wird, muß das Toggle-Enable-Bit des
Steuerworts in dem Steuerwort gesetzt werden. Wenn dieser Endpunkt
für ein
Ratensteuerungs-Feedback verwendet wird, muß das Toggle-Enable-Bit nicht
gesetzt werden.
-
Am
Ende der Übertragung,
wenn ACK vom Host empfangen wird, wird ein ICMP-Status in den Puffer geschrieben.
Dies bestätigt
dann, daß die Übertragung
beendet ist. Wenn kein ACK empfangen wurde und Toggle enabelt ist,
wird ein Zwischenstatus ACK-verpaßt (IMAK) geschrieben. Nach
dem Schreiben des Status wir der andere Endpunktpuffer gelesen.
Falls der Status eine Beendigung anzeigt, beginnt der Eingang-Warte-Zustand.
Wenn in der Zwischenzeit ein weiteres Ereignis aufgetreten ist und
ein weitere IRDY-Puffer auf das andere Steuerwort gelegt wurde,
wird es zu dieser Zeit gelesen, und der Endpunkt geht wieder in
den I_RDY-Zustand.
-
Bulk-Endpunkt
Operation
-
Bulk-Endpunkte
arbeiten ähnlich
wie die Interrupt-Endpunkte, abgesehen davon, daß üblicherweise größere Datenübertragungen
betroffen sind, und daß sie
in der IN- und OUT-Richtung
verlaufen. Bulk-Endpunkte folgen immer dem Toggle-Protokoll, so
daß in
allen Steuerworten TE gesetzt ist.
-
Ein
besonderer Bulk-Endpunkt wird entweder in der Eingangs- oder Ausgangsrichtung
verwendet. Wenn ein Endpunkt das erste Mal initialisiert wird, wird
ein Eingangs- oder Aus gangs-Enable-Befehl an die richtige Endpunktkanalnummer
geschickt (ECR.(I/OENB, EPN)).
-
Bei
Eingangsendpunkten werden Daten, wenn sie vorhanden sind in einen
Puffer geschrieben, und ein Steuerwort wird mit einem IRDY-Zustand
beschrieben, und TE wird gesetzt. Dann wird ein IRDY-Befehl ausgeführt. Maximal
können
zwei Datenpuffer zu einer gegebenen Zeit auf einem Endpunktkanal
anhängig sein.
Dies ermöglicht
ein Doppelpuffer-Verfahren, falls nötig, um das Senden von NAKs
während
großer
Datenübertragungen
zu vermeiden. Die Software-Synchronisierung erfolgt durch Untersuchen
des Pufferzustandes. Nur die vollständigen Pufferzustände können überschrieben
werden.
-
Bei
Ausgangsendpunkten muß ein
Puffer vorbereitet werden, in den die Daten übertragen werden. Wenn dieser
Puffer vorhanden ist, wird ein Steuerwort mit einem Zeiger darauf
in das richtige Steuerwort geschrieben. Das Toggle-Enable-Bit sollte
hier ebenfalls gesetzt werden. Ein ORDY-Befehl wird an den Endpunktkanal übergeben.
Nachdem die Daten für
diesen Puffer als Teil des OUT-Tokens empfangen wurden, wird das
Steuerwort im Speicher aktualisiert.
-
Wenn
die Größe des Datenpakets
nicht bekannt ist, sollte das Pufferrundungsbit des Steuerwortes
gesetzt werden. Dies erlaubt, Pakete, die kleiner als die Puffergröße sind,
zu empfangen, ohne daß ein
Fehlerstatus geschrieben wird. Wenn das Pufferrundungsbit nicht
gesetzt ist, werden empfangene Pakete, die den zugewiesenen Puffer
nicht genau füllen,
mit einem Datenfehler-Statusfehler geschrieben. In jedem Fall wird der
Statusfehler geschrieben, wenn mehr Daten als erwartet für diesen
Endpunkt empfangen werden.
-
Wenn
das Auftreten eines Fehlers während
des Empfangs dieser Daten erfaßt
wird, wird ein Pufferzwischenzustand in den Speicher zurückgeschrieben,
und beim nächsten
OUT-Token wird der Puffer erneut verwendet. Dies bedeutet, daß die Software
sich nur mit dem Vorsehen der Puffer befassen muß, welche die Daten empfangen
sollen, und nicht mit den Verstrickungen der Protokolle für erneute
Versuche.
-
Isochrone
Endpunktoperation
-
Isochrone
Endpunkte folgen demselben Schema wie Bulk-Endpunkte, sie folgen
jedoch keinem Toggle-Protokoll. Vielmehr werden sie zu dem niedrigstwertigen
Bit des Blocknummernregisters synchronisiert.
-
Bei
isochronen Eingangsendpunkten werden Daten in eine Warteschlange
gelegt, wobei dieselben IRDY-Puffer verwendet werden. Wenn ein IN-Token
bei einem isochronen Endpunkt empfangen wird, wird das Datenpaket
gesendet, wenn das niedrigstwertige Bit des Blocknummernregisters
mit dem Steuerwortzeiger übereinstimmt.
Sonst werden keine Daten gesendet. Dies erlaubt die Synchronisierung
der Datenübertragung zu
einer bestimmten Blocknummer. Zum Auslösen der Übertragung bei einer bestimmten
Blocknummer kann das Blocknummernregister gelesen werden. Ein Interrupt
kann angefordert werden (ISR.FCI), indem TIR auf den angeforderten
Wert des FNR gesetzt wird, zu dem die Übereinstimmung vorliegen muß. Ein Abgleich
erfolgt nur mit den unteren acht Bit, so daß dieses Ereignis bis zu 256
ms in eine Warteschlange gelegt werden kann, bevor es benötigt wird.
Wenn dieser Interrupt verarbeitet wird, kann der passende Puffer
auf dem Endpunktkanal in eine Warteschlange gelegt werden.
-
Bei
isochronen Ausgangs-Endpunkten bestimmt das Toggle-Enable-Bit, wie
das LSB des Blocknummernregisters verwendet wird. Wenn TE nicht
gesetzt ist, werden alle Daten in den Speicher geschrieben, wenn
jedoch FNR.LSB nicht gleich CWP ist, wird ein Synchronisierungsfehlerstatus
(SYNE) als Pufferzustand geschrieben. Wenn TE gesetzt ist, werden
Daten nur gespeichert, wenn FNR.LSB gleich CWP ist. Wenn ein isochroner
Ausgangsstrom mit der Blocknummer synchronisiert wird, kann der
erste Puffer auf TE gesetzt werden, so daß das Schreiben nur beginnt,
wenn eine Übereinstimmung
der Blocknummer vorliegt. Dann können alle
nachfolgenden Blöcke
erfassen, ob es einen Synchronisierungsfehler gibt.
-
Man
beachte, daß das
Blocknummernregister bis zu zwei Blöcke weiterzählt, selbst wenn der SOF vorübergehend
verlorengeht. Sollte der SOF für
mehr als zwei Blöcke
verlorengehen, wird Unlocked angezeigt (ISR.UL), wobei zu dieser
Zeit alle nachfolgenden isochronen Übertragungen mit Vorsicht behandelt
oder beendet werden sollen, bis der Blocknummernzähler wieder
synchron läuft.
-
Steuerendpunkt-Operation
-
In
einem üblichen
System ist der Endpunkt 0 immer ein Steuerendpunkt. Andere Endpunkte
dürfen auch
Steuerendpunkte werden. Diese Funktion wird unterstützt.
-
Bei
einem Steuerendpunkt sollten das Steuerwort 1 und das Steuerwort
0 immer zusammengeschrieben werden. Die Statusphase und das SRDY
für die
nächste
Steuerübertragung
sollten zum Beispiel immer zusammengeschrieben werden. Erst nach
der Erfassung eines OCMP in CW0 aufgrund eines Empfangs eines neuen
Setup sollten das Steuerwort und/oder CW0 aktualisiert werden. Wenn
eine ungerade Anzahl Datenpakete während der Datenphase einer
Steuerwort-Lese- oder Schreiboperation gesendet werden, bevor die
Statusphase gesendet wurde, kann es notwendig sein, den Steuerwortzeiger
einzustellen, weil die Statusphase in das Steuerwort 1 gelegt werden
muß, und
der nächste
SRDY-Puffer muß in
das Steuerwort 0 gelegt werden. Um dies zu erreichen, ist es möglich, entweder
einen SKIP-Puffer einzufügen
oder einen CWP-Toggle-Befehl auszuführen, bevor der ORDY/IRDY-Befehl
für den
Statusphasen-Puffer ausgeführt
wird.
-
Sollte
ein SETUP-Token bei einem Steuerendpunkt erfaßt werden, für den momentan
kein SRDY-Puffer zur Verfügung
steht, wird das Möglichste
getan, den Setup zu empfangen und in dem Datenpfad zu speichern.
Wenn ein gültiger
Setup empfangen wurde, wird das ISR.HST-Ereignis bestätigt. Abhängig von
dem ISR.HST-Interrupt sollten ein SRDY-Puffer in das Steuerwort
0 und ein SRDY-Befehl geschrieben werden. Dies bewirkt, daß der anhängige Setup
in den Speicher geschrieben wird. Der SRDY-Befehl bewirkt, das der
Endpunkt als ein Steuerendpunkt behandelt wird, und er bleibt gesetzt,
bis ein Eingabe-Enable oder Ausgabe-Enable-Befehl ausgeführt wird.
Der SRDY-Puffer sollte so schnell wie möglich vorgesehen werden, weil
dann, wenn das HST-Bit gesetzt ist, es den Datenpfad für mögliche zusätzliche
Datenübertragungen
blockiert. In der Zwischenzeit werden alle Token mit NAK quittiert,
falls anwendbar. Die Implikationen dieses ISO-Verkehrs können beträchtlich
sein und müssen
beachtet werden, geradeso wie der Fall eines Dienstverlustes.
-
Nach
dem Empfang eines Setups wird er von der Firmware überprüft, um die
richtige Antwort zu bestimmen. An diesem Punkt setzt die Firmware
zusätzliche
Eingangs- oder Ausgangspuffer nach Bedarf ein. Wenn der Setup ein
von der Funktion nicht unterstützter
Befehl ist, wird ein neuer SRDY-Puffer in das Steuerwort 0 gelegt,
und der SRDY-Befehl wird ausgegeben. Dies bewirkt, daß alle Token
an diesem Endpunkt eine STALL-Quittung zurückge ben, bis der nächste Setup
empfangen wird. In der Zwischenzeit, während die Firmware den Setup
analysiert, werden als Antwort auf Token NAKs gesendet.
-
2.1.10 Bemerkungen für die Umsetzung
-
Registerschnittstelle
-
Man
beachte, daß alle
Register in dem Kernbus-Taktbereich realisiert sind. Register, auf
die mit dem USB-Index zugegriffen wird, und Datenregister sind in
dem USB-Taktbereich realisiert. Viele der Register erfordern asynchrone
Handshakes, um die Taktbereiche zu überschreiten.
-
Während ein
Endpunktkanal in einem seiner Bereitzustände ist, muß abhängig von dem Empfang eines
IN-, OUT- und SETUP-Tokens eine Antwort innerhalb von 6,5 USB-Bitzeiten
gegeben werden. Für
einen IN-Token besteht diese Antwort aus einem STALL- oder NAK-Handshakepaket oder
einem Datenpaket. Für OUT-
und SETUP-Token muß sich
der Endpunktkanal darauf vorbereiten, das Datenpaket zu empfangen.
In allen Fällen
wird das entsprechende Steuerwort gelesen und dazu verwendet, zu
ermitteln, wie die Daten zu übertragen sind.
-
Die
Operation, welche den Datenpfad am stärksten prüft, erfolgt bei Empfang eines
IN-Tokens, während der
ausgewählte
Endpunkt in dem Eingabe-Bereit-Zustand ist. In diesem Fall muß das Steuerwort
bereit sein, und Daten müssen
bis zu der Zeit bei der MAC-Schnittstelle
zur Verfügung
stehen, bei der die PID fertig übertragen
ist. Der Entwurf sollte für
diesen Fall optimiert werden.
-
Kapitel 3
-
Gerätespezifikationen
-
Tabelle
3-1 Ausgangssignale
-
Tabelle
3-1 Eingangssignale
-
USB
-
Figur
3-1 USB-Aussetz-Zeitablauf
-
Figur
3-2 Ablauf der USB-Sendesignale
-
Figur
3-3 USB OE-Zeitablauf
-
Figur
3-4 Verzögerung
der USB-Empfangssignale
-
Beachte:
USBXCU0 und USBXCU1, Wechselstrom und Gleichstrom erfüllen die
Anforderung, die in Kapitel 7 der Universal Serial Bus Specification
Version 1.0 spezifiziert sind.
-
ANHANG A REGISTERLISTE
-
Im
folgenden wird eine Liste für
die schnelle Bezugnahme auf die UNIM-Register angegeben. Der erste
Abschnitt listet Register des Moduls auf. Der zweite Abschnitt zeigt
das Layout jedes Registers in derselben Reihenfolge.
-
A.1
ZUSAMMENFASSENDE REGISTERLISTE USM-Knoten
(UNIM) Register
-