USB-Systeme

Typische Entwicklungsfehler erkennen und vermeiden

29.03.2007 | Autor / Redakteur: Steve Kolokowsky, Trevor Davis* / Jan Vollmuth

Altbewährt: Den USB-Standard gibt es bereits seit 1996
Altbewährt: Den USB-Standard gibt es bereits seit 1996

Bei der Entwicklung von USB-Systemen treten immer wieder typische Fehler auf, die auf bestimmte Merkmale des Protokolls rückführbar sind. Wer diese Stolperfallen kennt, profitiert nicht nur von einem optimierten USB-Design, sondern auch von reduziert Entwicklungszeiten und -kosten.

USB weist viele Ähnlichkeiten mit anderen Protokollen auf, die dem Entwickler möglicherweise bereits vertraut sind. Trotzdem gibt es so viele Unterschiede zum bekannten Terrain von PS/2 und RS-232, dass Ingenieure immer wieder über dieselben Fallstricke stolpern. Wegen der strikten Standards können diese Fehler im schlimmsten Fall dazu führen, dass die USB-Compliance nicht eingehalten wird. Daher ist es wichtig, die typischen Fehlerquellen zu kennen und bei der Entwicklung zu vermeiden.

Die Fehler beim USB-Design lassen sich in fünf Kategorien einteilen:

1. Übertragungsgeschwindigkeit:

  • Erwartung, dass das System tatsächlich 480 MBit/s erreicht
  • Mögliche Engpässe im System werden nicht einkalkuliert

2. Stromversorgung

  • Kenntnis der Bus-Stromversorgung (Grenzwerte von 500 mA, 100 mA, 500 µA)
  • Stromrückfluss auf D+
  • Hubs: Keine volle Versorgungsspannung an Downstream-Ports
  • Busgespeiste Hubs: Umschalten zwischen hoher und niedriger Leistungsaufnahme

3. Signalqualität

  • Nutzung von D+/D- durch mehrere Devices
  • Schalter im Datenpfad

4. Software

  • Keine Verwendung verfügbarer Klassentreiber
  • Kein Einholen einer Vendor ID (VID) vom USB I/F

5. Compliance

  • Kein Testen des Prototyps vor dem Einreichen zur Compliance-Prüfung
  • FCC/VCCI (EMI): Keine Trennung von Abschirmung/Masse

Fehler bei der Übertragungsgeschwindigkeit vermeiden

Die Frage, welche Übertragungsrate ein USB-Device unterstützt, ist zweifellos die Ursache für die meisten Missverständnisse zwischen Entwicklern und Anwendern. Sie ist überdies die meistgestellte Frage in Computerläden auf der ganzen Welt.

Der leitungsgebundene USB unterstützt derzeit drei Übertragungsraten, nämlich Low Speed (1,5 MBit/s), Full Speed (12 MBit/s) und High Speed (480 MBit/s). Allerdings ist Vorsicht geboten: USB 2.0 ist nicht gleichbedeutend mit High-Speed-USB, auch wenn High-Speed-USB erstmals mit der Einführung von Version 2.0 der USB-Spezifikation eingeführt wurde. Auch USB 2.0 unterstützt Low Speed und Full Speed.

Wie bei allen elektronischen Systemen strebt der Designer auch beim USB-Design die größtmögliche Performance an. Leider gehen in USB-Applikationen die meisten Designer fälschlicherweise davon aus, dass sie mit ihrem System die volle Übertragungsrate von 1,5; 12 oder 480 MBit/s erreichen werden. Mehrere Gründe verhindern, dass ein reales System niemals diese Bandbreite erreicht.

Mehrere Geräte teilen sich einen Host-Controller

Erstens wird der USB von allen angeschlossenen Geräten gemeinsam genutzt. Selbst wenn man jedes Gerät mit einem eigenen USB-Anschluss des Computers verbindet, ist es sehr wahrscheinlich, dass man dabei denselben USB-Host-Controller nutzt. Jedes Gerät muss sich somit die gesamte Bandbreite mit allen anderen Devices teilen.

Zweitens handelt es sich bei USB um ein paketorientiertes Protokoll. Längere Datenblöcke werden also in Pakete zu jeweils 512 Bytes zerlegt. Jedes Paket erhält einen Header, der Auskunft über den Inhalt gibt, und am Schluss einen CRC-Code, der die Integrität der enthaltenen Daten bestätigt.

