B. Kainka

Messen, Steuern, Regeln mit USB

Hard- und Softwareentwicklung für die Praxis

Franzis-Verlag 2000

Häufige Fragen und Berichtigungen zum Buch

Tipps und Ergänzungen zum Thema

USB-Treiberentwicklung


Vorwort

Seit der Einführung von Windows 98 ist der Universelle Serielle Bus (USB) eine wichtige Schnittstelle jedes modernen PCs. Viele Nachteile der bisherigen Schnittstellen-Vielfalt werden damit aufgehoben. Langfristig hat der USB die Chance, die meisten der bisherigen Schnittstellen abzulösen.

Was für den reinen PC-Anwender eine Erleichterung ist, kann für den engagierten Hobbyanwender und für manchen Entwickler zu einem Problem werden. Auf den ersten Blick scheint es nämlich, als wäre der USB nicht mehr für eigene Hardware-Entwicklungen geeignet. Sehr einfache Interfaces, wie sie für die serielle Schnittstelle leicht aufgebaut werden konnten, gibt es beim USB nicht. Der neue Bus ist komplexer und aufwendiger.

Mit diesem Buch wird der Versuch unternommen, den USB auch für Hobbyanwendungen nutzbar zu machen. Es werden einfache Zugänge gesucht und Hilfestellungen gegeben. Das Buch stellt beispielhaft Entwicklungen einfacher Interfaces für den USB vor. Dabei werden alle Aspekte von der Controller-Programmierung über die Windows-Software bis zu Treibern beleuchtet. Auf der CD findet man die wichtigsten Werkzeuge und alle vorgestellten Beispielprogramme des Buchs.

Ich hoffe, mit diesem Buch vielen Lesern den Einstieg in die Arbeit mit dem USB zu erleichtern.

Burkhard Kainka, Essen

Inhalt

1 EINLEITUNG 11

2 USB-GRUNDLAGEN 13
2.1 Anschlüsse und Kabel 13
2.2 Serielle Übertragung 15
2.3 Hubs 18
2.4 USB-Transfertypen 20
2.5 Enumeration 21
2.6 Treiber-Aufrufe 27
2.7 CreateFile und CloseFile 29
2.8 WriteFile und ReadFile 30
2.9 DeviceIoControl 31

3 USB-STANDARDGERÄTE 36
3.1 Installation einer USB-Maus 36
3.2 Eine USB-Soundkarte 38
3.3 Der Signalgenerator AUDIO-Wave 42
3.4 Ein Gehörtest 44
3.5 Ein USB-Joystick-Port 47

4 STROMVERSORGUNG AUS DEM USB-KABEL 54
4.1 Belastung und Innenwiderstand 54
4.2 Absicherung 56
4.3 Relaisanschluss 56
4.4 Spannungsstabilisierung 57
4.5 Messungen an den Signalleitungen 58

5 DER USB-CONTROLLER CY7C63000 60
5.1 Das USB-Thermometer von Cypress 62
5.2 Programmierung in Visual Basic 64
5.3 Einstellung des LED-Stroms 66
5.4 Weitere Treiberfunktionen 69
5.5 Analyse der USB-Datenübertragung 70
5.6 Portausgaben 75

6 EIN UNIVERSELLES USB-INTERFACE 79
6.1 Der AD-Wandler TLC1543 79
6.2 Zusammenfassung von AD-Kanälen 86
6.3 AD-Eingänge als Digitaleingänge 91
6.4 Gemeinsame Übertragung der Nutzdaten 89
6.5 Programmierung mit Delphi 101
6.6 Elektrische Eigenschaften der Interface-Ports 104
6.7 Stromversorgung 107
6.8 Das CompuLAB-USB 109

7 TREIBER 114
7.1 Umbau eines Beispiels-Treibers 114
7.2 Anpassung der Firmware 122
7.3 Die INF-Datei 123

8 MESSUNGEN UND EXPERIMENTE 126
8.1 Das Anwenderprogramm Compact 2000 126
8.2 Die Programmierumgebung in Compact 2000 130

9. DER USB-CONTROLLER AN2131 138
9.1 Technische Daten 138
9.2 Das EZ-USB-Starterkit 141
9.3 Das Default Anchor Device 143
9.4 Treiberaufrufe in Delphi 145

10 EIN FULLSPEED-USB-INTERFACE 148
10.1 Schaltung und Aufbau 148
10.2 Lesen von Portzuständen 151
10.3 Portausgaben 154
10.4 Basisfunktionen für USB-Zugriffe 158
10.5 Ein Logik-Analysator 163

11 DER AD-WANDLER MAX186 169
11.1 Anschlüsse und Betriebsarten 169
11.2 Das Anwenderprogramm Serai8/12-USB 171
11.3 Assembler-Routine zum AD-Wandler 174
11.4 Ein Speicher-Oszilloskop 181
11.5 Triggerung 186

12 DER I2C-BUS 192
12.1 Das Busprotokoll 192
12.2 Steuerregister 194
12.3 Portexpander PCF8574 196
12.4 I²C-EEPROMs 204
12.5 Der EEPROM-Bootloader 216

