Có cách nào để truy cập cổng nối tiếp USB bằng id thiết bị, không phải bằng cổng tty. * Không?


17

Trên các thiết bị nối tiếp USB linux tạo hai bí danh cho cổng nối tiếp của nó:
/dev/tty*/dev/serial/by-id/<my_usb_device_id>

Có cách nào để OSX xác định cổng nối tiếp bằng id thiết bị USB không? Cả trong System Profiler và sử dụng ioreg -p IOUSBtôi đều có thể thấy id, nhưng điều đó không giúp tôi gần hơn với việc kết nối bằng id đó.

Chúng tôi đang phát triển một số phần cứng và thật khó để kiểm tra chúng vì mỗi lần tôi kết nối một thiết bị khác, tôi cần xác minh cấu hình cổng nối tiếp của phần mềm kiểm tra, vì trên OSX, tty.*tên cổng phụ thuộc vào cổng trên máy tính của tôi, không có trên thiết bị. Những kẻ chạy linux đang vui vẻ sử dụng /dev/serial/by-id/<my_usb_device_id>cổng để tự động phân biệt giữa các thiết bị khác nhau.

Câu trả lời:


2

Đối với một cầu nối FTDI mà tôi có, số sê-ri đã xuất hiện trong tên thiết bị: nó xuất hiện dưới dạng /dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(tương ứng với một số /dev/ttyUSBx) trên Linux /dev/cu.usbserial-DA00AG57/dev/tty.usbserial-DA00AG57trên và trên macOS. (Xem /programming//a/8632603/4896937 để biết sự khác biệt giữa tty.*cu.*.)

Thật không may, đối với cầu Prolific mà tôi gặp phải, một vấn đề như của bạn vẫn được áp dụng: một thiết bị xuất hiện dưới dạng /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(không chứa số sê-ri) chỉ đơn giản /dev/cu.usbserial/dev/tty.usbserialtrên macOS (thậm chí System Profiler không cung cấp số sê-ri cho nó). Ai biết được chuyện gì sẽ xảy ra nếu tôi cắm cái thứ hai.

Có thể có một câu trả lời chung chung hơn là độc lập với nhà cung cấp, nhưng được cảnh báo rằng một số thiết bị có thể không báo cáo số sê-ri.


Đối với tôi, chúng xuất hiện dưới dạng /dev/tty.usbmodemFD121 và /dev/tty.usbmodemFA131. Số lượng phụ thuộc trực tiếp vào cổng USB trên máy tính xách tay của tôi. Thông tin hệ thống hiển thị id chính xác cho các thiết bị được cài đặt bởi chương trình cơ sở của họ. Cả hai serial được tạo bởi bộ xử lý STM32F2 / F4.
Johan

2

Trên thực tế, bạn sẽ có thể tìm thấy ánh xạ từ ID thiết bị / số sê-ri sang tên cổng nối tiếp bằng cách sử dụng ioreg. Hãy thử lệnh này:

ioreg -r -c IOUSBHostDevice -l

Nó sẽ in tất cả các thiết bị lưu trữ USB và nó sẽ in ra tất cả các thuộc tính từ cây con của mỗi thiết bị. Bạn sẽ có thể tìm thấy thiết bị của mình ở cấp cao nhất dựa trên ID hoặc số sê-ri của thiết bị. Khi bạn đã tìm thấy nó, bạn sẽ có thể quét qua cây con của nó và cuối cùng tìm thấy một đối tượng của lớp IOSerialBSDClient. Điều này sẽ chứa tài sản IODialinDeviceđó là những gì bạn muốn.

Nếu sau đó bạn muốn thực hiện việc này theo chương trình, bạn có thể thêm -atùy chọn vào ioreglệnh, điều này sẽ tạo ra một phiên bản nguyên bản của đầu ra trên. Sau đó, bạn có thể phân tích cái này với một thư viện như plistlib.

Bạn có thể thấy hữu ích khi sử dụng ứng dụng IORegistryExplorer để giúp hình dung điều này, vì ioregđầu ra đầy đủ hơi khó đọc! Điều này có sẵn trong gói "Công cụ IO Phần cứng" của XCode mà bạn có thể tìm thấy bằng cách tìm kiếm các bản tải xuống trên trang web của nhà phát triển Apple . Đây là những gì nó trông giống như trên thiết bị của tôi:

Ví dụ về IORegistryExplorer

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.