มีวิธีในการเข้าถึงพอร์ตอนุกรม USB ด้วยรหัสอุปกรณ์ไม่ใช่จากพอร์ต tty. * หรือไม่


17

ในอุปกรณ์ USB แบบอนุกรมของ linux ให้สร้างนามแฝงสองตัวเป็นพอร์ตอนุกรม:
/dev/tty*และ/dev/serial/by-id/<my_usb_device_id>

มีวิธีใดใน OSX ที่จะระบุพอร์ตอนุกรมด้วยรหัสอุปกรณ์ USB หรือไม่ ทั้งใน System Profiler และการใช้ioreg -p IOUSBฉันสามารถเห็น id แต่นั่นไม่ได้ทำให้ฉันใกล้ชิดกับการเชื่อมต่อโดยใช้ id นั้น

เรากำลังพัฒนาฮาร์ดแวร์หลายชิ้นและเป็นเรื่องยากที่จะทดสอบพวกเขาทุกครั้งที่ฉันเชื่อมต่ออุปกรณ์อื่นฉันต้องตรวจสอบการกำหนดค่าพอร์ตอนุกรมของซอฟต์แวร์ทดสอบเพราะใน OSX tty.*ชื่อพอร์ตขึ้นอยู่กับพอร์ตบนคอมพิวเตอร์ของฉัน ไม่ได้อยู่ในอุปกรณ์ พวกที่ใช้งาน linux กำลังใช้/dev/serial/by-id/<my_usb_device_id>พอร์ตเพื่อแยกความแตกต่างระหว่างอุปกรณ์ต่าง ๆ โดยอัตโนมัติ

คำตอบ:


2

สำหรับบริดจ์ FTDI ที่ฉันมีหมายเลขซีเรียลจะปรากฏในชื่ออุปกรณ์แล้ว: จะปรากฏเป็น/dev/serial/by-id/usb-FTDI_FT231X_USB_UART_DA00AG57-if00-port0(ตรงกับบางส่วน/dev/ttyUSBx) บน Linux และเป็น/dev/cu.usbserial-DA00AG57และ/dev/tty.usbserial-DA00AG57บน macOS (ดู/programming//a/8632603/4896937สำหรับความแตกต่างระหว่างtty.*และcu.*.)

โชคไม่ดีสำหรับสะพาน Prolific ที่ฉันมีปัญหาเช่นคุณยังคงใช้: อุปกรณ์ที่ปรากฏเป็น/dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0(ซึ่งไม่มีหมายเลขซีเรียล) เป็นเพียง/dev/cu.usbserialและ/dev/tty.usbserialใน macOS (ไม่ใช่แม้แต่ System Profiler ให้หมายเลขซีเรียล) ใครจะรู้ว่าจะเกิดอะไรขึ้นถ้าฉันเสียบปลั๊กอันที่สองเข้าด้วยกัน

อาจมีคำตอบทั่วไปเพิ่มเติมว่าผู้ขายไม่ขึ้นกับใคร แต่ได้รับคำเตือนว่าอุปกรณ์บางอย่างอาจไม่รายงานหมายเลขซีเรียล


สำหรับฉันพวกเขาปรากฏเป็น /dev/tty.usbmodemFD121 และ /dev/tty.usbmodemFA131 จำนวนขึ้นอยู่กับพอร์ต USB บนแล็ปท็อปของฉันโดยตรง ข้อมูลระบบแสดง ID ที่ถูกต้องสำหรับอุปกรณ์ที่กำหนดโดยเฟิร์มแวร์ serials ทั้งสองนั้นสร้างขึ้นโดยโปรเซสเซอร์ STM32F2 / F4
Johan

2

ที่จริงแล้วคุณควรจะสามารถที่จะหาการทำแผนที่จากหมายเลขอุปกรณ์ / ioregหมายเลขอนุกรมกับชื่อพอร์ตอนุกรมโดยใช้ ลองคำสั่งนี้:

ioreg -r -c IOUSBHostDevice -l

มันจะพิมพ์อุปกรณ์โฮสต์ USB ทั้งหมดและจะพิมพ์คุณสมบัติทั้งหมดจากทรีย่อยของแต่ละอุปกรณ์ คุณควรจะสามารถค้นหาอุปกรณ์ของคุณในระดับบนสุดตาม ID หรือหมายเลขซีเรียล IOSerialBSDClientเมื่อคุณพบว่าคุณควรจะสามารถสแกนผ่านทรีย่อยของตนและในที่สุดก็พบวัตถุของคลาส นี้จะมีคุณสมบัติIODialinDeviceซึ่งเป็นสิ่งที่คุณต้องการ

หากคุณต้องการทำสิ่งนี้โดยทางโปรแกรมคุณสามารถเพิ่ม-aตัวเลือกให้กับioregคำสั่งซึ่งจะส่งเอาต์พุตเวอร์ชัน plist ของเอาต์พุตด้านบน plistlibจากนั้นคุณสามารถแยกนี้ด้วยเช่นห้องสมุดเป็น

คุณอาจพบว่ามีประโยชน์ในการใช้แอป IORegistryExplorer เพื่อช่วยให้มองเห็นสิ่งนี้เนื่องจากioregเอาต์พุตเต็มรูปแบบอ่านยากเล็กน้อย! นี้สามารถใช้ได้ในแพคเกจ "อุปกรณ์ IO เครื่องมือ" XCode ซึ่งคุณสามารถหาได้โดยการค้นหาการดาวน์โหลดบนเว็บไซต์ของนักพัฒนาแอปเปิ้ล นี่คือลักษณะที่ปรากฏบนอุปกรณ์ของฉัน:

ตัวอย่างของ IORegistryExplorer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.