Implementierung von USB in Embedded Designs

An USB führt kein Weg vorbei

6. Dezember 2006, 15:00 Uhr | Torsten Katschinsky
Diesen Artikel anhören

Fortsetzung des Artikels von Teil 1

An USB führt kein Weg vorbei

Um den OTG-Anforderungen zu entsprechen, wurde die Mini-AB-USB-Steckerbuchse als Standard-Steckverbindung definiert. Zusätzlich zu den herkömmlichen vier Pins, wie sie bei Standard-USB-Buchsen vorhanden sind, weist die Mini-AB einen ID-Pin auf, der mittels eines Pull-up-Widerstands einen hohen Pegel aufrechterhält. Im Gegensatz zu herkömmlichem USB kann lediglich ein OTG-Peripheriegerät gleichzeitig mit dem Host verbunden werden, und die angeschlossenen Geräte werden durch eine Kennzeichnung in A-Gerät oder B-Gerät voneinander unterschieden.

OTG definiert nur zwei Gerätetypen: Dual Role und Peripherie. Ein Dual-Role-Gerät kann sowohl als Host wie auch als Peripherie wirken, unterstützt HNP, kann SRC initiieren oder darauf antworten und ist durch eine Mini-AB-Buchse gekennzeichnet. Ein Nur-Peripheriegerät weist üblicherweise einen Mini-B-Stecker auf und kann ausschließlich als Peripheriegerät fungieren.

passend zum Thema

USB-Stick im Dual-Role-Modus

Das folgende Beispiel zeigt anhand eines USB-Sticks, wie die On-The-Go-Spezifikation in einem Massenspeichergerät in die Praxis umgesetzt wird. Da es sich bei der Anwendung um PC-Speicherung handelt, wird eine Emulation des Dateisystems sowie irgendeine Form von SCSI-Befehlen erforderlich sein (Bild 3). Der CY7C67300 enthält einen 16-bit-RISC-Core und bietet Schnittstellen u.a. zu HPI, SPI, DIE, UART und Speichern, plus GPIOs. Der CY7C67300 setzt entweder eine (serielle) SPI- oder eine (parallele) HPI-Schnittstelle ein. Der einzige wirkliche Unterschied besteht darin, dass seriell langsamer ist. Außerdem kann der CY7C67300 zudem sowohl als Host wie auch als Gerät in derselben Konfiguration funktionieren, was für den Anschluss an einen PC nützlich ist. Das bedeutet, dass ein Port als Host und der andere als Device laufen kann (Bild 4). Der IDE-Port auf dem Chip lässt sich mit einer Festplatte verbinden, um eine HDD-Schnittstelle zu liefern.

Der USB-Host-Stack beruht auf der High-Level-Programmierschnittstelle von Cypress Frameworks und steuert die USB-Paket-Ablaufplanung und die Kommunikation mit anderen USB-Geräten. Die Klassentreiber für Massenspeicher erlauben die Kommunikation nur im Bulk-Modus. Andere Geräte wie Festplatten, NAND-Flashes, MP3-Player und digitale Einzelbildkameras können in diesem Modus mit dem CY7C67300 Daten austauschen.

6120704_09.jpg
Bild 4. Im Cypress CY7C67300 kann der eine USB-Port als Host und der andere als Peripheriegerät arbeiten.

Torsten Katschinsky studierte Elektrotechnik an der Universität Rostock und machte dort im Jahre 1992 seinen Hochschulabschluss mit Schwerpunkt Informationstechnologie. Als Field Applications Engineer ist er bei Future Electronics in München der technische Experte für Produkte und High-End-Anwendungen von Philips.
Info-eur-future@futureelectronics.com

Verwandte Artikel:

Es gibt vier Arten der USB-Datenübertragung: Control, Interrupt, iso-chron und Bulk (siehe Tabelle). Control-Transfers identifizieren ein Gerät und richten es zur Kommunikation mit dem USB-Host und den anderen drei Übertragungsarten ein. Jede Übertragung setzt sich wiederum aus vier Transaktionsarten zusammen – IN, OUT, SOF (Start-Of-Frame) und Set-up –, die unter Einsatz von drei Paketen aufgebaut sind. Dem ersten „Token“-Paket folgen ein Datenpaket und ein Handshake-Paket. Die Pakete enthalten einen „Packet Identifier“ (PID), von dem es 16 Arten gibt, sowie einen durch die PID-Art und die Prüfsumme (CRC) bestimmten Inhalt. Das Spektrum an Paketen mag auf dem Papier ein wenig verwirrend erscheinen –  man versteht sie jedoch schnell, sobald man mit dem Design beginnt.

tabelle_b3ad0a_09.jpg
Der USB-Standard definiert vier verschiedene Übertragungsarten

Angenommen, es sollen z.B. Daten vom Host zu einem USB-Slave-Gerät gesandt werden. Der Host und das Ziel wissen voneinander, weil der Host in regelmäßigen Zeitabständen SOF-Pakete aussendet. Diese beginnen mit dem PID SOF und enthalten eine Frame-Nummer und danach eine CRC (Bild 2). Anschließend sendet der Host ein IN-Paket-Token an das Zielgerät mit der Anforderung, dass das Gerät ein Datenpaket zurücksendet. Das Token-Paket ist der Beginn einer Transaktion. Der PID umfasst 8 bit und kann IN, OUT oder SETUP sein. Dann folgt die 7-bit-Geräteadresse. Der Geräte-adresse folgt eine 4-bit-Endpoint-Adresse, die mit einer CRC abgeschlossen wird. Bei einem Datenpaket wird es sich um eine 8-bit-PID, eine Nutzlast zwischen 0 und 1023 Byte plus einer CRC handeln. Nach erfolgreichem Empfang sendet der Host einen 8-bit-Handshake-PID zum Abschluss der Transaktion aus und meldet den Status.

Bevor es in die Details des USB-Kommunikationsvorgangs geht, eines vorweg: Die meisten Treiber führen die im Folgenden besprochenen Vorgänge automatisch und weitgehend ohne Entwicklungsaufwand durch – oder sollten zumindest dazu in der Lage sein. Dennoch wird immer et-was Optimierungsaufwand erforderlich sein. Es zahlt sich deshalb aus, Bausteine zu wählen, die sich durch eine gute technische und Firmware-Unterstützung durch den Anbieter auszeichnen. Ohne diese Unterstützung können Design-Ingenieure ganz leicht in eine unnötige und vermeidbare Software-Entwicklung sowie eine steile Lernkurve zu den Details der USB-Spezifikation verwickelt werden.

6120702_09.jpg
Bild 2. Das USB-Protokoll kennt eine Reihe von Transaktionsarten. Alle beginnen mit einem Packet Identifier (PID).

  1. An USB führt kein Weg vorbei
  2. An USB führt kein Weg vorbei
  3. Deskriptoren: Die Visitenkarten eines Geräts

Jetzt kostenfreie Newsletter bestellen!