• Keine Ergebnisse gefunden

5509-7 Titelei:5509-7 Titelei 30.06.2008 14:53 Uhr Seite 3

5

Vorwort

Den ersten intensiven Kontakt mit dem Universal Serial Bus – nicht als Nutzer, son-dern als Entwickler – hatte ich im Jahr 2004. Es traten zeitgleich drei Ereignisse ein:

Ich sollte eine Diplomarbeit an der Fachhochschule Kiel mitbetreuen, das lungskonzept für ein neues Messgerät vorlegen und bei einem laufenden Entwick-lungsprojekt beraten. In allen drei Fällen sollte eine USB-Schnittstelle zum Einsatz kommen. Bei näherer Beschäftigung mit dem Thema stellte sich schnell heraus, dass der erforderliche Hardwareaufwand gering und eine USB-Schnittstelle kosten-günstig zu realisieren war. Alltagstauglichkeit und Zuverlässigkeit des USB waren mit zahlreichen Massenprodukten praktisch nachgewiesen, sodass es offenbar keine großen Schwierigkeiten bereiten sollte, diese Schnittstelle für neue Projekte vorzu-sehen.

Sowohl die eigenen Erfahrungen als auch Nachrichten aus Entwicklungsabteilun-gen machten jedoch bald deutlich, dass trotz scheinbar günstiger VoraussetzunEntwicklungsabteilun-gen ein Faktor in seiner Auswirkung auf die Laufzeit der Entwicklungsprojekte gewaltig unterschätzt wurde: der Zeitaufwand für die Realisierung der Treibersoftware. Das lag primär daran, dass für alle genannten Projekte die Geräteklasse USBTMC unter-stützt werden musste, und das war zur damaligen Zeit für die meisten Entwickler absolutes Neuland. Die Entwicklungs- und Testphase gestaltete sich besonders knifflig, wenn noch nicht alle erforderlichen Transfers realisiert waren, bzw. wenn Fehler in den Transfers vorkamen. So kam es für eine Reihe von Neuentwicklungen jener Zeit dazu, dass die Messgeräte zwar über die erforderlichen Hardware-Voraus-setzungen für USBTMC verfügten, diese aber nicht von der Firmware bedient wur-den. Aus Zeitdruck verwendete man für die neuen Messgeräte einfach die bis dato genutzten Schnittstellen wie GPIB, RS232 oder CAN – gelegentlich mit der Option, auf Kundenwunsch USBTMC nachzureichen.

Was uns allen damals vor allen Dingen fehlte, war ein Buch oder Fachaufsatz, um Planungs- und Entwicklungshilfe zu erhalten. Ich hoffe, dass mit dem vorliegenden Werk ein erster Schritt in diese Richtung gelungen ist, wenngleich vorweggenom-men werden soll, dass hier nicht alles dazu erschöpfend behandelt werden konnte.

Aber ein Anfang ist gemacht, und es wäre wünschenswert, wenn sich über den Dia-log mit Lesern, Entwicklern und anderen Autoren sowie Erfahrungen aus der Praxis und durch Zusammentragen und Dokumentieren allmählich umfassende Fachlite-ratur zum Thema USBTMC ergeben würde.

6

Über die E-Mail Adresse info@usbtmc.de können Sie Kontakt zu mir aufnehmen.

Kritiken, Anregungen und speziell Hinweise auf Fehler, die Sie im vorliegenden Buch finden, sind mir jederzeit willkommen.

Seevetal, im Mai 2008 Henry Bruhns

Vorwort

7

Inhalt

1 Einführung... 15 1.1 Über dieses Buch ... 15 1.2 Über Anglizismen ... 16 1.3 Über Alternativen ... 17 1.4 Über die Entwicklungsumgebung ... 18 1.5 Über die erforderliche Hardware ... 22 1.6 Über eine positive Einstellung zu Entwicklungsprojekten ... 23

2 Schnittstellen für Test- und Messgeräte im Überblick ... 26 2.1 CAMAC ... 27 2.2 VME ... 27 2.3 VXI ... 27 2.4 PXI ... 28 2.5 LXI ... 28 2.6 GPIB ... 30 2.7 USB ... 31 2.8 UXI? ... 32

3 USB-Geräteklassen ... 33 3.1 Übersicht der USB-Klassen ... 35 3.2 Das Werkzeug UVCView ... 39 3.3 Test- und Messgeräte mit USB-Schnittstelle ... 47 3.4 Der aktuelle Stand der Entwicklung ... 47 3.5 „Missbrauch“ der HID ... 48 3.6 Klassenlosigkeit ... 50 3.7 Ein Messgerät aus der Klasse USBTMC ... 53