13 BULK-TRANSFER 220
13.1 Pipes und Endpoints 220
13.2 Ein Assembler-Programm zum Bulk-Transfer 222
13.3 Host-Software zum Bulk-Transfer 224
13.4 Portzugriffe über Bulk-Transfers 230

14 ANHANG 235
14.1 Die Delphi-Unit EZUSB2.PAS 235
14.2 Register des AN2131 245
14.3 Literatur 249
14.4 Bezugsadressen 249
14.5 Sachverzeichnis 250

1 Einleitung

Für Messgeräte und Interfaces in Labor-Anwendungen wurde bisher vielfach die RS232-Schnittstelle verwendet. Ein Umstieg auf den USB bringt Vorteile, aber auch Schwierigkeiten mit sich.

Der Universal Serial Bus erleichtert die Arbeit für den Anwender im allgemeinen und den Einsatz im Labor im Speziellen. Zunächst besitzt der USB eine größere Bandbreite als die serielle Schnittstelle. In der USB-Version 1.1 gibt es Lowspeed-Geräte mit 1,5 Mb/s und Fullspeed-Geräte mit 12 Mb/s. Bereits die kleinere Übertragungsgeschwindigkeit überragt die möglichen Baudraten an der seriellen Schnittstelle um ein Vielfaches. Bei einer Gegenüberstellung beider Schnittstellen muss aber auch berücksichtigt werden, dass ein einzelnes Gerät niemals die volle Bandbreite beanspruchen kann.

Bisher passierte es oft, dass alle Schnittstellen des PC bereits belegt waren. Der USB bringt hier den Vorteil, dass mit dem Anschluss eines zusätzlichen Busverteilers (Hub) wieder drei neue Ports freistehen. Insgesamt können bis zu 127 Geräte an den USB angeschlossen werden. Wenn also ein bestehendes Messsystem um einige Kanäle erweitert werden soll, ist das am USB prinzipiell möglich.

Der USB liefert gleich auch die Betriebsspannung für kleinere Geräte mit. Bis zu 100 mA können ohne weitere Probleme entnommen werden. Typische Laboranwendungen kommen oft mit wesentlich weniger aus. Der Wegfall eines zusätzlichen Versorgungskabels pro Gerät hilft im Kampf gegen den allgemeinen Kabelsalat.

USB-Geräte können grundsätzlich im laufenden Betrieb angeschlossen und getrennt werden. Das Betriebssystem lädt automatisch den erforderlichen Treiber. Diese erweiterte Plug-And-Play-Fähigkeit erleichtert den Umgang mit mehreren Geräten erheblich.

Die Anwendung des USB ist hier auf PCs mit dem Betriebssystem Windows 98 eingeschränkt. Unter Windows 95 ist USB zwar ab der B-Version prinzipiell möglich. Jedoch wird hier noch nicht die volle Zuverlässigkeit erreicht. Für die Arbeit mit diesem Buch wird daher Windows 98 empfohlen. Windows NT 4 unterstützt den USB nicht. Erst NT 5 bzw. Windows 2000 verwendet den USB. Allerdings fehlen teilweise noch die erforderlichen Treiber. Speziell die Anwendungen in diesem Buch wurden nur mit Windows98 getestet.

Ein Nachteil für den Hobbyanwender ist die große Komplexität des USB. Einfache Geräte wie an der RS232 sind hier nicht möglich. Ein USB-System verfügt mindestens über einen USB-fähigen Mikrocontroller mit einem umfangreichen Programm. Auf der PC-Seite ist ein Treiber erforderlich. Auch das Schreiben eines Treibers ist nicht einfach.

Wer ernsthafte Entwicklungen betreiben will, der steht noch vor einer weiteren Hürde. Jedes USB-Gerät verfügt über eine interne Hersteller-Nummer (Vendor-ID), die offiziell von der USB-Organisation vergeben wird. Ein Gerät kann also nur mit einer gültigen VID auf den Markt gebracht werden.

Dieses Buch versucht das Thema USB auch für den engagierten Hobbyanwender zugänglich zu machen. Es wird daher zunächst von im Handel erhältlichen USB-Produkten ausgegangen. Vielfach sind auch hier schon einfache Versuche möglich.

Einige Hersteller integrierter Bausteine für den USB unterstützen die Entwicklung durch Starter-Kits und im Internet veröffentlichte Beispielanwendungen. Sie ermöglichen den ersten Kontakt mit der Materie und unterstützen eigene Entwicklungen. Dieses Buch stützt sich auf Vorlagen der Halbleiterhersteller und zeigt, wie sich in kleinen Schritten eigene USB-Geräte entwickeln lassen. Beispielhaft wird in die Arbeit mit den entsprechenden Mikrocontrollern eingeführt. Zugleich werden die erforderlichen Grundlagen der Programmierung auf der PC-Seite gelegt. Als Programmiersprachen kommen Visual Basic und Delphi zum Einsatz.