Gibt es eine Möglichkeit, über die Geräte-ID und nicht über den tty. * -Port auf einen seriellen USB-Anschluss zuzugreifen?

17

Auf Linux-Geräten mit seriellem USB-Anschluss erstellen Sie zwei Aliase für den seriellen Anschluss:
/dev/tty*und/dev/serial/by-id/<my_usb_device_id>

Gibt es unter OSX eine Möglichkeit, einen seriellen Anschluss anhand der USB-Geräte-ID zu identifizieren? Sowohl im System Profiler als auch unter Verwendung von ioreg -p IOUSBkann ich die ID sehen, aber das bringt mich der Verbindung mit dieser ID nicht näher.

Wir entwickeln verschiedene Hardwarekomponenten und es ist sehr schwierig, sie zu testen, da jedes Mal, wenn ich ein anderes Gerät anschließe, die Konfiguration der seriellen Schnittstelle der Testsoftware überprüft werden muss, da der tty.*Name der Schnittstelle unter OSX vom Anschluss auf meinem Computer abhängt. nicht auf dem Gerät. Die Jungs, die Linux verwenden, nutzen den /dev/serial/by-id/<my_usb_device_id>Port gerne, um automatisch zwischen den verschiedenen Geräten zu unterscheiden.

Johan
quelle

Antworten:

2

Bei einer FTDI-Bridge, die ich besitze, ist die Seriennummer bereits im Gerätenamen enthalten: Sie wird unter Linux als /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(entspricht einigen /dev/ttyUSBx) /dev/cu.usbserial-DA00AG57und /dev/tty.usbserial-DA00AG57unter macOS als und angezeigt. (Weitere Informationen zum Unterschied zwischen tty.*und finden Sie unter /programming//a/8632603/4896937cu.* .)

Leider gibt es bei Prolific Bridge immer noch ein Problem wie das Ihre: Ein Gerät, das als angezeigt wird /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(das keine Seriennummer enthält), ist einfach /dev/cu.usbserialund /dev/tty.usbserialunter macOS (nicht einmal System Profiler gibt eine Seriennummer dafür an). Wer weiß, was passieren würde, wenn ich ein zweites angeschlossen hätte.

Möglicherweise gibt es eine allgemeinere Antwort, die herstellerunabhängig ist. Beachten Sie jedoch, dass einige Geräte möglicherweise keine Seriennummer melden.

chrstphrchvz
quelle
Für mich erscheinen sie als /dev/tty.usbmodemFD121 und /dev/tty.usbmodemFA131. Die Nummer hängt direkt vom USB-Anschluss meines Laptops ab. Systeminfo zeigt die korrekte ID für die Geräte an, die durch ihre Firmware festgelegt wurden. Beide Serien werden von STM32F2 / F4-Prozessoren erstellt.
Johan
2

Eigentlich sollten Sie in der Lage sein, die Zuordnung von Geräte-ID / Seriennummer zum Namen der seriellen Schnittstelle mit zu finden ioreg. Versuchen Sie diesen Befehl:

ioreg -r -c IOUSBHostDevice -l

Es werden alle USB-Host-Geräte gedruckt und alle Eigenschaften aus dem Teilbaum der einzelnen Geräte ausgedruckt. Sie sollten in der Lage sein, Ihr Gerät anhand seiner ID oder Seriennummer auf der obersten Ebene zu finden. Sobald Sie es gefunden haben, sollten Sie in der Lage sein, den Teilbaum zu durchsuchen und schließlich ein Objekt der Klasse zu finden IOSerialBSDClient. Dies wird die Eigenschaft enthalten, die IODialinDeviceSie wollen.

Wenn Sie dies dann programmgesteuert ausführen möchten, können Sie -adem ioregBefehl die Option hinzufügen , die eine plist-Version der obigen Ausgabe ausgibt. Sie können dies dann mit einer Bibliothek wie z plistlib.

Es kann hilfreich sein, die IORegistryExplorer-App zu verwenden, um dies zu veranschaulichen, da die vollständige ioregAusgabe nur schwer lesbar ist! Dies ist im XCode-Paket "Hardware IO Tools" enthalten, das Sie in den Downloads auf der Apple-Entwicklerseite finden . So sieht es auf meinem Gerät aus:

Beispiel für IORegistryExplorer

Donald Harvey
quelle