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

Erstellen Sie auf seriellen USB-Geräten unter Linux zwei Aliase für den seriellen Port:
/dev/tty*and/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 bei der Verwendung ioreg -p IOUSBkann ich die ID sehen, aber das bringt mich der Verbindung mit dieser ID nicht näher.

Wir entwickeln mehrere Hardwareteile und es ist mühsam, sie zu testen, da ich jedes Mal, wenn ich ein anderes Gerät anschließe, die Konfiguration des seriellen Anschlusses der Testsoftware überprüfen muss, da der Anschlussname unter OSX tty.*vom Anschluss an meinem Computer abhängt. nicht am Gerät. Die Linux-Leute nutzen den /dev/serial/by-id/<my_usb_device_id>Port gerne, um automatisch zwischen den verschiedenen Geräten zu unterscheiden.

Antworten (4)

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

ioreg -r -c IOUSBHostDevice -l

Es druckt alle USB-Host-Geräte und alle Eigenschaften aus dem Unterbaum jedes Geräts. Sie sollten Ihr Gerät anhand seiner ID oder Seriennummer auf der obersten Ebene finden können. Sobald Sie es gefunden haben, sollten Sie in der Lage sein, seinen Unterbaum zu durchsuchen und schließlich ein Objekt der Klasse zu finden IOSerialBSDClient. Diese enthält die gewünschte Eigenschaft IODialinDevice.

Wenn Sie dies dann programmgesteuert tun möchten, können Sie -adem Befehl die Option hinzufügen ioreg, die eine plist-Version der obigen Ausgabe ausgibt. Sie könnten dies dann mit einer Bibliothek wie plistlib.

Möglicherweise finden Sie es hilfreich, die IORegistryExplorer-App zu verwenden, um dies zu visualisieren, da die vollständige ioregAusgabe etwas schwer zu lesen ist! Dies ist im Paket „Hardware IO Tools“ von XCode verfügbar, das Sie finden können, indem Sie die Downloads auf der Apple-Entwickler-Website durchsuchen . So sieht es auf meinem Gerät aus:

IORegistryExplorer-Beispiel

Bitte beachten Sie, dass IORegistryExplorer.appes jetzt in einer .dmg namens "Zusätzliche Tools für Xcode" gebündelt ist, immer noch unter derselben URL.

Nach meiner Erfahrung kommt dieses Problem vom Treiber Ihres Serial-to-Uart-Geräts. Normalerweise sollten Sie mit auf die serielle Schnittstelle zugreifen können

ls /dev/tty*.* 

und das ist der einzige Weg, es zu tun. Aber wenn Ihr Mac es nicht anzeigt, habe ich ein Programm namens Serial Detect installiert, und es hat mein Board erkannt, andernfalls verwenden Sie lusb vor und nach dem Anschließen des Boards, wenn Sie es nicht haben, installieren Sie es wie folgt

brew install lsusb 

laut meinem gerät brauchte ich für meinen mac 10.13 folgenden treiber

https://www.silabs.com/community/interface/knowledge-base.entry.html/2017/01/10/legacy_os_softwarea-bgvU

Einmal installiert, finden Sie es unter

ls /dev/tty*.*

Jetzt können Sie Ihr Gerät flashen oder die serielle Schnittstelle öffnen. Sie können mit dfu-util über die Geräte-ID auf das USB-Gerät zugreifen, in meinem Fall ist 1d50:6017 die in lsusb angezeigte Geräte-ID, ich habe sie zum Flashen einer Blackmagic-Sonde verwendet, aber Sie können flashen, was Sie wollen, dfu-util ist a kostenloses Dienstprogramm kann mit installiert werdenbrew install --build-from-source dfu-util

dfu-util -d 1d50:6017 -s 0x08002000:leave -D ./src/blackmagic.bin
Ich kann dieses Problem nicht mehr testen, da das Projekt vor vielen Jahren abgeschlossen wurde und ich mich nicht mehr in Vollzeit mit der Hardwareentwicklung befasse. Aber wie ich in meinem ursprünglichen Beitrag angemerkt habe, war die Geräte-ID direkt vom Anschluss an meinem Laptop abhängig, nicht von der Hardware, die ich angeschlossen habe musste die kundenspezifische Konfiguration der Test-/Betriebssoftware überprüfen, um sicherzustellen, dass sie die richtige ID für die Kommunikation mit dem Gerät hatte.

Für eine FTDI-Bridge, die ich habe, erscheint die Seriennummer bereits im Gerätenamen: Sie erscheint als /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(entsprechend einigen /dev/ttyUSBx) unter Linux und als /dev/cu.usbserial-DA00AG57und /dev/tty.usbserial-DA00AG57unter macOS. (Siehe https://stackoverflow.com/a/8632603/4896937 für den Unterschied zwischen tty.*und cu.*.)

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

Vielleicht gibt es eine allgemeinere Antwort, die herstellerunabhängig ist, aber seien Sie gewarnt, dass einige Geräte möglicherweise keine Seriennummer melden.

Für mich erscheinen sie als /dev/tty.usbmodemFD121 und /dev/tty.usbmodemFA131. Die Nummer hängt direkt am USB-Port meines Laptops. Systeminfo zeigt die korrekte ID für die Geräte, die von ihrer Firmware festgelegt wurden. Beide Seriennummern werden von STM32F2/F4-Prozessoren erstellt.

Ich hatte das gleiche Problem mit Profilic Bridge und lade den Treiber von http://www.prolific.com.tw/US/ShowProduct.aspx?p_id=229&pcid=41 herunter, um das Problem nach dem Neustart zu beheben.

Welches Problem war das? Das OP fragte, wie man ein Gerät identifiziert, es wird nicht erwähnt, dass es Treiberprobleme gibt.
Das ist die richtige Antwort, ich habe viel gesucht