-
Die
Erfindung betrifft eine Vorrichtung zum Steuern eines vielseitigen
USB-Endpunktkanals
nach dem Oberbegriff des Anspruchs 1 und ein Verfahren nach dem
Oberbegriff des Anspruchs 11.
-
Ein
universeller serieller Bus (=USB = Universal Serial Bus) ist eine
Standard-Pheripheriegerätschnittstelle
für den
Anschluß von
Personalcomputern an viele verschiedene Geräte: z.B. digitale Telefonleitungen, Monitore,
Modems, Mäuse,
Drucker, Scanner, Spiel-Controller, Tastaturen und andere Peripheriegeräte, vgl. beispielsweise
die Universal Serial Bus Specification Revision 1.0 vom 15.01.1996,
www.peritek.com/matterhorn usb10doc.pdf. Der USB ersetzt somit vorhandene
Schnittstellen wie etwa die seriellen RS-232C-Ports, parallele Ports,
PS/2-Schnittstellen sowie Game/MIDI-Ports.
-
Bei
dem USB sind sämtliche
angeschlossenen Vorrichtungen über
einen einzelnen Verbindertyp unter Verwendung einer in Stufen geordneten
Sterntopologie mit einem Personalcomputer verbunden. Ein Host-Personalcomputer
enthält
einen einzigen USB-Controller. Der Host-Controller bildet die Schnittstelle
zwischen dem USB-Netz und dem Host-Personalcomputer. Der Host-Controller
steuert sämtliche
Zugriffe auf die USB-Betriebsmittel und überwacht die Bustopologie.
Ein USB-Netzknoten stellt USB-Anschlußpunkte für USB-Vorrichtungen bereit.
-
Eine
USB-Funktion ist eine USB-Vorrichtung, die Informationen auf dem
Bus senden und empfangen kann. Eine Funktion kann eine oder mehrere
Konfigurationen besitzen, wovon jede die Schnittstellen definiert, die
die Vorrichtung bilden. Jede Schnittstelle ist ihrerseits aus einem
oder mehreren Endpunkten gebildet.
-
Ein
Endpunkt ist die letzte Datenquelle oder -senke. Ein Endpunktkanal
ermöglicht
die Bewegung von Daten zwischen dem USB und dem Speicher und vervollständigt den
Pfad zwischen dem USB-Host und dem Funktionsendpunkt.
-
Die
nachveröffentlichte
WO 99/08196 offenbart eine Vorrichtung zum Steuern eines USB-Endpunktkanals,
der mit weiteren USB-Endpunktkanälen
einen gemeinsamen FIFO-Puffer nutzt. Hierzu speichert eine Protokollsteuer-
und Statuseinheit PCS den USB-Zustand, während eine Protokollablaufsteuereinheit
PSM die Übertragung
zwischen der Vorrichtung und einem USB-Host steuert. Dabei wird
ein Zustandswert eines USB-Endpunktkanals gespeichert. Die
US 4 979 167 beschreibt
eingeschränkte
Token-Operationen auf einem ringförmigen FDDI (Fibre Distributed
Data Interface) Netzwerk.
-
Jeder
Endpunkt ist eine adressierbare Entität auf dem USB und muß auf IN-
und auf OUT-Tokens vom USB-Host (typischerweise ein PC) antworten.
Die IN- Tokens geben
an, daß der
Host den Empfang von Informationen von einem Endpunkt angefordert
hat, während
die OUT-Tokens angeben, daß der
Host im Begriff ist, Informationen an einen Endpunkt zu senden.
-
Bei
Erfassung eines an einen Endpunkt adressierten IN-Token ist der
Endpunkt für
die Antwort durch ein Datenpaket ver antwortlich. Falls der Endpunkt
momentan blockiert (Stalled) ist, wird ein STALL-Quittierungspaket
geschickt. Falls der Endpunkt freigegeben (enabled) ist, jedoch
keine Daten vorhanden sind, wird ein negatives Quittierungspaket
(NAK-Paket) geschickt.
-
Ähnlich ist
der Endpunkt bei Erfassung eines an einen Endpunkt adressierten
OUT-Token für
den Empfang eines vom Host geschickten Datenpakets und für dessen
Speicherung in einen Puffer verantwortlich. Falls der Endpunktkanal
momentan blockiert ist, wird am Ende der Datenübertragung ein STALL-Quittierungspaket
geschickt. Falls der Endpunktkanal momentan gesperrt (disabled)
ist, wird am Ende der Datenübertragung
kein Quittierungspaket geschickt. Falls der Endpunktkanal freigegeben
ist, jedoch kein Puffer vorhanden ist, in dem Daten gespeichert
werden können,
wird ein NAK-Paket geschickt.
-
Ein
gesperrter Endpunkt oder gesperrte Endpunkte, die momentan nicht
auf einen Endpunktkanal abgebildet sind, antworten nicht auf IN-,
OUT- oder SETUP-Tokens.
-
Eine
Anzahl von Anbietern haben Implementierungen des USB-Standards entwickelt.
Beispielsweise hat die Intel Corp. die 8x931Ax-, 8x931Hx-, 8x930Ax-
und 8x930Hx-Vorrichtungen freigegeben.
-
Diese
Vorrichtungen besitzen jedoch eine Anzahl von Beschränkungen.
Beispielsweise ist die 8x931Ax-Vorrichtung auf drei Endpunktpaare
eines Sende-Endpunkts und eines Empfangs-Endpunkts eingeschränkt, wovon jeder einen im voraus
definierten und zugeordneten Datenspeicher (zugeordnete FIFOs) besitzt.
Die anderen Intel-Vorrichtungen besitzen ähnliche Beschränkungen.
Ferner kann jedes Endpunkt-Paar nur unter einer Untermenge der verfügbaren USB-Sendetypen
arbeiten. Weiterhin verwendet die 8x931Ax eine große Anzahl
von Registern, um Steuerinformationen zu speichern.
-
Aufgabe
der Erfindung ist es, eine Vorrichtung zum Steuern eines vielseitigen
USB-Endpunktkanals nach dem Oberbegriff des Anspruchs 1 und ein
Verfahren nach dem Oberbegriff des Anspruchs 11 zu schaffen, wobei
die Anzahl von Endpunkten, deren Typen und Datenspeicher je nach
Anforderung definiert werden können,
vergrößert und
die Anzahl der Register verringert wird.
-
Diese
Aufgabe wird entsprechend dem kennzeichnenden Teil des Anspruchs
1 bzw. des Anspruchs 11 gelöst.
-
Weitere
Ausgestaltungen der Erfindung sind der nachfolgenden Beschreibung
und den Unteransprüchen
zu entnehmen.
-
Die
Erfindung wird nachstehend anhand von in den beigefügten Abbildungen
dargestellten Ausführungsbeispielen
näher erläutert.
-
1a ist
ein Blockschaltplan eines Aspekts der Erfindung;
-
1b ist
ein Zustandsdiagramm, das dem Blockschaltplan nach 1a entspricht;
-
1c ist
ein Zustandsdiagramm, das eine weitere Ausführung zeigt, die dem Blockschaltplan
nach 1a entspricht;
-
2a ist
ein Blockschaltplan eines weiteren Aspekts der Erfindung;
-
2b ist
ein Zustandsdiagramm, das dem Blockschaltplan nach 2a entspricht;
-
3a ist
ein Blockschaltplan eines nochmals weiteren Aspekts der Erfindung;
-
3b ist
ein Zustandsdiagramm, das dem Blockschaltplan nach 3a entspricht,
-
4 ist
ein Zustandsdiagramm, das einer zweckmäßigen Ausführung entspricht.
-
Die 1a–1b veranschaulichen
eine allgemeine Ausführung
eines Aspekts der vorliegenden Erfindung für einen Endpunktkanal. 1a zeigt
einen ersten Speicher 110, einen zweiten Speicher 120 und eine
Steuerschaltungsanordnung 130. Der Speicher 110 speichert
einen Zustand des Endpunktkanals, während der Speicher 120 einen
Endpunktbefehl speichert. Der Endpunktkanal besitzt einen Typ, der
unbestimmt sein kann.
-
1b zeigt
einen Wartezustand (WAIT-Zustand) 150 und einen Leerlaufzustand
(IDLE-Zustand) 160.
-
Die
Vorrichtung der 1a–1b arbeitet
folgendermaßen.
Zunächst
ist der Endpunkttyp undefiniert, wobei der Speicher 110 angibt,
daß sich
der Endpunkt im Wartezustand 150 befindet. Der im Speicher 120 gespeicherte
Endpunktbefehl wird durch Firmware in einen Freigabebefehl (enable
command) CMD.EMB geändert.
Die Steuerschaltungsanordnung 130 ändert den Zustand vom Wartezustand 150 in
den Leerlaufzustand 160. Schließlich bestimmt die Steuerschaltungsanordnung 130 auf
der Grundlage einer Untermenge des Freigabebefehls den Endpunktkanal-Typ.
-
1c zeigt
eine weitere Ausführung.
Der im Speicher 120 gespeicherte Endpunktbefehl wird durch Firmware
in einen Bereit-Befehl (ready command) CMD.RDY geändert. Die
Steuerschaltungsanordnung 130 ändert den Zustand vom Leerlaufzustand 160 in
einen Bereitzustand 170. Auf der Grundlage einer Untermenge
des Freigabebefehls bestimmt die Steuerschaltungsanordnung 130 ferner
den Endpunktkanal-Typ.
-
Die 2a–2b veranschaulichen
eine allgemeine Ausführung
eines Endpunktkanals. 2a zeigt einen ersten Speicher 210,
einen zweiten Speicher 220 und eine Steuerschaltungsanordnung 230.
Der Speicher 210 speichert einen Zustand des Endpunktkanals,
während
der Speicher 220 einen Pufferbefehl speichert.
-
2b zeigt
einen aktiven Zustand (ACTIVE-Zustand) 280 und einen Differenz-Zustand
(DIFFERENT-Zustand) 290.
-
Die
Ausführung
der 2a–2b arbeitet
folgendermaßen.
Zunächst
gibt der Speicher 210 an, daß der Endpunkt in einem aktiven
Zustand 280 ist. Der im Speicher 220 gespeicherte
Pufferbefehl wird in einen Pufferbefehl (buffer command) BUF.CMD
geändert.
Die Steuerschaltungsanordnung 230 ändert den Zustand vom aktiven
Zustand 280 in den Differenz-Zustand 290.
-
Dieser
Aspekt ermöglicht
das Lesen von Zustandsübergangsbefehlen
aus einem Speicher.
-
Die 3a–3b veranschaulichen
eine allgemeine Ausführung
einer Kombination der Ausführungen
der 1a–1b und 2a–2b für einen
Endpunktkanal. 3a zeigt einen ersten Speicher 310, einen
zweiten Speicher 320, einen dritten Speicher 330 und
eine Steuerschaltungsanordnung 340. Der Speicher 310 speichert
einen Zustand des Endpunktkanals, der Speicher 320 speichert
einen Endpunktbefehl und der Speicher 330 speichert einen
Pufferbefehl. Der Endpunktkanal ist von einem Typ, der unbestimmt
sein kann.
-
3b zeigt
einen Wartezustand 350, einen Leerlaufzustand 360,
einen Bereitzustand 370, einen aktiven Zustand 380 und
einen Differenz-Zustand 390.
-
Die
Erfindung gemäß den 3a–3b arbeitet
folgendermaßen.
Zunächst
ist der Endpunkt-Typ nicht definiert und der Speicher 310 gibt
an, daß sich
der Endpunkt im Wartezustand 350 befindet. Der im Speicher 320 gespeicherte
Endpunkt-Befehl wird durch Firmware in einen Freigabebefehl CMD.ENB
geändert.
Die Steuerschaltungsanordnung 340 ändert den Zustand vom Wartezustand 350 in
den Leerlaufzustand 360. Auf der Grundlage einer Untermenge
des Freigabebefehls bestimmt die Steuerschaltungsanordnung 130 den Endpunktkanal-Typ.
-
Dann
wird der im Speicher 320 gespeicherte Endpunkt-Befehl durch
Firmware in einen Bereit-Befehl CMD.RDY geändert. Die Steuerschaltungsanordnung 340 ändert den
Zustand vom Leerlaufzustand 360 in den Bereitzustand 370.
Auf der Grundlage einer Untermenge des Freigabebefehls bestimmt
die Steuerschaltungsanordnung 130 ferner den Endpunktkanal-Typ.
-
An
einem weiteren Punkt in der Operation des Endpunktkanals gibt der
Speicher 310 an, daß der
Endpunkt sich in einem aktiven Zustand 380 befindet. Der
im Speicher 330 gespeicherte Pufferbefehl wird in einen Pufferbefehl
BUF.CMD geändert.
Die Steuerschaltungsanordnung 340 ändert den Zustand vom aktiven
Zustand 380 in den anderen Zustand 390. Obwohl
diese Beschreibung den Ausdruck "Speicher" verwendet, soll die
Erfindung auch auf andere Typen von Datenablageelementen anwendbar
sein.
-
Diese
allgemeine Beschreibung wird im folgenden Abschnitt, der zweckmäßige Ausführungen
veranschaulicht, genauer erläutert.
-
In
einer zweckmäßigen Ausführung ist
die obenbeschriebene Erfindung durch Teile eines USB-Knoten-Schnittstellenmoduls
(= UNIM = USB note interface modul) implementiert. Die Teile des
UNIM, die für
die Erfindung relevant sind, umfassen einen Endpunkt-Controller,
einen Endpunktkanal-Controller, verschiedene Register, ein Steuerwort
und ein Zustandsdiagramm. Diese Abschnitte sind der USB-Knoten-Schnittstellenarchitektur-Spezifikation, Überarbeitung
0.6, entnommen.
-
Endpunkt-Controller
-
In
einer zweckmäßigen Ausführung handhabt
der Endpunkt-Controller
die auf den Endpunkt bezogenen Operationen einschließlich des
Endpunktkanal-Zustands, der Pufferung und der Übertragungen. In einer zweckmäßigen Ausführung können zu
einem gegebenen Zeitpunkt bis zu sechzehn Endpunktkanäle unterstützt werden.
Jedem Endpunktkanal können
bis zu zwei Puffer im Kernbus-Adressenraum, die für Empfangs- und
Sendeoperationen verwendet werden, zugeordnet werden. Falls einem
Endpunktkanal keine Puffer zugewiesen sind, ist der Controller für die Erzeugung
geeigneter Quittierungen für
Input-Tokens und Output-Tokens verantwortlich.
-
Der
Endpunkt-Controller enthält
mehrere funktionale Blöcke.
Die Endpunkt-Zustandsmaschine schafft die zentralisierte Steuerung
für die
Dienstprogrammblöcke
des Datensynchronisations-Multiplexers (DALM), des Adressengenerators
(ADGen) und des Teil-Endpunktkanal-Speichers (PEP-Speicher). Die
Vorrichtungsfunktionen wie etwa die Adressenprüfung und die Adressenerzeugung
werden in dem Vorrichtungsfunktionsblock erzielt. In einer zweckmäßigen Ausführung laufen
sämtliche
Zustandsmaschinen mit einem USB-Takt von 12 MHz. Sämtliche
Datenübertragungen
erfolgen mit einem Kernbustakt. Teile des ADGen-Blocks sowie der
gesamte DALM-Block arbeiten unter Verwendung des Kernbustakts. Sämtliche
anderen Blöcke
des Endpunkt-Controllers verwenden ausschließlich den lokalen 12 MHz-Takt.
Datenbytes zwischen den Bereichen werden bei der MAC-Anwenderschnittstelle
mit einer asynchronen Quittierung für jedes übertragene Byte synchronisiert.
-
In
einer zweckmäßigen Ausführung minimiert
der Endpunkt-Controller
die Anzahl der erforderlichen Speicherzugriffe. Nur beim Empfang
eines Token ist für
die Endpunktmatrix ein Speicherzugriff erforderlich. Ein einziger
Doppelwort-Zugriff zusammen mit dem residenten Endpunktzustand ist
ausreichend, damit der Endpunktkanal die Host-Anforderung verarbeitet.
Dieser Zugriff liest die Lokalisierungs- und Größeninformationen für die Datenübertragung.
Die Datenübertragung
erfolgt nach Operationen des Lesens oder Schreibens eines Doppelworts.
Das Modul besitzt die höchste
Priorität
auf dem Kernbus für Übertragungen,
wobei die Übertragungsrate
erheblich höher
als jene des USB ist. Somit ist die Anforderung einer Datenpufferung
innerhalb des Endpunkt-Controllers
minimal, abgesehen von einem Extrawort, damit nachfolgende Zugriffe
mit dem momentanen Zugriff überlappen.
-
Ein
Bytezähler
verfolgt die Anzahl der Bytes, die übertragen werden. Der letzte
Zugriff einer Übertragung
kann ein teilweises Lesen oder Schreiben im Speicher erfordern.
Das teil weise Schreiben des letzten Zugriffs wird durch den endgültigen Bytezählstand
bestimmt.
-
Am
Ende einer Übertragung
wird das momentane Steuerwort mit dem Status für die Übertragung geschrieben, während das
andere Steuerwort für
diesen Endpunkt gelesen wird, um zu prüfen, ob ein weiterer Puffer
vorbereitet wurde. Nach den Steuerwort-Operationen ist der Endpunktkanal-Zustand
aktualisiert.
-
Durch
eine Kombination aus Hardware und Software unterstützt das
UNIM alle drei für
den USB definierten Synchronisationsklassen, nämlich asynchron, synchron und
adaptiv. Der Endpunkt-Controller schafft eine Hardware-Unterstützung für die Überwachung
des USB-Takts von 1 kHz relativ zu einem externen Referenztakt wie
etwa einem Referenztakt von 8 kHz, und für die Überwachung der Qualität und der
Konsistenz des USB-Takts von 1 kHz. Die Anstiegsflanken des externen
Referenztakts werden in dem Referenzzählregister gezählt. Dies
kann für
den Vergleich mit der USB-Rahmennummer verwendet werden. Die Differenz
zwischen den Frequenzen des Referenztakts und des USB-Takts kann
in Paketen dem Host gemeldet werden, so daß der Host die USB-Taktfrequenz
einstellen kann; dadurch kann der USB-Referenztakt auf den Referenztakt
verriegelt werden.
-
Der
Endpunkt-Controller behält
außerdem
den Status bei, um anzugeben, wenn er auf den USB-Takt von 1 kHz
verriegelt ist und wenn aufgrund eines Fehlens oder eines inkorrekten
Rahmenbeginn-Pakets im USB-Takt eine Diskontinuität auftritt.
Dies wird von der Software für
die Einstellung der Warteschlangen für die isochronen Pakete verwendet.
Die momentane Rahmennummer wird vom Endpunkt-Controller für die Bestimmung,
welcher isochrone Puffer als nächstes
senden soll, verwendet.
-
Endpunktkanal-Controller
-
In
einer zweckmäßigen Ausführung schafft
der Endpunkt-Controller (EPC) die Schnittstelle für die USB-Funktionsendpunkte.
In einer zweckmäßigen Ausführung werden
bis zu sechzehn derartige Endpunktkanäle zu irgendeinem gegebenen
Zeitpunkt unterstützt,
wobei jeder die gleiche Funktionsadresse besitzt. Der EPC behält getrennte
Zustandsinformationen für
jeden Endpunktkanal bei.
-
Zustandsinformationen,
die für
sofortige Entscheidungen erforderlich sind (etwa Antwort auf NAK- oder
STALL-Quittierungen) werden im Modul jederzeit für jeden Endpunktkanal gehalten.
Andere Informationen, die für
eine Endpunktoperation notwendig sind, werden in einer Endpunktmatrix
im Speicher gehalten. In einer zweckmäßigen Ausführung ist nur ein Endpunktkanal
zu irgendeinem gegebenen Zeitpunkt aktiv, wodurch eine einzige Endpunktkanal-Zustandsmaschine
von sämtlichen
Endpunktkanälen
gemeinsam genutzt werden kann.
-
Für IN-Token
ist der EPC für
die Übertragung
von Daten vom definierten Puffer zum Host verantwortlich. Für OUT-Token
ist der EPC für
die Übertragung
von Daten vom Host zum definierten Puffer verantwortlich. Um eine
größere Flexibilität bei der
Zuweisung von Puffern an einen Endpunktkanal zu ermöglichen,
ist in einer zweckmäßigen Ausführung ein
Doppelpufferungsschema in jedem Endpunktkanal zulässig. Dadurch
kann der EPC eine prompte Antwort auf sämtliche Transaktionen dieses
Moduls schaffen, ohne auf NAKs zurückzugreifen.
-
In
einer zweckmäßigen Ausführung werden
sämtliche
Informationen, die von Endpunktkanälen während Datenübertragungen verwendet werden,
in der Endpunktmatrix gehalten, die sich in einem RAM befindet. Diese
Matrix wird durch den Endpunktkanal auf der Grundlage, die im Endpunktmatrix-Basisadressenregister (EABA)
definiert ist, indexiert. Diese Matrix enthält zwei Doppelwörter pro
Endpunkt. Jedes Doppelwort ist ein Steuerwort, das einen Befehl
und Statusinformationen für
den Endpunktkanal wie etwa einen Zeiger auf den Beginn des Puffers,
die Größe des Puffers,
den Zustand des Puffers und andere relevante Parameter enthält.
-
Der
Pufferzustand definiert, ob der Puffer für Eingabe- oder Ausgabetransaktionen
verwendet werden soll und ob auf ihn momentan zugegriffen wird oder
ob die gewünschte
Operation abgeschlossen ist.
-
Wenn
eine IN- oder OUT-Übertragung
eines Endpunktkanals mit einem vorhandenen Puffer angefordert wird,
wird das geeignete Steuerwort gelesen. Dieses Steuerwort teilt dem
Endpunkt-Controller
mit, wie er die Transaktion abzuschließen hat. Am Ende einer Transaktion
wird in das Steuerwort der Status geschrieben, der durch Software
als ein Hinweis zur Freigabe dieses Puffers und zur Schaffung eines
neuen Puffers verwendet wird.
-
Register
-
In
einer zweckmäßigen Ausführung sind
zwei für
die Erfindung relevante Register das Endpunkt-Befehlsregister und
das USB-Datenregister.
-
In
einer zweckmäßigen Ausführung ist
das Endpunkt-Befehlsregister (ECR) ein wortbreites Schreib-Lese-Register.
Das ECR wird für
die Ausführung
von Befehlen an einem spezifischen Endpunkt verwendet. Beim Zurücksetzen
wird dieses Register gelöscht.
Das ECR-Registerformat lautet folgendermaßen:
-
Die
Endpunktkanal-Nummer EPN bestimmt den Endpunktkanal, über den
der Befehl ausgeführt
wird. In einer zweckmäßigen Ausführung kann
dieses Register in der Hochgeschwindigkeits-Busschnittstellenlogik implementiert
sein. Die Daten laufen über
die asynchrone Schnittstelle. Zwei Signale werden vom Endpunkt-Controller
zurückgeschickt;
eines gibt an, daß der
Befehl verarbeitet wurde und daß der
Befehlswert auf "0" gelöscht werden
soll, während
das andere angibt, daß der
Befehl nicht verarbeitet werden konnte, und soll auf "F" gesetzt werden.
-
Der
Endpunkt-Befehl CMD kann die folgenden Werte annehmen:
0000:
Complete. Dieser Wert gibt an, daß der vorhergehende Befehl
abgeschlossen ist und daß der
Endpunkt-Controller für
die Annahme eines weiteren Befehls bereit ist.
-
0001:
Input Enable (CMD.IENB). Dieser Wert bewirkt, daß der spezifizierte Endpunktkanal
aus dem Stall(Halt)- oder Disable-Zustand in den Input-Idle-Zustand
I_IDL eintritt. Der Steuerwortzeiger für den spezifizierten Endpunktkanal
wird auf 0 zurückgesetzt.
Falls der momentane Zustand nicht Disable oder Stall ist, wird "F" zurückgeschickt,
um anzugeben, daß an
diesem Endpunkt ein unzulässiger
Befehl versucht wurde, wobei der Befehl ignoriert wird.
-
0010:
Input Ready (CMD.IRDY). Dieser Wert bewirkt, daß der spezifizierte Endpunktkanal
in den Input-Ready-Zustand I_RDY eintritt, wenn er sich momentan
im Input-Idle-Zustand I_IDL befindet. Dieser Befehl wird ausgegeben,
nachdem ein Steuerwort mit einem Input-Ready-Pufferzustand I_RDY
in die Endpunktmatrix für
den entsprechenden Endpunkt geschrieben worden ist. Dieser Befehl
bewirkt nicht, daß das
Steuerwort im Speicher gelesen wird; statt dessen ermöglicht er,
daß es
als Antwort auf den Empfang eines IN-Tokens gelesen wird. Falls
der momentane Zustand des Endpunkts nicht der Input-Idle-Zustand I_IDL
ist, wird der Befehl ignoriert. Falls der momentane Zustand entweder
der Output oder der SETUP-Zustand oder aber Disable oder Stall ist,
wird ein "F" zurückgeschickt,
um anzugeben, daß an
diesem Endpunkt ein unzulässiger
Befehl versucht wurde.
-
0011:
Input Isochronus Ready (CMD.ISRDY). Dieser Wert bewirkt, daß der spezifizierte
Endpunktkanal in den Input Isochronus Ready-Zustand IS_RDY eintritt,
falls er sich momentan im Input-Idle-Zustand I_IDL befindet. Dieser
Befehl wird ausgegeben, nachdem ein Steuerwort mit dem Input-Ready-Pufferzustand in
die Endpunktmatrix für
den entsprechenden Endpunkt geschrieben wird. Dieser Befehl bewirkt
nicht, daß das Steuerwort
im Speicher gelesen wird; statt dessen ermöglicht er, daß es als
Antwort auf den Empfang eines IN-Token gelesen wird. Es wird erwartet,
daß das
Typenfeld des Steuerworts (TI) auf isochron gesetzt ist, dies wird
jedoch nicht geprüft.
Falls der momentane Zustand des Endpunkts nicht der Input-Idle-Zustand
I_IDL ist, wird der Befehl ignoriert. Falls der momentane Zustand
entweder der Output- oder der SETUP-Zustand oder aber Disable oder
Stall ist, wird ein "F" zurückgeschickt,
um anzugeben, daß ein
unzulässiger
Befehl an diesem Endpunkt versucht wurde.
-
0100:
Output Enable (CMD.OEMB). Dieser Wert bewirkt, daß der spezifizierte
Endpunktkanal vom Stall- oder Disable-Zustand in den Output-Idle-Zustand O_IDL
eintritt. Der Steuerwortzeiger für
den spezifizierten Endpunkt wird auf 0 zurückgesetzt. Falls der momentane
Zustand nicht Disable oder Stall ist, wird ein "F" zurückgeschickt,
um anzugeben, daß an
diesem Endpunkt ein unzulässiger
Befehl versucht wurde, wobei der Befehl ignoriert wird.
-
0101:
Output Ready (CMD.ORDY). Dieser Wert bewirkt, daß der spezifizierte Endpunktkanal
in den Output-Ready-Zustand O_RDY eintritt, falls er sich momentan
im Output-Idle-Zustand O_IDL befindet. Der Befehl wird ausgegeben,
nachdem ein Steuerwort mit einem Output-Ready-Zustand in die Endpunktmatrix
für den
entsprechenden Endpunkt geschrieben wird. Dieser Befehl bewirkt
nicht, daß das
Steuerwort im Speicher gelesen wird; statt dessen ermöglicht er,
daß es
als Antwort auf den Empfang eines OUT-Tokens gelesen wird. Falls
der momentane Zustand des Endpunkts nicht der Output-Idle-Zustand
ist, wird der Befehl ignoriert. Falls der momentane Zustand entweder
der Input-Zustand, der Stall-Zustand oder der Disable-Zustand ist,
wird ein "F" zurückgeschickt,
um anzugeben, daß an
diesem Endpunkt ein unzulässiger
Befehl versucht wurde.
-
0110:
Output Isochronous Enable (CMD.OSENB). Dieser Wert bewirkt, daß der spezifizierte
Endpunktkanal aus dem Stall- oder
Disable-Zustand in den Output-Isochronous-Idle-Zustand OS_IDLE eintritt.
Der Steuerwortzeiger für
den spezifizierten Endpunkt wird auf 0 zurückgesetzt. Falls der momentane
Zustand nicht Disable oder Stall ist, wird ein "F" zurückgeschickt,
um anzugeben, daß an
diesem Endpunkt ein unzulässiger Befehl
versucht wurde, wobei dieser Befehl ignoriert wird.
-
0111:
Output Isochronous Ready (CMD.OSRDY). Dieser Wert bewirkt, daß der spezifizierte
Endpunktkanal in den Output-Isochronous-Ready-Zustand
OS_RDY eintritt, falls er sich momentan im Output-Isochronous-Idle-Zustand
OS_IDL befindet. Dieser Befehl wird ausgegeben, nachdem ein Steuerwort
mit einem Output-Ready-Zustand in die Endpunktmatrix für den entsprechenden
Endpunkt geschrieben worden ist. Dieser Befehl bewirkt nicht, daß das Steuerwort
im Speicher gelesen wird; statt dessen ermöglicht er, daß es als
Antwort auf den Empfang eines OUT-Token gelesen wird. Falls der
momentane Zustand des Endpunkts nicht der Output-Isochronous-Idle-Zustand ist, wird
der Befehl ignoriert. Falls der momentane Zustand entweder der Input-Zustand,
der Stall-Zustand oder der Disable-Zustand ist, wird ein "F" zurückgeschickt,
um anzugeben, daß an
diesem Endpunkt ein unzulässiger
Befehl versucht wurde.
-
1000:
SETUP Ready (CMD.SRDY) Dieser Wert bewirkt, daß der spezifizierte Endpunktkanal
in den SETUP-Ready-Zustand S_RDY eintritt. Dieser Befehl wird ausgegeben,
nachdem ein Steuerwort für
einen Output-Ready-Zustand in die Endpunktmatrix für den entsprechenden
Endpunkt geschrieben worden ist. Dieser Befehl bewirkt nicht, daß das Steuerwort
im Speicher gelesen wird; statt dessen ermöglicht er, daß es als Antwort
auf den Empfang eines SETUP-Token gelesen wird. Falls der momentane
Zustand des Endpunkts nicht Stall oder Disable ist, wird der Befehl
ignoriert.
-
1001:
Disable (CMD.DISAB). Dieser Wert bewirkt, daß der spezifizierte Endpunktkanal
in den gesperrten Zustand Disable eintritt. Dies erfolgt unmittelbar
nach irgendeinem Zustand. Falls der Endpunktkanal momentan aktiv
ist, wird der Status in das Steuerwort geschrieben, um anzugeben,
daß der
Endpunkt gesperrt wurde.
-
1010:
Stall (CMD.HALT). Dieser Wert bewirkt, daß der spezifizierte Endpunkt
aus irgendeinem Zustand in den Stall-Zustand HALT eintritt. Dies erfolgt
unmittelbar aus irgendeinem Zustand. Falls der Endpunktkanal momentan
aktiv ist, wird der Status in das Steuerwort geschrieben, um anzugeben,
daß der
Endpunkt blockiert wurde.
-
1011–1101: reserviert.
Diese Werte bewirken keine auszuführende Aktion und schicken
0 zurück.
-
1110:
Toggle CWP. Dieser Wert bewirkt, daß der Steuerwortzeiger geschaltet
wird. Dies wird bei Steuerübertragungen
mit einer ungeraden Anzahl von Paketen, die während der Datenphase geschickt
oder empfangen werden, verwendet.
-
1111:
Error. Dieser Wert gibt an, daß im
momentanen Endpunktkanal für
seinen momentanen Zustand ein unzulässiger Befehl versucht wurde
und daß ein
neuer Befehl akzeptiert werden kann.
-
In
einer zweckmäßigen Ausführung ist
das USB-Datenregister (UDR) ein wortbreites Schreib-Lese-Register.
Lesezugriffe sind an sämtlichen
Plätzen
zugelassen. Das Datenregister wird mit den Daten geladen, die für das Register
gelesen werden, das stets durch ein USB-Indexregister (UIR) gewählt wird.
Schreibvorgänge
dieses Registers sind nur in den USB-Hub-Registern zulässig, wenn die Wählbits des
UIR (UIR.SEL) den Wert 2 haben. Im Bit 15 des UIR ist ein Statusbit
definiert, das angibt, daß eine
Schreiboperation erfolgreich gewesen ist. Dies ist nur notwendig,
wenn die Hub-Funktionalität
enthalten ist.
-
Der
für die
Erfindung relevante Teil des UDR ist der 8-Bit-Endpunktkanal-Zustand. Dieser Zustand
ist für
jeden Endpunktkanal gespeichert und wird für den momentan indexierten
Endpunktkanal zurückgeschickt. Falls
ein ungültiger
Endpunktkanal indexiert ist, wird 0 zurückgeschickt. Das ECR-Registerformat ist
im folgenden gezeigt:
-
Steuerung
CTL: Dies wird bejaht, falls dieser Endpunktkanal Steuersequenzen
annehmen kann, die das SETUP-Token enthalten. Dieses Bit wird gesetzt,
nachdem CMD.SRDY für
diesen Endpunktkanal ausgeführt
worden ist, und bleibt gesetzt, bis der Endpunkt gesperrt (disabled)
wird.
-
Steuerwortzeiger
CWP: Wenn das Steuerwortbit 0 ist, wird als nächstes auf das Steuerwort 0
dieses Endpunkts in der Endpunktmatrix zugegriffen. Wenn das Steuerwortbit
1 ist, wird als nächstes
auf das Steuerwort 1 für
diesen Endpunkt zugegriffen. Dies wird auf 0 gesetzt, wann immer
der Endpunkt freigegeben wird.
-
Der
Endpunktkanal-Zustand EPS kann die folgenden Werte annehmen:
-
In
einer zweckmäßigen Ausführung ist
nur ein Endpunktkanal zu irgendeiner gegebenen Zeit aktiv.
-
Steuerwort
-
In
einer zweckmäßigen Ausführung enthält die Endpunktkanal-Matrix 32 Steuerwörter, 2
für jeden Endpunktkanal.
Die Endpunktkanal-Matrix befindet sich in einem Speicher an einer
Adresse, auf die ein Endpunktmatrix-Basisadressenregister EABAR
zeigt. Diese Adresse muß 128-Byte-synchronisiert
sein (d. h. die 7 LSBs der Adresse sind 0). Die Endpunktkanal-Matrix ist durch
die 4-Bit-Endpunktkanal-Nummer EPN indexiert, ferner ist das Steuerwort,
auf das zugegriffen wird, durch den 1-Bit-Endpunktkanal-Steuerwortzeiger CWP
bestimmt. Das 25-Bit-EABAR, die 4-Bit-EPN und der 1-Bit-CWP erzeugen
eine auf eine Doppelwortgrenze (32-Bit-Grenze) synchronisierte 32-Bit-Adresse
und werden für
den Zugriff auf das 32-Bit-Steuerwort verwendet.
-
Das
32-Bit-Steuerwort enthält
sämtliche
Informationen, die für
den Betrieb dieses Endpunktkanals erforderlich sind, wenn dieser
aktiv ist. Für
jeden Endpunktkanal gibt es zwei derartige Einträge. Das Steuerwort, auf das
als nächstes
zugegriffen werden soll, ist durch den Wert des Endpunktkanal-Steuerwortzeigers
CWP bestimmt. Sofort nach dem Empfang eines IN-Token, eines OUT-Token
oder eines SETUP-Token durch einen momentan in Bereitschaftszustand
befindlichen Endpunktkanal wird das Steuerwort des gewählten Endpunktkanals
des momentanen Steuerwortzeigers gelesen, um zu bestimmen, wie auf
das Token geantwortet werden soll. Am Ende einer Übertragung,
wenn der Abschlußstatus
geschrieben wird, wird das Steuerwort durch den momentanen Status
aktualisiert, wird der CWP inkrementiert und wird das andere Steuerwort
gelesen. Wenn ein Zwischenstatus geschrieben wird, wird nur das
höchstwertige
Byte des Steuerworts aktualisiert. Das Steuerwortformat ist im folgenden
gezeigt:
-
Der
4-Bit-Pufferzustand BS ist ein Teil des Steuerworts, der für die Erfindung
relevant ist. Der Pufferzustand wird durch Software und den Endpunktkanal-Controller
EPC aktualisiert um die Steuerung dieses Puffers zwischen ihnen
zu synchronisieren. Der EPC schreibt den Status, der die Verwendung
des Puffers angibt. Dieses Feld wird durch eine Knoten-Firmware
auf Output Ready, Input Ready, SETUP Ready, Skip, Stall und Disable
gesetzt. Sämtliche
anderen Werte werden durch den EPC gesetzt. Der EPC kann außerdem die Stall-Disable-Werte
in Fehlerzuständen
schreiben. Der Puffer kann durch die Knoten-Firmware erneut in Anspruch genommen
werden, wenn der Pufferzustand irgendeiner der Abschlußwerte ist;
diese umfassen den Eingangs-/Ausgangsabschluß-Status und die Fehlercodes.
-
Der
Pufferzustand BS kann die folgenden Werte annehmen:
0: Skip.
Dieser Wert wird zusammen mit dem Output Ready-Befehl verwendet. Skip bewirkt, daß das nächste empfangene
Datenpaket ignoriert wird und daß der Steuerwortzeiger inkrementiert
wird. Für
Steuerendpunkte bewirkt Skip außerdem,
daß der
Endpunktkanal-Zustand vom Input-Ready-Zustand zum Output/Input-Idle-Zustand
geschaltet wird. Das Setzen von TE und TI bestimmt, welche Quittung
zurückgeschickt
wird, sowie den nächsten
Zustand des Endpunktkanals. Eine NAK wird zurückgeschickt, falls weder TE
noch TI gesetzt ist. Falls TI gesetzt ist und TE nicht gesetzt ist,
wird keine Quittung zurückgeschickt.
Falls TE gesetzt ist, wird eine ACK zurückgeschickt und der Abschlußstatus
wird geschrieben, wenn ein Paket mit dem richtigen PID empfangen
wird.
-
1:
Input Ready IRDY. Dieser Wert gibt an, daß in den Puffer Daten geschrieben
worden sind, die als Antwort auf ein IN-Token gesendet werden sollen.
-
2:
Output Ready ORDY. Dieser Wert gibt an, daß der Puffer zum Schreiben
vorgesehen ist.
-
3:
SETUP Ready SRDY. Dieser Wert gibt an, daß der Puffer zum Schreiben
vorgesehen worden ist. Dies wird nur an einem Steuerendpunkt während der
ersten Übertragung
von Steuerlese- und
Steuerschreib-Operationen verwendet. Geschrieben wird nur in das
Steuerwort 0.
-
4:
Output Wait OWT. Dieser Wert gibt an, daß während des Empfangs von OUT-Daten
vom Host ein Fehler aufgetreten ist. Dies enthält die Erfassung eines Bitverstopfungsfehlers.
Es wird eine Wiederholung erwartet, da dies als Zwischenstatus angesehen
wird, es sei denn, es handelt sich um einen isochronen OUT-Endpunkt,
wo der Status als Abschlußstatus
behandelt wird.
-
5:
CRC Error CRCE. Dieser Wert gibt an, daß am Ende einer OUT-Transaktion
ein fehlerhafter CRC erfaßt
wurde. Es wird eine Wiederholung erwartet, da der Status als Zwischenstatus
angesehen wird, es sei denn, es handelt sich um einen isochronen
OUT-Endpunkt, wo der Status als Abschlußstatus behandelt wird.
-
6:
Buffer Error BUFE. Dieser Wert gibt an, daß während eines OUT Daten vom USB
schneller empfangen wurden, als sie in den Speicher geschrieben
werden können.
Während
eines IN wurden Daten nicht schnell genug aus dem Speicher ausgelesen,
um mit der USB-Datenrate mitzuhalten. An diesem Endpunkt wird eine
Wiederholung erwartet.
-
7:
Input Wait IWT. Dieser Wert gibt an, daß der Puffer vom Endpunkt-Controller
gehalten wird und darauf wartet, ein Senden bei der nächsten Gelegenheit
zu versuchen oder erneut zu versuchen. Dies tritt im Fall einer
fehlenden Bestätigung
auf.
-
8:
Input Complete ICMB. Dieser Wert gibt einen erfolgreichen Abschluß dieser
Eingangsoperation an. Der Puffer kann freigegeben werden.
-
9:
Output Complete OCMB. Dieser Wert gibt an, daß der Puffer mit Daten gefüllt ist
und kein Fehler erfaßt
wurde.
-
10:
Token Error TKNE. Dieser Wert gibt an, daß ein Token des falschen Typs
für den
momentanen Kontext dieses Steuer-Endpunktkanals
empfangen wurde. Falls es sich um einen Ausgangspuffer handelte, wird
der Endpunkt angehalten. Falls es sich um einen Eingangspuffer handelte,
wird eine NAK geschickt und der Zustand des anderen Steuerworts
wird untersucht. Dies wird als ein Abschlußzustand angesehen.
-
11:
Isochronous Synchronization Error SYNE. Dieser Wert gibt an, daß im Puffer
mit TE = 1 und TI = 1 Daten empfangen wurden, daß jedoch der CWP nicht gleich
dem LSB des FNR war. Dies wird als Abschlußzustand angesehen.
-
12:
Data Error DATE. Für
OUT-Daten, wenn CW.BR nicht gesetzt ist und die Datenmenge, die
vom Host empfangen wurde, geringer als erwartet war, oder wenn der
zugewiesene Puffer nicht groß genug
war, um die OUT-Daten zu speichern. Für IN-Daten wird dies gesetzt,
falls ein Pufferungsfehler auftrat und CW.TE nicht gesetzt war oder
CW.TI gesetzt war. Dies wird als Abschlußzustand angesehen.
-
13:
(Reserviert).
-
14:
Halt. Dies bewirkt, daß der
momentane Endpunktkanal in seinen HALT-Zustand eintritt, oder es gibt
an, daß der
Endpunkt in den HALT-Zustand eingetreten ist.
-
15:
Disable. Bewirkt, daß der
momentane Endpunktkanal in seinen DISABLE-Zustand eintritt, oder gibt
an, daß der
Endpunkt in den DISABLE-Zustand eingetreten ist.
-
Endpunktkanal-Zustände
-
In
einer zweckmäßigen Ausführung kann
ein Endpunkt die folgenden Zustände
haben. Um die Operation und die Steuerung aufrechtzuerhalten, behält jeder
Endpunktkanal einen Zustand mit wohldefinierten Bedingungen für die Übertragung
zwischen den Zuständen,
die eine implizite Hardware/Software-Synchronisation umfassen, bei.
Die Endpunktkanal-Zustandsübergänge treten
auf:
- – bei
expliziten Software-Befehlen an einen Endpunkt über das Endpunkt-Befehlsregister
ECR;
- – durch
Lesen des Pufferstatus des anderen Puffers im anderen Steuerwort
für diesen
Endpunkt am Ende einer Übertragung;
und
- – als
Ergebnis von Ereignissen auf dem USB wie etwa ein Empfang von IN-,
OUT- und SETUP-Tokens sowie AOK-Quittierungen.
-
4 zeigt
die vereinfachte Endpunktkanal-Zustandsmaschine zur Handhabung von
IN- und OUT-Transaktionen. Die Handhabung von Steuerlese- und Steuerschreib-Transaktionen
erfolgt in ähnlicher Weise.
-
Der
momentane Endpunktkanal-Zustand ist im Endpunkt-Zustandsregister
sichtbar, auf das über
den USB-Index und über Datenregister
zugegriffen werden kann. In einer zweckmäßigen Ausführung ist höchstens ein Endpunktkanal zu
irgendeinem gegebenen Zeitpunkt in einem der aktiven Zustände. Dadurch
kann die Aktivzustandslogik von sämtlichen Endpunktkanälen gemeinsam
genutzt werden.
-
Ein
Endpunktkanal kann, wie in 4 gezeigt
ist, die folgenden Zustände
haben:
Disable. In den DISABLE-Zustand wird bei einem Zurücksetzen,
bei einem Disable-Befehl für
diesen Endpunktkanal sowie bei der Erfassung eines Disable-Zustands
im Pufferzustand eines Steuerworts eingetreten. Irgendein Token,
das von diesem Endpunktkanal empfangen wird, wenn er in diesem Zustand
ist, wird ohne Quittierung zurückgeschickt.
Es ist ein Software-Eingriff
erforderlich, um den Endpunktkanal aus diesem Zustand zu entfernen,
typischerweise über
einen Enable-Befehl in einen der Idle-Zustände.
-
Halt.
In den HALT-Zustand wird eingetreten bei dem Stall-Befehl für diesen
Endpunktkanal, bei Erfassung eines Stall-Zustands im Pufferzustand eines Steuerworts
und bei bestimmten Fehlerbedingungen. Für irgendein Token, das von
diesem Endpunktkanal empfangen wird, wenn er sich in diesem Zustand
befindet, wird eine Stall-Quittierung zurückgeschickt, um anzugeben,
daß der
Endpunkt momentan blockiert ist. Es ist ein Software-Eingriff erforderlich,
um den Endpunktkanal aus diesem Zustand zu entfernen, typischerweise über einen
Enable-Befehl für
einen der Leerlaufzustände.
-
Input
Idle I_IDL. In diesem Zustand erwartet der Endpunkt, daß der Puffer
bald zugewiesen wird. Eine NAK-Quittierung wird als Antwort auf
ein IN-Token, das auf diesen Endpunkt kanal abgebildet wird, zurückgeschickt.
Für OUT-Tokens
wird keine Antwort von diesem Endpunktkanal zurückgeschickt.
-
Input
Ready I_RDY. In diesen Zustand wird über einen Input-Ready-Befehl für diesen
Endpunktkanal oder bei Erfassung eines weiteren Input-Puffers am
Ende einer Übertragung
eingetreten. Der Befehl sollte nur gegeben werden, nachdem ein Puffer
diesem Endpunkt zugewiesen worden ist, indem das Steuerwort an den entsprechenden
Platz in der Endpunktmatrix geschrieben wird. Dieses Steuerwort
sollte auf einen Datenpuffer zeigen, um Daten an den Host als Antwort
auf das nächste
von diesem Endpunktkanal empfangene IN-Token zurückzuschicken. Der PID-Wert
wird als DATA0, wenn CWP 0 ist, und als DATA1, wenn CWP 1 ist, gesendet.
-
Input
Active I_ACT. In diesen Zustand wird bei Empfang eines IN-Token
eingetreten, wenn der gewählte
Endpunktzustand momentan der Input-Ready-Zustand ist. Während dieses
Zustands werden Daten vom Speicher an den USB übertragen. Bei Abschluß der Datenübertragung
sollte innerhalb von 16 Bitzeiten eine ACK-Quittierung empfangen
werden. Falls am Ende dieser Zeitabschaltperiode ein ACK nicht empfangen
wurde, wird der Puffer-Wait-Status zurück in das Steuerwort geschrieben.
Die Adresse und der Byte-Zähler
werden jedoch nicht überschrieben,
weil eine Rücksendung
auftreten wird und weil die momentanen Werte erneut verwendet werden
müssen.
Falls eine ACK empfangen wird, werden der Pufferstatus zusammen
mit dem momentanen Wert der Adresse und des Byte-Zählers geschrieben.
Dann wird das andere Steuerwort in diesem Endpunkt gelesen, um den
nächsten
Zustand des Endpunkts zu bestimmen, der verwendet werden soll, wenn ein
Token beim nächsten
Mal an diesen Endpunktkanal gerichtet wird. Falls dieser Endpunkt
für eine
Steuerübertragung
verwendet wird, kann eine Übertragung
in den Output-Ready- oder in den Output-Idle-Zustand auftreten,
um die Statusphase einer Steuerwortübertragung abzuschließen.
-
Input
Isochronous Ready IS_RDY. In diesen Zustand wird über einen
Input-Ready-Befehl in diesen Endpunktkanal oder bei Erfassung eines
weiteren Input-Puffers am Ende einer Übertragung eingetreten. Der Befehl
sollte nur gegeben werden, nachdem diesem Endpunkt ein Puffer zugewiesen
worden ist, indem das Steuerwort an den geeigneten Platz in der
Endpunktmatrix geschrieben wird. Dieses Steuerwort sollte auf einen
Datenpuffer zeigen, wobei Daten zum Host als Antwort auf das nächste von
diesem Endpunktkanal empfangene IN-Token zurückgeschickt werden. Der PID-Wert
wird stets unabhängig
vom Wert des CWP als DATA0 gesendet.
-
Input
Isochronous Active IS_ACT. In diesen Zustand wird bei Empfang eines
IN-Token eingetreten, wenn der gewählte Endpunktzustand momentan
Input Ready ist. Während
dieses Zustands werden Daten vom Speicher an den USB übertragen.
Bei Abschluß der
Datenübertragung
werden der Pufferstatus zusammen mit dem momentanen Wert der Adresse
und des Byte-Zählers
am Ende der Übertragung
geschrieben. Dann wird das andere Steuerwort an diesem Endpunkt
gelesen, um den nächsten
Zustand des Endpunkts zu bestimmen, der verwendet werden soll, wenn
ein Token zum nächsten
Mal an diesen Endpunktkanal gerichtet ist.
-
Output
Idle O_IDL. In diesem Zustand erwartet der Endpunkt, daß ein Puffer
bald zugewiesen wird. Eine NAK-Quittierung wird als Antwort auf
ein OUT-Token, das auf diesen Endpunkt abgebildet ist, zurückgeschickt.
Für IN-Tokens
wird an diesen Endpunktkanal keine Antwort zurückgeschickt.
-
Output
Ready O_RDY. In diesen Zustand wird eingetreten, nachdem diesem
Endpunktkanal ein Puffer zugewiesen worden ist, in den Daten geschrieben
werden. Dies kann über
einen Output-Ready-Befehl vom O_IDL-Zustand erfolgen, nachdem das
geeignete Wort in die Endpunktmatrix geschrieben worden ist, oder
bei Erfassung eines weiteren Output-Puffers am Ende einer Übertragung.
-
Output
Active O_ACT. In diesen Zustand wird bei Empfang eines OUT-Token
eingetreten. Während dieses
Zustands werden Daten vom USB in den Speicher geschrieben. Am Ende
einer Ausgangsübertragung wird
der Status in das Steuerwort im CWP geschrieben. Falls die Übertragung
nicht erfolgreich war, d. h., falls ein CRC- oder Bitverstopfungsfehler
erfaßt
wurde, wird dies als Pufferstatus geschrieben. Falls die Übertragung
erfolgreich war, wird der Output-Complete-Pufferstatus geschrieben,
wird CWP invertiert und wird das andere Steuerwort für diesen
Endpunktkanal gelesen. Der geeignete Übergang erfolgt anhand des
Pufferzustands. Falls dieser Endpunkt für eine Steuerübertragung
verwendet wird, kann eine Übertragung
in den Input-Ready- oder in den Input-Idle-Zustand erfolgen, um die Statusphase
einer Steuerwortübertragung
abzuschließen.
-
Output
Isochronous Idle OS_IDL. In diesem Zustand erwartet der Endpunkt,
daß ein
Puffer bald zugewiesen wird. Als Antwort auf ein OUT-Token, das
auf diesen Endpunktkanal abgebildet ist, wird keine Quittierung
zurückgeschickt.
An diesem Endpunktkanal werden für
IN-Tokens keine Daten oder Quittierungen zurückgeschickt.
-
Output
Isochronous Ready OS_RDY. In diesen Zustand wird eingetreten, nachdem
diesem Endpunktkanal ein Puffer zugewiesen worden ist, in den Daten
geschrieben werden. Dies kann über
einen OS_RDY-Befehl vom OS_IDL-Zustand folgen, nachdem das geeignete
Wort in die Endpunktmatrix geschrieben worden ist, oder bei Erfassung
eines weiteren Output-Puffers am Ende einer Übertragung.
-
Output
Isochronous Active OS_ACT. In diesen Zustand wird eingetreten bei
Empfang eines OUT-Token vom OS_RDY-Zustand. Während dieses Zustands werden
Daten vom USB in den Speicher geschrieben. Am Ende einer Ausgabeübertragung
wird der Status in das Steuerwort bei CWP geschrieben. Falls die Übertragung
nicht erfolgreich war, d. h. falls ein CRC- oder ein Bitverstopfungsfehler
erfaßt
wurde, wird dies als Pufferstatus geschrieben. Falls die Übertragung
erfolgreich war, wird der Ausgabeabschluß-Pufferstatus geschrieben.
Am Ende der Statusübertragung
wird CWP invertiert und wird das andere Steuerwort für diesen
Endpunktkanal gelesen. Der geeignete Übergang erfolgt anhand des
Pufferzustands.
-
Setup
Ready S_RDY. In diesen Zustand wird eingetreten, nachdem diesem
Endpunktkanal ein Puffer zugewiesen worden ist, in den Daten geschrieben
werden. In diesen Zustand wird durch einen Setup-Ready-Befehl eingetreten,
nachdem das geeignete Wort in die Endpunktmatrix geschrieben wird,
oder bei Erfassung des Setup-Ready-Pufferzustands.
-
Setup
Active S_ACT. In diesen Zustand wird aus dem Setup-Ready-Zustand eingetreten
bei Empfang eines SETUP-Token. Während
dieses Zustands werden Daten vom USB in den Speicher geschrieben.
Am Ende einer Ausgangsübertragung
wird der Status in das Steuerwort bei CWP geschrieben, wird CWP
invertiert und wird das andere Steuerwort für diesen Endpunktkanal gelesen.
Der geeignete Übergang
erfolgt in Abhängigkeit
vom Typ der Steuerübertragung
und des gelesenen Pufferzustands anhand des Pufferzustands in den Output-Idle-,
Output-Ready-, Input-Idle- oder Input-Ready-Zustand.
-
Nach
dem Zurücksetzen
sind sämtliche
Endpunkte gesperrt. Ein Endpunkt wird freigegeben, indem in einen
Endpunkt ein Freigabebefehl eingegeben wird. Dies sollte nur geschehen,
wenn Eingangs- und/oder Ausgangspuffer bald diesem Endpunkt zugewiesen
werden. Sämtliche
Endpunkte, die momentan nicht auf einen Endpunktkanal abgebildet
sind, werden als gesperrt angesehen.
-
Eine
Software weist die Puffer an Endpunktkanäle je nach Bedarf zu. Nachdem
jeder Puffer zugewiesen ist, führt
er den Input- oder Output-Ready-Befehl am Endpunktkanal aus. Falls
der Endpunktkanal momentan im Leerlaufzustand ist, tritt er in den
geeigneten Ready-Zustand ein. Falls der Endpunktkanal momentan in
einem Ready- oder Active-Zustand ist, ignoriert er sämtliche
Befehle mit Ausnahme des Disable- und des Stall-Befehls in den Endpunktkanal, die er
sofort verarbeitet. Dieses Schreiben muß durch Software geschehen,
um mögliche
Synchronisationsprobleme zu vermeiden, da die UNIM-Endpunktkanal-Verarbeitung
in bezug auf Software-Operationen asynchron ist.
-
Da
jedem Endpunkt bis zu zwei Puffer zugewiesen werden können, kann
der nächste
Puffer vorbereitet werden, während
der momentane verarbeitet wird, um die Datenübertragung zu beschleunigen
und um unnötige
NAK-Quittierungen zu vermeiden.