PDA

View Full Version : PROGRAMMARE LA PORTA USB


artintel
30-11-2008, 21:13
Ciao, vorrei sapere se qualcuno sa indicarmi come posso realizzare un programma per pilotare la porta USB.
Mi spiego meglio, voglio realizzare dei circuiti elettronici comandabili via USB, senza però dover ricorrere alla trasformazione da USB a SERIALE o PARALLELA. Ho letto in molti forum che è complesso.
Mi è sufficiente sapere anche soltanto il nome di qualche libro che possa spiegarmi come fare.
Vi ringrazio anticipamente

Luca

vizzz
30-11-2008, 21:31
Ciao, vorrei sapere se qualcuno sa indicarmi come posso realizzare un programma per pilotare la porta USB.
Mi spiego meglio, voglio realizzare dei circuiti elettronici comandabili via USB, senza però dover ricorrere alla trasformazione da USB a SERIALE o PARALLELA. Ho letto in molti forum che è complesso.
Mi è sufficiente sapere anche soltanto il nome di qualche libro che possa spiegarmi come fare.
Vi ringrazio anticipamente

Luca

Dipende molto dalla logica che c'è sulla parte elettronica...se è un micro che ha già delle funzionalità usb o meno.
Nel primo caso dovrai scrivere del firmware per gestire la parte usb.
Dove lavoro ultimamente utilizziamo questi cavi: http://www.ftdichip.com/Documents/DataSheets/Modules/DS_TTL-232R_CABLES_V201.pdf
puoi poi comunicare utilizzando la porta com virtuale o con dei driver diretti (D2xx)

cionci
01-12-2008, 07:55
Appunto non sono quello che voleva lui, cioè un adattatore USB-Seriale.

artintel, specifica almeno il sistema operativo ;)