4 Die Geräte-Hardware ... 57 4.1 Das PICDEM FS USB Demo Board ... 57 4.2 Das Beispielgerät des Buchprojekts ... 58 4.2.1 Spannungsversorgung ... 58 4.2.2 Relais und Relais-Treiberschaltung ... 59 4.2.3 Reset-Schaltung ... 59 4.2.4 Load-Taster ... 59

8

4.2.5 USB-Schnittstelle ... 60 4.2.6 Erweiterungs-Steckverbinder ... 60 4.2.7 Die Baugruppe ... 62 4.3 Die Bauteilliste ... 63

5 Grundsätzliches zur Datenübertragung... 66 5.1 Konfiguration der USB-Schnittstelle ... 68 5.1.1 Das Konfigurationsregister UCFG ... 72 5.1.2 Die Register BDnADRL und BDnAdRH ... 77 5.1.3 Die Register BDnSTAT und BDnCNT ... 78 5.2 USB Endpoint Control ... 81 5.3 Initialisation der Interruptstruktur ... 83 5.3.1 USB Interrupt Status Register (UIR) ... 84 5.3.2 Besonderheiten bei Interrupts ... 85 5.4 Transaktionen ... 88 5.5 Transfers ... 88 5.6 Control Transfers ... 89 5.7 Transaktionen in Control Transfers ... 90 5.7.1 Control Write ... 91 5.7.2 Control Read ... 91 5.7.3 No-Data Control ... 91 5.8 Unbehandelte Control Transfers ... 92 5.9 Maximal erlaubte Paketgrößen ... 95

6 USB Kapitel 9 – Universal Serial Bus Specification 2.0 ... 96 6.1 Low-power bus-powered functions ... 97 6.2 High-power bus-powered functions ... 97 6.3 Self-powered functions ... 97 6.4 Plug-in ... 98 6.5 Betriebszustände eines angeschlossenen USB-Geräts ... 98 6.5.1 Initialisierung des USB-Geräts ... 99 6.5.2 USB-Reset ... 100 6.5.3 Entadressiertes Gerät (Default) ... 100 6.5.4 Adressiertes Gerät (Address) ... 100 6.5.5 Konfiguriertes Gerät (Configured) ... 101 6.5.6 Vom USB suspendiertes Gerät (Suspended) ... 101 6.5.7 Besondere Erfordernisse des Suspended-Zustands ... 104 6.6 USB-Tests mit Prototypen ... 105 6.7 Erste Tests eines Prototypen ohne Treibersoftware ... 106 6.8 Chapter 9 Tests mit USBCV ... 108

Inhalt

9

6.8.1 Die Hersteller-Identifikationsnummer (Vendor ID) ... 113 6.9 Debuggen mit USBCV ... 118 6.10 Tests mit Treibersoftware ... 120 6.11 USBIO von Thesycon ... 120 6.11.1 Der USBIO Installation Wizard ... 121 6.11.2 Die USBIO Demo Application ... 123

7 Control Transfers ... 126 7.1 Standard Device Requests ... 126 7.2 Empfang eines Standard Device Requests ... 129 7.3 Get Status ... 136 7.4 Clear Feature ... 147 7.4.1 CLEAR_HALT_CONTROL_OUT ... 148 7.5 Set Feature ... 153 7.5.1 SET_HALT_CONTROL_OUT ... 153 7.6 Get Descriptor ... 161 7.6.1 GET_DESCRIPTOR_DEVICE ... 161

10

7.11 USBTMC Device Requests ... 188 7.11.1 INITIATE_ABORT_BULK_OUT ... 189 7.12 USB488 Subclass Device Requests ... 217 7.12.1 READ_STATUS_BYTE ... 217 7.12.2 REN_CONTROL ... 223 7.12.3 LOCAL_LOCKOUT ... 225 7.12.4 GO_TO_LOCAL ... 226

8 Bulk Transfers ... 231 8.1 Der Bulk- OUT Endpoint ... 231 8.2 Festlegung einer Einschränkung für Befehlsnachrichten ... 234 8.3 Festlegung einer Einschränkung für Geräteantworten ... 238

9 Interrupt Transfers ... 240 9.1 Interrupt-IN Daten bei Bedienungsanforderung (SRQ) ... 240 9.2 Interrupt-IN Daten bei READ_STATUS_BYTE Request ... 240

10 Fragen und Antworten... 241 10.1 Das Nachrichtenaustauschprotokoll (MEP) ... 241 10.1.1 IDLE ... 243 10.1.7 Fehlerzustand DEADLOCK ... 247 10.2 Transiente Aktionen ... 247

