Apakah ada cara untuk mengakses port USB-serial oleh id perangkat, bukan oleh port tty. *?

17

Di linux, perangkat serial USB membuat dua alias ke port serialnya:
/dev/tty*dan/dev/serial/by-id/<my_usb_device_id>

Apakah ada cara di OSX untuk mengidentifikasi port serial oleh id perangkat USB? Baik di System Profiler dan menggunakan ioreg -p IOUSBsaya bisa melihat id, tapi itu tidak membuat saya lebih dekat untuk menghubungkan menggunakan id itu.

Kami sedang mengembangkan beberapa perangkat keras dan sulit untuk mengujinya karena setiap kali saya menghubungkan perangkat yang berbeda saya perlu memverifikasi konfigurasi port serial dari perangkat lunak pengujian, karena pada OSX tty.*nama port tergantung pada port di komputer saya, tidak ada di perangkat. Orang-orang yang menjalankan linux dengan senang hati menggunakan /dev/serial/by-id/<my_usb_device_id>port untuk secara otomatis membedakan antara perangkat yang berbeda.

Johan
sumber

Jawaban:

2

Untuk jembatan FTDI yang saya miliki, nomor seri sudah muncul di nama perangkat: muncul sebagai /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(sesuai dengan beberapa /dev/ttyUSBx) di Linux, dan sebagai /dev/cu.usbserial-DA00AG57dan /dev/tty.usbserial-DA00AG57pada macOS. (Lihat /programming//a/8632603/4896937 untuk perbedaan antara tty.*dan cu.*.)

Sayangnya, untuk Prolific bridge yang saya miliki, masalah seperti Anda masih berlaku: perangkat yang muncul sebagai /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(yang tidak mengandung nomor seri) sederhana /dev/cu.usbserialdan /dev/tty.usbserialdi macOS (bahkan System Profiler tidak memberikan nomor seri untuk itu). Siapa yang tahu apa yang akan terjadi jika saya memiliki yang kedua.

Mungkin ada jawaban yang lebih umum di luar sana yang independen terhadap vendor, tetapi berhati-hatilah beberapa perangkat mungkin tidak melaporkan nomor seri.

chrstphrchvz
sumber
Bagi saya mereka muncul sebagai /dev/tty.usbmodemFD121 dan /dev/tty.usbmodemFA131. Jumlahnya tergantung langsung pada port USB di laptop saya. Info sistem menunjukkan id yang benar untuk perangkat yang diatur oleh firmware mereka. Kedua serial ini dibuat oleh prosesor STM32F2 / F4.
Johan
2

Sebenarnya, Anda harus dapat menemukan pemetaan dari ID perangkat / nomor seri ke nama port serial menggunakan ioreg. Coba perintah ini:

ioreg -r -c IOUSBHostDevice -l

Ini akan mencetak semua perangkat host USB, dan itu akan mencetak semua properti dari subtree masing-masing perangkat. Anda harus dapat menemukan perangkat Anda di tingkat atas berdasarkan ID atau nomor seri. Setelah Anda menemukannya, Anda harus dapat memindai melalui subtree-nya, dan akhirnya menemukan objek kelas IOSerialBSDClient. Ini akan berisi properti IODialinDeviceyang Anda inginkan.

Jika kemudian Anda ingin melakukan ini secara terprogram, Anda dapat menambahkan -aopsi ke ioregperintah, yang akan menampilkan versi plist dari output di atas. Anda kemudian dapat menguraikan ini dengan perpustakaan seperti plistlib.

Anda mungkin merasa terbantu untuk menggunakan aplikasi IORegistryExplorer untuk membantu memvisualisasikan ini, karena hasil lengkapnya ioregsedikit sulit dibaca! Ini tersedia dalam paket "Hardware IO Tools" XCode yang dapat Anda temukan dengan mencari unduhan di situs pengembang Apple . Begini tampilannya di perangkat saya:

Contoh IORegistryExplorer

Donald Harvey
sumber