Finestre.  Virus.  I Quaderni.  Internet.  ufficio.  Utilità.  Autisti

Bel libro, spiega molte cose. Utile per chi vuole capire come vengono trasferiti i dati sul bus USB.

Introduzione 1
Per chi è questo libro: 2
Cosa troverai nel libro 2
Requisiti software 3
Requisiti hardware 4
Informazioni sul codice 4
Breve descrizione capitoli 4
Notazione 6
Grazie 7
PARTE I. INTRODUZIONE ALL'USB 9
Capitolo 1. Cos'è l'USB 11
1.1. Storia dell'USB 11
1.2. Confronto di USB con altre interfacce 14
1.3. USB Concetti di base 16
1.3.1. Architettura generale del bus 16
1.3.2. Architettura del bus fisico e logico 16
1.3.3. Componenti di USB 18
1.3.4. Proprietà del dispositivo USB 18
1.3.5. Proprietà del mozzo 19
1.3.6. Proprietà ospitanti 20
1.4. Esempi di dispositivi USB 20
1.4.1. Mouse e tastiera., 21
1.4.2. Monitor 21
1.4.3. Adattatori da USB a COM e da USB a LPT 22
1.4.4. Scanner 23
1.4.5. Modem 23
1.4.6. Altoparlanti 24
1.4.7. Unità flash 25
1.4.8. Mozzi 28
1.4.9. Tecnologia di misurazione 28
1.4.10. Gadget esotici 29
1.5. connessione di rete tramite USB 30
1.5.1. Convertitore da USB a Ethernet 31
1.5.2. Connessione diretta tramite porta USB 31
1.6. Trasferimento dati 31
1.6.1. Principi di comunicazione 32
1.6.2. Meccanismo di interruzione 32
1.6.3. Interfacce adattatore host 32
1.6.4. Capacità di accesso diretto alla memoria 34
1.6.5. Modalità di comunicazione 34
1.7. Installazione e configurazione dei dispositivi USB 35
1.7.1. Impostazioni del BIOS per USB 38
1.7.2. Risoluzione dei problemi 41
1.8. Limiti USB 45
1.9. Se acquisti un computer 46
1.9.1. HS e USB 2.0 non sono la stessa cosa! 46
1.9.2. scheda madre 47
1.9.3. Edificio 48
1.9.4. USB per modelli di computer "vecchi" 48
1.10. Risorse online per questo capitolo 49
capitolo 2 Hardware USB 51
2.1. Cavi e connettori 51
2.1.1. Tipi di cavi 52
2.1.2. Lunghezza cavo 53
2.1.3. connettori 53
2.2. Interfaccia fisica 55
2.2.1. Codifica dei dati 57
2.2.2. Identificazione del dispositivo 58
2.3. Nutrizione 59
2.3.1. Tipi di alimentazione dei dispositivi USB 59
2.3.2. Gestione dell'energia 60
2.3.3. Entrando in modalità basso consumo energetico 61
2.4. Risorse online per questo capitolo 61
SECONDA PARTE. ORGANIZZAZIONE INTERNA USB 63
Capitolo 3 Organizzazione interna di Tyre 65
3.1. Livelli logici della comunicazione 65
3.1.1. Software client livello 66
3.1.2. Driver di sistema USB livello 67
3.1.3. Controller host interfaccia livello 68
3.1.4. Bus periferico livello 68
3.1.5. Dispositivo logico USB livello 69
3.1.6. Livello funzionale del dispositivo USB 69
3.2. Trasferimento di dati a più livelli 69
3.3. Tipi di trasferimento dati 71
3.4. Sincronizzazione con trasmissione isocrona 73
3.5. Personale 77
3.6. Punti finali 78
3.7. Canali 79
3.8. Pacchetti 81
3.8.1. Formato dei pacchetti di token IN, OUT, SETUP e PING 83
3.8.2. Formato pacchetto SOF 83
3.8.3. Formato pacchetto dati 84
3.8.4. Formato del pacchetto di riconoscimento< 84
3.8.5. SPLIT * 84 formato pacchetto
3.9. Somma di controllo 85
3.9.1. Algoritmo di calcolo CRC 86
3.9.2. Calcolo software del CRC 87
3.10. Transazioni 90
3.10.1. Tipi di transazione 91
3.10.2. Conferma della transazione e controllo del flusso 92
3.10.3. Protocolli di transazione 93
Capitolo 4. Organizzazione interna del dispositivo 96
4.1. Richieste a dispositivi USB 96
4.1.1. Pacchetto di configurazione 96
4.1.2. Interrogazioni dispositivo standard 99
4.1.3. Descrittori del dispositivo 105
Capitolo 5. Organizzazione interna dell'host e degli hub 123
5.1. Mozzi 123
5.1.1. Interazione del controller host con l'hub 126
5.1.2. Descrittore mozzo 127
5.1.3. Hub richiede 129
5.1.4. Richiedi CLEAR_HUB_FEATURE 130
5.1.5. Richiedi CLEAR PORT_FEATURE 130
5.1.6. Richiesta GET_BUS_STA TE 131
5.1.7. Richiedi GET_HUB_DESCRfPTOR 131
5.1.8. Richiedi GET_HUB_STATUS 131
5.1.9. Richiedi GET_PORT_STA TUS 132
5.1.10. Richiedi SET_HUB_DESCRIPTOR 134
5.1.11. Richiedi SET_HUB_FEATURE 134
5.1.12. richiesta SET PORT FEATURE. 134
5.2. Collaborazione dispositivi con velocità diverse 135
Capitolo 6. USB senza PC 137
6.1. connettori OTG 138
6.2. Tipi di dispositivi OTG 138
6.3. Descrittore dispositivo OTG 139
6.4. Risorse online per questo capitolo 140
PARTE III. PRATICA DI PROGRAMMAZIONE 141
Capitolo 7. Supporto USB in Windows 143
7.1. Modello WDM 144
7.2. Interazione con il driver USB 146
Capitolo 8 Dispositivi HID * 149
8.1. Proprietà del dispositivo HID 149
8.2. Come comunicare con un dispositivo HID 151
8.3. Installazione di un dispositivo HID 152
8.4. Identificazione del dispositivo HID 152
8.4.1. Identificazione dei dispositivi di avvio 153
8.4.2. Descrittore di configurazione del dispositivo HID 153
8.4.3. Descrittore HID 154
8.4.4. Descrittore di rapporto 156
8.5. Struttura del descrittore del rapporto 156
8.5.1. Struttura degli elementi del rapporto 156
8.5.2. Segnala i tipi di elementi 157
8.5.3. Esempi di descrittori 165
8.6. Richieste al dispositivo HID 168
8.6.1. richiesta GET_REPORT. 169
8.6.2. SET_REPORT richiesta 169
8.6.3. richiesta GETJDLE. 170
8.6.4. Richiedi SETJDLE 170
8.6.5. Richiedi GET_PROTOCOL 171
8.6.6. Richiedi SET_PROTOCOL 171
8.7. Strumenti 171
8.8. Interazione con il driver HID 172
Capitolo 9 Introduzione a WDM 181
9.1. Strati driver 183
9.2. Nomi simbolici dei dispositivi 184
9.3. Procedure di base del driver WDM 189
9.3.1. Procedura DriverEntry 190
9.3.2. Procedura AddDevice 192
9.3.3. Procedura di scarico 194
9.3.4. Procedure operative del conducente 196
9.3.5. Servire richieste IOCTL 203
9.4. Caricamento del driver e chiamata del driver Procedure 209
9.4.1. Procedura operativa del driver 209
9.4.2. Registrazione del conducente 210
9.4.3. Con riferimento alle procedure di lavoro 217
9.4.4. Riporre il driver all'interno file eseguibile 218
9.5. Strumenti per la creazione di driver 220
9.5.1. NuMega Driver Studio 220
9.5.2. Jungo WinDriver 220
9.5.3. Jungo driver del kernel 220
Capitolo 10 Specifiche USB PnP 221
10.1. informazioni generali sul sistema Plug and Play 221
10.1.1. Compiti e funzioni Plug and Play 221
10.1.2. Avvio di una procedura PnP 222
10.1.3. Componenti software PnP 224
10.2. Plug and Play per USB 225
10.2.1. Configurazione dei dispositivi USB 226
10.2.2. Numerazione dispositivo USB 226
10.2.3. ID dispositivo USB PnP 228
10.3. Ottenere un elenco di dispositivi USB 229
10.4. File INF 234
10.4.1. Struttura file INF 234
10.4.2. Sezione Versione 235
10.4.3. Sezione produttore 237
10.4.4. Directory di destinazione Sezione 239
10.4.5. Modello 241 Descrizione Sezione
10.4.6. Sezione xxx.AddReg e xxx.DelReg. 242
10.4.7. Sezione xxx.LogConfig 244
10.4.8. Sezione xxx.CopyFiles 244
10.4.9. Sezione Stringhe 245
10.4.10. Collegamenti alla sezione 246
10.4.11. Creazione e verifica dei file INF 247
10.4.12. Installazione di dispositivi utilizzando un file INF 248
10.5. Rami di registro per USB 249
Capitolo 11 Funzionalità del BIOS 251
11.1. Servizio BIOS 1AH 251
11.1.1. Funzione B101H - rilevamento della presenza di PCI BIOS 252
11.1.2. Funzione В102Н: ricerca di un dispositivo PCI tramite identificatori
dispositivo e produttore 253
11.1.3. Funzione B103H: cerca un dispositivo PCI in base al codice classe 254
11.1.4. Funzione B108H - lettura registro configurazione (Byte) 255
11.1.5. Funzione ВУ9Н - lettura del registro di configurazione (Word) 256
11.1.6. Funzione B10AN - lettura registro configurazione (DWord) 256
11.1.7. Funzione В10ВН - scrittura registro configurazione (Byte) 257
11.1.8. Funzione B10CH - scrittura registro configurazione (Word) 257
11.1.9. Funzione B10DH - Scrivi registro di configurazione (DWord) 258
11.2. Esempio di utilizzo 259
PARTE IV. CREAZIONE DI DISPOSITIVI USB 283
Capitolo 12 Periferiche USB 285
12.1. Patatine Atmel 286
12.1.1. Microcontrollori con architettura MSC-51 286
12.1.2. Hub controller 289
12.1.3. Hub a microprocessore con core AVR 289
12.1.4. Altri circuiti integrati Atmel 290
12.2. Chip Cygnal 291
12.2.1. Microprocessori C8051F320 e C8051F321 291
12.2.2. Altri circuiti integrati Cygnal 293
12.3. Chip FTDI 296
12.3.1. Chip FT232AM e FT232BM 297
12.3.2. Chip FT245AM e FT245BM 298
12.3.3. Chip FT2232BM 299
12.3.4. Chip FT8U100AX 300
12.3.5. Debug kit e moduli 301
12.3.6. Autisti 302
12.3.7. Utenze aggiuntive 303
12.3.8. Altri moduli 304
12.4. Chip Intel 304
12.5. Chip Microchip 308
12.6. I circuiti integrati Motorola 308
12.7. Chip Philips 309
12.7.1. Microchip USB 310
12.7.2. Mozzi 311
12.7.3. Altri chip Philips 313
12.8. Microcircuiti Texas Instruments 314
12.9. Chip Trans Dimensione 317
12.10. Circuiti integrati di protezione dell'alimentazione 318
12.11. Risorse online per questo capitolo 319
Capitolo 13 Dispositivo HID Atmel AT89C5131 322
13.1. Schema strutturale di АТ89С5131 322
13.2. USB registra AT89C5131 324
13.2.1. Registrati USBCON 324
13.2.2. Registrati USBADDR 326
13.2.3. Registrati USBINT 327
13.2.4. Registrati USBIEN 328
13.2.5. Registro UEPNUM. 329
13.2.6. Registra UEPCONX 330
13.2.7. Registro UEPSTAX. 331
13.2.8. Registro UEPRST. 334
13.2.9. registro UEPINT. 335
13.2.10. Registrati UEPIEN 336
13.2.11. Registra UEPDATX 337
13.2.12. Registrati UBYCTLX 337
13.2.13. Registrati UFNUML 338
13.2.14. Registrati UFNUMH. 338
13.3. Circuito AT89S5131 338
13.4. Strumenti di programmazione 339
13.4.1. compilatore 341
13.4.2. Programmatore 342
13.5. Programma per microprocessore 349
13.5.1. La prima versione del programma per АТ89С5131 349
13.5.2. Aggiunta di descrittori di stringa 369
13.5.3. Aggiunta di endpoint 374
13.5.4. Creazione di un dispositivo HID 377
13.5.5. Comunicazione con un dispositivo HID 381
13.6. Lettura dei report in Windows 388
13.7. Funzioni aggiuntive WindowsXP396
13.8. Dispositivo con segnalazioni multiple 397
Capitolo 14 Creazione di un dispositivo USB ATMEL AT89C5131 402
14.1. Dispositivo non HID 402
14.2. Creazione di un driver con Driver Studio 405
14.2.1. Qualche parola sulla libreria Driver Studio 407
14.2.2. Altre classi Driver Studio 411
14.2.3. Creazione di un modello di driver utilizzando Driver Studio 412
14.2.4. Perfezionamento del modello di driver 422
14.2.5. Metodi di base della classe del dispositivo 423
14.2.6. Implementazione della lettura dei dati 426
14.2.7. Installazione del driver 428
14.2.8. Lettore dati 429
14.2.9. Lettura di dati da altri tipi di endpoint 438
14.2.10. Pulisci il driver USB 439
Capitolo 15 Utilizzo dei chip FTDI 457
15.1. Schema funzionale FT232BM 457
15.2. Circuito FT232BM 460
15.3. Funzioni D2XX 460
15.4. Transizione da COM a USB 465
15.4.1. 465 Descrizione del circuito del convertitore
15.4.2. Impostazione della velocità di trasmissione 467
PARTE V. MANUALE 469
Capitolo 16 Caratteristiche di Windows 471
16.1. Funzioni CreateFile e CloseHandle: aprire e chiudere un oggetto.471
16.1.1. Ulteriori informazioni 472
16.1.2. Valore restituito 472
16.1.3. Chiama l'esempio 472
16.2. Funzione di lettura file: lettura dati 473
16.2.1. Ulteriori informazioni 474
16.2.2. Valore restituito 474
16.2.3. Chiama l'esempio 474
16.3. Funzione WriteFile: trasferimento dati 475
16.3.1. Ulteriori informazioni 476
16.3.2. Valore restituito 476
16.3.3. Chiama l'esempio 476
16.4. Funzione ReadFileEx. Dati di lettura APC 477
16.4.1. Valore restituito 479
16.4.2. Ulteriori informazioni 479
16.4.3. Chiama l'esempio 479
16.5. Funzione WriteFileEx: trasferimento dati APC 480
16.5.1. Valore restituito 481
16.5.2. Chiama l'esempio 481
16.6. Funzione WaitForSingleObject in attesa di un segnale
stato dell'oggetto 482
16.6.1. Valore restituito 482
16.7. Funzione WaitForMultipleObjects: in attesa di un segnale
oggetto stati 483
16.7.1. Valore di ritorno 484
16.8. Funzione GetOverlappedResult risultato dell'operazione asincrona 484
16.8.1. Valore di ritorno 485
16.9. Funzione DeviceIoControl: controllo diretto del driver 485
16.9.1. Valore restituito 487
16.10. Funzione QueryDosDevice: ottenere il nome del dispositivo
con il suo nome DOS 487
16.10.1. Valore di ritorno 488
16.10.2. Chiama l'esempio 488
16.11: Definisci funzione dispositivo DOS: Operazioni nome dispositivo DOS 489
16.11.1. Valore di ritorno 490
16.11.2. Chiama l'esempio 490
Capitolo 17 Funzioni API HID 492
17.1. Funzione HidD_Hello: Controllo libreria 492
17.2. Funzione HidD_GetHidGuid: ottieni il GUID 492
17.3. Funzione HidD_GetPreparsedData: creazione di un descrittore di dispositivo 493
17.4. Funzione HidD_FreePreparsedData: liberare l'handle del dispositivo 493
17.5. Funzione HidD_GetFeature: ottenere il report FEATURE 494
17.6. Funzione HidD_SetFeature: invio report FEATURE 494
17.7. Funzione HidD_GetNumInputBuffers: ottenere il numero di buffer 495
17.8. Funzione HidD_SetNumInputBuffers: impostazione del numero di buffer 495
17.9. Funzione HidD_GetAttribntes: Ottieni gli attributi del dispositivo 495
17.10. Funzione HidD_GetMamifactnrerStnng. ottenere la stringa del produttore 496
17.11. Funzione HidD_GetProductString. ottieni la linea di prodotti 497
17.12. Funzione HidD_ Ottieni Serial MumberString. ottenere una stringa
numero di serie 497
17.13. Funzione HidD_GetIndexedString. ottieni la riga all'indice 498
17.14. Funzione HidDjGetlnputReport. ricevere un rapporto INPUT 498
17.15. Funzione HidD_SetOutputReport. invia il rapporto OUTPUT 499
17.16. Funzione HidP_GetCaps: ottieni le proprietà del dispositivo 499
17.17. Funzione HidP_MaxDataListLength: recupero delle dimensioni del report 500
Capitolo 18 Controllore host UCH 502
18.1. 502 Registri di controllo del controller host
18.1.1. Registro comandi USB (USBCMD) ..504
18.1.2. Registro di stato USB (USBSTS) 506
18.1.3. Registro di controllo delle interruzioni (USBINTR) 506
18.1.4. Registro numero telaio (FRNUM) 507
18.1.5. Registro degli indirizzi di base del frame (FLBASEADD) 508
18.1.6. Start of Frame Modifier Register (SOFMOD) 508
18.1.7. Registro dello stato e del controllo delle porte (PORTSC) 509
18.2. Strutture dati del controller host UCH 510
18.2.1. Elenco telai 510
18.2.2. Descrittore di trasmissione i 511
18.2.3. Intestazione coda 514
18.3. Elaborazione dell'elenco dei descrittori UCH 516
Capitolo 19 Strumenti 518
19.1. Strumenti di Microsoft Visual Studio 518
19.1.1. Dipende 518
19.1.2. Ricerca errori 518
19.1.3. GuidGen 518
19.2. Strumenti Microsoft DDK 520
19.2.1. Albero dei dispositivi 520
19.2.2. DevCon.-521
19.2.3. Chklnf e Genlnf. 526
19.3. CompuWare Corporation 527 strumenti
19.3.1. Monitoraggio 527
19.3.2. Collegamento simbolico 527
19.3.3. EzDriverInstaller 527
19.3.4. WdmSniff 527
19.4. Strumenti di sistema 528
19.4.1. WinObj 528
19.5. Strumenti USB Forum 531
19.5.1. Strumento descrittore HID 531
19.6. Strumenti software HDD 533
19.7. Sourceforge 533 Strumenti
APP 535
Appendice 1 Funzionalità aggiuntive 537
Appendice 2. Tabella degli identificatori linguistici (LangID) 539
Appendice 3. Tabella dei codici fornitore (Vendor ID, Device ID) 543
Appendice 4 Descrizione del CD 546
Letteratura 548
Indice 549