sottovento
01-12-2008, 10:29
Per quel poco che ne so, USB significa "Universal Serial Bus" che, come dice wikipedia (http://it.wikipedia.org/wiki/USB), e' uno standard di comunicazione seriale.
Non penso che sia quindi possibile evitare una conversione a seriale...
Al limite puoi evitare di convertire i segnali ai livelli/timing TTL.

cionci
01-12-2008, 10:52
Per quel poco che ne so, USB significa "Universal Serial Bus" che, come dice wikipedia (http://it.wikipedia.org/wiki/USB), e' uno standard di comunicazione seriale.
Non penso che sia quindi possibile evitare una conversione a seriale...
Al limite puoi evitare di convertire i segnali ai livelli/timing TTL.
Quel cavo serve a convertire da USB a RS232 che è ben diverso dal dire che l'usb è seriale ;)

In pratica vedi l'usb come uno stack di livelli, sia l'host che il client (non mi ricordo il termine preciso) dialogano tra loro avendo sia da un lato che dall'altro questo stack. Il servizio del livello i-esimo dialoga con il servizi del livello i-esimo dell'altra parte del cavo sfruttando i servizi del livello sottostante.
Parte di questi livelli è realizzata in hardware, parte opzionalmente in software (checchessia messo in una rom e interpretato da un microcontrollore o elaborato dalla CPU). Quindi di fatto non esiste una periferica usb senza un driver.
Quel cavo che converte in RS232 è già una periferica completa che implementa tutto lo stack USB e ha come interfaccia una RS232 da una parte e dall'altra i servizi messi a disposizione dal driver che emula una porta COM.

Le possibilità di lavorare con USB sono due: sfruttare un controller già prodotto con relativo driver, oppure produrre il controller e il driver. Per i controller ci sono già chip pronti che permettono di interfacciare l'usb con un microcontroller, ovviamente bisogna scrivere il codice relativo agli ultimi livelli dello stack all'interno di una memoria Flash. Questo impone anche la realizzazione di un driver di periferica sul nostro sistema operativo che dialoghi con gli ultimi livelli prodotti dall'altra parte.

sottovento
01-12-2008, 11:17
Quel cavo serve a convertire da USB a RS232 che è ben diverso dal dire che l'usb è seriale ;)

Beh si, ma questo non toglie che l'USB sia un dispositivo seriale. Lo si puo' guardare sotto tutti i punti di vista che si vuole. Resta sempre seriale ;)


In pratica vedi l'usb come uno stack di livelli, sia l'host che il client (non mi ricordo il termine preciso) dialogano tra loro avendo sia da un lato che dall'altro questo stack. Il servizio del livello i-esimo dialoga con il servizi del livello i-esimo dell'altra parte del cavo sfruttando i servizi del livello sottostante.
Parte di questi livelli è realizzata in hardware, parte opzionalmente in software (checchessia messo in una rom e interpretato da un microcontrollore o elaborato dalla CPU). Quindi di fatto non esiste una periferica usb senza un driver.
Quel cavo che converte in RS232 è già una periferica completa che implementa tutto lo stack USB e ha come interfaccia una RS232 da una parte e dall'altra i servizi messi a disposizione dal driver che emula una porta COM.

Le possibilità di lavorare con USB sono due: sfruttare un controller già prodotto con relativo driver, oppure produrre il controller e il driver. Per i controller ci sono già chip pronti che permettono di interfacciare l'usb con un microcontroller, ovviamente bisogna scrivere il codice relativo agli ultimi livelli dello stack all'interno di una memoria Flash. Questo impone anche la realizzazione di un driver di periferica sul nostro sistema operativo che dialoghi con gli ultimi livelli prodotti dall'altra parte.

Hai ragione. Occorre anche precisare che anche i driver sono sovrapposti alla stessa maniera.
Detto questo: cosa occorre fare, ora? Occorre tirare fuori quei segnali, i quali arriveranno inevitabilmente in maniera seriale.
Tutti i sistemi finora elencati, quindi "decodificano" ("traducono") cio' che arriva dalla linea dati e te li mettono a disposizione. Non vedo quindi nessuna differenza, almeno a livello concettuale, no?

cionci
01-12-2008, 11:28
Nessuno mette in dubbio che l'usb sia seriale eh. Ripeto che per convertitore USB-seriale intendevo USB-RS232 ;)

In ogni caso che l'USB sia seriale ad un programmatore non deve assolutamente interessare niente in quanto il canale viene completamente astratto da primi 3 (mi sembra) livelli dello stack che sono già implementati in hardware e software sia sull'host che sul device.

cionci
01-12-2008, 11:45
Specifico meglio: non interessa nemmeno a chi programma o implementa il controller sul device, perché i primi tre livelli vengono forniti già preconfezionati. Quindi per entrambi quello che interessa è la lista ed il protocollo dei vari servizi che i layer di livello 3 offrono a chi li deve usare.
E' un po' la stessa cosa che succede con TCP: nessuno, vedendo il solo canale TCP, può dire che la connessione fra i due host in realtà è solo virtuale, ma il protocollo è a commutazione di pacchetto.

sottovento
01-12-2008, 12:09
:D Stiamo dicendo la stessa cosa :D
Beh, allora scusa per aver allungato il brodo per nulla ;)

artintel
01-12-2008, 15:27
Originariamente inviato da cionci:
Appunto non sono quello che voleva lui, cioè un adattatore USB-Seriale.

artintel, specifica almeno il sistema operativo

Preferirei windows, comunque non è indispensabile, va bene anche linux.

cionci
01-12-2008, 15:34
Preferirei windows, comunque non è indispensabile, va bene anche linux.
Per Windows devi guardare la documentazione della DDK. Sapevo che inclusi c'erano un paio di driver base per l'usb.
http://www.microsoft.com/whdc/DevTools/default.mspx

das
01-12-2008, 15:39
Preferirei windows, comunque non è indispensabile, va bene anche linux.

Credo che debba partire da quì: www.microsoft.com/whdc/

Scarica la guida in questa pagina:
http://www.microsoft.com/whdc/device/wpd/wpd_dk.mspx

C'è un infarinatura sulla programmazione dei driver

artintel
01-12-2008, 15:39
Grazie, cercherò di capirci qualcosa.

