2012-10-01 15 views
7

Qualcuno sa se è possibile emulare UART (semplice trasmissione seriale e ricezione) tramite USB? Come sarebbe stato realizzato?Emulazione dell'UART tramite USB

Ho trovato questo collegamento sul sito Web di Microchip, ma non è molto imminente.

http://www.microchip.com/forums/m522571-print.aspx

Tutte le idee? Grazie.

+4

Definitivamente l'utilizzo di un FTDI è il modo migliore per andare. – TJD

+0

FTDI? Spiega per favore. Il mio manager richiede di configurare la periferica USB integrata per operare come UART. Per quanto posso dire, questo non è possibile, ma lui insiste che lo è. –

+0

I chip FTDI convertono UART in USB. Quindi internamente useresti solo la normale periferica UART, ma esternamente ti connetti con USB. Sul lato PC, si ottiene una porta COM virtuale in modo da poter interagire con essa come una normale porta seriale. Questo è molto pulito e facile e il modo in cui tutti lo fanno. Non riesco a immaginare il motivo per cui avresti davvero bisogno di usare la periferica USB del tuo chip. – TJD

risposta

8

Fondamentalmente si hanno due opzioni per emulare UART via USB:

  1. utilizzare un prodotto esistente. La società FTDI fornisce chip bridge UART-USB ben noti e solidi, ad es. FT230X. Pro: non hai bisogno di alcuna conoscenza dettagliata su USB. Contro: costoso se usato nella produzione di massa. Hardware aggiuntivo, richiede ulteriore potenza.

  2. Implementare la classe di dispositivo USB "Communication Device Class" (CDC). Le specifiche del CDC sono disponibili su USB.org, vedere here. Pro: economico nella produzione di massa (se il tuo microcontroller è dotato di USB a bordo). Con: hai bisogno di informazioni dettagliate su USB.

+0

Semplice, e al punto. Si scopre che il mio manager stava parlando dell'implementazione di una porta COM virtuale. Grazie! –

+0

Il collegamento è interrotto. Dovrebbe essere qui adesso? http://www.usb.org/developers/docs/ –

+1

@ cp engr: Grazie per il suggerimento. Il tuo link va nella giusta direzione. Un passo più in profondità e si arriva alle specifiche della classe USB in cui è possibile trovare le specifiche del CDC: [www.usb.org/developers/docs/devclass_docs/](http://www.usb.org/developers/docs/devclass_docs/). – Habi

11

è necessario implementare stack di periferica come dispositivo CDC ACM (noto anche come porta COM virtuale o VCP). La maggior parte dei fornitori di microcontrollori con supporto USB hanno codice di esempio o note app.

Dato che, il dispositivo sarà simile a una porta COM per quanto riguarda Windows. Alla fine del dispositivo, otterrete blocchi grezzi di dati trasferiti. È possibile implementare un livello di astrazione appropriato per entrambe le interfacce UART e USB per fornire quindi la stessa interfaccia, se necessario.

Un trucco è che i dispositivi USB richiedono un ID fornitore assegnato dal forum dell'implementatore USB, a $5000 fee (corretto 23 luglio 2016). Se hai intenzione di rilasciare il tuo dispositivo in natura, ne avrai davvero bisogno se il tuo dispositivo deve essere riconosciuto e comportarsi correttamente con altri dispositivi. Alcuni fornitori di microcontrollori ti permetteranno di utilizzare l'ID del fornitore per un sottoinsieme di ID prodotto gratuitamente o una tariffa più piccola, ma potrebbero farlo solo se acquistassi quantità significative di dispositivi da essi. Un altro problema è che mentre su OSX o Linux viene riconosciuto un CDC/ACM senza driver aggiuntivi, Windows è più esigente e richiede un file INF per associare lo specifico fornitore USB e l'ID prodotto al driver usbser.sys. Torna all'inizio | Poi si entra nel mondo intero della firma dei driver, che è essenziale se si utilizza Windows Vista 64 o qualsiasi versione di Windows 7. Una firma di firma del codice ti costerà anche dei soldi. Se il fornitore ha fornito un codice VCP di esempio, probabilmente fornirà anche un driver firmato. L'esempio STM32 VCP di STMicroelectronios è anche certificato WHQL, quindi può essere acquisito automaticamente tramite Windows Update.

Quindi il risultato è che per la sperimentazione è possibile farlo se il fornitore fornisce già il codice e un driver firmato (o non si utilizza Windows), ma per implementare un prodotto sono necessari un ID fornitore e una firma del codice certificato. È un po 'un campo minato ad essere onesti.

Un approccio più semplice consiste nell'utilizzare un chip seriale 01DIFTDI USB. Ciò è particolarmente utile per un microcontrollore senza un proprio controller USB, ma la velocità di trasferimento dei dati sarà limitata dai micro e/o dall'interfaccia UART dell'FTDI piuttosto che dalla velocità USB. È possibile utilizzare un chip FTDI in quanto utilizza il VID/PID di FTDI oppure è possibile personalizzarlo con il proprio VID/PID.La personalizzazione ti riporta a dover acquisire un VID e un certificato di firma, ma consente di identificare il tuo dispositivo in modo univoco anziché come una porta seriale generica.

+3

Aggiungo questo: Evita i dongle USB-Serial basati sul PL2303 - il chipset stesso sembra perfetto e driver per Windows e MacOSX sono inaffidabili. Davvero brutte notizie quando esegui il debugging dell'hardware incorporato e ti affidi alla porta seriale per il debug. – marko

+2

Posso garantire problemi con Windows con gli adattatori PL2303. Schermi blu e simili se ci sono troppi dati su più adattatori, ecc. Anche il paio di varianti di questi adattatori che ho usato hanno funzionato abbastanza bene sotto Linux. –

+0

Sono interessato all'utilizzo di una scheda che utilizza il chip USB-to-Serial FTDI e mi chiedevo come avrebbe potuto interfacciarsi con la porta USB del microcontrollore STM32. Mi chiedo come vorrei comunicare con esso dal punto di vista del microcontrollore. Dalla mia comprensione (che ammetto è limitata), affinché il micro lo riconosca come VCP richiederebbe il driver VCP FTDI. Non sono sicuro se sia possibile installarlo anche sul micro STM32 e speravo di vedere se ci sono alternative all'interfacciamento con la scheda tramite USB. – mban