Ma non è sufficiente collegare fisicamente il dispositivo al computer, è necessario anche stabilire uno scambio di dati tra di loro. Come scegliere una porta e organizzare una connessione? Alcuni anni fa, la soluzione standard era utilizzare una porta COM. A proposito, vari specialisti installano ancora 8, 16 o anche 32 porte COM su computer industriali (esiste un'intera categoria di diverse schede di espansione PCI per porte seriali, controller, ecc.). Pertanto, se è necessario collegarne diversi dispositivi esterni con un'interfaccia RS-232, potrebbero essere necessari costosi adattatori e schede di espansione esotiche che, secondo l'antica tradizione, navigano in Russia per settimane su battelli a vapore. A proposito, il nome di un normale adattatore "adattatore DB9m / DB25f" può solo causare irritazione al gestore di un negozio di computer.

Cos'è un dispositivo HID

Ora quasi tutti i dispositivi sono collegati a un computer tramite un'interfaccia USB. Pertanto, molti nuovi PC non dispongono affatto di una porta COM.

Interfaccia USB: una soluzione tipica per associare un nuovo dispositivo esterno a un computer, più precisamente, è un'interfaccia HID basata sul protocollo USB 1.1.

Sebbene molte persone pensino che l'interfaccia HID (Human Interface Device) sia esclusivamente per tastiera, mouse e joystick, è adatta a molte soluzioni relative all'interfacciamento di dispositivi esterni e un computer.

Se l'utente ha bisogno di eseguire uno scambio di dati a bassa velocità (fino a 64 kbps) e allo stesso tempo è desiderabile ridurre il tempo per lo sviluppo noioso dei propri driver, HID è abbastanza adatto a loro. L'output sarà semplice e tranquillo soluzione moderna basato su un'interfaccia software USB standard con supporto garantito su tutte le piattaforme software comuni.

Proprietà del dispositivo HID

Dal punto di vista dell'organizzazione del supporto software per un dispositivo HID, tutto sembra piuttosto interessante: lavorare sotto Controllo Windows puoi creare rapidamente un codice compatto comprensibile basato su algoritmi collaudati già pronti. In questo caso, lo sviluppatore avrà tutto il tempo per implementare il proprio protocollo di scambio dati di primo livello, poiché il livello di astrazione necessario è già organizzato dal protocollo HID (vedi tabella). Inoltre, è facile per un programmatore eseguire il debug di un protocollo di scambio scritto (ovviamente, se esiste un dispositivo HID funzionante) - a causa della relativa rigidità del protocollo stesso, è sufficiente sviluppare semplicemente un programma per supportare il dispositivo da un computer. Lo farei ancora! Molto lavoro è già stato fatto dal creatore del dispositivo HID.

Stabilire lo scambio di dati tra un dispositivo HID e un computer

Per descrivere l'interazione di un dispositivo HID con un computer, useremo il termine "host". In questo caso, si intende il dispositivo di controllo in generale architettura fisica comunicazione tramite il protocollo USB. Quindi, tutte le porte di un computer sono host. È possibile collegare ad essi vari dispositivi USB (unità flash, mouse, webcam, fotocamere, ecc.) che non dispongono di un host. L'host fornisce rilevamento, connessione, disconnessione, configurazione del dispositivo, nonché raccolta di statistiche e gestione dell'alimentazione.

Il dispositivo HID stesso può impostare la frequenza di polling, durante la quale viene rilevata la presenza di eventuali nuovi dati. Ciò significa che anche a un livello così basso, il programmatore può fidarsi del sistema, poiché la velocità di polling e altri parametri di comunicazione devono essere preimpostati nel programma del controller del dispositivo HID. Questo è il modo in cui il protocollo HID differisce da descrizione generale USB 1.1 o USB 2.0, che non ha rigidi requisiti di protocollo. Tuttavia, per attività specifiche che richiedono un elevato livello di sicurezza, può essere piuttosto difficile eliminare i sondaggi ciclici, quando vengono costantemente trasmessi quasi gli stessi blocchi di dati.

Caratteristiche della programmazione dei dispositivi HID

I dispositivi HID hanno descrittori speciali. Quando l'host determina che il dispositivo appartiene alla classe HID, ne trasferisce il controllo al driver appropriato. Si presume che l'ulteriore scambio di dati venga effettuato sotto la sua guida.

Su Windows, il servizio di sistema HidServ è responsabile dell'accesso ai dispositivi HID. Maggiori dettagli sulle funzioni delle richieste ai dispositivi HID e altre caratteristiche del lavoro con il driver HID sono descritti nel lavoro di P. V. Agurov “Interfaccia USB. La pratica dell'uso e della programmazione” (San Pietroburgo: BHV-Petersburg, 2005).

Programmazione di dispositivi HID al "livello superiore"

La dura vita dei programmatori "applicati" che lavorano su Pascal è facilitata dal collaudato modulo HID. PAS, il guscio per nascondere. dll (Hid User Library - come specificato nelle proprietà del file). I commenti al file dicono che è basato sui moduli hidsdi.he hidpi.h di Microsoft Corporation. E il file HID stesso. PAS fa parte del pacchetto JEDI().

Per lavorare con un dispositivo HID in Ambiente Delfi per win32, viene utilizzato il componente TJvHidDeviceController, che è un comodo gestore globale per l'accesso ai dispositivi HID. E già sulla base, puoi ottenere un'istanza dell'oggetto per lavorare con un dispositivo specifico.

Principali proprietà ed eventi del componente TJvHidDeviceController

Consideriamo più in dettaglio il componente TJvHidDeviceController. L'evento OnArrival si attiva quando un dispositivo HID arriva (si connette) al sistema, l'accesso al dispositivo viene fornito nel gestore di questo evento tramite un'istanza della classe TJvHidDevice. Il semplice evento OnDeviceChange reagisce a un cambiamento nello stato del dispositivo, segnala solo cambiamenti nel sistema. L'evento OnDeviceData si attiva quando i dati arrivano da uno dei dispositivi HID e passano quanto segue al gestore: HidDev: TJvHidDevice; - il dispositivo da cui sono stati ricevuti i dati;

L'evento OnDeviceDataError notifica un errore di trasferimento dati passando i parametri HidDev alla procedura di elaborazione: TJvHidDevice; - Dispositivo HID ed errore: DWORD; - codice di errore. L'evento OnDeviceUnplug notifica che un dispositivo è stato rimosso dall'elenco dei dispositivi installati nel sistema. I tipi di gestori di eventi su Plug and Unplug sono gli stessi (nel testo sorgente: TJvHidUnplugEvent = TJvHidPlugEvent). Un oggetto della classe TJvHidDevice corrispondente al dispositivo HID viene passato al gestore.

Per enumerare sequenzialmente i dispositivi HID disponibili nel sistema chiamando il metodo Enumerate, si intende l'evento OnEnumerate, ovvero, nel gestore eventi, i dispositivi trovati vengono trasmessi sequenzialmente come oggetti. Questo evento viene attivato forzatamente dal metodo Enumerate, utilizzato per "passare" i dispositivi HID esistenti attraverso il gestore, ad esempio, durante il controllo dello stato dei dispositivi HID avviato dall'host (computer).

L'evento OnRemoval si attiva quando il dispositivo viene fisicamente rimosso dal sistema e ha lo stesso tipo di gestore TJvHidUnplugEvent di OnDeviceUnplug. La funzione CountByProductName restituisce il numero di dispositivi che corrispondono al nome del prodotto specificato nell'argomento e CountByVendorName restituisce il numero di nomi di fornitori specificati nell'argomento.

Principali proprietà ed eventi della classe TJvHidDevice

La classe TJvHidDevice è una rappresentazione virtuale di un singolo dispositivo HID. Un nuovo oggetto di questa classe può essere ottenuto, come già accennato, dall'evento OnArrival o OnEnumerate. La funzionalità delle classi TJvHidDeviceController e TJvHidDevice è parzialmente duplicata, poiché la prima di esse integra un toolkit comune per lavorare con una serie di dispositivi HID disponibili nel sistema e un meccanismo per accedere a uno di essi. Un dispositivo può essere identificato in modo univoco dalle proprietà SerialNumber, ProductName e VendorName. È possibile utilizzare l'evento OnData per ottenere informazioni sull'arrivo dei dati utilizzando tale oggetto. I dati vengono inviati tramite il metodo WriteFile (in senso stretto, tramite una funzione). WriteFile è un wrapper per la funzione di sistema WriteFile (kernel32).

Per controllare il fatto che il dispositivo venga rimosso, devi assegnare il tuo gestore all'evento OnUnplug. Prima di iniziare lo scambio di dati con un dispositivo HID, è necessario assicurarsi che tale scambio sia possibile utilizzando HasReadWriteAccess. Questa classe ha anche un evento OnDataError separato per il verificarsi di un errore di scambio di dati.

E ora diamo un'occhiata ai frammenti di codice di un progetto "live" che implementa un'applicazione client di test per organizzare lo scambio di dati con un dispositivo non standard: chip card in plastica basate su HID. Nella lotta per il realismo, l'autore si è preso la libertà di non eliminare dagli elenchi i collegamenti di codice tecnologico "extra".

Il metodo ScanDevices (Listato 1) è progettato per avviare il processo di ricerca nel sistema del dispositivo HID richiesto. La maggior parte del codice, ad eccezione della chiamata al metodo Enumerate, è facoltativa e fornisce flessibilità applicativa, ad esempio, in modo da poter aggiungere la possibilità di lavorare su un'interfaccia non HID allo stesso programma di test. Il metodo AddError stampa le informazioni di debug nella finestra mentre il programma è in esecuzione.

Il listato 2 mostra il gestore dell'evento OnEnumerate per trovare il dispositivo esterno richiesto. Per semplicità, assumeremo che il programma possa funzionare con un solo dispositivo del tipo di cui ha bisogno.

Prima di considerare l'ulteriore implementazione del progetto, dovremmo parlare un po' del formato di scambio dati di primo livello accettato, ovvero della struttura progettata per essere un intermediario tra i metodi di ricezione e trasmissione dei dati e lo specifico compito applicato da risolvere . Il fatto è che qui allo sviluppatore viene data l'opportunità di realizzare le proprie capacità creative. O meglio, sviluppatori, perché il processo di creazione di un nuovo protocollo è molto spesso bidirezionale, e il primo violino lo suona chi ha più difficoltà ad implementare l'algoritmo di scambio. In generale, qualunque sia il protocollo di scambio, è sempre bello rendere ogni entità software il più visiva e autosufficiente possibile, anche a scapito di alcune tradizioni generalmente accettate. Per La decisione migliore- uno che verrà implementato in breve tempo con un minimo riferimento a ambiente software e con un grande potenziale di ulteriore sviluppo. Sulla base di questi principi, è stato creato un protocollo di scambio di primo livello, dove il concetto principale è "comando". Il listato 3 mostra quanto l'autore ami i dati delle stringhe, cosa che lo ha salvato più di una volta durante il debug dei moduli del programma. Che meraviglia che abbiamo persino un tipo String! Tutti i comandi del protocollo sono suddivisi in categorie (classi), all'interno delle quali è presente un codice di comando che ne caratterizza univocamente lo scopo. Il parametro edParam viene utilizzato per inviare dati al dispositivo e il parametro edAnswerData contiene i dati ricevuti dal dispositivo. Il tipo stringa dei membri record descritti consente di manipolare liberamente e visivamente i dati nel formato stringa HEX. E ciò che è più piacevole, il formato del record descritto si trova ideologicamente da qualche parte nel mezzo tra il suo scopo diretto e le varie forme della sua presentazione (INI, HEX, XML, ecc.)

L'esecuzione del comando, ovvero l'invio di dati al dispositivo, viene implementata utilizzando l'invio di pacchetti di dati con una lunghezza di 8 byte (Lista 4). Questa lunghezza non è l'unica decisione, questa scelta è dettata dai requisiti del protocollo di livello superiore e può essere diversa in ogni caso specifico. Questa è quella che si chiama una questione di gusti. Lo strano flag IsUSBMode nel metodo ExecuteCommand (Lista 5 in PC Disk World) viene lasciato come promemoria che invece di lavorare con USB, potremmo aver bisogno di usare una porta COM o qualche altra interfaccia. All'inizio del gruppo di dati inviato, una sequenza di sincronizzazione di un formato scelto arbitrariamente (ad esempio, 3E3E3E2B) viene trasmessa al dispositivo, informando il dispositivo che ha dati completamente legali all'ingresso. Lascia che te lo ricordi in questo caso noi stiamo parlando non tanto sull'HID, ma su uno specifico protocollo di primo livello, ideologicamente separato dall'hardware e progettato per risolvere specifici problemi applicati.

Nel gestore GetDataExecutor dei dati ricevuti dal dispositivo (pacchetto di 8 byte), è stato utilizzato un evento OnNewInputData appositamente creato per trasferire i dati inizialmente elaborati per ulteriori elaborazioni, indicando i loro vecchi e nuovi valori (Lista 6 su "World del disco del PC"). Pertanto, gli eventi di arrivo di dati grezzi e un'indicazione di ulteriore elaborazione vengono disaccoppiati, consentendo l'aggiunta di alcuni algoritmi di avviso specifici in una fase iniziale per informazioni di input errate, ripetute o non necessarie.

Gli esempi di lavoro con un dispositivo HID presentati qui illustrano l'idea generale dell'articolo: la relativa semplicità della programmazione di dispositivi HID non standard utilizzando gli strumenti Delphi.

introduzione
Per chi è questo libro?
Cosa troverai nel libro
Requisiti software
Requisiti hardware
A proposito del codice
Breve descrizione dei capitoli
Notazione
Grazie
Feedback
Parte I. Comprensione dell'USB
Capitolo 1 Specifiche USB
1.1. Cos'è l'USB e perché è necessario
1.1.1. Architettura USB generale
1.1.2. Architettura fisica e logica USB
1.1.3. Componenti USB
1.1.4. Proprietà del dispositivo USB
1.1.5. Principi di comunicazione
1.1.6. Meccanismo di interruzione
1.1.7. Modalità di comunicazione
1.1.8. Livelli logici della comunicazione
1.1.8.1. Livello software client
1.1.8.2. Livello del driver di sistema USB
1.1.8.3. Livello del controller host dell'interfaccia
1.1.8.4. livello del bus periferico USB
1.1.8.5. Livello dispositivo logico USB
1.1.8.6. Livello funzionale del dispositivo USB
1.1.9. Trasferimento dati per livelli
1.1.10. Tipi di trasferimento dati
1.1.11. Personale
1.1.12. Endpoint
1.1.13. Canali
1.1.14. Pacchetti
1.1.14.1. Formato dei pacchetti di token IN, OUT, SETUP e PING
1.1.14.2. Formato pacchetto SOF
1.1.14.3. Formato pacchetto dati
1.1.14.4. Formato del pacchetto di riconoscimento
1.1.14.5. Formato pacchetto SPLIT
1.1.15. Controlla la somma
1.1.15.1. Algoritmo di calcolo CRC
1.1.15.2. Software per il calcolo del CRC
1.1.16. Transazioni
1.1.16.1. Tipi di transazione
1.1.16.2. Conferma della transazione e controllo del flusso
1.1.16.3. Protocolli di transazione
1.2. Richieste a dispositivi USB
1.2.1. Pacchetto di configurazione
1.2.2. Richieste standard ai dispositivi USB
1.2.2.1. Ottenere lo stato GET_STATUS
1.2.2.2. Reimpostazione della proprietà CLEAR_FEATURE
1.2.2.3. SET_FEATURE Risoluzione proprietà
1.2.2.4. Impostazione dell'indirizzo sul bus SET_ADDRESS
1.2.2.5. Ottenere un handle GET_DESCRIPTOR
1.2.2.6. Passaggio di un descrittore SET_DESCRIPTOR
1.2.2.7. Ottieni il codice di configurazione GET_CONFIGURATION
1.2.2.8. Impostazione del codice di configurazione SET_CONFIGURATION
1.2.2.9. Ottenere il codice di configurazione dell'interfaccia GET_INTERFACE
1.2.2.10. Impostazione del codice di impostazione dell'interfaccia SET_INTERFACE
1.2.2.11. Impostazione del numero di frame di sincronizzazione SYNC_FRAME
1.2.2.12. Gestione delle richieste standard
1.2.3. Maniglia del dispositivo
1.2.3.1. Maniglia del dispositivo
1.2.3.2. Descrittore di dispositivo qualificante
1.2.3.3. Descrittore di configurazione
1.2.3.4. Descrittore di interfaccia
1.2.3.5. Handle dell'endpoint
1.2.3.6. Maniglia di linea
1.2.3.7. Descrittori specifici
1.2.3.8. Descrittore Ottenere l'ordine
1.3. Sistema Plug and Play (PnP).
1.3.1. Configurazione dei dispositivi USB
1.3.2. Numerazione dei dispositivi USB
1.3.3. ID USB PnP
1.3.4. Nomi simbolici dei dispositivi
1.4. Modello WDM
Capitolo 2 Programmazione del microcontrollore C
2.1. Informazioni generali sul linguaggio C per microcontrollori
2.2. Utilizzo delle librerie standard
2.3. Programmazione per AT89C5131
2.3.1. File di inizializzazione
2.3.2. Strutture descrittori
2.3.3. Struttura del progetto
Capitolo 3 Strumenti
3.1. programmatori
3.1.1. Capovolgere il programmatore
3.1.2. Programmatore ER-Tronik
3.2. Strumenti per la creazione di driver
3.2.1. NuMega Driver Studio
3.2.2. Jungo WinDriver
3.2.3. Jungo KernelDriver
3.3. Strumenti di Microsoft Visual Studio
3.3.1. Dipende (Dependency Walker)
3.3.2. Ricerca errori
3.3.3. GuidGen
3.4. Strumenti Microsoft DDK
3.4.1. albero dei dispositivi
3.4.2. devcon
3.4.2.1. chiave delle classi
3.4.2.2. chiave driverfiles
3.4.2.3. chiave hwids
3.4.2.4. nuova scansione della chiave
3.4.2.5. chiave della pila
3.4.2.6. chiave di stato
3.4.3. Chklnf e Genlnf
3.5. Strumenti CompuWare Corporation
3.5.1. Tenere sotto controllo
3.5.2. SymLink
3.5.3. EzDriver Installer
3.5.4. WdmSniff
3.6. Strumenti SysInternals
3.6.1. WinOb
3.7. Strumenti del forum USB
3.7.1. Strumento descrittore HID
3.8. Verificatore di comandi USB
3.9. Strumenti software dell'HDD
3.10. Strumenti Sourceforge
3.11. Software di monitoraggio Bus Hound
Capitolo 4 Comprensione delle funzioni Win32 in .NET
4.1. informazioni generali
4.2. Importazione di funzioni Win32
4.3. strutture
4.3.1. Attributo StructLayout
4.3.2. Attributo MarshalAs
4.4. Accesso diretto ai dati
4.5. Gestione dei messaggi di Windows
4.6. Informazioni generali su WMI
4.7. Risorse online per questo capitolo
Seconda parte. Classi USB
Capitolo 5
5.1. Metodi di conversione dell'interfaccia USB/RS-232
5.2. Informazioni generali sull'interfaccia RS-232
5.2.1. Linee di scambio
5.2.1.1. Dati trasmessi (BA/TxD/TD)
5.2.1.2. Dati ricevuti (BB/RxD/RD)
5.2.1.3. Richiesta di trasferimento (CA/RTS)
5.2.1.4. Trasferimento pronto (CB/CTS)
5.2.1.5. DCE pronto (CC/DSR)
5.2.1.6. Prontezza DTE (CD/DTR)
5.2.1.7. Indicatore di chiamata (CE/RI)
5.2.1.8. Rilevamento portante (CF/DCD)
5.2.1.9. Pronto a ricevere (CJ)
5.3. Specifica CDC
5.3.1. Descrittori standard
5.3.2. Descrittori di funzioni
5.3.2.1. Descrittore della funzione di intestazione
5.3.2.2. Descrittore della modalità di comando
5.3.2.3. Descrittore astratto del dispositivo
5.3.2.4. Descrittore di raggruppamento
5.3.3. Richieste Speciali
5.3.3.1. richiesta SET_LINE_CODING
5.3.3.2. richiesta GET_LINE_CODING
5.3.3.3. SET_CONTROL_LINE_STATE interrogazione
5.3.3.4. SEND_BREAK richiesta
5.3.4. Notifiche
5.3.4.1. Notifica RING^DETECT
5.3.4.2. Notifica SERIAL_STATE
5.4. Supporto CDC su Windows
5.4.1. Panoramica delle funzionalità di Windows per lavorare con le porte seriali
5.4.1.1. Operazioni portuali di base
5.4.1.2. Funzioni di impostazione della porta
5.4.1.3. Impostazione porta personalizzata
5.4.1.4. Ottenere lo stato delle linee modem
5.4.1.5. Lavorare con CDC sulla piattaforma. NETTO
5.4.2. Corrispondenza delle funzionalità di Windows e delle richieste USB
Capitolo 6 Classe HID
6.1. Specifiche del dispositivo HID
6.2. Come comunicare con un dispositivo HID
6.3. Installazione del driver del dispositivo HID
6.4. Identificazione del dispositivo HID
6.4.1. Identificazione dei dispositivi di avvio
6.4.2. Descrittore di configurazione del dispositivo HID
6.4.3. Descrittore HID
6.4.4. Descrittore di rapporto
6.5. Struttura del descrittore del rapporto
6.5.1. Elementi del rapporto
6.5.1.1. Elementi di tipo breve
6.5.1.2. Elementi di tipo lungo
6.5.2. Segnala tipi di elementi
6.5.2.1. Elementi essenziali
6.5.2.2. Elementi globali
6.5.2.3. Elementi locali
6.5.3. Esempi di descrittori
6.6. Richieste a un dispositivo HID
6.6.1. richiesta GET_REPORT
6.6.2. richiesta SET_REPORT
6.6.3. richiesta GET_IDLE
6.6.4. richiesta SET_IDLE
6.6.5. richiesta GET_PROTOCOL
6.6.6. richiesta SET_PROTOCOL
6.7. Utensili
6.8. Driver per dispositivi HID in Windows
Capitolo 7 Altre classi USB
Parte III. Pratica di programmazione USB
Capitolo 8. Creazione di un dispositivo USB basato su AT89C5131
8.1. Informazioni generali su AT89C5131
8.2. Schema strutturale di AT89S5131
8.3. USB registra AT89C5131
8.3.1. Registro USBCON
8.3.2. Registrati USBADDR
8.3.3. Registro USBINT
8.3.4. Registro USBIEN
8.3.5. Registro UEPNUM
8.3.6. Registro UEPCONX
8.3.7. Registro UEPSTAX
8.3.8. Registra UEPRST
8.3.9. registro UEPINT
8.3.10. Registrati UEPIEN
8.3.11. Registro UEPDATX
8.3.12. Registrati UBYCTLX
8.3.13. Registro UFNUML
8.3.14. Registrati UFNUMH
8.4. Circuito AT89S5131
8.5. Design di base per AT89C5131
8.5.1. La prima versione del programma per АТ89С5131
8.5.2. Aggiunta di descrittori di stringa
8.5.3. Aggiunta di endpoint
8.6. Scarica il programma
Capitolo 9 Implementazione della classe CDC
9.1. Implementazione CDC
9.2. Maniglie del dispositivo
9.2.1. Inizializzazione dell'endpoint
9.2.2. Elaborazione delle richieste CDC
9.2.3. Configurazione della porta RS e della linea CDC
9.2.4. Ricevere e trasmettere dati
9.3. Installazione del driver
9.4. Programmazione dello scambio di dati con un dispositivo CDC in Delphi
9.5. Programmare uno scambio con un dispositivo CDC in C#
9.5.1. Utilizzo del componente MSCOMM
9.5.2. Utilizzo delle funzioni Win32
9.6. Problemi CDC
Capitolo 10 Implementazione della classe HID
10.1. Implementazione di HID su AT89C5131
10.2. Trasferimento di più byte
10.3. Rapporti sulle funzionalità
10.4. Invio di dati dall'host (SET_REPORT)
10.5. Installazione del dispositivo HID
10.6. Comunicazione con dispositivo HID
10.6.1. Ottenere il nome di un dispositivo HID
10.6.2. Ottenere gli attributi del dispositivo e leggere i report
10.6.3. Trasferimento dati dall'host al dispositivo HID
10.7. Esempi di dispositivi HID
10.7.1. Implementazione del dispositivo mouse
10.7.2. Implementazione del dispositivo "tastiera".
10.8. Utilizzo del protocollo HID
10.8.1. Interpretazione dei dati
10.8.2. Collezioni
10.8.3. Array e pulsanti
10.9. Dispositivo HID con rapporti multipli
Capitolo 11 Caratteristiche speciali finestre
11.1. Configurare le funzioni dell'API
11.1.1. Enumerazione dei dispositivi USB
11.1.2. Ottenere lo stato di un dispositivo USB
11.2. Enumerazione dei dispositivi USB con WMI
11.3. Funzioni speciali di Windows XP
11.3.1. HidD_GetInputReport - legge i rapporti HID
11.3.2. Ottenere dati di input grezzi
11.4. Funzionalità DirectX
11.5. Finestra di dialogo per l'aggiunta di nuove apparecchiature
11.6. Lavorare con nomi di dispositivi simbolici
11.7. Espulsione sicura delle unità flash
11.8. Rilevamento di aggiunte e rimozioni di dispositivi
11.9. Risorse Internet
Capitolo 12 Sviluppo driver
12.1. Procedure di base del driver WDM
12.1.1. Procedura DriverEntry
12.1.2. Procedura AggiungiDispositivo
12.1.3. Procedura Scarica
12.1.4. Procedure operative del conducente
12.1.4.1. Intestazione del pacchetto
12.1.4.2. Celle stack I/O
12.4.1.3. Procedure operative del conducente
12.1.5. Servire le richieste IOCTL
12.2. Caricamento del driver e chiamata del driver Procedure
12.2.1. Procedura del conducente
12.2.2. Registrazione del conducente
12.2.2.1. Registrazione con SCM
12.2.2.2. Impostazioni del driver nel registro
12.2.3. Riferito alle procedure di lavoro
12.2.4. Memorizzazione del driver all'interno del file eseguibile
12.3. Creazione di un driver con Driver Studio
12.3.1. Qualche parola sulla libreria Driver Studio
12.3.1.1. Classe KDriver
12.3.1.2. Classe KDevice
12.3.1.3. Classe Krp
12.3.1.4. Classe KRegistryKey
12.3.1.5. Classe KLowerDevice
12.3.1.6. Classi USB
12.3.2. Altre lezioni di Driver Studio
12.3.3. Creazione di un modello di driver utilizzando Driver Studio
12.3.3.1. Passaggio 1. Impostare il nome e il percorso del progetto
12.3.3.2. Passaggio 2: scelta di un'architettura del driver
12.3.3.3. Passaggio 3. Selezione degli pneumatici
12.3.3.4. Passaggio 4: definire un set di endpoint
12.3.3.5. Passaggio 5. Specificare la classe e il nome del file
12.3.3.6. Passaggio 6Scelta delle funzionalità del driver
12.3.3.7. Passaggio 7. Scegliere come elaborare le richieste
12.3.3.8. Passaggio 8: creare impostazioni driver persistenti
12.3.3.9. Passaggio 9 Proprietà del driver
12.3.3.10. Passaggio 10. Specifica dei codici IOCTL
12.3.3.11. Passaggio 11 Impostazioni avanzate
12.3.4. Perfezionamento del modello di driver
12.3.5. Metodi di base della classe del dispositivo
12.3.6. Implementazione della lettura dei dati
12.3.7. Installazione del driver
12.3.8. Lettore di dati
12.3.9. Lettura di dati da altri tipi di endpoint
12.3.10. Driver del dispositivo USB "pulito".
Parte IV. Direttorio
Capitolo 13. Formato file INF
13.1. Struttura del file INF
13.1.1. Sezione versione
13.1.2. Sezione produttore
13.1.3. Sezione DestinationDirs
13.1.3.1. Chiave DefaultDescDir
13.1.3.2. chiavi della sezione elenco file
13.1.3.3. chiave dirida
13.1.3.4. chiave subdir
13.1.4. Sezione descrizione modello
13.1.5. Sezione xxx. AddRegw xxx. DelReg
13.1.6. Sezione xxx. logconfig
13.1.7. Sezione xxx. CopiaFile
13.1.8. Stringhe di sezione
13.1.9. Collegamenti di sezione
13.2. Creazione e test di file INF
13.3. Installazione di dispositivi utilizzando un file INF
13.4. Rami di registro per USB
Capitolo 14 Funzioni di base di Windows
14.1. Funzioni CreateFile e CloseHandle: apertura e chiusura di un oggetto
14.1.1. Informazioni aggiuntive
14.1.2. Valore di ritorno
14.1.3. Esempio di chiamata
14.2. Funzione ReadFile: lettura dei dati
14.2.1. Informazioni aggiuntive
14.2.2. Valore di ritorno
14.2.3. Esempio di chiamata
14.3. Scrivi funzione file: trasferimento dati
14.3.1. Informazioni aggiuntive
14.3.2. Valore di ritorno
14.3.3. Esempio di chiamata
14.4. Funzione ReadFileEx. Lettura dati APC
14.4.1. Valore di ritorno
14.4.2. Informazioni aggiuntive
14.4.3. Esempio di chiamata
14.5. Funzione WriteFiieEx: trasferimento dati APC
14.5.1. Valore di ritorno
14.5.2. Esempio di chiamata
14.6. Funzione WaitForSingieObject in attesa dello stato segnalato di un oggetto
14.6.1. Valore di ritorno
14.7. Funzione WaitForMultipleObjects: attesa dello stato segnalato degli oggetti
14.7.1. Valore di ritorno
14.8. Funzione GetOverlapped Result: il risultato di un'operazione asincrona
14.8.1. Valore di ritorno
14.9. Funzione DeviceloControl: controllo diretto del conducente
14.9.1. Valore di ritorno
14.10. Annulla/o funzione: interruzione di un'operazione
14.10.1. Valore di ritorno
14.11. Funzione Query Dos Device, ottenendo il nome del dispositivo dal suo nome DOS
14.11.1. Valore di ritorno
14.11.2. Esempio di chiamata
14.12. Define Dos Device function: operazioni con il nome del dispositivo DOS
14.12.1. Valore di ritorno
14.12.2. Esempio di chiamata
Capitolo 15 Strutture e funzioni di Windows per le porte seriali
15.1. Struttura delle impostazioni della porta COMMCONFIG
15.2. Struttura delle proprietà della porta COMMPROP
15.3. Struttura dei timeout COMMTIMEOUTS
15.4. Struttura dello stato della porta COMSTAT
15.5. Struttura DCB
15.6. Funzione BuildCommDCB: crea una struttura DCB da una stringa
15.6.1. Informazioni aggiuntive
15.6.2. Valore di ritorno
15.6.3. Esempio di chiamata
15.7. Funzione BuildCommDCBEdTimeouts: crea la struttura DCB e i timeout dalla stringa
15.8. Funzioni SetCommBreak e ClearCommBreak: controllo dell'uscita
15.8.1. Valore di ritorno
15.9. Funzione ClearCommError: recupero e cancellazione degli errori di porta
15.9.1. Valore di ritorno
15.10. EscapeCommFunction: controllo della porta
15.10.1. Valore di ritorno
15.11. Funzioni GetCommMask e SetCommMask: maschera di chiamata evento
15.11.1. Valore di ritorno
15.12. Funzione WaitCommEvent in attesa di un evento della porta COM
15.12.1. Valore di ritorno
15.12.2. Informazioni aggiuntive
15.12.3. Esempio di chiamata
15.13. Funzioni GetCommConfig e SetCommConfig: configurazione delle impostazioni della porta
15.13.1. Valore di ritorno
15.13.2. Esempio di chiamata
15.14. CommConfigDialog Funzione: Finestra di dialogo Configurazione porta
15.14.1. Valore di ritorno
15.14.2. Informazioni aggiuntive
15.14.3. Esempio di chiamata
15.15. Funzione GetCommProperties: legge le proprietà della porta
15.15.1. Valore di ritorno
15.15.2. Esempio di chiamata
15.16. Funzioni GetCommState e SetCommState: stato della porta
15.16.1. Valore di ritorno
15.16.2. Esempio di chiamata
15.17. Funzioni GetCommTimeouts e SetComniTimeouts: timeout delle porte
15.17.1. Valore di ritorno
15.17.2. Esempio di chiamata
15.18. Funzione PurgeComm: Flush Port Buffer
15.18.1. Valore di ritorno
15.18.2. Esempio di chiamata
15.19. Funzione SetupComm: configurazione delle dimensioni del buffer
15.19.1. Valore di ritorno
15.20. Funzioni GetDefaultCommConfig e SetDefaitltCommConfig: Impostazioni porta predefinite
15.20.1. Valore di ritorno
15.21. Funzione TransmitCommChar. trasmissione personaggi speciali
15.21.1. Valore di ritorno
15.22. Funzione GetCommModemStatus: stato del modem
15.22.1. Valore di ritorno
15.22.2. Esempio di chiamata
15.23. Funzione EnumPorts: enumerazione delle porte
15.23.1. Informazioni aggiuntive
15.23.2. Valore di ritorno
15.23.3. Esempio di chiamata
Capitolo 16. Strutture e funzioni dell'API di installazione di Windows
16.1. Funzione di setup DiGetCiassDevs: enumerazione dispositivi
16.1.1. Valore di ritorno
16.2. Funzione SetupDiDestroyDevicelnfoList che libera il blocco di descrizione del dispositivo
16.2.1. Valore di ritorno
16.3. Funzione SetupDiEnumDevicenterfaces: informazioni sul dispositivo
16.3.1. Valore di ritorno
16.4. Funzione SetupDiGetDevicelnterfaceDetaii: informazioni dettagliate sul dispositivo
16.5. SetupDiEnumDevicelInfo Funzione: informazioni sul dispositivo
16.6. Funzione SetupDiGetDeviceRegistryProperty: recupero delle proprietà del dispositivo Plug and Play
16.7. Funzione CM_Get_DevNode_Status: stato del dispositivo
16.8. Funzione CM_Request_Device_Eject espulsione sicura del dispositivo
Capitolo 17 Strutture e funzioni dell'API HID di Windows
17.1. Funzione HidD_Hello: controllo della libreria
17.2. Funzione HidD_JetHidGuid: ottenere un GUID
17.3. Funzione HidD_GetPreparsedData: crea un handle del dispositivo
17.4. Funzione HidD_EreePreparsedData: rilascio dell'handle del dispositivo
17.5. Funzione HidD_Get Feature: ottenere un report sulle funzionalità
17.6. Funzione HidD_SetFeature: passaggio di un report sulle funzionalità
17.7. Funzione HidD_GetNumlnputBuffers: ottenere il numero di buffer
17.8. Funzione HidD_SetNumlnputBuffers: imposta il numero di buffer
17.9. Funzione HidD_GetAttributes: recupero degli attributi del dispositivo
17.10. Funzione HidD_GetManufacturerString. ottieni la stringa del produttore
17.11. Funzione HidD_GetProductString che ottiene una stringa di prodotto
17.12. Funzione HidD_GetSerialNumberString. ottenere la stringa del numero di serie
17.13. Funzione HidD_GetIndexedString. ottenere riga per indice
17.14. Funzione HidD_Jetlnput Report che riceve un report Input
17.15. Funzione HidD_SetOutputReport. invio di un report di output
17.16. Funzione HidP_GetCaps: recupero delle proprietà del dispositivo
17.17. Funzione HidP_MaxDataListLength: ottenere le dimensioni dei report
17.18. Funzione HidD_FIushQueue: svuotamento dei buffer
17.19. Funzione HidP_GetLinkColiectionNodes: albero di raccolta
17.20. Funzioni HidP_GetScaledUsageValue e HidP_SetScaledUsage Value: Ottieni e imposta i valori convertiti
17.21. Funzione HidF_MaxUsageListLength: dimensione del buffer per i codici chiave
17.22. Funzione HidP_UsageListDifference: differenza tra array
Applicazioni
Appendice 1. Funzionalità aggiuntive
Appendice 2. Esempi di compilazione in altre versioni di Delphi
Appendice 3. Tabella degli identificatori linguistici (LangID)
Appendice 4. Tabella dei codici fornitore (Vendor ID, Device ID)
Appendice 5. Come creare un collegamento a Device Manager
Allegato 6. Domande frequenti
Appendice 7 Descrizione del CD
Letteratura
Indice per soggetto

Immagine 1

L'interfaccia USB sta diventando sempre più popolare come interfaccia per il collegamento di periferiche a PC e computer moderni spesso non hanno la consueta interfaccia RS-232. La popolarità dell'USB è dovuta a molte ragioni, ecco le principali:

  • alto tasso di cambio, elevata immunità al rumore
  • controllo del flusso di dati, controllo dell'integrità e correzione degli errori
  • possibilità di diramazione tramite hub e connessioni un largo numero dispositivi.
  • alimentazione bus
  • versatilità del bus - la possibilità di collegare diversi dispositivi (tastiera, stampante, modem)
  • identificazione e configurazione automatica del sistema, Plug and Play

Tuttavia, ci sono fattori (spesso irragionevoli) che frenano la massa Utilizzo USB sviluppatori di dispositivi a microcontrollore:

  • la necessità di programmare i driver per Windows
  • prevalenza relativamente bassa di microcontrollori con interfaccia USB incorporata
  • Lezione 2: Creazione di un dispositivo joystick HID conforme a USB 2.0.

Questa serie di articoli ha lo scopo di dimostrare che è abbastanza facile superare queste difficoltà e che tutti possono "aggiornare" il proprio dispositivo dalla solita RS-232 a USB o creare un nuovo dispositivo con un'interfaccia USB.

Come microcontrollore negli esempi verrà considerato un microcontrollore prodotto da Microchip. PIC18F4550 con interfaccia USB 2.0 (supporta Low Speed ​​e Full Speed).

Lezione 1. USB senza programmazione Windows, porta COM virtuale

Uno dei compiti che sorgono quando si sviluppano dispositivi USB è il passaggio dall'interfaccia RS-232 a USB, e se un "vecchio" dispositivo viene modificato o il dispositivo deve essere compatibile con i protocolli esistenti e il software per PC, allora è auspicabile sbarazzarsi di qualsiasi modifica del software software sul computer. Una soluzione a questo problema consiste nell'utilizzare l'interfaccia USB come porta COM virtuale. L'uso di questo metodo elimina la necessità di modificare il software del computer, perché. La connessione USB è vista dal personal computer come una porta COM aggiuntiva. Un altro vantaggio importante è che vengono utilizzati i driver Windows standard e non è necessario creare alcun driver personalizzato.

La specifica USB descrive una classe di dispositivi di comunicazione (Communication Device Class - CDC), che definisce un insieme di modalità di connessione per dispositivi di telecomunicazione (modem, terminali, telefoni) e di rete (adattatori e hub Ethernet, modem ADSL), inclusa l'emulazione della porta seriale .

Prendiamo come esempio un dispositivo che trasmette i dati di tensione da un potenziometro e temperatura da un sensore digitale TC77 via RS-232, e riceve anche i comandi per accendere/spegnere due LED (per semplicità, implementiamo questo esempio sul PICDEM™ FS USB DEMONSTRATION BOARD, ma puoi assemblare un circuito più semplice - vedi sotto).

La scheda di debug PICDEM FS-USB è progettata per lo sviluppo e la dimostrazione di dispositivi basati sul microcontrollore PIC18F4550 con un bus USB 2.0. La scheda dispone di un controller PIC18F4550 in un pacchetto TQFP44, che presenta le seguenti caratteristiche:

  • Frequenza operativa massima - 48 MHz (12 MIPS);
  • Memoria di programma Flash da 32 KB (tecnologia Enhanced Flash);
  • 2 KB di memoria dati (di cui 1 KB di RAM dual-port);
  • Memoria dati EEPROM da 256 byte;
  • Interfaccia FS USB 2.0 che supporta una velocità di 12 Mbps con ricetrasmettitore integrato e regolatore di tensione.

Il consiglio ha:

  • Quarzo 20 MHz;
  • Interfaccia RS-232 per dimostrare la possibilità di passare da USART a USB;
  • Connettore per programmazione e debug in-circuit
  • Stabilizzatore di tensione con la possibilità di passare all'alimentazione del bus USB;
  • connettore di espansione PICtail™;
  • Sensore di temperatura TC77 collegato tramite I2C;
  • Resistenza variabile collegata all'ingresso ADC;
  • LED, pulsanti.

Questo dispositivo dispone di un programma per PC per il controllo del dispositivo e la visualizzazione dei valori di tensione e temperatura. Possiamo quindi collegare il dispositivo alla RS-232, selezionare la porta COM disponibile nel sistema e impostare il tasso di scambio con il nostro dispositivo, il numero di bit di dati, il numero di bit di stop, nonché i parametri dei bit di parità e controllo del flusso in conformità con il programma del microcontrollore (perché abbiamo bisogno di conoscere i parametri di inizializzazione del nostro controller)


Riso. 2

Iniziamo a collegare il nostro dispositivo all'USB.

Microchip Technology Inc. Offre un esempio di applicazione già pronto AN956, che implementa il supporto USB CDC per il microcontrollore PIC18F2550, PIC18F2455, PIC18F4455, PIC18F4550. Il programma è costruito su una base modulare, che consente una facile modernizzazione e integrazione nei progetti finiti.

Dopo l'inizializzazione iniziale del controller, il programma può comunicare con il PC tramite l'interfaccia USB attraverso diverse funzioni già pronte:

Modifichiamo il nostro programma per inviare e ricevere dati tramite USB.

Frammento del programma per la preparazione e la trasmissione dei dati:

Ricezione dati:

if(getsUSBUSART(input_buffer,1)) ( switch (input_buffer) ( case "1" : mLED_3_On(); break; case "2" : mLED_3_Off(); break; case "3" : mLED_4_On(); break; case " 4" : mLED_4_Off(); break; default: break; ) )

Dopo aver collegato il dispositivo all'USB, il sistema riconoscerà il nuovo dispositivo


Riso. 3

E installa nuove attrezzature


Riso. 4

Selezioniamo l'installazione dalla posizione specificata e specifichiamo il percorso per la posizione del file mcpusb.inf dal set di codici sorgente per il programma su AN956. Successivamente, un nuovo dispositivo viene installato nel sistema.


Riso. 5

Quindi, il nuovo dispositivo è pronto per l'uso. Il sistema dispone di una nuova porta COM virtuale.


Riso. 6

Ora nel nostro programma possiamo selezionare la porta COM virtuale apparsa per comunicare con il dispositivo...


Riso. 7

... e vedi che il dispositivo ha davvero iniziato a funzionare tramite la porta COM che è apparsa nel sistema tramite una connessione USB.

Va notato che l'USB fornisce il controllo e la correzione dei dati, quindi concetti come portata, bit di parità e controllo del flusso diventano concetti astratti e nel nostro caso possono essere scelti da chiunque, l'unico parametro informativo è il numero della porta COM virtuale.

Finestra PICDEM CDC


Riso. 8

Quando si utilizzano i microcontrollori PIC18Fxx5x con un modulo USB 2.0 integrato, la porta COM virtuale può fornire una velocità di trasferimento dati fino a 80 Kbyte al secondo (640 Kbps), che supera notevolmente la velocità di trasferimento possibile tramite RS-232, mentre, come possiamo vedi, non è necessario modificare il software per un computer che ci voleva!

Esempi di programmi, documentazione e diagramma utilizzati nella lezione 1.

  1. Scarica i sorgenti PICDEM CDC + Delphi
  2. Scarica il componente Delphi per lavorare con la porta COM
  3. AN956+ codici sorgente originali
  4. File user_uart.c (tutte le modifiche al programma originale da AN956 sono state apportate solo in questo file. Per eseguire l'esempio per la lezione 1, è necessario copiare questo file nella directory C:\MCHFFSUSB\fw\Cdc\user\, sostituire il user.c nel progetto con user_uart .c, compilare il progetto e flashare il microcontrollore)
  5. Schema semplificato di un dispositivo USB


Riso. 9

Nota: il circuito originale della scheda PICDEM FS USB utilizza il rilevamento automatico della fonte di alimentazione della scheda (esterna o USB). Pertanto, quando si utilizza uno schema semplificato, è necessario commentare la riga #define USE_USB_BUSSENSE_IO nel file usbcfg.h

Lezione 2: Creazione di un dispositivo joystick HID conforme a USB 2.0

I dispositivi USB più comuni sono i dispositivi di interfaccia umana (HID). Rappresentanti tipici di questa classe sono le tastiere USB, i mouse, i joystick, i pannelli delle impostazioni del monitor, i lettori di codici a barre, i lettori di schede, ecc. I vantaggi dei dispositivi HID sono:

  • facilità di implementazione;
  • codice compatto;
  • Supporto di Windows (non sono necessari driver aggiuntivi).

Il sito Web di Microchip ha un esempio di implementazione di un mouse HID. Considera l'implementazione del controller di gioco più semplice basato su questo esempio. Useremo la scheda demo PICDEM FS-USB (DM163025) per questo progetto. La scheda di debug PICDEM FS-USB ha un resistore variabile e 2 pulsanti, quindi il joystick in fase di sviluppo avrà un minimo di controlli (2 pulsanti e, ad esempio, un acceleratore).

Prima di tutto, dobbiamo riscrivere il descrittore del dispositivo per il joystick creato. Per semplificare il compito, è possibile utilizzare il programma HID Descriptor Tool, scaricabile dal sito www.usb.org

Inclusi nel programma ci sono esempi di configurazioni di alcuni dispositivi HID, che puoi adattare alle tue attività o creare il tuo dispositivo HID.


Riso. 10

Quindi, nel nostro caso, verranno utilizzati diversi tipi di dati - questa è una simulazione del controllo - Controlli di simulazione, e in particolare si tratta dell'acceleratore (pedale) (acceleratore) e dei pulsanti di controllo (pulsante). Affinché il sistema operativo possa "sapere" come gestire questi tipi di dati, è necessario descrivere i valori massimo e minimo e la dimensione dei dati. Nel nostro caso, "gas" è un valore a 8 bit (report_size = 8, report_count = 1) e lo stato dei pulsanti è definito come un campo di valori a un bit. L'esempio utilizza solo 2 pulsanti, ma è necessario allineare il campo a un valore di byte (report_size = 1, report_count = 8). In totale, il microcontrollore, quando richiede dati al computer, deve trasmettere 2 byte: il livello del gas e lo stato dei pulsanti in conformità con il descrittore del dispositivo generato (per una descrizione dettagliata dei possibili descrittori, vedere la specifica per i dispositivi HID www.usb.org). La descrizione creata del descrittore del dispositivo può essere salvata in diversi formati, incluso come file di intestazione.h

Inoltre, è necessario regolare la dimensione del descrittore del dispositivo ricevuto nella descrizione del descrittore specifico della classe HID e modificare la dimensione dei dati trasmessi attraverso l'endpoint nel descrittore dell'endpoint (nel nostro caso, trasferiamo 2 byte, quindi il la dimensione è HID_INT_IN_EP_SIZE=2).

Queste modifiche sono sufficienti affinché Windows riconosca il dispositivo connesso come un joystick. Ora possiamo regolare i dati della stringa in modo che il dispositivo abbia il nome che vogliamo (es. "PIC18F4550 Joystick"). Per assegnare un nome al dispositivo in russo, è necessario specificare un descrittore di stringa nella codifica UNICODE. Qui finisce la descrizione del joystick e dobbiamo preparare i dati per il trasferimento al PC.

ReadPOT(); // avvia il buffer di misurazione della tensione del potenziometro = ADRESH; // gestisce gli stati del pulsante if(sw2==0) buffer |= 0x01; buffer &= ~0x01; if(sw3==0) buffer |= 0x02; buffer &= ~0x02; // trasferimento dati Emulate_Joystick();

Dopo aver compilato il progetto e programmato il microcontrollore, è possibile collegare il dispositivo alla porta USB. La scheda è definita come un dispositivo di gioco HID, installato nel sistema e pronto all'uso.


Riso. undici

Tramite il pannello di controllo in Windows possiamo aprire i dispositivi di gioco disponibili, selezionare il nostro joystick, calibrarlo e testarne le funzionalità.


Riso. 12

Quando si modifica la configurazione del dispositivo, aggiungendo controlli o pulsanti, è necessario non solo modificare la descrizione del descrittore del dispositivo, ma anche trasmettere i dati rigorosamente in conformità con il descrittore creato. Quindi, cambiando il numero massimo di pulsanti da 2 a 8 nella descrizione del descrittore di dispositivo USAGE_MAXIMUM (BUTTON 2), otteniamo un joystick con 8 pulsanti.


Riso. 13

Quando il descrittore diventa più complicato, possiamo ottenere un'implementazione più completa del joystick, mentre devi ricordarti di modificare i seguenti parametri: la dimensione del descrittore, la dimensione dell'endpoint e devi inviare quanti più dati informativi come dichiarato nel descrittore.


Riso. 14

Esempi di programmi, documentazione e diagramma utilizzati nella lezione 2.

  1. I codici sorgente originali per l'implementazione del mouse HID.
  2. Codici sorgente di implementazione del joystick HID.

Lezione 3

Qualsiasi dispositivo USB può avere più configurazioni e ogni configurazione ha più interfacce. Questa proprietà USB consente al dispositivo che viene creato di essere riconosciuto dal computer come più dispositivi USB con interfacce diverse. Un mouse, ad esempio, può avere un lettore di schede integrato e interagire con il computer come due dispositivi indipendenti.

Struttura del descrittore del dispositivo:


Riso. 15

Sulla base dell'esempio standard di un mouse e del joystick creato, creeremo un dispositivo USB composito che verrà definito dal computer come due dispositivi HID indipendenti.

1. Creare un descrittore.

Modificare la struttura del descrittore (file usbdsc.h)

Il dispositivo avrà 2 interfacce, ciascuna con un endpoint.

#define CFG01 rom struct \(USB_CFG_DSC cd01;\USB_INTF_DSC i00a00;\USB_HID_DSC hid_i00a00;\USB_EP_DSC ep01i_i00a00;\USB_INTF_DSC i01a00;\USB_HID_DSC hid_i01a00;\USB_EP_DSC ep0 2i_i01a00; \ ) cfg01
  1. In conformità con la struttura modificata, è necessario modificare il descrittore nel file usbdsc.c.
  2. Nel file usbcfg.h, definire gli identificatori di interfaccia, gli endpoint utilizzati, le dimensioni del descrittore del report.
  3. Nel file hid.c, è necessario inizializzare endpoint aggiuntivi (nella funzione HIDInitEP) e modificare la funzione di elaborazione della richiesta HID (funzione USBCheckHIDRequest).
  4. Ognuno dei dispositivi, mouse e joystick, deve trasmettere i dati al proprio endpoint. Pertanto, è necessario aggiungere funzioni per il trasferimento dei dati a endpoint specifici e verificare che l'endpoint desiderato sia libero (aggiungere funzioni simili a mHIDTxIsBusy e HIDTxReport nel file hid.c).

Quindi sembrerà il trasferimento dei dati per il mouse

Dopo aver compilato il progetto, lampeggiato il controller e collegato il dispositivo a USB, un nuovo dispositivo composito verrà rilevato dal computer e verranno aggiunti un mouse e un joystick.


Riso. 16


Riso. 17

Codici sorgente del dispositivo HID composito.

Commento. Non dimenticare di modificare il PID durante la creazione di un nuovo dispositivo o di eliminare dal sistema un dispositivo precedente con lo stesso PID.

Lezione 4

Microchip Technology Inc. rilascia un programmatore sviluppatore economico PICkit2, utilizzato principalmente per programmare i controller Flash. Una caratteristica distintiva di questo programmatore è la disponibilità della documentazione completa e dei codici sorgente del firmware per il microcontrollore e un programma shell per il computer. PICkit2 è alimentato tramite USB, genera tensioni di programmazione e alimentazione regolabili e dispone anche di 3 linee di ingresso-uscita per il collegamento a un dispositivo programmabile. Per poter aggiornare il firmware del programmatore in PICkit2, è stato implementato un programma bootloader.


Riso. 18

Dispositivo CDC basato su PICkit2

Utilizzando tutte queste funzionalità, basate sul programmatore PICkit2, è possibile creare ed eseguire il debug del proprio dispositivo USB con la possibilità di tornare alle sue funzioni di programmatore in qualsiasi momento. Con l'aiuto del bootloader che viene visualizzato nel programmatore, è possibile eseguire il flashing di altri programmi nel PICkit2, ad esempio il programma di supporto della porta COM virtuale. Per fare ciò, prendiamo l'esempio di CDC, rinominiamo il progetto e facciamo quanto segue

  1. nel file main.c, cambiamo l'indirizzo della posizione del firmware (il bootloader PICkit2 trasferisce il controllo al programma utente all'indirizzo 0x002000.
    #codice pragma _RESET_INTERRUPT_VECTOR = 0x002000
  2. nel file io_cfg.h, rimuoviamo tutto ciò che riguarda la porta D (puoi impostare il LED in modo che lampeggi su PORTC0).

    Poiché PICKIT2 è sempre alimentato tramite USB, abbiamo impostato

    #define usb_bus_sense 1 // il dispositivo è sempre collegato #define self_power 0 // il dispositivo è alimentato da USB

  3. nel file usbcfg.h mettiamo i commenti su 2 righe
    //#define USE_SELF_POWER_SENSE_IO //#define USE_USB_BUS_SENSE_IO
  4. Nel file user.c, inviamo i dati di cui abbiamo bisogno su USB
  5. includere il file linker pickit2.lkr

Successivamente, puoi compilare il progetto e caricare il nuovo firmware tramite la shell PICkit2.

Dopo aver riprogrammato il PICkit2, il computer rileva l'aspetto di una nuova porta COM e tramite l'hyperterminal possiamo vedere che il PICkit2 sta inviando dati attraverso la porta COM virtuale.

Il codice sorgente per questo esempio è disponibile all'indirizzo collegamento.

Sulla base di questo esempio e utilizzando i pin esterni del programmatore PICkit2, è possibile ricevere dati da dispositivi esterni e trasferirli su un computer tramite USB. Pertanto, utilizzando PICkit2, è possibile inviare dati a indicatori LCD COG, lettori I2C, dispositivi SPI e a 1 filo, come sensori di temperatura, ecc.

Tastiera radio HID basata su PICkit2


Riso. 19

Consideriamo un altro esempio di utilizzo "inappropriato" del programmatore PICkit2: un emulatore di tastiera con un'interfaccia aerea. Tale dispositivo può essere utilizzato, ad esempio, per le presentazioni, per sfogliare le diapositive lontano dal computer.

Per implementare un tale dispositivo, abbiamo bisogno di:

  • PICkit2
  • Scheda dimostrativa PICkit2 (DV164120)
  • ricevitore radio (rfRXD0420) e trasmettitore radio (rfPIC12F675) da rfPICkit.

Colleghiamo il ricevitore radio alla scheda demo. Il microcontrollore a bordo scheda riceverà i dati dal ricevitore, li elaborerà e, alla pressione di uno dei due pulsanti del telecomando, imposterà il livello log.1 su una delle 2 uscite collegate al PICkit2.

PICkit2 eseguirà le seguenti funzioni:

  • quando è collegato a un computer tramite USB, è definito come una tastiera HID
  • generare una tensione di alimentazione +5V per una scheda demo con un ricevitore
  • interrogare 2 uscite esterne del controller ricevitore e, se disponibile, un log. 1 inviare i codici per premere i pulsanti PageUp o PageDown al computer.

Due porte COM virtuali (emulazione chip FTDI2232) basate su PICKit2

Questo esempio è solo per imparare come funziona l'USB. Rivedere i requisiti della patente di guida FTDI prima dell'uso!

L'esempio mostra come creare 2 porte COM virtuali basate su un microcontrollore con una porta USB.Per prima cosa è necessario installare i driver per il chip FTDI2232. Quindi, per avviare PICkit2, è necessario selezionare l'elemento di aggiornamento del firmware nella shell PICkit2 e puntare al file TestVCP2.hex da archivio. Dopo aver riprogrammato PICkit2, avrai 2 porte COM seriali indipendenti nel tuo sistema.

Esempio tratto dal sito web http://forum.microchip.com/tm.aspx?m=261649

Per invertire il ripristino di PICkit2 come programmatore, è necessario disconnettere PICkit2 da USB e, premendo il pulsante, ricollegare il cavo USB, quindi scegliere di caricare il firmware standard del programmatore.

Tutti gli esempi precedenti sono basati su MCHFFSUSB Framework v1.3. Con l'avvento dei controller PIC24 e PIC32 con USB OTG, Microchip ha rilasciato una nuova versione dello stack: lo stack USB v. 2.x.

Nella nuova versione dello stack USB v. 2.3, oltre agli stack di dispositivi USB che implementano le funzionalità di un client USB, è stato ottenuto anche l'host USB Embedded che implementa la funzionalità di host, uno stack USB dual role che implementa le funzioni sia dell'host che del client; e USB OTG, che supporta Host Role Negotiation Protocol (HNP), Session Request Protocol (SRP) ed è pienamente conforme alle specifiche USB OTG. Implementato negli esempi applicativi:

  • Host incorporato
    • Host classe stampante: supporto per stampanti ESC/POS, PostScript® e PCL5
    • Host di classe CDC - supporto per dispositivi ACM (modello di controllo astratto)
    • Tastiera NASCOSTA
  • dispositivo
    • Bootloader HID - aggiunto il supporto per le famiglie PIC32MX460F512L e PIC18F14K50
    • Tastiera HID, mouse
    • Demo flash interno MSD: utilizzo del flash interno per archiviare i file
    • Esempio composito MSD + HID - Esempio di dispositivo composito MSD e HID
    • CDC - Emulazione della porta COM
    • Supporto della famiglia PIC32MX460F512L per tutti i progetti demo per PC
    • Gli esempi HID, MCHPUSB e WinUSB ora supportano la funzionalità Microsoft Plug-and-Play (PnP) per il rilevamento automatico.
  • Documentazione
    • una descrizione completa di tutte le API si trova nella cartella "\Microchip\Help"

Microchip fornisce driver gratuiti per le classi USB più popolari:

  1. Interfaccia utente (HID). Questa modalità di scambio viene utilizzata in quasi tutte le tastiere, i mouse e altri dispositivi di input/output.
  2. Dispositivo di comunicazione (CDC). Questa modalità è la più semplice per passare da seriale RS-232 a USB. Sui computer WinXP/2K, una porta COM virtuale viene creata ed emulata quando viene connesso un microcontrollore. I programmi che funzionano con le porte COM1..4 funzioneranno senza modifiche con una porta virtuale, ma a una velocità maggiore (circa 1 Mbps)
  3. Dispositivi di archiviazione di massa (MSD). Si tratta di dispositivi che funzionano come supporti di memorizzazione: unità flash, schede SD / MMC, dischi, ecc.
  4. Dispositivi di classe stampante. Questa modalità è progettata per l'uso con stampanti USB, che consente al dispositivo finale su un microcontrollore PIC con un modulo USB di inviare le informazioni necessarie direttamente alla stampante USB.
  5. Bootloader residente di Microchip. La modalità più semplice, che viene utilizzata solo per aggiornare il software del microcontrollore tramite USB. Dal lato PC, viene installato un piccolo programma, un analogo del driver
  6. Autista proprio (personalizzato). L'uso più completo delle risorse USB 2.0 per utenti avanzati: la possibilità di selezionare le modalità di funzionamento del bus (isocrona, interruzione, surround, controllo), alta velocità di trasferimento. Richiede una profonda conoscenza del bus e capacità di sviluppo del software Windows

Bootloader con chiavetta USB

Aggiornamento del firmware da una normale unità flash.

Per aggiornare il firmware di un microcontrollore con modulo USB-OTG (PIC24 o PIC32), non è necessario utilizzare software speciali. La presenza della modalità Host consente di collegare normali unità dati USB (Flash Drive) al microcontrollore. Un esempio è stato pubblicato sul sito web di Microchip ( versione beta) che consente di aggiornare il software del microcontrollore da un'unità USB collegata.

Per eseguire l'esempio, è necessario caricare il firmware del bootloader in una scheda USB PIC32 o Explorer 16 (con un modulo processore PIM USB PIC32 e una scheda figlia USB PICtail Plus installata). Se la scheda viene alimentata mentre il pulsante è premuto, il controller entrerà nella modalità di aggiornamento del firmware. Se ora colleghi un'unità flash con un file di aggiornamento del firmware registrato, il microcontrollore legge questo file e lo sovrascrive nella sua memoria di programma.

Schede di sviluppo e strumenti di sviluppo per USB

Programmatore debugger PICkit2 (numero d'ordine PG164120)

La presenza di un bootloader ti consente di caricare il tuo software per padroneggiare le capacità di lavorare con USB


Riso. 20

Scheda di sviluppo PICDEM FS-USB (numero d'ordine DM163025)

Progettato per lo sviluppo e la dimostrazione di dispositivi basati sul microcontrollore PIC18F4550 con bus USB 2.0. La scheda dispone di un controller PIC18F4550 in un pacchetto TQFP44.


Riso. 21

Kit di sviluppo USB a basso numero di pin (numero d'ordine DM164127)

Il kit di sviluppo USB a basso numero di pin fornisce un modo semplice per valutare le capacità del microcontrollore dei microcontrollori USB a 20 pin PIC18F14K50 e PIC18F13K50 di Microchip. Il kit include tutto il necessario per iniziare con i controller USB (software, file sorgente di esempio, documentazione).


Riso. 22

Scheda demo USB PIC18F87J50 Full Speed ​​USB PIC18F87J50 FS (numero d'ordine MA180021)

La scheda demo USB PIC18F87J50 FS viene utilizzata per eseguire il debug dei microcontrollori Full Speed ​​USB 2.0 della famiglia PIC18F87J50. Oltre al funzionamento autonomo, la scheda può essere utilizzata anche come modulo processore per la PIC18 Explorer Board.


Riso. 23

Kit iniziale PIC24 (numero d'ordine DM240011)

Lo Starter Kit PIC24F contiene tutto il necessario per iniziare con la famiglia di controller PIC24F ad alte prestazioni. Questo kit economico contiene un debugger e un programmatore integrato nel circuito, un controller USB PIC24F (le funzioni Host e Device possono essere implementate sulla scheda), un LED a tre colori, un pannello touch capacitivo e un display grafico OLED. Il programma demo tramite il menu grafico consente di scrivere dati su un'unità flash USB esterna, configurare il pannello a sfioramento ed eseguire attività grafiche.


Riso. 24

Scheda USB PIC32 (numero d'ordine DM320003)

Consente di padroneggiare il modulo USB-OTG nei controller PIC32


Riso. 25

Scheda di sviluppo "Explorer 16 Development Board" (numero d'ordine DM240001)

Questo è uno strumento di debug a basso costo per iniziare con le famiglie di microcontrollori PIC24 a 16 bit ad alte prestazioni e i controller di elaborazione del segnale digitale dsPIC33F.


Riso. 26

Scheda figlia "USB PICtali Plus" (numero d'ordine AC164131)

Insieme ai moduli plug-in del processore USB, consente di sviluppare ed eseguire il debug di dispositivi USB Host, Device, USB-OTG.


Riso. 27

Ilya Afanasiev,
Azienda

Se noti un errore, seleziona una parte di testo e premi Ctrl + Invio
CONDIVIDERE: