Existe-t-il un moyen d'accéder à un port série USB par l'ID de l'appareil, pas par le port tty. *?

17

Sur les périphériques série USB Linux, créez deux alias sur son port série:
/dev/tty*et/dev/serial/by-id/<my_usb_device_id>

Existe-t-il un moyen sur OSX d'identifier un port série par l'ID de périphérique USB? Dans System Profiler et en utilisant, ioreg -p IOUSBje peux voir l'identifiant, mais cela ne me rapproche pas davantage de la connexion en utilisant cet identifiant.

Nous développons plusieurs éléments matériels et il est difficile de les tester car chaque fois que je connecte un appareil différent, je dois vérifier la configuration du port série du logiciel de test, car sous OSX le tty.*nom du port dépend du port de mon ordinateur, pas sur l'appareil. Les gars qui exécutent Linux utilisent volontiers le /dev/serial/by-id/<my_usb_device_id>port pour distinguer automatiquement les différents appareils.

Johan
la source

Réponses:

2

Pour un pont FTDI que j'ai, le numéro de série apparaît déjà dans le nom de l'appareil: il apparaît comme /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(correspondant à certains /dev/ttyUSBx) sous Linux, et comme /dev/cu.usbserial-DA00AG57et /dev/tty.usbserial-DA00AG57sous macOS. (Voir /programming//a/8632603/4896937 pour la différence entre tty.*et cu.*.)

Malheureusement, pour le pont Prolific que j'ai, un problème comme le vôtre s'applique toujours: un périphérique apparaissant comme /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(qui ne contient pas de numéro de série) est simplement /dev/cu.usbserialet /dev/tty.usbserialsous macOS (même System Profiler ne donne pas de numéro de série pour cela). Qui sait ce qui se passerait si j'en avais un deuxième branché.

Il existe peut-être une réponse plus générale indépendante du fournisseur, mais sachez que certains appareils peuvent ne pas signaler de numéro de série.

chrstphrchvz
la source
Pour moi, ils apparaissent comme /dev/tty.usbmodemFD121 et /dev/tty.usbmodemFA131. Le nombre dépend directement du port USB de mon ordinateur portable. Les informations système indiquent l'ID correct pour les périphériques définis par leur micrologiciel. Les deux séries sont créées par des processeurs STM32F2 / F4.
Johan
2

En fait, vous devriez pouvoir trouver le mappage de l'ID de l'appareil / numéro de série au nom du port série à l'aide ioreg. Essayez cette commande:

ioreg -r -c IOUSBHostDevice -l

Il imprimera tous les périphériques hôtes USB et il imprimera toutes les propriétés du sous-arbre de chaque périphérique. Vous devriez pouvoir trouver votre appareil au niveau supérieur en fonction de son ID ou de son numéro de série. Une fois que vous l'avez trouvé, vous devriez pouvoir parcourir son sous-arbre et éventuellement trouver un objet de classe IOSerialBSDClient. Cela contiendra la propriété IODialinDevicequi est ce que vous voulez.

Si vous souhaitez ensuite le faire par programme, vous pouvez ajouter l' -aoption à la ioregcommande, qui produira une version plist de la sortie ci-dessus. Vous pouvez ensuite analyser cela avec une bibliothèque telle que plistlib.

Vous pourriez trouver utile d'utiliser l'application IORegistryExplorer pour aider à visualiser cela, car la ioregsortie complète est légèrement difficile à lire! Ceci est disponible dans le package "Hardware IO Tools" de XCode que vous pouvez trouver en recherchant les téléchargements sur le site des développeurs Apple . Voici à quoi cela ressemble sur mon appareil:

Exemple IORegistryExplorer

Donald Harvey
la source