Czy istnieje sposób na dostęp do portu szeregowego USB za pomocą identyfikatora urządzenia, a nie portu tty. *?

17

Na linuxowych urządzeniach szeregowych USB utwórz dwa aliasy do portu szeregowego:
/dev/tty*i/dev/serial/by-id/<my_usb_device_id>

Czy w OSX jest sposób na identyfikację portu szeregowego na podstawie identyfikatora urządzenia USB? Zarówno w Profilu systemu, jak i przy użyciu ioreg -p IOUSBwidzę identyfikator, ale to nie zbliża mnie do łączenia się przy użyciu tego identyfikatora.

Opracowujemy kilka elementów sprzętu i testowanie ich jest uciążliwe, ponieważ za każdym razem, gdy podłączam inne urządzenie, muszę zweryfikować konfigurację portu szeregowego oprogramowania testującego, ponieważ w OSX tty.*nazwa portu zależy od portu na moim komputerze, nie w urządzeniu. Faceci korzystający z systemu Linux chętnie korzystają z /dev/serial/by-id/<my_usb_device_id>portu, aby automatycznie rozróżniać różne urządzenia.

Johan
źródło

Odpowiedzi:

2

W przypadku mostu FTDI, który mam, numer seryjny pojawia się już w nazwie urządzenia: pojawia się jako /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(odpowiadający niektórym /dev/ttyUSBx) w systemie Linux oraz jako /dev/cu.usbserial-DA00AG57i /dev/tty.usbserial-DA00AG57w systemie macOS. (Zobacz /programming//a/8632603/4896937 dla różnicy między tty.*i cu.*.)

Niestety, w przypadku mostu Prolific mam problem podobny do twojego: urządzenie pojawiające się jako /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(które nie zawiera numeru seryjnego) jest po prostu /dev/cu.usbseriali /dev/tty.usbserialna macOS (nawet System Profiler nie podaje dla niego numeru seryjnego). Kto wie, co by się stało, gdybym miał drugi podłączony.

Być może istnieje bardziej ogólna odpowiedź, która jest niezależna od dostawcy, ale ostrzegamy, że niektóre urządzenia mogą nie zgłaszać numeru seryjnego.

chrstphrchvz
źródło
Dla mnie pojawiają się jako /dev/tty.usbmodemFD121 i /dev/tty.usbmodemFA131. Liczba zależy bezpośrednio od portu USB w moim laptopie. Informacje o systemie pokazują prawidłowy identyfikator urządzeń ustawionych przez ich oprogramowanie układowe. Obie numery są tworzone przez procesory STM32F2 / F4.
Johan
2

Właściwie powinieneś być w stanie znaleźć mapowanie z ID urządzenia / numeru seryjnego na nazwę portu szeregowego za pomocą ioreg. Wypróbuj to polecenie:

ioreg -r -c IOUSBHostDevice -l

Wydrukuje wszystkie urządzenia hosta USB i wydrukuje wszystkie właściwości z poddrzewa każdego urządzenia. Powinieneś być w stanie znaleźć swoje urządzenie na najwyższym poziomie na podstawie jego identyfikatora lub numeru seryjnego. Po znalezieniu go powinieneś być w stanie przeskanować jego poddrzewo i ostatecznie znaleźć obiekt klasy IOSerialBSDClient. Będzie zawierać właściwość, IODialinDevicektóra jest tym, czego chcesz.

Jeśli chcesz to zrobić programowo, możesz dodać -aopcję do ioregpolecenia, która wyświetli wersję plist powyższego wyjścia. Następnie możesz to przeanalizować za pomocą biblioteki takiej jak plistlib.

Pomocne może być użycie aplikacji IORegistryExplorer, aby pomóc w wizualizacji tego, ponieważ pełne ioregwyjście jest nieco trudne do odczytania! Jest to dostępne w pakiecie „Hardware IO Tools” XCode, który można znaleźć, wyszukując pliki do pobrania w witrynie dla programistów Apple . Oto jak to wygląda na moim urządzeniu:

Przykład IORegistryExplorer

Donald Harvey
źródło