Eu tenho o seguinte problema. Estou desenvolvendo um sistema embarcado e tenho dois dispositivos USB para UART (FT232). O problema é que preciso diferenciá-los porque às vezes durante a inicialização um aparece como /dev/TTYUSB0 e outros como /dev/TTYUSB1.
Se eu usar o libusb para ler as informações deles, é exatamente a mesma coisa:
Bus 003 Device 028 ID 0403:6001 DeviceDescriptor { bLength: 18, bDescriptorType: 1, bcdUSB: 512, bDeviceClass: 0, bDeviceSubClass: 0, bDeviceProtocol: 0, bMaxPacketSize: 8, idVendor: 1027, idProduct: 24577, bcdDevice: 1536, iManufacturer: 1, iProduct: 2, iSerialNumber: 3, bNumConfigurations: 1 }
Bus 003 Device 027 ID 0403:6001 DeviceDescriptor { bLength: 18, bDescriptorType: 1, bcdUSB: 512, bDeviceClass: 0, bDeviceSubClass: 0, bDeviceProtocol: 0, bMaxPacketSize: 8, idVendor: 1027, idProduct: 24577, bcdDevice: 1536, iManufacturer: 1, iProduct: 2, iSerialNumber: 3, bNumConfigurations: 1 }
A única diferença é que um está conectado a uma porta física diferente no hub, mas até onde eu sei é impossível acessar/conversar com o hub real para ver o que está conectado e onde.
A única solução seria conversar com o hub (se for possível) e ver qual tty está atribuído a um dispositivo em um soquete físico específico?
Obrigado!
O fato de ambos terem sido produzidos com a mesma
SerialNumber
propriedade de interface torna isso ainda mais irritante. O FT232 genuíno vem pré-programado com números de série exclusivos, para que você tenha um chip falso em mãos. Pode ser bom saber.De qualquer forma, você pode ver qual porta em um hub contém qual dispositivo: em /sys/bus/usb/devices/ você encontrará os dispositivos conectados por USB descritos como
Então, /sys/bus/usb/devices/1-9.2.1 é o dispositivo USB conectado ao primeiro controlador raiz USB que tenho, lá na porta 9., à qual um hub está conectado, e lá na segunda porta , há um hub conectado e na primeira porta dele está meu mouse.
Em /sys/bus/usb/devices/1-9.1 eu tenho um adaptador serial. Quando olho para esse diretório, encontro outro diretório,
1-9.1:1.0
e nesse diretório outro diretóriottyUSB0
. em `ttyUSB0/tty/ttyUSB0/device, finalmente encontrei o link para /dev/ttyUSB0. Então, se você quiser escrever suas próprias ferramentas, é assim que você descobre o que pertence a qual porta.NO ENTANTO . Você não deve escrever suas próprias ferramentas. É para isso que serve o udev! Aprenda como instalar suas próprias regras do udev e adicionar uma, mais ou menos assim:
ajustando os números das portas e o caminho de desenvolvimento conforme apropriado para seus dispositivos específicos e suas conexões. Isso lhe dará dois links simbólicos que você deve usar em vez de /dev/ttyUSB0: /dev/serial0 e /dev/serial1