Um das korrekte Timing des Busses zu gewährleisten, wird außerdem alle 125 µs ein SOF-Paket (Start of Frame) gesendet (Microframe). Damit beträgt die theoretische Maximalbandbreite des USB 13 Bulk-Pakete pro Microframe, das sind 53.248.000 Bytes/s. Doch diese Marke ist mit den gegenwärtigen Host-Controllern, die 10 Bulk-Pakete je Microframe empfangen bzw. 8 Bulk-Pakete je Microframe senden können, nicht erreichbar.

Mögliche Engpässe im System werden nicht einkalkuliert

Diesem Fehler ist bereits mehr als ein System zum Opfer gefallen. So analysierte man bei Cypress Semiconductor unlängst ein System, das Daten in einen NAND-Flash-Speicher schrieb. Das System sendete Daten über den USB, legte diese Daten in einem Pufferspeicher ab und schrieb sie von dort in den Flash-Speicher.

Für jedes Paket kamen drei Zeitkomponenten zum Tragen: Die Zeit zum Ausführen des USB-Transfers; der primäre, auf das Betriebssystem zurückzuführende Zeitaufwand, und die Programmierzeit der NAND-Flash-Firmware.

Eine Echtzeit-Analyse der Performance ergab im Falle eines 128-KByte-Blocks das in Bild 3 gezeigte Timing.

Bis zu dieser Analyse hatten die Ingenieure alles daran gesetzt, durch Beschleunigung der Signale für den USB-Interfacechip die Übertragungszeit auf dem USB zu verkürzen. Sobald klar war, dass die Programmier-Firmware des NAND-Flash den weitaus größten Einfluss auf die Leistungsfähigkeit hatte, konzentrierten sie sich stattdessen darauf, die Performance durch Reduzieren des Flash-Overheads zu steigern.

In den meisten Systemen wird die High-Speed USB-Übertragung nicht der Engpass sein. Die Designer müssen deshalb ihren Blick auf das Gesamtsystem richten und sicherstellen, dass die für die angestrebte Systemgeschwindigkeit erforderliche Bandbreitenreserve vorhanden ist.

Fehler bei der Stromversorgung über den USB

Gemäß der USB-Spezifikation kann ein USB-Device entweder über das Buskabel mit Strom versorgt werden (Bus-Powered) oder über eine eigene dezentrale Stromversorgung durch Batterie oder Netzteil verfügen (Self-Powered).

Die Möglichkeit der Stromversorgung über das Buskabel war eine der besten Ideen bei der Entwicklung des USB, da so ein separates Netzkabel entfällt. Allerdings müssen bei der Stromversorgung per USB die von der USB-Spezifikation gesetzten Grenzen von 500 µA, 100 mA und 500 mA beachtet werden.

Viele Designer achten nicht sorgfältig genug auf die Einhaltung dieser Grenzwerte und bauen Systeme, die den Regeln für Bus-Powered Devices nicht genau entsprechen. Wie kommt es zu den verschiedenen Stromlimits?

  • Limit bei 500 µA: Wenn der Host eine Betriebsspannung zur Verfügung stellt, aber der USB inaktiv ist, muss sich das Device im Suspend-Modus befinden, in dem es der VBUS-Leitung höchstens 500 µA entnehmen darf. Diese Betriebsart soll die Stromaufnahme von PCs im Suspend-Modus minimieren.
  • Limit bei 100 mA: Am USB gibt es High-Power (500 mA) und Low-Power-Ports (100 mA). Low-Power-Ports findet man in der Regel an Bus-gespeisten Hubs, die dem USB 500 mA entnehmen und jeden ihrer Downstream-Ports mit max. 100 mA versorgen können. Beim ersten Einstecken eines Device in einen Port weiß das Gerät nicht, welcher Art der Port ist. Es ist somit auf 100 mA beschränkt, bis es eine SET_CONFIGURATION-Meldung vom Host erhält. Ein Gerät muss also so konzipiert sein, dass es den Enumeration-Prozess am USB mit sehr geringer Leistungsaufnahme abwickeln kann, bis es nach dem Erhalt der SET_CONFIGURATION-Meldung in eine Betriebsart mit höherer Leistungsaufnahme wechselt.
  • Limit bei 500 mA: Die nach den USB-Spezifikationen maximal zulässige Leistungsaufnahme beträgt 500 mA. Daher sollten Systementwickler unbedingt Tests unter Praxisbedingungen durchführen, um sicherzugehen, dass sie die verschiedenen Verlustleistungsstufen für den Bus-gespeisten Betrieb einhalten. Sonst könnte es passieren, dass das USB-Design mit einem teuren Steckernetzteil ausgeliefert werden muss.

