DE19900331A9 - Vorrichtung und Verfahren zur Implementierung eines USB-Endpunktkanals mit doppelter Pufferunterstützung - Google Patents
Vorrichtung und Verfahren zur Implementierung eines USB-Endpunktkanals mit doppelter PufferunterstützungInfo
- Publication number
- DE19900331A9 DE19900331A9 DE1999100331 DE19900331A DE19900331A9 DE 19900331 A9 DE19900331 A9 DE 19900331A9 DE 1999100331 DE1999100331 DE 1999100331 DE 19900331 A DE19900331 A DE 19900331A DE 19900331 A9 DE19900331 A9 DE 19900331A9
- Authority
- DE
- Germany
- Prior art keywords
- data
- storage element
- data storage
- endpoint
- usb
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- UIIMBOGNXHQVGW-UHFFFAOYSA-M buffer Substances [Na+].OC([O-])=O UIIMBOGNXHQVGW-UHFFFAOYSA-M 0.000 claims abstract description 168
- 230000001934 delay Effects 0.000 claims 1
- 230000005540 biological transmission Effects 0.000 description 24
- 230000004044 response Effects 0.000 description 21
- 238000001514 detection method Methods 0.000 description 9
- 238000010586 diagram Methods 0.000 description 9
- 230000000875 corresponding Effects 0.000 description 7
- 230000003139 buffering Effects 0.000 description 3
- 201000008220 erythropoietic protoporphyria Diseases 0.000 description 3
- 230000001360 synchronised Effects 0.000 description 3
- 101700056510 PBL11 Proteins 0.000 description 2
- 101700066570 TBK1 Proteins 0.000 description 2
- 230000004913 activation Effects 0.000 description 2
- 230000000903 blocking Effects 0.000 description 2
- 238000000034 method Methods 0.000 description 2
- 230000002093 peripheral Effects 0.000 description 2
- 241000282941 Rangifer tarandus Species 0.000 description 1
- 230000003044 adaptive Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 150000001875 compounds Chemical class 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 230000000717 retained Effects 0.000 description 1
- 230000000630 rising Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001702 transmitter Effects 0.000 description 1
- 230000001960 triggered Effects 0.000 description 1
Abstract
Die Erfindung bezieht sich auf eine Vorrichtung und ein Verfahren zum Senden und Empfangen von Daten auf einem "Universal Serial Bus", wobei sich eine Anzahl von Endpunkten einen Speicher teilt. Der Speicher ist als ein Doppelpuffer ausgebildet, wodurch es möglich ist, daß das nächste Paket vorbereitet wird, während das gegenwärtige Paket übertragen wird. Die Erfindung unterstützt auch die Übertragungswiederholung.
Description
Beschreibung
Die Erfindung betrifft das Universal Serial Bus (USB)-Protokoll.
Insbesondere betrifft die Erfindung das Nutzen eines gemeinsamen Puffers für das Senden und Empfangen
von Daten.
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/MTDI- Anschlüsse.
Beim USB nutzen alle angeschlossenen Geräte, die mit einem Personalcomputer mit Hilfe einer einzigen Verbindungsart
verbunden sind, eine "Tiered-Star"-Topologie. 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.
Eine USB-Funktion ist ein 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 hiervon die Schnittstellen definiert,
die das Gerät bilden. Jede Schnittstelle ist ihrerseits von einem oder mehreren Endpunkten gebildet.
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.
Jeder Endpunkt ist eine adressierbare Einheit auf dem USB und muß auf die ΓΝ- und OUT-Token (Eingangs- oder
Ausgangs-Token) von dem USB-Host (typischerweise ein PC) antworten. ΓΝ-Token zeigen an, daß der Host den Empfang
von Daten von einem Endpunkt verlangt. OUT-Token zeigen an, daß der Host Informationen zu einem Endpunkt
senden wird.
Auf das Erkennen eines an einen Endpunkt adressierten IN-Tokens ist der Endpunkt für das Antworten mit einem
Datenpaket verantwortlich. Wenn der Endpunkt momentan verstopft ist, wird ein STALL-Handshake-Paket gesendet.
Wenn der Endpunkt freigegeben ist, aber keine Daten anliegen, wird ein negatives Quittier-Handshake-Paket (NAK)
gesendet.
In ähnlicher Weise ist der Endpunkt beim Erkennen eines an einen Endpunkt adressierten OUT-Tokens für den Empfang
eines von dem Host gesendeten Datenpaketes und dessen Speicherung in einem Puffer verantwortlich. Wenn der
Endpunktkanal am Ende einer Datenübertragung zeitweise blockiert ist, wird ein STALL-Handshake-Paket gesendet.
Wenn der Endpunktkanal am Ende einer Datenübertragung zeitweise nicht freigegeben ist, so wird kein Handshake-Paket
gesendet. Wenn der Endpunktkanal empfangsbereit ist, aber kein Puffer vorhanden ist, in welchem-die Daten gespeichert
werden können, wird ein NAK-Handshake-Paket gesendet.
Ein nicht aktivierter Endpunkt oder ein Endpunkt, weleher
momentan nicht auf einen Endpunktkanal abgebildet ist, antworten nicht auf IN-, OUT- oder SETUP-Token.
Einige Hersteller haben Implementierungen der USB-Norm entwickelt. Zum Beispiel hat die Intel Corp. die Geräte
8x93IAx, 8x93IHx, 8x930Ax und 8x930Hx herausgegeben.
Diese Geräte haben jedoch eine Anzahl von Grenzen. Der 8x930 und der 8x931 haben einen Übertragungspuffer und
einen Empfangspuffer, die jedem Endpunktpaar ausschließlich zugeordnet sind. Deshalb kann die Anzahl von Endpunkten
den Bereich des Puffers beschränken, oder umgekehrt. Es besteht ein Bedarf die Anzahl von Endpunkten
ohne eine entsprechende Vergrößerung des Gesamtpufferbereiches zu erhöhen.
Darüberhinaus verlangen der 8x930 und der 8x931 das Einschreiten des Prozessors, nachdem Daten empfangen
wurden, um die Daten aus dem Puffer zu entfernen, bevor dieser voll wird. Es besteht ein Bedarf das Einschreiten des
Prozessors nach dem Datenempfang zu vermindern.
Zur Lösung dieser und anderer Probleme sieht die Erfindung einen Puffer vor, den sich eine Anzahl von Endpunkten
teilen können.
Gemäß einer Ausführungsform weist eine erfindungsgemaße
Vorrichtung zum Senden von Daten von einem USB-Endpunkt an einen USB-Host einen ersten Speicher, einen
zweiten Speicher, einen Datenprozessor, einen Zeigerspeicher und einen Controller auf. Der Datenprozessor ist so
konfiguriert, daß wenigstens ein erstes Datenpaket in dem ersten Speicher und ein zweites Datenpaket in dem zweiten
Speicher erzeugbar sind. Der Zeigerspeicher ist so konfiguriert, daß er einen einem Speicher entsprechenden Zeiger
aufweisen kann. Der Controller ist so konfiguriert, daß ein Datenpaket von einem USB-Endpunkt an einen USB-Host
auf einem USB-Endpunktkanal gesendet werden kann, und daß ein Signal empfangen werden kann. Der Datenprozessor
erzeugt ein erstes Datenpaket in dem ersten Speicher und ein zweites Datenpaket in dem zweiten Speicher. Der Controller
erzeugt in dem Zeigerspeicher einen Zeiger auf den ersten Speicher, sendet das Datenpaket, auf welchen der Zeiger gerichtet
ist, und wartet dann auf ein Quittiersignal von dem Host. Wenn der Controller das Signal nicht empfangt, sendet
er das Datenpaket erneut. Wenn der Controller das Signal empfängt, erzeugt er einen zweiten Zeiger auf den zweiten
Speicher in dem Zeigerspeicher und sendet das Datenpaket, auf welches der Zeiger gerichtet ist.
Gemäß einer weiteren Ausführung erzeugt der Datenprozessor ein drittes Datenpaket in dem ersten Speicher, nachdem
er das Signal empfangen hat. Nachdem der Controller das Signal empfängt und das zweite Datenpaket sendet, wartet
er auf ein zweites Quittiersignal. Wenn der Controller das zweite Signal nicht empfangt, sendet er das zweite Datenpaket
erneut. Wenn der Controller das Signal empfängt, erzeugt er in dem Zeigerspeicher einen dritten Zeiger auf den
ersten Speicher und sendet das Datenpaket, auf welches der Zeiger gerichtet ist.
Bei einer anderen Ausführung umfaßt eine Vorrichtung zum Empfangen von Daten von einem USB-Host einen ersten
Speicher, einen zweiten Speicher, einen Datenprozessor, einen Zeigerspeicher und einen Controller. Der Datenprozessor
ist so konfiguriert, daß Daten aus wenigstens einem ersten Datenpaket in dem ersten Speicher erzeugbar
sind. Der Speicherzeiger ist so konfiguriert, daß er einen einem Speicher entsprechenden Zeiger enthalten kann. Den
Controller ist so konfiguriert, daß ein Datenpaket von einem USB-Host an einem USB-Endpunkt auf einem USB-Endpunktkanal
empfangen werden kann, und daß ein Fehler erkennbar ist. Der Controller erzeugt in dem Zeigerspeicher
einen ersten Zeiger auf den ersten Speicher, empfängt das erste Datenpaket in den Speicher, auf welchen der Zeiger
gerichtet ist, und erkennt dann, ob ein erster Fehler aufgetreten ist. Wenn der Fehler erkannt wurde, setzt der Controller
den Empfang fort. Wenn kein Fehler erkannt wurde, erzeugt der Datenprozessor die Daten aus dem ersten Datenpaket,
und der Controller erzeugt einen zweiten Zeiger auf den zweiten Speicher und empfangt ein zweites Datenpaket in
den Speicher, auf welchen der Zeiger gerichtet ist.
Nach einer weiteren Ausführung erkennt der Controller, ob ein zweiter Fehler aufgetreten ist, nachdem das zweite
Datenpaket empfangen wurde. Wenn der zweite Fehler erkannt wurde, setzt der Controller den Empfang fort. Wenn
kein zweiter Fehler erkannt wurde, erzeugt der Datenprozessor die Daten aus dem zweiten Datenpaket, und der Controller
erzeugt einen dritten Zeiger auf den ersten Speicher und empfängt ein drittes Datenpaket in den Speicher, auf welchen
der Zeiger gerichtet ist.
Nach einer weiteren Ausführungsform umfaßt ein erfindungsgemäßes
Verfahren zum Senden von Daten von einem USB-Endpunkt an einen USB-Host die folgenden Schritte:
Erzeugen eines ersten Datenpaketes in einem ersten Speicher, Erzeugen eines zweiten Datenpaketes in einem zweiten
Speicher, Erzeugen eines ersten Zeigers auf den ersten Speicher, und Senden des Datenpaketes, auf welches der
Zeiger gerichtet ist. Das Verfahren umfaßt weiterhin das Warten auf ein Quittiersignal von dem Host und das Fortsetzen
des Sendens des Datenpaketes, wenn das Signal nicht empfangen wird. Das Verfahren umfaßt nach dem Empfangen
des Signals weiterhin das Erzeugen eines zweiten Zeigers auf den zweiten Speicher, und anschließend das Senden
des Datenpaketes, auf welches der Zeiger gerichtet ist.
Gemäß einer weiteren Ausführungsform umfaßt das Verfahren nach dem Signalempfang weiterhin den Schritt zur
Erzeugung eines dritten Datenpaketes in dem ersten Speicher. Nach dem Empfangen des Signals und dem Senden
des Datenpakets, umfaßt das Verfahren weiterhin das Warten auf ein zweites Quittiersignal vom Host und das Fortsetzen
des Sendens des zweiten Datenpaketes, wenn das zweite Signal nicht empfangen wird. Nach dem Empfang des zweiten
Signals, umfaßt das Verfahren weiterhin Schritte zur Erzeugung eines dritten Zeigers auf den ersten Speicher und
zum Senden des Datenpaketes, auf welches der Zeiger gerichtet ist.
Nach einer weiteren Ausführungsform umfaßt ein erfindungsgemäßes Verfahren zum Empfang von Daten an einem
USB-Endpunkt von einem USB-Host Schritte zur Erzeugung eines ersten Zeigers auf einen ersten Speicher und zum
Empfang eines ersten Datenpaketes in den ersten Speicher. Das Verfahren umfaßt weiterhin das Erkennen eines Fehlers,
die Fortsetzung des Empfangs des ersten Datenpakets, bis der Fehler nicht erkannt wurde, und die anschließend Erzeugung
von Daten aus dem ersten Datenpaket. Das Verfahren umfaßt weiterhin, wenn der Fehler nicht erkannt wurde,
Schritte zum Erzeugen eines zweiten Zeigers auf den zweiten Speicher, und zum anschließenden Empfangen des zweiten
Datenpakets in den Speicher, auf welchen der zweite Zeiger gerichtet ist.
Nach einer weiteren Ausführungsform umfaßt das Verfahren nach dem Empfang des zweiten Datenpakets weiterhin
Schritte zum Erkennen eines zweiten Fehlers, zur Fortsetzung des Empfangs des zweiten Datenpakets, solange der
zweite Fehler nicht erkannt wurde, und zum anschließenden Erzeugen von Daten aus dem zweiten Datenpaket. Das Verfahren
umfaßt, nachdem der zweite Fehler nicht erkannt wurde, weiterhin Schritte zur Erzeugung eines dritten Zeigers
auf den ersten Speicher, wobei anschließend das dritte Datenpaket in den Speicher, auf welchen der dritte Zeiger
gerichtet ist, empfangen wird.
Ein besseres Verständnis der Merkmale und Vorteile der Erfindung ergibt sich aus der folgenden detaillierten Beschreibung
und den zugehörigen Zeichnungen, in welchen Ausführungsformen veranschaulicht sind, dies die Prinzipien
der Erfindung verwirklichen
Fig. 1 zeigt in einem Blockdiagramm die Struktur einer Ausführungsform der Erfindung.
Fig. 2 zeigt in einem Zustandsdiagramm den Betrieb einer erfindungsgemäßen Datenübertragung.
Fig. 3 zeigt in einem Zustandsdiagramm den Betrieb einer anderen erfindungsgemäßen Datenübertragung.
Fig. 4 zeigt in einem Zustandsdiagramm den Betrieb eines erfindungsgemäßen Datenempfangs.
Fig. 5 zeigt in einem Zustandsdiagramm den Betrieb eines anderen erfindungsgemäßen Datenempfangs.
Fig. 6 zeigt ein Zustandsdiagramm entsprechend einer bevorzugten Ausführungsform der Erfindung.
Die in dieser Anmeldung beschriebene Erfindung ist Bestandteil einer größeren Anzahl von Erfindungen, die in weiteren
Patentanmeldungen 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-Patentamneldung
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", (iii) US-Patentanmeldung Nr. 09/003,897 mit dem Titel "Apparatus und Method
of Transmitting and Reiceiving USB Isochronous Data", (iv) US-Patentanmeldung Nr. 09/004,002 mit dem Titel "An
Apparatus and Method for Handling Universal Serial Bus Control Transfer", (v) US-Patentanmeldung Nr. 09/004,005
mit dem Titel "An Apparatus and Method for Providing an Interface to a Compound Universal Serial Bus Controller",
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.
Fig. 1 zeigt eine allgemeine Ausführungsform eines Aspektes der Erfindung. Fig. 1 zeigt einen Endpunkt 110, einen
Datenprozessor 120, einen ersten Speicher 130, einen zweiten Speicher 140, einen Controller 150, einen Zeigerspeicher
160, einen Endpunktkanal 170 und einen Host 180. Der Datenprozessor 120 verarbeitet die Daten in Datenpakete
im Speicher 130 und im Speicher 140. Der Controller 150 steuert den Fluß von Datenpaketen auf dem Endpunktkanal
170. Der Speicher 160 hält einen Zeiger auf den Speicher 130 oder den Speicher 140. Am anderen Ende des Endpunktkanals
170 ist der Host 180 angeordnet. Der Host 180 tauscht Datenpakete mit dem Endpunkt 110 aus.
Der in Fig. 1 dargestellte Aufbau kann so konfiguriert werden, daß die folgenden Methoden gemäß den Fig. 2-5
ausgeführt werden können.
In Fig. 2 ist ein Zustandsdiagramm eines Verfahrens zum Senden von Datenpaketen vom Endpunkt zum Host dargestellt.
Fig. 2 zeigt einen Zeige- und Erzeugungszustand 210, einen Sendezustand 220, einen Empfangszustand 230, einen
Zeigezustand 240 und einen zweiten Sendezustand 250.
In Fig. 3 ist dargestellt, wie das Verfahren gemäß Fig. 2
weitere Schritte umfassen kann. Fig. 3 zeigt einen Zeige- und Erzeugungszustand 310, einen Sendezustand 320, einen
Empfangszustand 330, einen zweiten Zeige- und Erzeugungszustand 340, einen zweiten Sendezustand 350, einen
zweiten Empfangszustand 360, einen Zeigezustand 370 und einen dritten Sendezustand 380.
In Fig. 4 ist ein Zustandsdiagramm eines Verfahrens zum Empfang von Datenpaketen von dem Host am Endpunkt
dargestellt. Fig. 4 zeigt einen Zeigezustand 410, einen Empfangszustand
420, einen Bestimmungszustand 430, einen Zeige- und Erzeugungszustand 440 und einen zweiten Empfangszustand
450.
In Fig. 5 ist dargestellt, wie das in Fig. 4 gezeigte Verfah-
ren weitere Schritte umfassen kann. Fig. 5 zeigt einen Zeigezustand
510, einen Empfangszustand 520, einen Bestimmungszustand 530, einen Zeige- und Erzeugungszustand
540, einen zweiten Empfangszustand 550, einen zweiten Bestimmungszustand 560, einen zweiten Zeige- und Erzeugungszustand
570 und einen dritten Empfangszustand 580.
Im folgenden wird beschrieben, wie die Erfindung gemäß
den Fig. 1 und 2 arbeitet. Im Zustand 210 erzeugt der Datenprozessor
120 aus Daten am Endpunkt 110 wenigstens ein Datenpaket im Speicher 130 und wenigstens ein anderes
Datenpaket im Speicher 140, und der Controller 150 veranlaßt den im Speicher 160 gespeicherten Zeiger, auf den
Speicher 130 zu zeigen. Im Zustand 220 sendet der Controller 150 das Datenpaket aus dem Speicher, auf welchen der
Zeiger im Speicher 160 gerichtet ist, über den Endpunktkanal
170 zum Host 180. Im Zustand 230 empfängt der Controller 150 entweder ein Quittiersignal vom Host innerhalb
eines Zeitlimits, oder der Controller 150 geht in den Zustand 220 zurück, um das Datenpaket erneut zu senden. Im Zustand
240 hat der Host 180 die Quittierung gesendet, so daß der Controller den Zeiger veranlaßt, auf den Speicher 140 zu
zeigen. Im Zustand 250 sendet der Controller 150 an den Host 180 das Datenpaket aus dem Speicher, aufweichen der
Zeiger gerichtet ist.
Obwohl in der Beschreibung die Bezeichnung "Datenpaket" benutzt wird, soll die Erfindung auch auf eine Vielzahl
von Daten, sogar auf Daten, die nicht in einem diskreten Paket enthalten sind, anwendbar sein.
Im folgenden wird beschrieben, wie die Erfindung gemäß den Fig. 1 und 3 arbeitet. Die Zustände 310-350 entsprechen
mit den folgenden Ergänzungen den Zuständen 210-250. Im Zustand 340 erzeugt der Datenprozessor wenigstens
ein drittes Datenpaket im Speicher 130 aus Daten am Endpunkt 110 im Zustand 360 empfangt der Controller
150 entweder ein Quittiersignal von dem Host innerhalb eines Zeitlimits, oder er geht in den Zustand 350 zurück, um
das Datenpaket erneut zu senden. Im Zustand 370 hat der Host 180 die Quittierung abgesendet, so daß der Controller
den Zeiger veranlaßt, auf den Speicher 130 zu zeigen. Im Zustand 380 sendet der Controller das Datenpaket aus dem
Speicher, auf welchen der Zeiger gerichtet ist, an den Host 180.
Im folgenden wird beschrieben, wie die Erfindung gemäß den- Fig. 1 und 4 arbeitet. Im Zustand 410 veranlaßt der
Controller den im Speicher 160 gespeicherten Zeiger, auf den Speicher 130 zu zeigen. Im Zustand 420 empfängt der
Controller 150 das erste Datenpaket vom Host 180 in den Speicher, auf den der Zeiger gerichtet ist. Im Zustand 430
erkennt der Controller entweder, daß im ersten Datenpaket kein Fehler aufgetreten ist, oder er geht zurück in den Zustand
420, um das ersten Datenpaket erneut zu empfangen. Im Zustand 440 ist kein Fehler aufgetreten, so daß der Controller
150 den Zeiger veranlaßt, auf den Speicher 140 zu zeigen, und so daß der Controller aus dem ersten Datenpaket
Daten an dem Endpunkt 110 erzeugt. Im Zustand 450 empfängt
der Controller das zweite Datenpaket vom Host 180 in den Speicher, auf welche der Zeiger gerichtet ist.
Im folgenden wird beschrieben, wie die Erfindung gemäß den Fig. 1 und 5 arbeitet. Die Zustände 510-550 entsprechen
den Zuständen 410-450. Im Zustand 560 bestimmt der Controller entweder, daß kein Fehler im zweiten Datenpaket
aufgetreten ist, oder er geht zurück in den Zustand 550, um das zweite Datenpaket erneut zu empfangen. Im Zustand
570 ist kein Fehler aufgetreten, so daß der Controller den Zeiger veranlaßt, auf den Speicher 130 zu zeigen, und so
daß der Controller aus dem zweiten Datenpaket Daten am Endpunkt 110 erzeugt. Im Zustand 580 empfängt der Controller
das dritte Datenpaket vom Host 180 in den Speicher, auf welchen der Zeiger gerichtet ist.
Obwohl in der Beschreibung die Bezeichnung "Speicher" benutzt wird, soll die Erfindung auch für andere Arten von
Datenspeicherelementen anwendbar sein.
Diese allgemeine Beschreibung ist im folgenden anhand bevorzugter Ausführungsformen von Aspekten der Erfindung
detaillierter dargestellt.
Bei einer bevorzugten Ausführungsform ist die beschriebene Erfindung als Teil eines USB-Knoten-Schnittstellenmoduls.
(USB Node Interface Module (UNIM)) implementiert. Die für die Erfindung relevanten Teile des UNIMs umfassen
einen Endpunkt-Controller, eine serielle Schnittstellen-Maschine, einen Endpunktkanal-Controller, ein Steuerwort,
verschiedene Register, ein Zustandsdiagramm und einen Bulk-Endpunktbetrieb. Diese Teile werden dem Dokument
aus Anhang A entnommen ("USB Node Interface Architecture Specification", Version 0.6).
Endpunkt-Controller
Bei einer bevorzugten Ausführungsform handhabt der Endpunkt-Controller die mit dem Endpunkt verbundenen
Operationen, wozu der Endpunktkanal-Zustand, das Puffern und Übertragungen gehören. Bei einer bevorzugten Ausführungsform
können zu jeder beliebigen Zeit bis zu 16 Endpunktkanäle und ihre zugehörigen Endpunkte unterstützt
werden. Jedem Endpunktkanal können bis zu zwei Puffer in dem Kernbereich der Busadressen zugeordnet werden, wobei
diese für Empfangs- und Übertragungsoperationen genutzt werden. Wenn einem Endpunktkanal keine Puffer zugeordnet
sind, ist der Controller dafür verantwortlich, daß geeignete Handshakes für Eingangs- und Ausgangs-Token
bereitgestellt werden.
Der Endpunkt-Controller umfaßt mehrere funktionelle Blöcke. Die Endpunkt-Zustandsmaschine liefert die zentrale
Steuerung für die Nutzblöcke des Datenausrichtungs-Multiplexer (DALM), den Adressgenerator (ADGen) und die teilweise
Endpunktkanal (PEP)-Speicherung. Gerätefunktionen, wie die Adressüberprüfung und -erzeugung werden in
dem Gerätefunktionsblock ausgeführt. Bei einer bevorzugten Ausführungsform sind alle Zustandsmaschinen durch einen
12 MHz-USB-Taktgeber getaktet. Alle Datenübertragungen arbeiten mit einem Kernbus-Taktgeber. Teile des
ADGen-Blocks und alle DALM-Blöcke arbeiten mit dem Kernbus-Taktgeber. Alle anderen Blöcke des Endpunkt-Controllers
nutzen ausschließlich den lokalen 12 MHz-Taktgeber. Datenbytes zwischen den Domänen werden an
der MAC-Nutzerschnittstelle mit einem asynchronen Handshake für jedes übertragene Byte synchronisiert.
Bei einer bevorzugten Ausführung minimiert der Controller die Anzahl der verlangten Speicherzugriffe. Nur auf den
Empfang eines Tokens wird ein Speicherzugriff auf die Endpunkt-Anordnung verlangt. Ein einzelner Doppelwortzugriff
ist zusammen mit einem vorhandenen Endpunkt-Zustand ausreichend, um dem Endpunktkanal die Abarbeitung
der Host-Anfrage zu erlauben. Dieser Zugriff liest die Standort- und Größeninformation für die Datenübertragung.
Die Datenübertragung läuft in aufeinanderfolgenden Doppelwort-Lese- und Doppelwort-Schreib-Operationen
ab. Das Modul hat für die Übertragung die höchste Priorität auf dem Kernbus, und die Übertragungsrate ist beträchtlich
höher als jene auf dem USB. Deshalb besteht, abgesehen von einem Extrawort zur Überlappung späterer Zugriffe mit
dem gegenwärtigen Zugriff, ein minimaler Bedarf an der Pufferung von Daten innerhalb des Endpunkt-Controllers.
Ein Byte-Zähler registriert die Anzahl der übertragenen Bytes. Der letzte Zugriff einer Übertragung kann einen teilweisen
Lese- oder Schreibspeicher verlangen. Das teilweise
Schreiben beim letzten Zugriff ist durch die letzte Byte-Anzahl
bestimmt.
Am Ende einer Übertragung wird das gegenwärtige Steuerwort mit dem Status der Übertragung geschrieben und das
andere Steuerwort für diesen Endpunkt wird gelesen, um zu überprüfen, ob ein anderer Puffer vorbereitet war. Nach der
Steuerwort-Operation wird der Zustand des Endpunktkanals aktualisiert.
Durch eine Kombination von Hardware und Software unterstützt das UNIM alle drei für USBs definierte Synchronisationsklassen:
Asynchron, synchron und adaptiv. Der Endpunkt-Controller liefert Hardware-Unterstützung für die
Überwachung des USB-I KHz-Bustaktgebers relativ zu einer externen Referenz, wie einer 8 KHz-Referenz, und für
die Überwachung der Qualität und Konsistenz des USB-I KHz-Bustaktgebers. Ansteigende Flanken eines externen
Referenz-Taktgebers werden in dem Referenz-Zählregister gezählt. Dieses kann für einen Vergleich mit der USB-Frame-Zahl
genutzt werden. Die Frequenzdifferenz zwischen dem Referenz-Taktgeber und dem USB-Taktgeber
kann dem Host in Paketen übermittelt werden, so daß der Host die USB-Bustaktgeber-Frequenz anpassen kann, wodurch
die USB-Referenz an den Referenz-Taktgeber gebunden werden kann.
Der Endpunkt-Controller bewahrt auch den Status, um anzuzeigen, wann er an den USB-I KHz-Bustaktgeber gebunden
ist, und wann durch ein Verpassen oder ein inkorrektes StartOfJFrame-Paket eine Unstetigkeit des USB-Bustaktgebers
auftritt. Dieses wird von der Software genutzt, um das Warten von isochronen Paketen anzupassen. Die gegenwärtige
Frame-Zahl wird von dem Endpunkt-Controller genutzt, um zu bestimmen, welcher isochrone Puffer als
nächstes zu übertragen ist.
Serielle Schnittstellen-Maschine
In einer bevorzugten Ausführungsform ist die serielle USB-Schnittstellen-Maschine (SIE) aus einem PHY- und einem
MAC-Niveau zusammengesetzt. Das PHY-Niveau umfaßt einen digitalen Wiederaufnahme-Taktgeber-Schaftkreis,
einen digitalen Pannenfilter End_Of_Packet-Erkennungsschaltungen und Logik zum Auffüllen und Entnehmen
von Bits. Das MAC-Niveau umfaßt die Paketformatierung, die CRC-Erzeugung und -Überprüfung und die Endpunkt-Adresserkennung,
und liefert die notwendige Steuerung, um die durch den EPC für den speziellen Endpunktkanal bestimmten
NAK-, ACK- und STALL-Antworten zu geben. Die SIE ist ebenfalls für die Erkennung und die Meldung
von Ereignissen verantwortlich, die im Zusammenhang mit der Erkennung von USB-spezifischen Ereignissen, wie "Reset",
"Suspend" und "Resume" auftreten. Die Senderausgänge des UNIM-Moduls zum Sender-Empfänger sind angepaßt
(unter 1 ns), um Schrägverzerrungen der USB-Signale zu minimieren.
55 Endpunktkanal-Controller
Bei einer bevorzugten Ausführungsform liefert der Endpunktkanal-Controller
(EPC) die Schnittstelle für die USB-Funktionsendpunkte. Bei einer bevorzugten Ausführungsform
können zu jeder Zeit bis zu 16 solcher Endpunktkanäle
unterstützt werden, wobei jeder dieselbe Funktionsadresse aufweist. Der EPC bewahrt separate Zustandsinformationen
für jeden Endpunktkanal.
Zustandsinformationen für eine unverzügliche Entscheidung (beispielsweise das Antworten mit einem NAK- oder
einem STALL-Handshake) wird für jeden Endpunktkanal zu allen Zeiten in dem Modul bewahrt. Andere für den Betrieb
des Endpunktes notwendige Informationen werden in einer Endpunkt-Anordnung im Speicher aufbewahrt. Bei einer
bevorzugten Ausführungsform ist zu jeder beliebigen Zeit nur ein Endpunktkanal aktiv, wodurch der Doppelpuffer
und die Endpunktkanal-Zustandsmaschine von allen Endpunktkanälen gemeinsam genutzt werden können.
Für IN-Token ist der EPC für die Übertragung der Daten
von dem bestimmten Puffer zu dem Host verantwortlich. Für OUT-Token ist der EPC für die Übertragung der Daten
von dem Host zu dem bestimmten Puffer verantwortlich. Um mehr Flexibilität bei der Zuordnung von Puffern zu einem
Endpunktkanal zu ermöglichen, ist bei einer bevorzugten Ausführungsform ein Doppelpuffer-Schema an jedem
Endpunktkanal erlaubt. Dieses erlaubt dem EPC eine unverzügliche Antwort auf alle Transaktionen zu diesem Modul,
ohne die NAKs neu zu sortieren.
Daten werden für OUT-Übertragungen nicht in den Speicher übertragen, wenn die Toggle (Umschalt-)-Zahl in dem
Paket-Identifizierer PID (d. h., 0 für DATAO und 1 für DATAl) nicht mit dem gegenwärtigen Steuerwort-Zeiger
CWP übereinstimmt. Wenn der Pufferzustand OCMP oder ORDY ist, dann wird trotzdem ein ACK am Ende der Übertragung
gesendet, und der CWP wird nicht aktualisiert.
Im Fall einer fehlenden Quittierung IMAK kann ein neuer Endpunktkanal (EPP)-Zustand definiert werden. Aus
dem IACT-Zustand kann in diesen Zustand übergegangen werden, wenn dieses ein EPP-Befehl ist, und wenn der Host
nicht mit einem ACK geantwortet hat, oder wenn des Host's ACK auf seinem Weg zu dem Knoten unbrauchbar gemacht
wurde. In beiden Fällen wird der Pufferstatus in IWT geschrieben, und der CWP wird nicht inkrementiert.
Der Endpunkt wird die Daten erneut senden, wenn in dem IMAK-Zustand ein IN-Token empfangen wird.
Wenn im IMAK-Zustand ein OUT-Token empfangen wird, bestätigt dies, daß das vorhergehende ACK auf seinem
Weg zurück zu dem Knoten unbrauchbar gemacht wurde. In der momentanen OUT-Übertragung wird ein NAK erzeugt.
Die Daten werden ignoriert (aber der ICMP-Pufferstatus wird geschrieben). Der CWP wird invertiert, und das Steuerwort
wird gelesen, was seinerseits eine Aktualisierung des Zustandes des Endpunktes verursacht (die normale Status-Verarbeitung).
Der Pufferstatus sollte entweder O_RDY oder SKTP (siehe unten) sein.
Wenn der Pufferstatus OJRDY ist, wird das nächste Datenpaket in einer normalen Operation empfangen. Wenn der
Pufferstatus SKIP ist, wird ein anderes NAK gesendet werden. Daten werden bei dem gegenwärtigen CWP erneut gesendet.
Bei einer bevorzugten Ausführungsform werden alle von den Endpunktkanälen während der Datenübertragungen genutzten
Informationen in der Endpunkt-Anordnung, welche im RAM angeordnet ist, bewahrt. Diese Anordnung ist mittels
der Endpunktkanäle von der Basis ausgehend indiziert, welche in dem Basis-Adressregister der Endpunkt-Anordnung
definiert ist (EABAR). Diese Anordnung enthält zwei Doppelwörter pro Endpunkt. Jedes Doppelwort ist ein Steuerwort,
welches Befehls- und Statusinformationen für den Endpunktkanal enthält, beispielsweise einen Zeiger auf den
Anfang des Puffers, den Bereich des Puffers, den Zustand des Puffers oder andere relevante Parameter.
Der Pufferzustand definiert, ob der Puffer für Eingangsoder Ausgangsübertragungen genutzt werden soll, ob auf
ihn im Moment zugegriffen wird, oder ob die verlangte Operation beendet worden ist.
Wenn eine IN- oder OUT-Übertragung von einem Endpunktkanal mit einem Puffer verlangt wird, wird das passende
Steuerwort gelesen. Das Steuerwort teilt dem Endpunkt-Controller mit, wie die Transaktion zu beenden ist.
Am Ende einer Transaktion wird das Steuerwort mit einem Status geschrieben, welcher von der Software als ein Indikator
benutzt wird, diesen Puffer freizugeben und einen neuen zu liefern.
5 Steuerwort
Bei einer bevorzugten Ausführungsform enthält die Endpunktkanal-Anordnung
32 Steuerworte, zwei für jeden Endpunktkanal. Die Endpunktkanal-Anordnung ist im Speicher
auf einer Adresse angeordnet, auf welche ein Endpunkt-Anordnungs-Basisadressregister
EABAR zeigt. Diese Adresse muß 128 Byte aufweisen (d. h. die 7 LSBs der Adresse sind
0). Die Endpunktkanal-Anordnung ist mittels der 4-Bit-Endpunktkanal-Zahl
EPN indiziert. Das Steuerwort, auf welches zugegriffen wird, ist mittels des 1-Bit-Endpunktkanal-Steuerwortzeigers
CWP bestimmt. Zusammen erzeugen das 25-Bit-EABAR, das 4-Bit-EPN und ein Bit CW eine 32-Bit-Adresse,
welche auf eine Doppelwort (32-Bit)-Grenze aufgefüllt ist, und werden genutzt, um auf das 32-Bit-Steuerwort
zuzugreifen.
Das 32-Bit-Steuerwort enthält alle Informationen, die notwendig sind, diesen Endpunktkanal zu betreiben, wenn
er aktiv ist. Es gibt zwei solche Zugänge für jeden Endpunktkanal. Das Steuerwort, auf welches als nächstes zügegriffen
werden soll, ist durch den Wert des Endpunktkanal-Steuerwort-Zeigers CWP bestimmt. Unmittelbar, nachdem
ein IN-, OUT- oder SETUP-Token an einem im Moment im Bereitschaftszustand befindlichen Endpunktkanal empfangen
wurde, wird das Steuerwort des ausgewählten Endpunktkanals am gegenwärtigen Steuerwort-Zeiger gelesen,
um zu bestimmen, wie auf den Token zu antworten ist. Nachdem der Fertigstellungsstatus am Ende einer Übertragung
geschrieben wurde, wird das Steuerwort mit dem gegenwärtigen Status aktualisiert, der CWP wird inkrementiert,
und das andere Steuerwort wird gelesen. Wenn der Zwischenstatus geschrieben wurde, wird nur das am meisten
signifikante Byte des Steuerworts aktualisiert. Das Format des Steuerwortes ist im folgenden gezeigt:
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ß)
Paketabschluß)
10 Interrupt on Packet Error JE (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 betrachtet 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 ΓΝ-Daten wird dieses gesetzt, wenn ein Pufferfehler auftritt, und CWTE 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.
Das Toggle Enable Bit TE (Umschaltaktivierungs-Bit) wird genutzt, um den Datenpaket-Identifizierungs (PID)-Wert
(DATAO/DATAl) zu erzeugen, und um diesen mit dem Steuerwort-Zeiger zu vergleichen. Es kann die folgenden
Werte annehmen:
0: Der Daten-Toggle-PID wird bei einer OUT-Transaktion
nicht überprüft, und wird auf der Basis des gegenwärtigen Wertes des CWPs als Antwort auf die HM-Token erzeugt.
Der CWP wird nach jeder Transaktion inkrementiert (invertiert), auch wenn ein ACK nicht empfangen wurde. Für isochrone
Endpunkte werden OUT-Daten solange nicht in den Speicher geschrieben, bis der CWP gleich dem letzten signifikanten
Bit der Frame-Zahl, FNR.FN(O), ist. Dieses hat keine Auswirkungen auf das Senden der Daten als Reaktion
auf IN-Token. Das Datenumschalten sollte nicht für Puffer aktiviert werden, welche für den Empfang von Daten, die
mit einem SETUP-Token gesendet werden, zugeordnet sind. 1: Der Daten-Toggle-PID wird bei einer OUT-Transaktion
überprüft und wird auf der Basis des gegenwärtigen Wertes des CWPs als Antwort auf IN-Token erzeugt. Für OUT-Transaktionen
führt dies zum Senden eines ACK als Antwort auf OUT-Pakete, dessen PID-Wert (DATAO/DATAl)
nicht mit dem CWP übereinstimmt. Für HM-Transaktionen
wird der CWP nach jeder Transaktion nur inkrementiert (invertiert), wenn ein ACK-Handshake in der Antwortzeit zurückgesendet
wird. Für isochrone Endpunkte werden die OUT-Daten immer in den Speicher geschrieben. Wenn
FNR.FN(O) nicht gleich dem CWP ist, wird der isochrone Synchronisationsfehler (SYNE)-Pufferstatus zurückgeschrieben.
Für IN-Transaktionen erlaubt TE, den übertragenen Daten-PID-Wert
zu verändern, auch wenn ein gültiges ACK nicht innerhalb der Antwortzeit empfangen wurde. Dieses
kann für bestimmte Anwendungen eines Interrupt-HM-Endpunktes
von Bedeutung sein.
Für OUT-Transaktionen kann TE genutzt werden, um zu bestimmen, ob bei der Entscheidung über die Akzeptanz des
Paketes der DATAO- oder DATAl-PID überprüft wird, oder nicht.
Dieses kann für einen Interrupt-OUT-Endpunkt von Bedeutung
sein, wobei die jüngsten Daten empfangen sein sollten.
Das Pufferrundungs-Bit BR zeigt für Ausgangstransaktionen an, ob es erlaubt ist, Puffer mit einem Umfang zu haben,
der vom Umfang des empfangenen Datenpaketes verschieden ist. Es kann die folgenden Werte aufweisen:
0: Das Datenpaket sollte exakt den definierten Datenpuffer auffüllen. Wenn das Paket nicht exakt in den Puffer paßt,
wird angezeigt, daß der Puffer überläuft oder nicht vollständig ausgefüllt ist.
1: Das Datenpaket kann kleiner als der definierte Puffer sein,
ohne daß eine Fehlerbedingung an dem Endpunkt verursacht wird.
Dieses Feld zeigt den Wert des empfangenen PIDs an, wenn es zusammen mit einem Output Complete (OCMP)-
oder Datenfehler (DATE)-Pufferstatus gelesen wird: 0 für DATAO und 1 für DATAl.
Das Pufferseiten-Bit BP kann die folgenden Werte annehmen:
0: Nutze die Pufferseite A als die obere Adresse des Eingangs-/Ausgangspuffers.
1: Nutze die Pufferseite B als die obere Adresse des Eingangs-/Ausgangspuffers.
Die Puffer-Adressen-Bits BA halten 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.
Die Byte-Zähl-Bits BC halten den Umfang des zu nutzenden
Datenpuffers. Die Puffer beginnen an einer geraden Doppelwort-Grenze und können an jeder Byte-Grenze enden.
Für IN-Transaktionen zeigt dies den Umfang der zu übertragenden Daten an. Für OUT-Transaktionen zeigt dies
den Umfang des Puffers an, in welchem die Daten empfangen werden können. Der Normalwert des Byte-Zählers ist
null. Am Ende von allen abgeschlossenen Übertragungen wird der Restwert des Byte-Zählers geschrieben. Am Ende
von nicht abgeschlossenen Übertragungen, z. B., wenn der Status auf Eingangs- oder Ausgangswarten geschrieben ist,
wird dieses Feld nicht überschrieben.
Register
Bei einer bevorzugten Ausführungsform sind die folgenden vier Register für die Erfindung von Bedeutung: Das
Endpunkt-Befehl-Register, das USB-Datenregister, das Puffer-Seiten-A-Register
und das Puffer-Seiten-B-Register.
Bei einer bevorzugten Ausführungsform weist das Endpunkt-Befehl-Register
(ECR) die Breite eines Wortes auf und ist ein Lese-/Schreibregister.
Das ECR wird genutzt, um Befehle an einem spezifizierten Endpunkt auszuführen. Durch ein Reset wird das Register
geleert. Das ECR-Registerformat ist im folgenden dargestellt:
65
65
Bits Funktionsbezeichnung
15-8
(Reserviert)
Bits Funktionsbezeichnung
T-A Endpoint Pipe Number (EPN) (Endpunktkanal-
Zahl)
3-0 Endpoint Command (CMD) (Endpunkt-Befehl)
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 werden
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 IJTDL ist. Dieser Befehl wird ausgegeben,
nachdem ein Steuerwort mit einem Input Ready-Pufferzustand IRDY 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 IIDL 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 ISJRDY zu gehen, wenn er
momentan in dem Input Idle-Zustand IIDL ist. Dieser Befehl wird ausgegeben, nachdem ein Steuerwort mit dem Input
Ready-Puffer-Zustand in die Endpunkt-Anordnung für den entsprechenden Endpunkt geschrieben wurde. Dieser
Befehl veranlaßt nicht, daß das Steuerwort in dem Speicher gelesen wird; es erlaubt hingegen, daß es als Antwort auf
den Empfang eines HM-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 IIDL 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
OJRDY zu gehen, wenn er gegenwärtig in dem Output Idle-Zustand OJDL 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 Stalloder
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 OSJDL zu gehen. Der Steuerwort-Zeiger
führt den spezifizierten Endpunkt wird auf 0 gesetzt. Wenn der gegenwartige 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.
Olli: Output Isochronous Ready (CMD.OSRDY). Dieser
Wert veranlaßt den spezifizierten Endpunktkanal in den Output Isochronous Ready-Zustand OSJRDY zu gehen,
wenn dessen momentaner Zustand der Output Isochronous Idle-Zustand OSJDL 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
SJRDY 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. Wert
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 Umschal- H
ten des Steuerwort-Zeigers. Dieses wird im Zusammenhang 5
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.
Zustand
Output Idle OJDL
Output Ready OJlDY
Output Active O ACT
Setup Active S_ACT
Output Isochronous Idle OSJTDL
Output Isochronous Ready OSJiDY
Output Isochronous Active OS_ACT
Bei einer bevorzugten Ausführungsform weist das USB-Datenregister (UDR) die Breite eines Wortes auf, und ist als
Lese-/Schreibregister ausgebildet. Lesezugriffe sind in allen Speicherstellen erlaubt. Das Datenregister wird mit Daten
geladen, die für das Register gelesen wurden, welches zu jeder Zeit mittels eines USB-Indexregisters (UIR) ausgewählt
wird. Das Schreiben auf des Registers ist nur in dem USB-Hub-Register erlaubt, wenn die Auswahlbits des UIR
(UIR.SEL) einen Wert von 2 haben. Ein Statusbit ist in Bit 15 des UIR definiert, um anzuzeigen, daß eine Schreiboperation
erfolgreich ausgeführt wurde. Dieses ist nur dann notwendig, wenn eine Hub-Funktionalität umfaßt ist.
Der für die Erfindung in der vorliegenden Anwendung relevante Teil des UDR 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-Zu-
stand)
Bei einer bevorzugten Ausführungsform ist zu jeder Zeit nur ein Endpunktkanal aktiv.
Bei einer bevorzugten Ausführungsform weist das Puffer-Seiten-A-Register
(BPA) die Breite eines Doppelwortes auf, und ist als Lese-/Schreibspeicher ausgebildet. Die oberen
21 Bits des BPA definieren eine 2K Byte Seite, in welcher Puffer für die Datenübertragung definiert sind. Diese Pufferseite
ist mittels des Pufferseiten-Auswählbit-Wertes in dem Steuerwort CW.BP ist bestimmt, welches in den Speicher
der Endpunkt-Anordnung geschrieben ist. Auf ein Reset wird das Register geleert. Das BPA-Registerformat ist wie
folgt:
Bits
31-11
10-0
10-0
35
40 Funktionsbezeichnung
BPA
00000000000
00000000000
Bei einer bevorzugten Ausführung weist das Puffer-Seiten-B-Register
(BPB) die Breite eines Doppelwortes auf, und ist als ein Lese-/Schreibregister ausgebildet. Die oberen
21 Bit des BPB definieren eine 2K Byte Seite, in welcher Puffer für die Datenübertragung definiert sind. Diese Pufferseite
ist mittels des Pufferseiten-Auswahlbit-Wertes in dem Steuerwort CW.BP bestimmt, welches in den Speicher der
Endpunkt-Anordnung geschrieben ist. Auf ein Reset wird das Register entleert. Das BPB-Registerformat ist wie folgt:
Bits Funktionsbezeichnung
31-11 BPB
10-0 00000000000
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
60
65
Werte | annehmen: |
Wert | Zustand |
0 | Disabled DIS |
1 | Input Idle IJDL |
2 | Input Ready LRDY |
3 | Input Active I ACT |
4 | Stalled HALT |
5 | Input Missed ACK IjVlAK |
6 | Input Isochronous Ready ISJiDY |
7 | Input Isochronous Active IS_ACT |
8 | Setup Ready SJiDY |
Endpunktkanal-Zustände
Bei einer bevorzugten Ausführungsform kann ein Endpunkt die folgenden Zustände aufweisen. Um den Betrieb
und die Steuerung aufrechtzuerhalten, bewahrt jeder Endpunktkanal einen Zustand mit definierten Bedingungen für
die Übertragung zwischen dem Zustand, was eine implizite Hardware/Software-Synchronisation umfaßt. Ü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.
Fig. 6 zeigt die vereinfachte Endpunktkanal-Zustandsmaschine
für die Handhabung von IN- und OUT-Transaktionen. Die Handhabung von Steuer-Lese- und Steuer-Schreib-Transaktionen
erfolgt in einer ähnlichen Weise.
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 Fig. 6 gezeigt ist, kann ein Endpunktkanal die folgenden
Zustände aufweisen:
Disable. Der DISABLE-Zustand 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: Der HALT-Zustand 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 blokkiert 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.
Input Idle IJTDL. In diesem Zustand erwartet der Endpunkt,
daß bald ein Puffer zugeordnet wird. Ein NAK-Handshake wird als Antwort auf einen HM-Token, welcher diesem
Endpunktkanal zugeordnet ist, zurückgesendet. Für OUT-Token wird von diesem Endpunktkanal keine Antwort zurückgesendet.
Input Ready I RD Y. Dieser Zustand 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-An-Ordnung
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 DATAO übertragen, wenn der CWP 0 ist und wird als DATAl übertragen, wenn der CWP
gleich 1 ist.
Input Active IACT. Dieser Zustand 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.
Input Isochronous Ready ISJRDY Dieser Zustand 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 HM-Token zurückzusenden
sind. Der PID-Wert wird unabhängig von dem Wert des CWP immer als DATAO übertragen.
Input Isochronous Active IS_ACT. Dieser Zustand 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 Anschluß 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 Idle OJTDL. In diesem Zustand 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 HM-Token auf diesem Endpunktkanal wird keine Antwort
zurückgesendet.
Output Ready OJRDY. Dieser Zustand 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 OJTDL-Zustand eingenommen werden, nachdem
das passende Wort in die Endpunkt-Anordnung geschrieben wurde.
Output Active 0_ACT. Dieser Zustand 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-Blokkier-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.
Output Isochronous Idle OSJDL. In diesem Zustand 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 OSJRDY Dieser Zustand 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 OSRD Y-Befehl aus dem OS JTDL-Zustand eingenommen werden, nachdem
das geeignete Wort in die Endpunktanordnung ge-
schrieben worden ist.
Output Isochronous Active OS_ACT. Dieser Zustand 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.
Setup Ready SJRDY Dieser Zustand 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 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 Art der Steuerübertragung und dem gelesenen Pufferzustand
ab, und basiert weiterhin auf dem Pufferstatus.
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 bis zu zwei Puffer jedem Endpunkt 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.
60 Bulk-Endpunkt-Operation
Bei einer bevorzugten Ausführungsform arbeiten Bulk (Vielfach)-Endpunkte ähnlich zu Interrupt-Endpunkten, mit
der Ausnahme, daß typischerweise große Datenübertragungen eingeschlossen sind, wobei diese in IN- und OUT-Richtung
auftreten. Für Bulk-Endpunkte folgt immer das Umschaltprotokoll, so daß in allen Steuerwörtern TE gesetzt
wird. Ein bestimmter Bulk-Endpunkt wird entweder in Eingangs- oder Ausgangsrichtung genutzt. Wenn ein Bulk-Endpunkt
zunächst initialisiert wird, wird an die geeignete Endpunktkanal-Zahl (ECR^I/OENB^PN)) ein Input-Enable-
oder Output-Enable-Befehl gegeben.
Für die als Eingänge genutzten Endpunkte werden Daten, wenn diese verfügbar sind, auf einen Puffer geschrieben,
wird ein Steuerwort mit einem IRDY-Zustand beschrieben und wird TE gesetzt. Danach wird ein IRDY-Befehl ausgeführt.
Zu jeder Zeit können höchstens zwei Datenpuffer an einem Endpunktkanal hängen. Dieses erlaubt ein Doppelpuffer-Schema,
wenn es notwendig ist, daß Senden irgendwelcher NAKs während einer großen Datenübertragung zu
vermeiden. Die Synchronisation der Software erfolgt mittels des Überprüfens des Puffer-Zustandes. Nur ein vollständiger
Puffer-Zustand kann überschrieben werden.
Für die als Ausgänge genutzten Endpunkte muß ein Puffer vorbereitet werden, in welchen die Daten zu übertragen
sind. Wenn dieser Puffer verfügbar ist, wird ein Steuerwort mit einem Zeiger auf den Puffer in ein geeignetes Steuerwort
geschrieben. Das Toggle-Enable-Bit sollte in diesem Zusammenhang auch gesetzt werden. Es wird ein ORDY-Befehl
an den Endpunktkanal gegeben. Nachdem die Daten als Teil des Out-Tokens in diesem Puffer empfangen wurden,
wird das Steuerwort im Speicher aktualisiert. Wenn der Bereich des Datenpaketes nicht bekannt ist, sollte das Puffer-Rundungsbit
des Steuerwortes gesetzt sein. Dies ermöglicht es, Pakete zu empfangen, die kleiner als der Pufferbereich
sind. In diesem Fall wird kein Fehlerstatus geschrieben. Wenn das Puffer-Rundungsbit nicht gesetzt ist, werden
empfangene Pakete, welche den zugeordneten Puffer nicht exakt ausfüllen, mit einem Datenfehler-Status geschrieben.
Der Datenfehler-Status wird in allen Fällen geschrieben, wenn mehr Daten als erwartet an diesem Endpunkt empfangen
wurden. Wenn während des Empfangs dieser Daten ein Fehler erkannt wird, wird ein Zwischenpuffer-Zustand in
den Speicher zurückgeschrieben, und beim nächsten OUT-Token wird der Puffer noch einmal genutzt. D.h., daß die
Software nur mit der Bereitstellung von Puffern beschäftigt ist, in welchen Daten empfangen werden sollen, und nicht
mit der Kompliziertheit des Wiederholungsprotokolls.
Bei einer bevorzugten Ausführungsform führt der Endpunktkanal-Controller
zusammenfassend die folgenden Schritte aus. Erstens wird der ECR basierend auf dem gegenwärtigen
EPP-Zustand aktualisiert. Der ECR kann die Aktualisierung des Endpunktkanal-Zustandes veranlassen,
während ein anderer Endpunktkanal aktiv bleibt.
Als nächstes empfangt der Endpunkt einen Token. Die Adresse wird mit der funktionellen Adresse verglichen. Die
Endpunkt-Zahl EPN wird als ein Index in der Endpunktkanal-Abbildung genutzt. Die empfangene Endpunktkanal-Zahl
wird bestimmt. Der veränderbare Puffer-Zustand wird auf dem Stand des gegenwärtigen Zustandes des Puffers gehalten.
Der Pufferzustand kann während einer Transaktion dreimal aktualisiert werden, und der verbleibende Wert wird
dann zurück in das Steuerwort geschrieben. Dieser Wert kann später mit einem korrekteren Status überschrieben
werden.
Als nächstes liest der Endpunkt ein Steuerwort als Antwort auf den Token. Der Phase 1-Puffer-Zustand wird auf
IWT oder OWT gesetzt. In diesen Fällen wird das Steuerwort von dem Speicher gelesen, und wird anschließend genutzt,
um zu bestimmen, ob eine Datenübertragung zu beginnen ist, wobei die Adresse und der Bereich durch das
Steuerwort definiert sind. Weiterhin wird der nächste Wert des Puffer-Zustandes bestimmt. Dieser wird genutzt, um den
früher gesetzten Puffer-Zustand zu überschreiben. Wenn ein HM-Token empfangen wurde, werden Daten auf der Adresse
Claims (24)
1. Vorrichtung zum Senden von Daten auf einem nicht-isochronen Endpunktkanal von einem USB-Endpunkt
zu einem USB-Host, aufweisend:
- ein erstes Datenspeicherelement;
- ein zweites Datenspeicherelement;
- einen Datenprozessor, der so konfiguriert ist, daß wenigstens eine erste Datenmenge in dem ersten
Datenspeicherelement und wenigstens eine zweite Datenmenge in dem zweiten Datenspeicherelement
erzeugt werden können;
- ein Zeiger-Datenspeicherelement, das so konfiguriert ist, daß es einen einem Datenspeicherelement
entsprechenden Zeiger enthalten kann; und
- einen Controller, der so konfiguriert ist, daß eine Datenmenge von einem USB-Endpunkt an
einen USB-Host auf einem USB-Endpunktkanal gesendet werden kann, und daß ein Signal empfangen
werden kann,
wobei der Datenprozessor die erste Datenmenge in dem ersten Datenspeicherelement und die zweite Datenmenge
in dem zweiten Datenspeicherelement erzeugt, und wobei der Controller in dem Zeiger-Datenspeicherelement
einen ersten Zeiger auf das erste Datenspeicherelement erzeugt, die erste Datenmenge sendet,
und anschließend ein erstes Signal empfängt, welches ein Host-Signal von dem USB-Host oder ein Unterbrechungssignal
ist;
wobei der Controller die erste Datenmenge erneut sendet, bis das Host-Signal empfangen ist; und
wobei der Controller in dem Zeiger-Datenspeicherelement einen zweiten Zeiger auf das zweite Datenspeicherelement erzeugt und die zweite Datenmenge sendet, wenn das Host-Signal empfangen worden ist.
wobei der Controller in dem Zeiger-Datenspeicherelement einen zweiten Zeiger auf das zweite Datenspeicherelement erzeugt und die zweite Datenmenge sendet, wenn das Host-Signal empfangen worden ist.
2. Vorrichtung nach Anspruch 1, wobei der Endpunktkanal als wenigstens einer von mehreren Endpunktkanälen
ausgebildet ist, wobei der Endpunkt als wenigstens einer von mehreren Endpunkten ausgebildet ist,
und wobei das erste Datenspeicherelement und das zweite Datenspeicherelement von den mehreren Endpunkten
gemeinsam genutzt werden können.
3. Vorrichtung nach Anspruch 1, wobei der Endpunktkanal einer von 16 Endpunktkanälen ist, wobei der
Endpunkt einer von 16 Endpunkten ist, und wobei das erste Datenspeicherelement und das zweite Datenspeicherelement
von den 16 Endpunkten gemeinsam genutzt werden kann.
4. Vorrichtung nach Anspruch 1, wobei das erste Datenspeicherelement
und das zweite Datenspeicherelement Puffer umfassen, die einen Doppelpuffer bilden.
5. Vorrichtung nach Anspruch 1, wobei das Host-Signal als ein Quittiersignal ausgebildet ist.
6. Vorrichtung zum Senden von Daten von einem USB-Endpunkt an einen USB-Host auf einem nichtisochronen Endpunktkanal, aufweisend:
- ein erstes Datenspeicherelement;
- ein zweites Datenspeicherelement;
- einen Datenprozessor, der so konfiguriert ist, daß wenigstens eine erste Datenmenge in dem ersten
Datenspeicherelement und wenigstens eine zweite Datenmenge in dem zweiten Datenspeicherelement
erzeugt werden können;
- ein Zeiger-Datenspeicherelement, das so konfiguriert ist, daß es einen einem Datenspeicherelement
entsprechenden Zeiger enthalten kann; und
- einen Controller, der so konfiguriert ist, daß eine Datenmenge von einem USB-Endpunkt an
einen USB-Host auf einem USB-Endpunktkanal gesendet werden kann, und daß ein Signal empfangen
werden kann,
wobei der Datenprozessor die erste Datenmenge in dem ersten Datenspeicherelement und die zweite Datenmenge
in dem zweiten Datenspeicherelement erzeugt, und wobei der Controller in dem Zeiger-Datenspeicherelement
einen ersten Zeiger auf das erste Datenspeicherelement erzeugt, die erste Datenmenge sendet,
und anschließend ein erstes Signal empfängt, welches ein Host-Signal von dem USB-Host oder ein Unterbrechungssignal
ist;
wobei der Controller die erste Datenmenge erneut sendet, bis das Host-Signal empfangen wurde;
wobei der Datenprozessor eine dritte Datenmenge in dem ersten Datenspeicherelement erzeugt, wenn das Host-Signal empfangen wurde, und wobei der Controller in dem Zeiger-Datenspeicherelement einen zweiten Zeiger auf das zweite Datenspeicherelement erzeugt, die zweite Datenmenge sendet, und anschließend ein zweites Signal empfängt, das ein zweites Host-Signal von dem USB-Host oder ein zweites Unterbrechungs-
wobei der Datenprozessor eine dritte Datenmenge in dem ersten Datenspeicherelement erzeugt, wenn das Host-Signal empfangen wurde, und wobei der Controller in dem Zeiger-Datenspeicherelement einen zweiten Zeiger auf das zweite Datenspeicherelement erzeugt, die zweite Datenmenge sendet, und anschließend ein zweites Signal empfängt, das ein zweites Host-Signal von dem USB-Host oder ein zweites Unterbrechungs-
signal ist;
wobei der Controller die zweite Datenmenge erneut sendet, bis das zweite Host-Signal empfangen wurde;
und
wobei der Controller in dem Zeiger-Datenspeicherelement einen dritten Zeiger auf das erste Datenspeicherelement
erzeugt, wenn das zweite Host-Signal empfangen wurde, und wobei der Controller die dritte Datenmenge
sendet.
7. Vorrichtung nach Anspruch 6, wobei der Endpunktkanal als wenigstens einer von mehreren Endpunktkanälen
ausgebildet ist, wobei der Endpunkt als wenigstens einer von mehreren Endpunkten ausgebildet ist,
und wobei das erste Datenspeicherelement und das zweite Datenspeicherelement von den mehreren Endpunkten
gemeinsam genutzt werden können.
8. Vorrichtung nach Anspruch 6, wobei der Endpunktkanal einer von 16 Endpunktkanälen ist, wobei der
Endpunkt einer von 16 Endpunkten ist, und wobei das erste Datenspeicherelement und das zweite Datenspeicherelement
von den 16 Endpunkten gemeinsam genutzt werden kann.
9. Vorrichtung nach Anspruch 6, wobei das erste Datenspeicherelement
und das zweite Datenspeicherelement Puffer umfassen, die einen Doppelpuffer bilden.
10. Vorrichtung nach Anspruch 6, wobei das Host-Signal und das zweite Host-Signal jeweils als ein Quittiersignal
ausgebildet sind.
11. Vorrichtung zum Empfangen von Daten von einem USB-Host auf einem nicht-isochronen Endpunktkanal
an einem USB-Endpunkt, aufweisend:
- ein erstes Datenspeicherelement; ein zweites Datenspeicherelement;
- einen Datenprozessor, der so konfiguriert ist, daß aus wenigstens einer ersten Datenmenge in
dem ersten Datenspeicherelement Daten erzeugt werden können;
- ein Zeiger-Datenspeicherelement, das so konfiguriert ist, daß es einen einem Datenspeicherelement
entsprechenden Zeiger enthalten kann; und
- einen Controller, der so konfiguriert ist, daß an einem USB-Endpunkt eine Datenmenge von einem
USB-Host auf einem USB-Endpunktkanal empfangen werden kann, und daß ein Fehler erkannt
werden kann,
wobei der Controller in dem Zeiger-Datenspeicherelement einen ersten Zeiger auf das erste Datenspeicherelement
erzeugt, die erste Datenmenge in das erste Datenspeicherelement empfängt und anschließend erkennt,
ob ein erster Fehler aufgetreten ist; wobei der Controller den Empfang fortsetzt, wenn der
erste Fehler erkannt worden ist; und
wobei der Datenprozessor Daten aus der ersten Datenmenge erzeugt, sofern der erste Fehler nicht erkannt worden ist, und wobei der Controller in dem Zeiger-Datenspeicherelement einen zweiten Zeiger auf das zweite Datenspeicherelement erzeugt und die zweite Datenmenge in das zweite Datenspeicherelement empfängt.
wobei der Datenprozessor Daten aus der ersten Datenmenge erzeugt, sofern der erste Fehler nicht erkannt worden ist, und wobei der Controller in dem Zeiger-Datenspeicherelement einen zweiten Zeiger auf das zweite Datenspeicherelement erzeugt und die zweite Datenmenge in das zweite Datenspeicherelement empfängt.
12. Vorrichtung nach Anspruch 11, wobei der erste Fehler ein CRC-Fehler, ein Bit-Stuff-Fehler oder ein
Puffer-Fehler ist.
13. Vorrichtung nach Anspruch 11, wobei der Endpunktkanal als wenigstens einer von mehreren Endpunktkanälen
ausgebildet ist, wobei der Endpunkt als wenigstens einer von mehreren Endpunkten ausgebildet
ist, und wobei das erste Datenspeicherelement und das zweite Datenspeicherelement von den mehreren
Endpunkten gemeinsam genutzt werden können.
14. Vorrichtung nach Anspruch 11, wobei der Endpunktkanal einer von 16 Endpunktkanälen ist, wobei
der Endpunkt einer von 16 Endpunkten ist, und wobei das erste Datenspeicherelement und das zweite Datenspeicherelement
von den 16 Endpunkten gemeinsam genutzt werden können.
15. Vorrichtung nach Anspruch 11, wobei das erste Datenspeicherelement und das zweite Datenspeicherelement
Puffer umfassen, die einen Doppelpuffer bilden.
16. Vorrichtung zum Empfangen von Daten von einem USB-Host auf einem nicht-isochronem Endpunktkanal
an einem USB-Endpunkt, aufweisend:
- ein erstes Datenspeicherelement;
- ein zweites Datenspeicherelement;
- einen Datenprozessor, der so konfiguriert ist, daß aus wenigstens einer ersten Datenmenge in
dem ersten Datenspeicherelement und aus wenigstens einer zweiten Datenmenge in dem zweiten
Datenspeicherelement Daten erzeugt werden können;
- ein Zeiger-Datenspeicherelement, das so konfiguriert ist, daß es einen einem Datenspeicherelement
entsprechenden Zeiger enthalten kann; und
- einen Controller, der so konfiguriert ist, daß an einem USB-Endpunkt eine Datenmenge von einem
USB-Host auf einem USB-Endpunktkanal empfangen werden kann, und daß ein Fehler erkannt
werden kann;
wobei der Controller in dem Zeiger-Datenspeicherelement einen ersten Zeiger auf das erste Datenspeicherelement
erzeugt, die erste Datenmenge in das erste Datenspeicherelement empfangt, und anschließend erkennt,
ob ein erster Fehler aufgetreten ist;
wobei der Controller den Empfang fortsetzt, wenn der erste Fehler erkannt worden ist;
wobei der Controller den Empfang fortsetzt, wenn der erste Fehler erkannt worden ist;
wobei der Datenprozessor Daten aus der ersten Datenmenge erzeugt, sofern der erste Fehler nicht erkannt
worden ist, und wobei der Controller in dem Zeiger-Speicherelement einen zweiten Zeiger auf das zweite
Datenspeicherelement erzeugt, die zweite Datenmenge in das zweite Datenspeicherelement empfängt, und anschließend
erkennt, ob ein zweiter Fehler aufgetreten ist;
wobei der Controller den Empfang fortsetzt, wenn der zweite Fehler erkannt worden ist; und
wobei der Datenprozessor Daten aus der zweiten Datenmenge erzeugt, sofern der zweite Fehler nicht erkannt worden ist, und wobei der Controller in dem Zeiger-Datenspeicherelement einen dritten Zeiger auf das erste Datenspeicherelement erzeugt, und die dritte Datenmenge in das ersten Datenspeicherelement empfängt.
wobei der Datenprozessor Daten aus der zweiten Datenmenge erzeugt, sofern der zweite Fehler nicht erkannt worden ist, und wobei der Controller in dem Zeiger-Datenspeicherelement einen dritten Zeiger auf das erste Datenspeicherelement erzeugt, und die dritte Datenmenge in das ersten Datenspeicherelement empfängt.
17. Vorrichtung nach Anspruch 16, wobei der erste Fehler und/oder der zweite Fehler ein CRC-Fehler, ein
Bit-Stuff-Fehler oder ein Puffer-Fehler sind.
18. Vorrichtung nach Anspruch 16, wobei der Endpunktkanal als wenigstens einer von mehreren Endpunktkanälen
ausgebildet ist, wobei der Endpunkt als wenigstens einer von mehreren Endpunkten ausgebildet
ist, und wobei das erste Datenspeicherelement und das zweite Datenspeicherelement von den mehreren
Endpunkten gemeinsam genutzt werden können.
19. Vorrichtung nach Anspruch 16, wobei der Endpunktkanal einer von 16 Endpunktkanälen ist, wobei
der Endpunkt einer von 16 Endpunkten ist, und wobei das erste Datenspeicherelement und das zweite Daten-
speicherelement von den 16 Endpunkten gemeinsam genutzt werden können.
20. Vorrichtung nach Anspruch 16, wobei das erste Datenspeicherelement und das zweite Datenspeicherelement
Puffer umfassen, die einen Doppelpuffer bilden.
21. Verfahren zum Senden von Daten von einem USB-Endpunkt
an einen USB-Host auf einem nicht-isochronen Endpunktkanal, die folgenden Verfahrensschritte
aufweisend:
- Erzeugen einer ersten Datenmenge in einem ersten Datenspeicherelement und eines ersten Zeigers
in dem ersten Datenspeicherelement;
- Erzeugen einer zweiten Datenmenge in einem zweiten Datenspeicherelement;
- Senden der ersten Datenmenge von einem USB-Endpunkt an einen USB-Host, und anschließendes
Empfangen eines Signals, welches ein Host-Signal von dem USB-Host oder ein Unterbrechungssignal
ist;
- Fortsetzen des Sendens der ersten Datenmenge, bis das Host-Signal empfangen wird; und
- Erzeugen eines zweiten Zeigers auf das zweite Datenspeicherelement, wenn das Host-Signal
empfangen wurde, und anschließendes Senden der zweiten Datenmenge von dem USB-Endpunkt
an den USB-Host.
22. Verfahren zum Senden von Daten von einem USB-Endpunkt an einen USB-Host auf einem nicht-isochronen
Endpunktkanal, die folgenden Verfahrensschritte aufweisend:
- Erzeugen einer ersten Datenmenge in einem ersten Datenspeicherelement und eines ersten Zeigers
in dem ersten Datenspeicherelement;
- Erzeugen einer zweiten Datenmenge in einem zweiten Datenspeicherelement;
- Senden der ersten Datenmenge von einem USB-Endpunkt an einen USB-Host, und anschließendes
Empfangen eines Signals, welches ein Host-Signal von dem USB-Host oder ein Unterbrechungssignal
ist;
- Fortsetzen des Sendens der ersten Datenmenge, bis das Host-Signal empfangen wird; und
- Erzeugen eines zweiten Zeigers auf das zweite Datenspeicherelement und einer dritten Datenmenge
der Daten im ersten Datenspeicherelement, wenn das Host-Signal empfangen wurde, und anschließendes
Senden der zweiten Datenmenge von dem USB-Endpunkt an den USB-Host und Empfangen eines zweiten Signals, welches ein
zweites Host-Signal oder ein zweites Unterbrechungssignal ist,
- Fortsetzen des Sendens der zweiten Datenmenge, bis das zweite Host-Signal empfangen
wurde; und
- Erzeugen eines dritten Speichers auf das erste Datenspeicherelement, wenn das zweite Host-Signal
empfangen wurde, und anschließendes Senden der dritten Datenmenge von dem USB-Endpunkt
an den USB-Host.
23. Verfahren zum Empfangen von Daten von einem USB-Host auf einem nicht-isochronen Endpunktkanal
an einem USB-Endpunkt, die folgenden Schritte aufweisend:
- Erzeugen eines ersten Zeigers auf ein erstes Datenspeicherelement;
- Empfangen einer ersten Datenmenge von einem USB-Host in das erste Datenspeicherelement,
und anschließendes Erkennen, ob ein Fehler aufgetreten ist;
- Fortsetzen des Empfangs der ersten Datenmenge, wenn der Fehler erkannt wurde, und anschließendes
Erzeugen von Daten aus der ersten Datenmenge; und
- Erzeugen eines zweiten Zeigers auf das zweite Datenspeicherelement, und anschließendes Empfangen
einer zweiten Datenmenge von dem USB-Host in das zweite Datenspeicherelement, sofern
der Fehler nicht erkannt wurde.
24. Verfahren zum Empfangen von Daten von einem USB-Host auf einem nicht-isochronen Endpunktkanal
an einem USB-Endpunkt, die folgenden Schritte aufweisend:
- Erzeugen eines ersten Zeigers auf ein erstes Datenspeicherelement;
- Empfangen einer ersten Datenmenge von einem USB-Host in das erste Datenspeicherelement,
und anschließendes Erkennen, ob ein Fehler aufgetreten ist;
- Fortsetzen des Empfangs der ersten Datenmenge, wenn der Fehler erkannt wurde, und anschließendes
Erzeugen von Daten aus der ersten Datenmenge;
- Erzeugen eines zweiten Zeigers auf das zweite Datenspeicherelement, sofern der Fehler nicht erkannt
wurde, und anschließendes Empfangen einer zweiten Datenmenge von dem USB-Host in
das zweite Datenspeicherelement und Erkennen, ob ein zweiter Fehler aufgetreten ist;
- Fortsetzen des Empfangs der zweiten Datenmenge, wenn der zweite Fehler erkannt wurde,
und anschließendes Erzeugen der Daten aus der zweiten Datenmenge; und
- Erzeugen eines dritten Zeigers auf das erste Datenspeicherelement,
sofern der zweite Fehler nicht erkannt wurde, und anschließendes Empfangen einer dritten Datenmenge von dem USB-Host in
das erste Datenspeicherelement.
Hierzu 4 Seite(n) Zeichnungen
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US400398 | 1998-01-07 | ||
US09/004,003 US6145045A (en) | 1998-01-07 | 1998-01-07 | System for sending and receiving data on a Universal Serial Bus (USB) using a memory shared among a number of end points |
Publications (2)
Publication Number | Publication Date |
---|---|
DE19900331A9 true DE19900331A9 (de) | |
DE19900331A1 DE19900331A1 (de) | 1999-07-08 |
Family
ID=21708652
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE19900331A Withdrawn DE19900331A1 (de) | 1998-01-07 | 1999-01-07 | Vorrichtung und Verfahren zur Implementierung eines USB-Endpunktkanals mit doppelter Pufferunterstützung |
Country Status (3)
Country | Link |
---|---|
US (2) | US6145045A (de) |
KR (1) | KR100290597B1 (de) |
DE (1) | DE19900331A1 (de) |
Families Citing this family (86)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6307543B1 (en) * | 1998-09-10 | 2001-10-23 | Silicon Image, Inc. | Bi-directional data transfer using two pair of differential lines as a single additional differential pair |
US6311294B1 (en) * | 1998-10-20 | 2001-10-30 | Cypress Semiconductor Corp. | Device and method for efficient bulk data retrieval using a universal serial bus |
US6721805B1 (en) * | 1998-11-12 | 2004-04-13 | International Business Machines Corporation | Providing shared-medium multiple access capability in point-to-point communications |
US6611891B1 (en) | 1998-11-23 | 2003-08-26 | Advanced Micro Devices, Inc. | Computer resource configuration mechanism across a multi-pipe communication link |
US6457084B1 (en) * | 1998-11-23 | 2002-09-24 | Advanced Micro Devices, Inc. | Target side distributor mechanism for connecting multiple functions to a single logical pipe of a computer interconnection bus |
US6470410B1 (en) * | 1998-11-23 | 2002-10-22 | Advanced Micro Devices, Inc. | Target side concentrator mechanism for connecting multiple logical pipes to a single function utilizing a computer interconnection bus |
US6457081B1 (en) | 1998-11-23 | 2002-09-24 | Advanced Micro Devices, Inc. | Packet protocol for reading an indeterminate number of data bytes across a computer interconnection bus |
US6499079B1 (en) | 1998-11-23 | 2002-12-24 | Advanced Micro Devices, Inc. | Subordinate bridge structure for a point-to-point computer interconnection bus |
US6618782B1 (en) | 1998-11-23 | 2003-09-09 | Advanced Micro Devices, Inc. | Computer interconnection bus link layer |
JP3228249B2 (ja) * | 1998-12-04 | 2001-11-12 | 日本電気株式会社 | ルータ装置 |
US6233628B1 (en) * | 1999-01-08 | 2001-05-15 | Oak Technology, Inc. | System and method for transferring data using separate pipes for command and data |
US6389495B1 (en) * | 1999-01-16 | 2002-05-14 | Cypress Semiconductor Corp. | Dedicated circuit and method for enumerating and operating a peripheral device on a universal serial bus |
US6321350B1 (en) * | 1999-02-22 | 2001-11-20 | International Business Machines Corporation | Method and apparatus for error detection using a queued direct Input-Output device |
US6148354A (en) | 1999-04-05 | 2000-11-14 | M-Systems Flash Disk Pioneers Ltd. | Architecture for a universal serial bus-based PC flash disk |
US6671765B1 (en) * | 1999-11-22 | 2003-12-30 | Texas Instruments Incorporated | Architecture enabling code overlay using a dedicated endpoint |
US6502097B1 (en) * | 1999-12-23 | 2002-12-31 | Microsoft Corporation | Data structure for efficient access to variable-size data objects |
PL355475A1 (en) * | 2000-02-21 | 2004-05-04 | Trek 2000 International Ltd. | A portable data storage device |
FI113606B (fi) * | 2000-05-03 | 2004-05-14 | Nokia Corp | Menetelmä sanomien välittämiseksi, tiedonsiirtojärjestelmä ja päätelaite |
US6718412B2 (en) * | 2000-12-14 | 2004-04-06 | Agilent Technologies, Inc. | Apparatus and method for universal serial bus communications |
US7401126B2 (en) * | 2001-03-23 | 2008-07-15 | Neteffect, Inc. | Transaction switch and network interface adapter incorporating same |
US6931465B1 (en) | 2001-03-31 | 2005-08-16 | Cypress Semiconductor Corp. | Intelligent, extensible SIE peripheral device |
JP3680762B2 (ja) | 2001-05-14 | 2005-08-10 | セイコーエプソン株式会社 | データ転送制御装置及び電子機器 |
JP3680763B2 (ja) | 2001-05-14 | 2005-08-10 | セイコーエプソン株式会社 | データ転送制御装置及び電子機器 |
WO2003003295A1 (en) * | 2001-06-28 | 2003-01-09 | Trek 2000 International Ltd. | A portable device having biometrics-based authentication capabilities |
CN100432962C (zh) | 2001-06-28 | 2008-11-12 | 特科2000国际有限公司 | 数据传送的方法与装置 |
US7228366B2 (en) * | 2001-06-29 | 2007-06-05 | Intel Corporation | Method and apparatus for deterministic removal and reclamation of work items from an expansion bus schedule |
US6718405B2 (en) * | 2001-09-20 | 2004-04-06 | Lsi Logic Corporation | Hardware chain pull |
KR20040043198A (ko) * | 2001-09-27 | 2004-05-22 | 코닌클리즈케 필립스 일렉트로닉스 엔.브이. | 버스 시스템 및 버스 인터페이스 |
DE60238264D1 (de) * | 2001-09-27 | 2010-12-23 | Nxp Bv | Einen bus |
JP4555902B2 (ja) * | 2001-09-28 | 2010-10-06 | エスティー エリクソン エスエー | バスシステム及びバスにつなぐためのバスインターフェース |
US7110389B2 (en) * | 2001-11-19 | 2006-09-19 | International Business Machines Corporation | Fanning route generation technique for multi-path networks |
NZ534572A (en) * | 2002-02-07 | 2006-09-29 | Trek Internat 2000 Ltd | A portable data storage and image recording device capable of direct connection to a computer usb port |
US20030167347A1 (en) * | 2002-02-11 | 2003-09-04 | Combs James Lee | Home network printer adapter |
US7987007B2 (en) * | 2002-03-18 | 2011-07-26 | Creative Technology Ltd | Memory module with audio playback mode |
US20030184960A1 (en) * | 2002-03-28 | 2003-10-02 | Compaq Information Technologies Group, L.P. | Enumeration, manageability, and security of a KVM extension device |
CN1605069A (zh) | 2002-05-13 | 2005-04-06 | 特科2000国际有限公司 | 对便携式数据存储设备中存储的数据进行压缩及解压缩的系统和设备 |
CN1822204B (zh) * | 2002-05-13 | 2010-10-13 | 特科2000国际有限公司 | 对便携式数据存储设备中存储的数据进行压缩及解压缩的系统和方法 |
US7478235B2 (en) | 2002-06-28 | 2009-01-13 | Microsoft Corporation | Methods and systems for protecting data in USB systems |
US6745264B1 (en) * | 2002-07-15 | 2004-06-01 | Cypress Semiconductor Corp. | Method and apparatus for configuring an interface controller wherein ping pong FIFO segments stores isochronous data and a single circular FIFO stores non-isochronous data |
TW588243B (en) * | 2002-07-31 | 2004-05-21 | Trek 2000 Int Ltd | System and method for authentication |
US6985977B2 (en) | 2002-08-30 | 2006-01-10 | National Instruments Corporation | System and method for transferring data over a communication medium using double-buffering |
US7069373B2 (en) * | 2002-11-07 | 2006-06-27 | Nec Electronics America, Inc. | USB endpoint controller flexible memory management |
JP4050135B2 (ja) * | 2002-11-25 | 2008-02-20 | 富士通株式会社 | 通信デバイス、ホスト装置、及び通信方法 |
US6959355B2 (en) * | 2003-02-24 | 2005-10-25 | Standard Microsystems Corporation | Universal serial bus hub with shared high speed handler |
US7185126B2 (en) * | 2003-02-24 | 2007-02-27 | Standard Microsystems Corporation | Universal serial bus hub with shared transaction translator memory |
US7823133B2 (en) * | 2003-04-23 | 2010-10-26 | Stmicroelectronics, Inc. | Smart card device and method for debug and software development |
US7044390B2 (en) * | 2003-06-02 | 2006-05-16 | Stmicroelectronics, Inc. | Smart card emulator and related methods using buffering interface |
US7127649B2 (en) * | 2003-06-09 | 2006-10-24 | Stmicroelectronics, Inc. | Smartcard test system and related methods |
CN1302382C (zh) * | 2003-06-13 | 2007-02-28 | 联想(北京)有限公司 | 基于usb闪存盘存储介质私有空间的验证方法 |
TWI296083B (en) * | 2003-09-29 | 2008-04-21 | Sharp Kk | Communication controller, host-side controller, communication system, usb system, communication equipment, communication method, packet-based communication method, packet-based communication program, and storage medium |
US20050097198A1 (en) * | 2003-10-08 | 2005-05-05 | Getler Robert M. | Printer monitoring system and method |
US7562360B2 (en) * | 2003-12-01 | 2009-07-14 | Texas Instruments Incorporated | Method and system for firmware downloads |
US20060020721A1 (en) * | 2004-05-26 | 2006-01-26 | Microchip Technology Incorporated | Configurable ping-pong buffers for USB buffer descriptor tables |
US20050278472A1 (en) * | 2004-06-14 | 2005-12-15 | Gierke Justin T | USB extender |
US20060227759A1 (en) * | 2004-09-14 | 2006-10-12 | Bohm Mark R | Peripheral Sharing USB Hub |
US20060059293A1 (en) * | 2004-09-14 | 2006-03-16 | Henry Wurzburg | Universal serial bus switching hub |
US8185708B2 (en) | 2004-09-30 | 2012-05-22 | Emc Corporation | Host implementation of triangular asynchronous replication |
JP2006107450A (ja) | 2004-09-30 | 2006-04-20 | Emc Corp | トライアングル非同期複製(triangularasynchronousreplication) |
US8458280B2 (en) * | 2005-04-08 | 2013-06-04 | Intel-Ne, Inc. | Apparatus and method for packet transmission over a high speed network supporting remote direct memory access operations |
US20060268691A1 (en) * | 2005-05-31 | 2006-11-30 | International Business Machines Corporation | Divide and conquer route generation technique for distributed selection of routes within a multi-path network |
US7978719B2 (en) * | 2005-06-10 | 2011-07-12 | International Business Machines Corporation | Dynamically assigning endpoint identifiers to network interfaces of communications networks |
US7782905B2 (en) * | 2006-01-19 | 2010-08-24 | Intel-Ne, Inc. | Apparatus and method for stateless CRC calculation |
US7889762B2 (en) * | 2006-01-19 | 2011-02-15 | Intel-Ne, Inc. | Apparatus and method for in-line insertion and removal of markers |
US7433990B2 (en) * | 2006-01-24 | 2008-10-07 | Standard Microsystems Corporation | Transferring system information via universal serial bus (USB) |
US7849232B2 (en) | 2006-02-17 | 2010-12-07 | Intel-Ne, Inc. | Method and apparatus for using a single multi-function adapter with different operating systems |
US8316156B2 (en) * | 2006-02-17 | 2012-11-20 | Intel-Ne, Inc. | Method and apparatus for interfacing device drivers to single multi-function adapter |
US8078743B2 (en) * | 2006-02-17 | 2011-12-13 | Intel-Ne, Inc. | Pipelined processing of RDMA-type network transactions |
US7526590B2 (en) * | 2006-03-31 | 2009-04-28 | Intel Corporation | Systems and methods for remote pipe resource management in wireless adapters |
US7523243B2 (en) * | 2006-04-14 | 2009-04-21 | Standard Microsystems Corporation | Multi-host USB device controller |
US7480753B2 (en) * | 2006-04-27 | 2009-01-20 | Standard Microsystems Corporation | Switching upstream and downstream logic between ports in a universal serial bus hub |
US20080005262A1 (en) * | 2006-06-16 | 2008-01-03 | Henry Wurzburg | Peripheral Sharing USB Hub for a Wireless Host |
US20080034106A1 (en) * | 2006-08-02 | 2008-02-07 | Sanjay Bakshi | Reducing power consumption for bulk data transfers |
US8315269B1 (en) | 2007-04-18 | 2012-11-20 | Cypress Semiconductor Corporation | Device, method, and protocol for data transfer between host device and device having storage interface |
TWI448902B (zh) * | 2007-08-24 | 2014-08-11 | Cypress Semiconductor Corp | 具頁存取基礎處理器介面之橋接裝置 |
US20090063717A1 (en) * | 2007-08-28 | 2009-03-05 | Bohm Mark R | Rate Adaptation for Support of Full-Speed USB Transactions Over a High-Speed USB Interface |
US8090894B1 (en) | 2007-09-21 | 2012-01-03 | Cypress Semiconductor Corporation | Architectures for supporting communication and access between multiple host devices and one or more common functions |
US7895387B1 (en) | 2007-09-27 | 2011-02-22 | Cypress Semiconductor Corporation | Devices and methods for sharing common target device with two different hosts according to common communication protocol |
US7908421B2 (en) * | 2008-09-30 | 2011-03-15 | Intel Corporation | Universal serial bus endpoint context caching |
US8166225B2 (en) * | 2009-04-09 | 2012-04-24 | Tenx Technology Inc. | USB interface data transmission device and USB interface data communication system |
JP5456434B2 (ja) | 2009-10-22 | 2014-03-26 | ルネサスエレクトロニクス株式会社 | パイプ調停回路、パイプ調停方法 |
US8799532B2 (en) | 2011-07-07 | 2014-08-05 | Smsc Holdings S.A.R.L. | High speed USB hub with full speed to high speed transaction translator |
US9807161B2 (en) * | 2013-09-16 | 2017-10-31 | Axis Ab | Distributed events in an access control system |
CN105335320B (zh) | 2014-08-14 | 2020-05-15 | 恩智浦美国有限公司 | 具有可动态配置的端点分配的usb设备 |
US20160232119A1 (en) * | 2014-09-17 | 2016-08-11 | Thomson Licensing | SHARING MEMORY BETWEEN USB Enabled Devices |
GB2539445A (en) * | 2015-06-16 | 2016-12-21 | Nordic Semiconductor Asa | Data processing |
US20220070018A1 (en) * | 2020-09-02 | 2022-03-03 | Cypress Semiconductor Corporation | Usb type-c/pd port real time monitoring and control in an automotive or industrial ecosystem |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0648822B2 (ja) * | 1985-03-04 | 1994-06-22 | 株式会社日立製作所 | デイジタル伝送系における異常処理方法 |
US4858112A (en) * | 1985-12-17 | 1989-08-15 | General Electric Company | Interface comprising message and protocol processors for interfacing digital data with a bus network |
US5058110A (en) * | 1989-05-03 | 1991-10-15 | Ultra Network Technologies | Protocol processor |
US5243596A (en) * | 1992-03-18 | 1993-09-07 | Fischer & Porter Company | Network architecture suitable for multicasting and resource locking |
US5438575A (en) * | 1992-11-16 | 1995-08-01 | Ampex Corporation | Data storage system with stale data detector and method of operation |
-
1998
- 1998-01-07 US US09/004,003 patent/US6145045A/en not_active Expired - Lifetime
-
1999
- 1999-01-06 KR KR1019990000088A patent/KR100290597B1/ko not_active IP Right Cessation
- 1999-01-07 DE DE19900331A patent/DE19900331A1/de not_active Withdrawn
- 1999-12-22 US US09/469,663 patent/US6173355B1/en not_active Expired - Lifetime
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE19900331A9 (de) | Vorrichtung und Verfahren zur Implementierung eines USB-Endpunktkanals mit doppelter Pufferunterstützung | |
DE19900245B4 (de) | Vorrichtung und Verfahren zum Senden von Daten von einem USB-Endpunkt an einen USB-Host | |
DE19900331A1 (de) | Vorrichtung und Verfahren zur Implementierung eines USB-Endpunktkanals mit doppelter Pufferunterstützung | |
DE19900290B4 (de) | Verfahren zum Betreiben einer universellen seriellen Buseinrichtung und universelle serielle Buseinrichtung | |
DE19900345B4 (de) | Schnittstellenmodul für einen Universellen Seriellen Bus (USB) zur Verbindung mit einem USB über eine Programmierschnittstelle für eine USB-Funktion und Vorrichtung zum Anschluß an einen universellen seriellen Bus | |
DE19900369B4 (de) | Vorrichtung zum Anschluß an einen Universal Serial Bus (USB) und Verfahren zum Betreiben eines Steuerendpunktes an einem Universal Serial Bus (USB) | |
DE3280451T2 (de) | Verfahren zur Initialisierung eines Datenverarbeitungssystems. | |
DE19900345A9 (de) | Vorrichtung und Verfahren für die Bereitstellung einer Schnittstelle für eine Verbundsteuereinheit eines Universellen Seriellen Buses | |
DE3587493T2 (de) | Betriebssicheres Datenverarbeitungsbussystem. | |
DE19900369A9 (de) | Vorrichtung und Verfahren zur Ausführung einer Steuerübertragung auf einem Universal Serial Bus | |
DE60309391T2 (de) | Datenübertragungssteuerungssystem, Programm und Datenübertragungssteuerungsverfahren | |
DE68926725T2 (de) | Atomare Sequenz für Phasenübergänge | |
DE19962768B4 (de) | Verfahren zum Übertragen von Daten über einen Datenbus mit minimierter digitaler Intersymbolstörung | |
DE69825915T2 (de) | Verfahren und vorrichtung zur umschaltung zwischen quellen-synchron-takt/- und gemeinsam-takt-datenübertragungs-modi in einem mehragent-übertragungs-system | |
DE60205305T2 (de) | Datensteueranlage, elektronisches Gerät und Verfahren zur Übertragungssteuerung | |
DE102004004796B4 (de) | Vorrichtung zur Datenübertragung zwischen Speichern | |
DE69828074T2 (de) | Direkt-speicherzugriff / transaktionen auf ein bus mit niedriger pinanzahl | |
DE19900290A9 (de) | Verfahren zum Betreiben einer universellen seriellen Buseinrichtung und universelle serielle Buseinrichtung | |
DE60106929T2 (de) | Methode und vorrichtung zur ankopplung von single master geräten an eine multimaster wired-and busumgebung | |
DE102013224101A1 (de) | Verbinden mehrerer Slave-Vorrichtungen mit einem einzigen Master | |
WO2002097635A2 (en) | Method and apparatus for interconnecting wired-and buses | |
DE69432726T2 (de) | Verfahren und System zur seriellen Datenübertragung | |
DE19900251B4 (de) | Vorrichtung und Verfahren zum Steuern eines vielseitigen USB-Endpunktkanals | |
DE69726302T2 (de) | Busschnittstellensteuerungsschaltung | |
DE3889511T2 (de) | Speicherung von Grenzzeitüberschreitungen und Quittungsantworten nach Ein-/Ausgabebefehlen. |