Esiste un modo per accedere a una porta seriale USB tramite l'id del dispositivo, non tramite la porta tty. *?


17

Sui dispositivi USB-seriale Linux creare due alias sulla sua porta seriale:
/dev/tty*e/dev/serial/by-id/<my_usb_device_id>

Esiste un modo su OSX per identificare una porta seriale dall'ID del dispositivo USB? Sia in System Profiler che nell'uso ioreg -p IOUSBposso vedere l'id, ma questo non mi avvicina di più alla connessione usando quell'id.

Stiamo sviluppando diversi componenti hardware ed è un problema testarli poiché ogni volta che connetto un dispositivo diverso devo verificare la configurazione della porta seriale del software di test, perché su OSX il tty.*nome della porta dipende dalla porta del mio computer, non sul dispositivo. I ragazzi che eseguono Linux stanno usando felicemente la /dev/serial/by-id/<my_usb_device_id>porta per distinguere automaticamente tra i diversi dispositivi.

Risposte:


2

Per un bridge FTDI che ho, il numero seriale appare già nel nome del dispositivo: appare come /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(corrispondente ad alcuni /dev/ttyUSBx) su Linux e come /dev/cu.usbserial-DA00AG57e /dev/tty.usbserial-DA00AG57su macOS. (Vedi /programming//a/8632603/4896937 per la differenza tra tty.*e cu.*.)

Sfortunatamente, per Prolific bridge che ho, /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0esiste ancora un problema come il tuo: un dispositivo che appare come (che non contiene un numero seriale) è semplicemente /dev/cu.usbseriale /dev/tty.usbserialsu macOS (nemmeno System Profiler ne fornisce un numero seriale). Chissà cosa sarebbe successo se ne avessi collegato un secondo.

Forse c'è una risposta più generale là fuori che è indipendente dal fornitore, ma alcuni dispositivi potrebbero non riportare un numero seriale.


Per me appaiono come /dev/tty.usbmodemFD121 e /dev/tty.usbmodemFA131. Il numero dipende direttamente dalla porta USB del mio laptop. Le informazioni di sistema mostrano l'id corretto per i dispositivi impostati dal loro firmware. Entrambi i seriali sono creati dai processori STM32F2 / F4.
Johan

2

In realtà, dovresti essere in grado di trovare la mappatura dall'ID dispositivo / numero seriale al nome della porta seriale usando ioreg. Prova questo comando:

ioreg -r -c IOUSBHostDevice -l

Stamperà tutti i dispositivi host USB e stamperà tutte le proprietà dalla sottostruttura di ciascun dispositivo. Dovresti essere in grado di trovare il tuo dispositivo al livello più alto in base al suo ID o numero di serie. Una volta trovato, dovresti essere in grado di scansionare la sua sottostruttura e alla fine trovare un oggetto di classe IOSerialBSDClient. Questo conterrà la proprietà IODialinDeviceche è quello che vuoi.

Se si desidera quindi eseguire ciò a livello di codice, è possibile aggiungere l' -aopzione al ioregcomando, che genererà una versione plist dell'output sopra. È quindi possibile analizzarlo con una libreria come plistlib.

Potresti trovare utile usare l'app IORegistryExplorer per aiutarti a visualizzarlo, poiché l' ioregoutput completo è leggermente difficile da leggere! Questo è disponibile nel pacchetto "Hardware IO Tools" di XCode che puoi trovare cercando i download sul sito degli sviluppatori Apple . Ecco come appare sul mio dispositivo:

Esempio di IORegistryExplorer

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.