Stromrückfluss in den USB

Zu den beschriebenen Problemen kann es auch bei USB-Devices mit eigener Stromversorgung kommen, da sie eingeschaltet sein können, während der Host abgeschaltet ist.

Probleme treten auf, sobald die geringe Pull-up-Spannung, die an D+ gelegt wird, um die Erkennung von USB-Devices zu ermöglichen, langsam das gesamte Hostsystem auflädt und den Startup-Vorgang stört.

Aus diesem Grund müssen USB-Geräte mit eigener Stromversorgung (auch Geräte mit Batteriebetrieb) diese Pull-up-Spannung direkt aus VBUS beziehen oder sie softwaregesteuert mithilfe eines VBUS-Sensors abschalten.

Fehlerhafte Signalqualität durch Mehrfachnutzung der Signalleitungen

Um Zeit, Aufwand und Geld zu sparen, werden bei einigen Produkten mehrere Devices an die USB-Signalleitungen angeschlossen. So kann z.B. bei einer USB-Docking-Station die Möglichkeit vorgesehen sein, wahlweise ein Floppy oder DVD-Laufwerk in einen Massenspeicher-Slot einzusetzen.

Diese Art der Mehrfachnutzung ist zweifellos kostensparend, da weniger Hub-Ports benötigt werden. Es ist aber schwierig, eine dieser Lösungen zu implementieren, ohne die Charakteristika sämtlicher Devices im System vollständig verstanden zu haben.

In der Tri-State-Konfiguration (Bild 4) erhöht das zweite am Bus angeschlossene Device die Kapazität an den USB-Leitungen.

Hinzu kommt, dass die zum zweiten Device führende Leiterbahn Signalreflexionen verursacht, die den High-Speed USB-Betrieb stören kann.

Bei der in Bild 4 dargestellten Schalter-Variante erhöht der Schalter sowohl die Kapazität als auch den Widerstand der USB-Leitungen, was die Anstiegs und Abfallzeiten der USB-Leitungen erhöht und das Auge der USB-Signale enger macht.

Das Augendiagramm (Bild 5) zeigt das von einem USB-Device gesendete Signals nach Durchlaufen eines Schalters mit 10 pF/10 W. Interferenzen mit dem roten Bereich dürften hier nicht auftreten.

Entscheidend für die erfolgreiche Mehrfachnutzung von USB-Signalleitungen ist, die Zusatzbelastung gering zu halten und Chips mit hoher Flankensteilheit zu verwenden.

Durch Software verursachte Fehler

Innerhalb des USB-Ökosystems sind die Klassentreiber ein wichtiges Element. Sie sind in den wichtigen Betriebssystemen bereits enthalten, die Entwicklung eines eigenen Gerätetreibers ist damit nicht erforderlich.

Die USB-Klassen werden von Device Working Groups definiert, die auf freiwilliger Basis an einer Standardsprache für den Dialog mit USB-Devices arbeiten. Bei den heute bestehenden USB-Geräteklassen handelt es sich um HID (Human Interface Device) mit Mäusen, Tastaturen und anderen Eingabegeräten, Mass Storage (Disklaufwerke), Communication (Modems, Netzwerkadapter), Audio, Video und Still Image (Fotokameras und Scanner).

Fällt ein Device genau in die existierende Klassenstruktur, ist die Entscheidung einfach, denn in diesem Fall muss nur auf den Internetseiten der USB-Organisation (siehe Links) die entsprechende Klassendefinition heruntergeladen und implementiert werden.

Standard-Klassentreiber sind meist hilfreich

Auch wenn das Device nicht genau in eine existierende Klasse passt, können diese Standard-Klassentreiber hilfreich sein. So verwendete Microsoft z.B. die Klasse Still Image zum Implementieren der neuen Klasse MTP (Media Transfer Protocol).