Inhalt

11

10.2.1 Initialize ... 247 10.2.2 Unterminated ... 247 10.2.3 Interrupted ... 247 10.2.4 Deadlocked ... 248 10.3 MEP im Normalbetrieb ... 248 10.4 Eine andere Methode der Synchronisation ... 258 10.5 Herausforderungen an den Parser ... 260 10.6 Die Funktionsweise des Parsers ... 262 10.6.1 Aufbau der Befehls-Vergleichstabellen ... 263 10.6.2 Schema der Tabellennamen ... 264 10.6.3 Ein konkretes Beispiel für Vergleichstabellen ... 265 10.6.4 Stack-Manipulationen ... 269 10.7 Parameter ... 273 10.7.1 <DECIMAL NUMERIC PROGRAM DATA> ... 274 10.7.2 <decimal_number> ... 275 10.7.8 <CHARACTER PROGRAM DATA> ... 278 10.7.9 <path_name> ... 279 10.7.10 <chann_nr_list> ... 280 10.7.11 <STRING PROGRAM DATA> ... 280 10.7.12 <string> ... 281 10.7.13 <Boolean> ... 281 10.7.14 <boole_nr> ... 281 10.8 Der Response Formatter ... 281

11 Die Fernsteuerung von Test- und Messgeräten ... 284 11.1 USBTMC als Fernsteuerschnittstelle ... 284 11.2 Common Commands ... 285 11.2.1 *RST (Reset Command) ... 286 11.2.2 *CLS (Clear Status Command) ... 288 11.2.3 *ESR? (Standard Event Status Register Query) ... 288 11.2.4 *ESE (Standard Event Status Enable Command) ... 296 11.2.5 *ESE? (Standard Event Status Enable Query) ... 297 11.2.6 *OPC (Operation Complete Command) ... 297 11.2.7 *OPC? (Operation Complete Query) ... 298 11.2.8 *STB? (Read Status Byte Query) ... 299

Inhalt

12

11.2.9 *SRE (Service Request Enable Command) ... 306 11.2.10 *SRE? (Service Request Enable Query) ... 308 11.2.11 *IDN? (Identification Query) ... 308 11.2.12 *TST? (Self-test Query) ... 311 11.2.13 *WAI (Wait-to-continue Command) ... 312 11.2.14 *TRG (Trigger Command) ... 313 11.3 SCPI ... 313 11.4 SCPI-Befehle für Signalschalter ... 315 11.5 SCPI-Befehle des Beispielgeräts ... 316 11.5.1 [:]SYSTem:CAPability? ... 316 11.5.2 [:][ROUTe]:CLOSe <channel list> ... 317 11.5.3 [:][ROUTe]:CLOSe? <channel list> ... 318 11.5.4 [:][ROUTe]:CLOSe:STATe? ... 321 11.5.5 [:][ROUTe]:OPEN <channel list> ... 323 11.5.6 [:][ROUTe]:OPEN? <channel list> ... 323 11.5.7 [:][ROUTe]:OPEN:ALL ... 326 11.6 Anbieterspezifische Befehle ... 327 11.6.1 SETUP:VID <decimal_number> ... 328 11.6.2 SETUP:PID <decimal_number> ... 328 11.6.3 SETUP:BCDDEV <decimal_number> ... 329 11.6.4 SETUP:MANUfacturer <string> ... 330 11.6.5 SETUP:PRODuct <string> ... 330 11.6.6 SETUP:SERIalnr <string> ... 331 11.6.7 SETUP:FIRMware <string> ... 332 11.6.8 SETUP:4882 < boole_nr > ... 332 11.6.9 SETUP:REN <boole_nr> ... 333 11.6.10 SETUP:TRIGger <boole_nr> ... 334 11.6.11 SETUP:SCPI <boole_nr> ... 335 11.6.12 SETUP:SR <boole_nr> ... 335 11.6.13 SETUP:RL <boole_nr> ... 336 11.6.14 SETUP:DT <boole_nr> ... 337 11.6.15 TEST:MAXCURR ... 338

12 Die Anwendungsseite ... 340 12.1 Agilent IO Control ... 340

13 Ausblick ... 354 13.1 Transfers ... 354 13.2 SCPI ... 354 13.3 Common Commands ... 355

Inhalt

13

13.4 Fernsteuerbefehle ... 355 13.5 Parameter ... 356 13.6 Geräteklassen ... 356 13.7 Beispielgerät ... 356 13.8 Die Host-Seite ... 357 14 Literaturliste... 358

Inhalt

26

2 Schnittstellen für Test- und