|
Cover |
1 |
|
|
Copyright |
5 |
|
|
Vorwort |
6 |
|
|
Inhalt |
8 |
|
|
1. Einleitung |
16 |
|
|
1.1 Über dieses Buch |
16 |
|
|
1.2 Über Anglizismen |
17 |
|
|
1.3 Über Alternativen |
18 |
|
|
1.4 Über die Entwicklungsumgebung |
19 |
|
|
1.5 Über die erforderliche Hardware |
23 |
|
|
1.6 Über eine positive Einstellung zu Entwicklungsprojekten |
24 |
|
|
2. Schnittstellen für Test- und Messgeräte im Überblick |
27 |
|
|
2.1 CAMAC |
28 |
|
|
2.2 VME |
28 |
|
|
2.3 VXI |
28 |
|
|
2.4 PXI |
29 |
|
|
2.5 LXI |
29 |
|
|
2.6 GPIB |
31 |
|
|
2.7 USB |
32 |
|
|
2.8 UXI? |
33 |
|
|
3. USB-Geräteklassen |
34 |
|
|
3.1 Übersicht der USB-Klassen |
36 |
|
|
3.2 Das Werkzeug UVCView |
40 |
|
|
3.3 Test- und Messgeräte mit USB-Schnittstelle |
48 |
|
|
3.4 Der aktuelle Stand der Entwicklung |
48 |
|
|
3.5 "Missbrauch" der HID |
49 |
|
|
3.6 Klassenlosigkeit |
51 |
|
|
3.7 Ein Messgerät aus der Klasse USBTMC |
54 |
|
|
4. Die Geräte-Hardware |
58 |
|
|
4.1 Das PICDEM PS USB Demo Board |
58 |
|
|
4.2 Das Beispielgerät des Buchprojekts |
59 |
|
|
4.2.1 Spannungsversorgung |
59 |
|
|
4.2.2 Relais und Relais-Treiberschaltung |
60 |
|
|
4.2.3 Reset-Schaltung |
60 |
|
|
4.2.4 Load-Taster |
60 |
|
|
4.2.5 USB-Schnittstelle |
61 |
|
|
4.2.6 Erweiterungs-Steckverbinder |
61 |
|
|
4.2.7 Die Baugruppe |
63 |
|
|
4.3 Die Bauteile |
64 |
|
|
5. Grundsätzliches zur Datenübertragung |
67 |
|
|
5.1 Konfiguration der USB-Schnittstelle |
69 |
|
|
5.1.1 Das Konfigurationsregister |
73 |
|
|
5.1.2 Die Register BDnADRL und BDnAdRH |
78 |
|
|
5.1.3 Die Register BDnSTAT und BDnCNT |
79 |
|
|
5.2 USB Endpoint Control |
82 |
|
|
5.3 Initialisation der Interruptstruktur |
84 |
|
|
5.3.1 USB Interrupt Status Register (UIR) |
85 |
|
|
5.3.2 Besonderheiten bei Interrupts |
86 |
|
|
5.4 Transaktionen |
89 |
|
|
5.5 Transfers |
89 |
|
|
5.6 Control Transfers |
90 |
|
|
5.7 Transaktionen in Control Transfers |
91 |
|
|
5.7.1 Control Write |
92 |
|
|
5.7.2 Control Read |
92 |
|
|
5.7.3 No-Data Control |
92 |
|
|
5.8 Unbehandelte Control Transfers |
93 |
|
|
5.9 Maximal erlaubte Paketgrößen |
96 |
|
|
6 USB Kapitel 9–Universal Serial Bus Specification 2.0 |
97 |
|
|
6.1 Low-power bus-powered functions |
98 |
|
|
6.2 High-power bus-powered functions |
98 |
|
|
6.3 Self-powered functions |
98 |
|
|
6.4 Plug-in |
99 |
|
|
6.5 Betriebszustände eines angeschlossenen USB-Geräts |
99 |
|
|
6.5.1 Initialisierung des USB-Geräts |
100 |
|
|
6.5.2 USB-Reset |
101 |
|
|
6.5.3 Entadressiertes Gerät (Default) |
101 |
|
|
6.5.4 Adressiertes Gerät (Address) |
101 |
|
|
6.5.5 Konfiguriertes Gerät (Configured) |
102 |
|
|
6.5.6 Vom USB suspendiertes Gerät (Suspended) |
102 |
|
|
6.5.7 Besondere Erfordernisse des Suspended-Zustands |
105 |
|
|
6.6 USB-Tests mit Prototypen |
106 |
|
|
6.7 Erste Tests eines Prototypen ohne Treibersoftware |
107 |
|
|
6.8 Chapter 9 Tests mit USBCV |
109 |
|
|
6.8.1 Die Hersteller-Identifikationsnummer (Vendor ID) |
114 |
|
|
6.9 Debuggen mit USBCV |
119 |
|
|
6.10 Tests mit Treibersoftware |
121 |
|
|
6.11 USBIO von Thesycon |
121 |
|
|
6.11.1 Der USBIO Installation Wizard |
122 |
|
|
6.11.2 Die USBIO Demo Application |
124 |
|
|
7 Control Transfers |
127 |
|
|
7.1 Standard Device Requests |
127 |
|
|
7.2 Empfang eines Standard Device Requests |
130 |
|
|
7.3 Get Status |
137 |
|
|
7.3.1 GET_STATUS_DEVICE |
137 |
|
|
7.3.2 GET_STATUS_INTERFACE |
138 |
|
|
7.3.3 GET_STATUS_CONTROL_OUT |
140 |
|
|
7.3.4 GET_STATUS_CONTROL_IN |
141 |
|
|
7.3.5 GET_STATUS_BULK_OUT |
143 |
|
|
7.3.6 GET_STATUS_BULK_IN |
144 |
|
|
7.3.7 GET_STATUS_INTERRUPT_IN |
146 |
|
|
7.4 Clear Feature |
148 |
|
|
7.4.1 CLEAR_HALT_CONTROL_OUT |
149 |
|
|
7.4.2 CLEAR_HALT_CONTROL_IN |
150 |
|
|
7.4.3 CLEAR_HALT_BULK_OUT |
151 |
|
|
7.4.4 CLEAR_HALT_BULK_IN |
152 |
|
|
7.4.5 CLEAR_HALT_INTERRUPT_IN |
153 |
|
|
7.4.6 CLEAR_DEVICE_REMOTE_WAKEUP |
154 |
|
|
7.5 Set Feature |
154 |
|
|
7.5.1 SET_HALT_CONTROL_OUT |
154 |
|
|
7.5.2 SET_HALT_CONTROL_IN |
155 |
|
|
7.5.3 SET_HALT_BULK_OUT |
155 |
|
|
7.5.4 SET_HALT_BULK_IN |
156 |
|
|
7.5.5 SET_HALT_INTERRUPT_IN |
156 |
|
|
7.5.6 SET_DEVICE_REMOTE_WAKEUP |
160 |
|
|
7.5.7 SET_ADDRESS |
161 |
|
|
7.6 Get Descriptor |
162 |
|
|
7.6.1 GET_DESCRIPTOR_DEVICE |
162 |
|
|
7.6.2 GET_DESCRIPTOR_CONFIGURATION |
166 |
|
|
7.6.3 GET_DESCRIPTOR_LANGUAGE |
169 |
|
|
7.6.4 GET_STRING_MANUFACTURER |
172 |
|
|
7.6.5 GET_STRING_PRODUCT |
173 |
|
|
7.6.6 GET_STRING_SERIAL_NUMBER |
174 |
|
|
7.6.7 GET_STRING_CONFIGURATION |
177 |
|
|
7.6.8 GET_STRING_INTERFACE |
179 |
|
|
7.7 GET_CONFIGURATION |
180 |
|
|
7.8 SET_CONFIGURATION |
181 |
|
|
7.9 GET_INTERFACE |
186 |
|
|
7.10 SET_INTERFACE |
187 |
|
|
7.11 USBTMC Device Requests |
189 |
|
|
7.11.1 INITIATE_ABORT_BULK_OUT |
190 |
|
|
7.11.2 CHECK_ABORT_BULK_OUT_STATUS |
194 |
|
|
7.11.3 INITIATE_ABORT_BULK_IN |
197 |
|
|
7.11.4 CHECK_ABORT_BULK_IN_STATUS |
200 |
|
|
7.11.5 INITIATE_CLEAR |
203 |
|
|
7.11.6 CHECK_CLEAR_STATUS |
206 |
|
|
7.11.7 GET_CAPABILITIES |
208 |
|
|
7.11.8 INDICATOR_PULSE |
215 |
|
|
7.12 USB488 Subclass Device Requests |
218 |
|
|
7.12.1 READ_STATUS_BYTE |
218 |
|
|
7.12.2 REN_CONTROL |
224 |
|
|
7.12.3 LOCAL_LOCKOUT |
226 |
|
|
7.12.4 GO_TO_LOCAL |
227 |
|
|
8 BulkTransfers |
232 |
|
|
8.1 Der Bulk- OUT Endpoint |
232 |
|
|
8.2 Festlegung einer Einschränkung für Befehlsnachrichten |
235 |
|
|
8.3 Festlegung einer Einschränkung für Geräteantworten |
239 |
|
|
9 Interrupt Transfers |
241 |
|
|
9.1 Interrupt-IN Daten bei Bedienungsanforderung (SRQ) |
241 |
|
|
9.2 Interrupt-IN Daten bei READ_STATUS_BYTE Request |
241 |
|
|
10 Fragen und Antworten |
242 |
|
|
10.1 Das Nachrichtenaustauschprotokoll (MEP) |
242 |
|
|
10.1.1 IDLE |
244 |
|
|
10.1.2 READ |
244 |
|
|
10.1.3 QUERY |
245 |
|
|
10.1.4 SEND |
246 |
|
|
10.1.5 RESPONSE |
247 |
|
|
10.1.6 DONE |
247 |
|
|
10.1.7 Fehlerzustand DEADLOCK |
248 |
|
|
10.2 Transiente Aktionen |
248 |
|
|
10.2.1 Initialize |
248 |
|
|
10.2.2 Unterminated |
248 |
|
|
10.2.3 Interrupted |
248 |
|
|
10.2.4 Deadlocked |
249 |
|
|
10.3 MEP im Normalbetrieb |
249 |
|
|
10.4 Eine andere Methode der Synchronisation |
259 |
|
|
10.5 Herausforderungen an den Parser |
261 |
|
|
10.6 Die Funktionsweise des Parsers |
263 |
|
|
10.6.1 Aufbau der Befehls-Vergleichstabellen |
264 |
|
|
10.6.2 Schema der Tabellennamen |
265 |
|
|
10.6.3 Ein konkretes Beispiel für Vergleichstabellen |
266 |
|
|
10.6.4 Stack-Manipulationen |
270 |
|
|
10.7 Paramete |
274 |
|
|
10.7.1 |
275 |
|
|
10.7.2 |
276 |
|
|
10.7.3 |
276 |
|
|
10.7.4 |
277 |
|
|
10.7.5 |
278 |
|
|
10.7.6 |
278 |
|
|
10.7.7 |
279 |
|
|
10.7.8 |
279 |
|
|
10.7.9 |
280 |
|
|
10.7.10 |
281 |
|
|
10.7.11 |
281 |
|
|
10.7.12 |
282 |
|
|
10.7.13 |
282 |
|
|
10.7.14 |
282 |
|
|
10.8 Der Response Formatter |
282 |
|
|
11 Die Fernsteuerung von Test- und Messgeräten |
285 |
|
|
11.1 USBTMC als Fernsteuerschnittstelle |
285 |
|
|
11.2 Common Commands |
286 |
|
|
11.2.1 *RST (Reset Command) |
287 |
|
|
11.2.2 *CLS (Clear Status Command) |
289 |
|
|
11.2.3 *ESR? (Standard Event Status Register Query) |
289 |
|
|
11.2.4 *ESE (Standard Event Status Enable Command) |
297 |
|
|
11.2.5 *ESE? (Standard Event Status Enable Query) |
298 |
|
|
11.2.6 *OPC (Operation Complete Command) |
298 |
|
|
11.2.7 *OPC? (Operation Complete Query) |
299 |
|
|
11.2.8 *STB? (Read Status Byte Query) |
300 |
|
|
11.2.9 *SRE (Service Request Enable Command) |
307 |
|
|
11.2.10 *SRE? (Service Request Enable Query) |
309 |
|
|
11.2.11 *IDN? (Identification Query) |
309 |
|
|
11.2.12 *TST? (Self-test Query) |
312 |
|
|
11.2.13 *WAI (Wait-to-continue Command) |
313 |
|
|
11.2.14 *TRG (Trigger Command) |
314 |
|
|
11.3 SCPI |
314 |
|
|
11.4 SCPI-Befehle für Signalschalter |
316 |
|
|
11.5 SCPI-Befehle des Beispielgeräts |
317 |
|
|
11.5.1 [:]SYSTem:CAPability? |
317 |
|
|
11.5.2 [:][ROUTe]:CLOSe |
318 |
|
|
11.5.3 [:][ROUTe]:CLOSe? |
319 |
|
|
11.5.4 [:][ROUTe]:CLOSe:STATe? |
322 |
|
|
11.5.5 [:][ROUTe]:OPEN |
324 |
|
|
11.5.6 [:][ROUTe]:OPEN? |
324 |
|
|
11.5.7 [:][ROUTe]:OPEN:ALL |
327 |
|
|
11.6 Anbieterspezifische Befehle |
328 |
|
|
11.6.1 SETUP:VID |
329 |
|
|
11.6.2 SETUP:PID |
329 |
|
|
11.6.3 SETUP:BCDDEV |
330 |
|
|
11.6.4 SETUP:MANUfacturer |
331 |
|
|
11.6.5 SETUP:PRODuct |
331 |
|
|
11.6.6 SETUP:SERIalnr |
332 |
|
|
11.6.7 SETUP:FIRMware |
333 |
|
|
11.6.8 SETUP:4882 < boole_nr > |
333 |
|
|
11.6.9 SETUP:REN |
334 |
|
|
11.6.10 SETUP:TRIGger |
335 |
|
|
11.6.11 SETUP:SCPI |
336 |
|
|
11.6.12 SETUP:SR |
336 |
|
|
11.6.13 SETUP:RL |
337 |
|
|
11.6.14 SETUP:DT |
338 |
|
|
11.6.15 TEST:MAXCURR |
339 |
|
|
12 Die Anwendungsseite |
341 |
|
|
12.1 Agilent IO Control |
341 |
|
|
13 Ausblick |
355 |
|
|
13.1 Transfers |
355 |
|
|
13.2 SCPI |
355 |
|
|
13.3 Common Commands |
356 |
|
|
13.4 Fernsteuerbefehle |
356 |
|
|
13.5 Parameter |
357 |
|
|
13.6 Geräteklassen |
357 |
|
|
13.7 Beispielgerät |
357 |
|
|
13.8 Die Host-Seite |
358 |
|
|
14 Literaturliste |
359 |
|
|
Stichwortverzeichnis |
360 |
|