Auch die HID-Klasse muss nicht unbedingt mit einer Funktion verbunden werden, die mit einem Benutzer interagiert, sondern lässt sich auch verwenden, um beispielsweise Thermometer, Drucksensoren oder Pumpensteuerungen ohne zusätzliche Treiber mit einem Softwareprogramm zu verbinden.

Viele Unternehmen versuchen, eigene Treiber mit großem Kostenaufwand entweder selbst zu entwickeln oder die Entwicklung an ein externes Designhaus zu vergeben, obwohl die Implementierung eines vorhandenen Klassentreibers ausreichend wäre. Immerhin eliminieren Klassentreiber Designrisiken, senken die Kosten und vermeiden mögliche Zeitplanüberschreitungen. Auch Debugging und Komplexitätsprobleme gehören der Vergangenheit an.

Keine Vendor-ID (VID) vom USB IF eingeholt

Jedes USB-Device ist mit einer eindeutigen Kennung versehen, die es dem Betriebssystem ermöglicht, den richtigen Treiber auszuwählen. Den ersten Teil dieses Identifiers bildet ein 16-Bit-Wert, der vom USB Implementor’s Forum vergeben wird (VID). Der zweite Teil ist ein 16-Bit-Wert, dessen Vergabe dem jeweiligen Anbieter (d. h. dem Entwickler des Produkts) überlassen bleibt (PID).

Das Einholen der VID und die Vergabe der PID sind eine einfache Sache, wenn das Unternehmen und seine Designer vorausschauend planen und mit dem USB Implementers Forum in Kontakt stehen. Leider kommen jedoch jedes Jahr Tausende von Produkten verspätet auf den Markt, weil während der Arbeit an der Software und der Firmware noch keine Kennungen vorliegen – VID und PID jedoch für eine einwandfreie Identifikation benötigt werden.

Fehler durch mangelhafte Compliance

Voraussetzung für die legale Verwendung der verschiedenen USB-Logos ist das Bestehen einer USB-Compliance-Prüfung. Diese Tests der USB IF sollen gewährleisten, dass die Endkunden beim Einsatz von USB-Produkten nicht mit Problemen konfrontiert werden.

Einige der Tests, die im Zuge der Compliance-Prüfungen durchgeführt werden müssen, erfordern anspruchsvolles Test-Equipment, das sich der einzelne Entwickler unter Umständen nicht leisten kann. Viele Devices fallen jedoch aufgrund grundlegender Mängel, die jeder Entwickler mithilfe der ihm zur Verfügung stehenden Mittel erkennen kann, durch die Prüfung.

Bevor man ein Gerät zum Compliance-Test einreicht, sollte man unbedingt folgende Prüfungen vornehmen:

  • Chapter 9 Test – USB Command Verifier Tool. Dieses Programm überprüft, ob Ihr Gerät die wichtigsten von einem Host ausgegebenen SETUP-Befehle ausführen kann. Diese Tools stehen auf den Internetseiten des USB IF zum Download bereit.
  • Power Tests – geprüft werden der Suspend- und der Inrush-Strom sowie die Stromaufnahme im unkonfigurierten Zustand.
  • EMI – Der häufigste und gleichzeitig am einfachsten zu behebende Fehler im Zusammenhang mit EMI-Abwehrmaßnahmen ist die direkte Verbindung der Abschirmung des USB-Kabels mit der Ground-Plane des eigenen Systems.

Die geschilderten Probleme bereiten Hunderten von Ingenieuren jedes Jahr Kopfzerbrechen. Das müsste nicht sein. Eventuelle Korrekturen und Verbesserungen und die daraus resultierende Verzögerungen lassen sich vermeiden: Wer die typischen Fehler beim Entwickeln von USB-Systemen kennt, spart Zeit und Kosten.

Steve Kolokowskyi ist technischer Mitarbeiter der Consumer and Computation Division, Trevor Davis ist Produktmarketingmanager der Personal Communications Division bei Cypress Semiconductor

Kommentar zu diesem Artikel abgeben

Schreiben Sie uns hier Ihre Meinung ...
(nicht registrierter User)

Kommentar abschicken
copyright

Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 199983 / HF und Wireless)