Wer nicht den vollen Funktionsumfang von USB benötigt, sondern schlicht eine serielle Verbindung zum PC, ist mit Bridge-ICs gut beraten. Mit diesen Bausteinen ist es recht leicht, ein Embedded-Design um USB zu erweitern, allerdings ist der Funktionsumfang fest vorgegeben. Ein Beispiel für eine solche Datenkommunikationsschnittstelle ist der USB-zu-SPI-Bridge-Controller CP2130 von Silicon Labs. Der Baustein vermittelt zwischen dem USB-Anschluss auf einer Seite und dem Serial Peripheral Interface (SPI) einer universelle MCU auf der anderen. Bild 1 beschreibt, wie ein Bridge-IC mit einem Embedded-System interagiert. Neben USB-zu-SPI-Bridges sind auch UART, SMBus-, I2C- und I2S-Bridges erhältlich.
Egal ob es darum geht, ein bestehendes, älteres Designs um USB zu erweitern oder ein neues Designs mit USB auszurüsten: Die Arbeit lässt sich in drei Schritte einteilen. Spezielles USB-Wissen ist dabei nicht nötig.
- Schritt 1: Gewünschte Kommunikationsperipherie der Host-MCU identifizieren.
- Schritt 2: Prototypen aufbauen mithilfe eines Evaluierungskits und Drahtbrücken.
- Schritt 3: Kundenspezifischen Schaltplan und Layout mit einem Bridge-IC erstellen.
Darüber hinaus können Entwickler auch anwendungsspezifische Lösungen und Treiber entwickeln.
Schritt 1: Kommunikationsperipherie der Host-MCU
Bevor er ein Bridge-IC auswählen kann, muss der Entwickler naheliegenderweise festlegen, welche Kommunikationsperipherie der Host-MCU zur Verfügung steht. Ist auf der Host-MCU keine Peripherie mehr frei, bieten sich adressierbare Protokolle wie SMBus/I2C an. Bei neuen Designs können Entwickler gleich eine MCU wählen, die das gewünschte Kommunikationsprotokoll implementiert und einen freien SPI-Port besitzt. Bei der Wahl der Kommunikationsperipherie sind die Anforderungen an die maximale Datenübertragungsrate zu berücksichtigen. Muss eine große Datenmenge bei hohen Geschwindigkeiten übertragen werden, sind SPI oder UART die beste Wahl. Ist die Übertragungsgeschwindigkeit nicht wichtig, dafür aber die Busanbindung mehrerer Einrichtungen, ist SMBus/I2C die beste Wahl, da nur zwei Pins erforderlich sind.
Auf einen Blick
Mit dieser Schritt-für-Schritt-Anleitung schaffen es auch Einsteiger, einem Embedded-Design USB-Fähigkeiten beizubringen. Dank Bridge-IC brauchen weder Entwickler noch Mikrocontroller viel von USB zu verstehen – der Baustein übersetzt zwischen USB und SPI, UART, SMBus, I²C oder I²S.
Neben der Wahl der Kommunikationsperipherie sind auch die verschiedenen Treiberoptionen auf der USB-Host-Seite zu berücksichtigen. Die anwenderfreundlichste Option ist eine Kommunikations-Bridge der HID-Klasse (Human Interface Device), da sie keinen Treiber benötigt. Geräte der HID-Klasse verwenden native Treiber, die in den gängigen Betriebssystemen enthalten sind. Das Gerät wird einfach an einen USB-Port angeschlossen und ist sofort einsatzbereit. Alternativen wären VCP-Treiber (Virtueller COM-Port), Win-USB/Lib-USB-Treiber oder herstellerspezifische Treiber. Alle diese Optionen erfordern eine Treiberinstallation, erzielen dafür aber einen höheren Datendurchsatz als Produkte der HID-Klasse.
Schritt 2: Prototyp bauen
Für erste Prototypen bieten sich Kommunikations-Bridge-Evaluierungskits an. Das Evaluierungskit lässt sich mit simplen Drahtbrücken mit der Host-MCU verbindet. Der Prototyp dient zur Überprüfung der Kommunikation zwischen beiden Einrichtungen und als Ausgangspunkt für den finalen Schaltplan. Bild 2 zeigt ein CP2130 USB-zu-SPI-Evaluierungsboard, das an eine C8051F850 MCU-Karte angeschlossen ist, auf dem SPI-Slave-Beispielcode läuft. In Bild 2 wurde der SPI-Header mit den entsprechenden Port-Pins des MCU-Entwicklungsboards verbunden, die wiederum mit der internen SPI-Peripherie verbunden sind.
Mit der fertigen Hardware kann der Entwickler die USB-Host-Maschine vorbereiten. Dazu installiert er Demo-Anwendungen – falls nötig – einen Treiber. Die erforderliche Software findet sich normalerweise auf der Webseite des Herstellers. Die CP2130-Bridge benötigt tatsächlich eine Treiberinstallation und kann eine Evaluierungsanwendung für USB-Kommunikation nutzen. Beides ist im CP2130-Softwarepaket enthalten, das zusammen mit dem Evaluierungskit erhältlich ist. Nach der Installation können mit der Evaluierungsanwendung SPI-Daten über USB auf die C8051F850-MCU geschrieben und von ihr gelesen werden. Nun folgen Verifikationstests der Lese- und Schreibvorgänge, um den Betrieb zu testen.
Schritt 3: Schaltplan und Layout
Der Prototyp aus Schritt 2 hilft dabei, den Schaltplan für das letztendliche Design zu erstellen. Für den CP2130 USB-zu-SPI-Bridge-Controller findet sich der Schaltplan im CP2130-EK-Benutzerhandbuch. Er zeigt, welche Komponenten für den USB-Betrieb erforderlich sind – die Anzahl externer Komponenten und die Komplexität des Designs unterscheiden sich je nach Bridge-IC:
- Quarzloser USB: Unterstützt der Baustein eine USB-Kommunikation ohne externen Quarz?
- Interner 5V-Regler: Kann der Chip das System über die USB-Verbindung versorgen, ohne externe Komponenten zu benötigen, und wie hoch ist der maximale Ausgangsstrom? (Diese Funktion ist vor allem für USB-versorgte Anwendungen von Bedeutung).
- In-System-Programmierspeicher: Enthält der Baustein programmierbaren Speicher zur kundenspezifischen Anpassung über USB?
- Kleine Gehäuse: kleinere Gehäuse ermöglichen kleine, tragbare Lösungen.
Als nächstes werden die Prototypenanschlüsse in Schaltplananschlüsse für das SPI-Signal (SCLK, MOSI, MISO, SS, GND) zwischen dem CP2130 und der Host-MCU übertragen. Vor dem Layout kann der Entwickler seinen Schaltplan noch an das Support-Team von Silicon Labs senden, das diesen kostenlos überprüft. Das Support-Team gibt bei Bedarf auch Empfehlungen, falls es Änderungen für nötig hält.
Kundenspezifische Bauteile und Treiber
Silicon Labs liefert die Bridge-ICs und Treiber mit herstellerspezifischen Standard-USB-Deskriptoren und Strings. Die USB-Vendor- und Produkt-ID-Deskriptoren (VID und PID) sowie der Serial-String werden vom Betriebssystem verwendet, um Treiber an die angeschlossenen Einrichtungen zuzuweisen. Es empfiehlt sich, dass die Kombination aus Deskriptoren und Strings einzigartig bleibt, um Fehler zu vermeiden, wenn zwei Einrichtungen mit identischen Informationen an ein System angeschlossen sind. Kundenspezifische Treiber und Einrichtungen ermöglichen den Einsatz produktspezifischer Strings und Geräte-Deskriptoren. Bild 3 zeigt die Standard-Strings in Windows bei einem nicht kundenspezifischen CP2130.
Um ein Produkt kundenspezifisch anzupassen, müssen der Bridge-IC und der zugehörige Treiber aktualisiert werden. Für die Bridge-ICs gibt es grafische Dienstprogramme, um die IDs über USB anzupassen, oder angepasste Varianten direkt vom Hersteller. Für die Treiberanpassung stehen üblicherweise Schritt-für-Schritt-Anleitungen zur Verfügung (Application Note 220: USB Driver Customization). Achtung: Nach der Anpassung einer Einrichtung braucht das Host-System auch den passenden Treiber, um mit dem Gerät zu kommunizieren. Vor der Auslieferung an den Kunden sollte bedacht werden, dass ein USB-Kabel sowie ein USB-Stick, eine CD/DVD oder eine Webadresse für den kundenspezifischen Treiber mitgeliefert wird.
Für angepasste Treiber kann ein zusätzlicher Zertifizierungsschritt seitens des Betriebssystemanbieters erforderlich sein (Application Note 807: Recertifying a Customized Windows HCK Driver Package). Ein Beispiel dazu ist Microsofts WHQL-Test (Windows Hardware Quality Labs): Windows 7 (x64) und Windows 8 (x64) lassen es nicht zu, einen nicht zertifizierten Treiber zu installieren. Andere Windows-Versionen erlauben zwar die Installation, zeigen aber eine Warnmeldung für den Anwender.
Aller guten Dinge…
Neben der eigentlichen Aufgabe, Embedded-Geräten eine USB-Kommunikation zu ermöglichen, bieten Bridge-ICs auch GPIO-Pins mit weiteren Funktionen. Zum Beispiel:
- USB-Suspend-Anzeigen
- Taktausgang
- Toggle-LED bei Datenverkehr
- Puls- oder Flanken-Zählung
- Remote Wake (Fernaktivierung)
Bei der Evaluierung möglicher USB-Bridge-ICs sollte man alle Aspekte bedenken. Gut ist, wenn der Hersteller ein umfangreiches Angebot bietet, das alle wichtigen Kommunikationsschnittstellen abdeckt.
(lei)