¿Hay alguna forma de acceder a un puerto serie USB mediante la identificación del dispositivo, no mediante el puerto tty. *?

17

En los dispositivos linux USB-serial, cree dos alias en su puerto serie:
/dev/tty*y/dev/serial/by-id/<my_usb_device_id>

¿Hay alguna manera en OSX para identificar un puerto serie por la identificación del dispositivo USB? Tanto en System Profiler como en el uso ioreg -p IOUSBpuedo ver la identificación, pero eso no me acerca más a la conexión usando esa identificación.

Estamos desarrollando varias piezas de hardware y es difícil probarlas, ya que cada vez que conecto un dispositivo diferente necesito verificar la configuración del puerto serie del software de prueba, porque en OSX el tty.*nombre del puerto depende del puerto en mi computadora, No en el dispositivo. Los chicos que ejecutan Linux están felizmente usando el /dev/serial/by-id/<my_usb_device_id>puerto para distinguir automáticamente entre los diferentes dispositivos.

Johan
fuente

Respuestas:

2

Para un puente FTDI que tengo, el número de serie ya aparece en el nombre del dispositivo: aparece como /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(correspondiente a algunos /dev/ttyUSBx) en Linux, y como /dev/cu.usbserial-DA00AG57y /dev/tty.usbserial-DA00AG57en macOS. (Consulte /programming//a/8632603/4896937 para ver la diferencia entre tty.*y cu.*.)

Desafortunadamente, para el puente prolífico que tengo, todavía se aplica un problema como el suyo: un dispositivo que aparece como /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(que no contiene un número de serie) es simple /dev/cu.usbserialy /dev/tty.usbserialen macOS (ni siquiera System Profiler le da un número de serie). Quién sabe qué pasaría si tuviera un segundo conectado.

Tal vez haya una respuesta más general que sea independiente del proveedor, pero tenga en cuenta que algunos dispositivos pueden no informar un número de serie.

chrstphrchvz
fuente
Para mí, aparecen como /dev/tty.usbmodemFD121 y /dev/tty.usbmodemFA131. El número depende directamente del puerto USB de mi computadora portátil. La información del sistema muestra la identificación correcta para los dispositivos establecidos por su firmware. Ambas series son creadas por procesadores STM32F2 / F4.
Johan
2

En realidad, debería poder encontrar el mapeo desde la ID del dispositivo / número de serie al nombre del puerto de serie usando ioreg. Prueba este comando:

ioreg -r -c IOUSBHostDevice -l

Imprimirá todos los dispositivos host USB e imprimirá todas las propiedades del subárbol de cada dispositivo. Debería poder encontrar su dispositivo en el nivel superior en función de su ID o número de serie. Una vez que lo haya encontrado, debería poder escanear a través de su subárbol y eventualmente encontrar un objeto de clase IOSerialBSDClient. Esto contendrá la propiedad IODialinDeviceque es lo que quieres.

Si luego desea hacer esto mediante programación, puede agregar la -aopción al ioregcomando, que generará una versión simple de la salida anterior. Luego puede analizar esto con una biblioteca como plistlib.

Puede que le resulte útil utilizar la aplicación IORegistryExplorer para ayudar a visualizar esto, ya que la ioregsalida completa es un poco difícil de leer. Está disponible en el paquete "Hardware IO Tools" de XCode que puede encontrar buscando las descargas en el sitio para desarrolladores de Apple . Así es como se ve en mi dispositivo:

ejemplo IORegistryExplorer

Donald Harvey
fuente