Existe uma maneira de acessar uma porta serial USB pelo ID do dispositivo, não pela porta tty. *?

17

Nos dispositivos serial USB do linux, crie dois aliases para sua porta serial:
/dev/tty*e/dev/serial/by-id/<my_usb_device_id>

Existe uma maneira no OSX de identificar uma porta serial pelo ID do dispositivo USB? Tanto no System Profiler quanto no uso ioreg -p IOUSB, posso ver o ID, mas isso não me aproxima da conexão usando esse ID.

Estamos desenvolvendo várias peças de hardware e é difícil testá-las, pois toda vez que conecto um dispositivo diferente, preciso verificar a configuração da porta serial do software de teste, porque no OSX o tty.*nome da porta depende da porta do meu computador, não no dispositivo. Os caras executando o linux estão felizes em usar a /dev/serial/by-id/<my_usb_device_id>porta para distinguir automaticamente os diferentes dispositivos.

Johan
fonte

Respostas:

2

Para uma ponte FTDI que possuo, o número de série já aparece no nome do dispositivo: aparece como /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(correspondente a alguns /dev/ttyUSBx) no Linux e como /dev/cu.usbserial-DA00AG57e /dev/tty.usbserial-DA00AG57no macOS. (Consulte https://stackoverflow.com/a/8632603/4896937 para saber a diferença entre tty.*e cu.*.)

Infelizmente, para o Prolific bridge que tenho, um problema como o seu ainda se aplica: um dispositivo que aparece como /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(que não contém um número de série) é simples /dev/cu.usbseriale está /dev/tty.usbserialno macOS (nem o System Profiler fornece um número de série para ele). Quem sabe o que aconteceria se eu tivesse um segundo conectado.

Talvez exista uma resposta mais geral independente do fornecedor, mas esteja avisado de que alguns dispositivos podem não informar um número de série.

chrstphrchvz
fonte
Para mim, eles aparecem como /dev/tty.usbmodemFD121 e /dev/tty.usbmodemFA131. O número depende diretamente da porta USB do meu laptop. As informações do sistema mostram a identificação correta dos dispositivos definidos pelo firmware. Ambas as seriais são criadas pelos processadores STM32F2 / F4.
6267 Johan
2

Na verdade, você deve encontrar o mapeamento do ID do dispositivo / número de série para o nome da porta serial usando ioreg. Tente este comando:

ioreg -r -c IOUSBHostDevice -l

Ele imprimirá todos os dispositivos host USB e todas as propriedades da subárvore de cada dispositivo. Você deve encontrar seu dispositivo no nível superior com base em seu ID ou número de série. Depois de encontrá-lo, você poderá verificar sua subárvore e, eventualmente, encontrar um objeto de classe IOSerialBSDClient. Isso conterá a propriedade IODialinDeviceque é o que você deseja.

Se você quiser fazer isso programaticamente, poderá adicionar a -aopção ao ioregcomando, que produzirá uma versão básica da saída acima. Você pode analisar isso com uma biblioteca como plistlib.

Você pode achar útil usar o aplicativo IORegistryExplorer para ajudar a visualizar isso, pois a ioregsaída completa é um pouco difícil de ler! Está disponível no pacote "Hardware IO Tools" do XCode, que você pode encontrar pesquisando os downloads no site de desenvolvedor da Apple . Aqui está o que parece no meu dispositivo:

Exemplo de IORegistryExplorer

Donald Harvey
fonte