Q_Q
03-12-2008, 06:30
Ciao a tutti.
Mi stavo chiedendo se i driver servono per forza o basta un'applicazione creata apposta per quell'hardware.
Da quello che ho capito dentro l'hardware è memorizzato l'id con versione ecc... poi il pc "chiede" quando viene collegato, se non ha il driver ti chiede d'installarlo. Questo con tutte le periferiche (webcam, hd, ecc..) che possono essere usate da vari programmi, ma se quell'hardware viene gestito solamente da un programma, servono comunque i driver o basta quell'applicazione?

cionci
03-12-2008, 07:52
Serve comunque un driver perché in user mode l'accesso alle API per interfacciarsi al dispositivo è interdetto. Almeno su Windows, sinceramente su Linux credo che si possa anche ovviare con un programma in user mode, ma non ne ho idea.

Q_Q
03-12-2008, 23:13
Per creare una scheda con i/o analogici e digitali come si dovrebbe procedere ?
Sto leggendo quà e là ma non sapendo niente di elettronica sono alquanto confuso (l'unica cosa che ho fatto è stata comandare dei led sulla lpt1 anni fa, in dos con turbopascal).
E` possibile collegare direttamente un "coso" che muxa/demuxa il segnale dall'usb o serve per forza un pic ?

cionci
03-12-2008, 23:54
Puoi fare tutto e il contrario di tutto, dipende da cosa realizzi nell'USB Device.
Se metti un paio di registri con un covertitore D/A puoi anche pilotare segnali analogici, ma ripeto, non è quello il problema, il problema è realizzare l'interfacciamento con lo stack USB. L'alimentazione USB se non sbaglio può arrivare anche a 250mA, quindi un discreta quantità di corrente, in parte assorbita dal controller, ma nella maggiore parte disponibile per alimentare il resto.
Sono convinto che esistano già PIC pronti per essere comandati tramite un cavo USB e con il driver già pronto, ma allora tanto vale utilizzare un convertitore USB/RS232.

Q_Q
04-12-2008, 01:00
Ma con un convertitore USB/RS232 quando lo colleghi al pc non lo vede come porta com ?
Mettiamo caso che sia una periferica da vendere, usando usb->rs232 l'utente dovrebbe selezionare poi dal programma la porta com corretta (se poi cambia usb non cambia anche la com? Quindi dovrebbe risettarlo nel programma).
Con un pic il pc saprebbe che la periferica è quella anche se cambia porta usb e l'utente non dovrebbe settare nulla o sbaglio ? :stordita:

cionci
04-12-2008, 02:00
Con un pic il pc saprebbe che la periferica è quella anche se cambia porta usb e l'utente non dovrebbe settare nulla o sbaglio ? :stordita:
Dipende da come è implementato il controller sul device...

Q_Q
04-12-2008, 05:17
Sono un pò fuso cmq, si può programmare un pic 18F2550 per sembrare un HID in modo da non dover creare un driver e usare le api di windows per comunicare con la periferica ?

Volutomitra
04-12-2008, 06:37
Sono un pò fuso cmq, si può programmare un pic 18F2550 per sembrare un HID in modo da non dover creare un driver e usare le api di windows per comunicare con la periferica ?

Si, si può. A questo link:

http://www.semifluid.com/?p=23

puoi trovare spunti interessanti.

cionci
04-12-2008, 08:03
Sono un pò fuso cmq, si può programmare un pic 18F2550 per sembrare un HID in modo da non dover creare un driver e usare le api di windows per comunicare con la periferica ?
http://www.ianstedman.co.uk/Projects/PIC_USB_Interface/pic_usb_interface.html

In quel caso ti suggerisce di installare un driver di emulazione di porta seriale ;)

Per gli HID Device a quanto sembra non serve creare un driver, probabilmente per quello sopra lo fa per comodità.

Q_Q
07-12-2008, 03:35
Vado un po' OT.
Avete qualche pic da consigliare per fare qualche prova con l'usb ?
Il "coso" per mettere il programma compilato sul pic quanto costa ?
A breve ci sarà una fiera di elettronica e vorrei vedere se riesco a trovare qualcosa a poco :sperem: