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ützung

Info

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
Application number
DE1999100331
Other languages
English (en)
Other versions
DE19900331A1 (de
Inventor
Ohad Sunnyvale Calif. Folik
David Medi'in Brief
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
National Semiconductor Corp
Original Assignee
National Semiconductor Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication of DE19900331A9 publication Critical patent/DE19900331A9/de
Priority claimed from US09/004,003 external-priority patent/US6145045A/en
Application filed by National Semiconductor Corp filed Critical National Semiconductor Corp
Publication of DE19900331A1 publication Critical patent/DE19900331A1/de
Withdrawn legal-status Critical Current

Links

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ß)
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
Bits Funktionsbezeichnung
15-8
(Reserviert)
Bits Funktionsbezeichnung
T-A Endpoint Pipe Number (EPN) (Endpunktkanal-
Zahl)
3-0 Endpoint Command (CMD) (Endpunkt-Befehl)
Die Endpunktkanal-Zahl EPN bestimmt den Endpunktkanal, auf welchem der Befehl ausgeführt wird. Bei einer bevorzugten Ausführungsform kann dieses Register in die Hochgeschwindigkeits-Bus-Schnittstellenlogik implementiert sein. Die Daten laufen über die asynchrone Schnittstelle. Zwei Signale werden vom Endpunkt-Controller zurückgeschickt, wobei eines anzeigt, daß der Befehl ausgeführt wurde, und daß der Befehlswert auf "0" gesetzt 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
35
40 Funktionsbezeichnung
BPA
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)

gelesen und an den USB übertragen. Wenn ein OUT- oder SETUP-Token empfangen wurde, wird eine Datenübertragung an der Adresse des Steuerwortes begonnen, wenn 32-Bit-Daten vom USB empfangen wurden. Danach werden am Ende der Übertragung der Puffer-Zustand und die Handshakes HS aktualisiert. Wenn eine Aufforderung zur Aktualisierung des Steuerwortes in EAB-AR+cEPP+CWP gemacht wurde, werden BS und HS unverzüglich aktualisiert. Nachdem das letzte Byte des IN-Paketes gesendet wurde, wird eine Uhr gestartet, um auf ein rückkehrendes ACK zu warten. Es wird eine Unterbrechung signalisiert, wenn ein ACK nicht innerhalb einer 16 Bit-Zeit empfangen wurde, die zu dem Zeitpunkt beginnt, zu dem das Ende des Paketes gesendet wurde. Dieser Wert kann vergrößert werden, um Kanalverzögerungen zu berücksichtigen. Ein Puffer-Fehler tritt auf, wenn die Daten nicht schnell genug abgerufen werden können, um mit der USB-Übertragungsrate mitzuhalten, so daß Unterschreitungsbedingungen auftreten. Am Ende eines OUT-Paketes setzt sich das End-of- Write-Signal EOW durch, wenn das letzte erwartete Byte von dem Endpunkt-Controller übertragen wurde. Ein Puffer-Fehler tritt auf, wenn die Daten nicht schnell genug in den Speicher geschrieben werden konnten, und ein Überlauf auftritt. Ein Datenfehler tritt auf, wenn ein Daten-Überlauf oder ein Rundungsfehler auftritt. Daten-Überlauf tritt auf, wenn das empfangene Paket größer als der zugeordnete Puffer ist, d. h. ein Byte wurde empfangen, nachdem das EOW sich durchgesetzt hat. Ein Rundungsfehler tritt auf, wenn die Pufferrundung CWBR nicht gesetzt ist, und der Puffer-Zähler am Beginn des CRC nicht Null ist (d. h. das Paket füllt den Puffer nicht exakt auf). Abschließend wird der Endpunktkanal-Zustand für diesen Endpunkt aktualisiert. Wenn der CWP inkrementiert ist, kommt der nächste Endpunktkanal-Zustand von dem neuen Steuerwort, welches unmittelbar nach der CWP-Inkrementierung (Invertierung) gelesen wurde. Bei der Umsetzung der Erfindung können verschiedene Alternativen auf die beschriebenen erfindungsgemäßen Ausführungsformen angewendet werden. Die folgenden Ansprüche sollen den Umfang der Erfindung definieren, wobei auch Äquivalente umfaßt sein sollen. Die Architektur der USB-Knotenschnittstelle ist in dem folgenden Anhang, der Teil der Beschreibung ist, näher spezifiziert. Patentansprüche
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.
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-
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.
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 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.
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
DE19900331A 1998-01-07 1999-01-07 Vorrichtung und Verfahren zur Implementierung eines USB-Endpunktkanals mit doppelter Pufferunterstützung Withdrawn DE19900331A1 (de)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

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.