ทำไมการแจงนับพอร์ต USB จึงเปลี่ยน?


10

ฉันใช้โมเด็ม USB Huawei GMS / UMTS กับ Gnokii และ Gammu โมเด็มอยู่ในพอร์ตด้านล่างของ Pi ด้วยdmesg | grep ttyมันจะปรากฏขึ้นบนและ/dev/ttyUSB0 /dev/ttyUSB1(อุปกรณ์ USB 2 ตัวใน 1 แท่งเป็นเรื่องปกติในกรณีนี้)

ฉันกำหนดค่า Gnokii และ Gammu ตามนั้นอย่างไรก็ตามใน ttyUSB0 ฉันสามารถส่งข้อความได้เท่านั้น ทั้งการส่งและรับจะใช้ได้กับ ttyUSB1 เท่านั้น

จากนั้นฉันย้ายไม้เท้าไปยังซ็อกเก็ต USB ด้านบน (เพราะไม่เช่นนั้นแท่ง WiFi ของฉันก็จะไม่ติดกับมัน) ทุกอย่างทำงานได้ดี นอกจากนี้หลังจากรีบูตเครื่องหลายเย็นและอบอุ่น

ฉันต้องขยายระบบไฟล์ (ใช่ฉันรู้ว่าฉันควรทำอย่างนั้นก่อนหน้านี้) หลังจากนั้นโมเด็มอยู่ใน ttyUSB0 และ ttyUSB * 2 * ส่ง / รับงานหลังนี้ ฉันใช้เวลาพอสมควรในการค้นหา

อัปเดต: 2 วันต่อมา ttyUSB2 ได้หายไป โมเด็มที่ใช้งานอยู่จะปรากฏขึ้นใน ttyUSB0 (คือ ttyUSB1)

มีความคิดใดว่าทำไมสิ่งนี้จึงเกิดขึ้น ลิงค์ใด ๆ ไปยัง debian หรือ linux docs ที่เกี่ยวข้องอาจจะ? ฉันจะต้องรับผิดชอบมาก ..


ลองใช้ชื่อ/sys/class/tty/เป็นแนวทาง
Lekensteyn

ttyUSB เท่านั้นใน / sys / class / tty คือ ttyUSB0 และ ttyUSB1 ตอนนี้ ใครจะรู้ว่าพรุ่งนี้จะเป็นเช่นไร
RolfBly

การแจงนับ USB เปลี่ยนแปลงตามการออกแบบคุณเสียบอุปกรณ์ใหม่และรับหมายเลขใหม่ หรืออาจเป็นอุปกรณ์เก่าในขณะที่หมายเลขพอร์ตก่อนหน้านี้ยังคงยุ่งอยู่กับการถ่ายโอนที่ยังไม่เสร็จ พยายามอย่าเชื่อมต่ออุปกรณ์กลับมาเร็วเกินไปและตรวจสอบให้แน่ใจว่าซอฟต์แวร์ทั้งหมดที่ใช้อุปกรณ์เหล่านี้ทำธุรกิจของพวกเขาอย่างมีความสุข
lenik

คำตอบ:


16

เอกสาร Gammuแนะนำ (แต่ไม่ได้ลงรายละเอียดใด ๆ ) วิธีแก้ปัญหา

แก้ไข: Atmel มีApplication Noteที่อธิบายกระบวนการระบุอย่างชัดเจน

การแจงนับจะเปลี่ยนแปลงเนื่องจากมันเกิดขึ้นในการสนทนาระหว่างโฮสต์ฮับและอุปกรณ์และเวลาตอบสนองจากแต่ละสิ่งเหล่านี้อาจแตกต่างกันแม้ว่าการตั้งค่าจะเหมือนกันจากการรีบูทเครื่องหนึ่งไปยังเครื่องถัดไป

อัปเดต: ไม่สามารถหาวิธีแก้ปัญหาออนไลน์ได้อย่างง่ายดายและกระจายเป็นชิ้น ๆ ทั่วสถานที่ ดังนั้นฉันจึงรวมทั้งหมดไว้ในเอกสารเดียว นี่คือสิ่งที่มันเดือดลงไป
1. ค้นหาว่ามีอะไรใน ttyUSB:

dmesg | grep ttyUSB  

2. แสดงรายการคุณลักษณะทั้งหมดของอุปกรณ์และเลือกชุดตัวระบุที่ไม่ซ้ำกันเช่น idVendor + idProduct (และหากจำเป็น SerialNumber หากคุณมีอุปกรณ์มากกว่าหนึ่งเครื่องที่มี idVendor และ idProduct เดียวกัน)

udevadm info --name=/dev/ttyUSB1 --attribute-walk

3. สร้างไฟล์ที่/etc/udev/rules.d/99-usb-serial.rulesมีลักษณะคล้ายบรรทัดนี้:

SUBSYSTEM=="tty", ATTRS{idVendor}=="1234", ATTRS{idProduct}=="5678", SYMLINK+="your_device_name" 

(สมมติว่าคุณไม่จำเป็นต้องมีหมายเลขซีเรียลและแน่นอนด้วยหมายเลขสำหรับ idVendor และ idProduct ที่คุณพบในขั้นตอนที่ 2
4. โหลดกฎใหม่:

sudo udevadm trigger

5. ตรวจสอบสิ่งที่เกิดขึ้น:

ls -l /dev/your_device_name  

จะแสดงหมายเลข ttyUSB ที่ symlink ไป ถ้าเป็น/dev/ttyUSB1เช่นนั้นให้ตรวจสอบว่าใครเป็นเจ้าของและกลุ่มนั้นอยู่ในกลุ่มใด:

ls -l /dev/ttyUSB1   

จากนั้นเพียงเพื่อความสนุกของมัน:

udevadm test -a -p  $(udevadm info -q path -n /dev/your_device_name)

8

คุณได้ตอบคำถามของคุณเองบางส่วนแล้ว แต่ก็มีวิธีการอีกวิธีหนึ่งโดยเฉพาะอย่างยิ่งสำหรับอุปกรณ์แบบอนุกรม: /dev/serial/*เส้นทาง ฉันมี USB →อินเตอร์เฟซ RS232 อุดมสมบูรณ์ในราสเบอร์รี่ Pi ของฉันที่เกือบ/dev/ttyUSB0คงเส้นคงวาแสดงขึ้นเป็น แต่มันก็ยังปรากฏบนระบบเป็น:

  • /dev/serial/by-path/platform-bcm2708_usb-usb-0:1.3:1.0-port0
  • /dev/serial/by-id/usb-067b_2303-if00-port0

การใช้by-idลิงก์ควรคงเดิมเว้นแต่ฉันจะเพิ่มตัวแปลงที่ใช้ PL2303 อีกตัว


.. และเมื่อมีคนเพิ่มตัวแปลงที่ใช้ PL2303 จริงๆ (2 ของพวกเขา) ดังนั้นสิ่งที่ไม่ควรสวมใส่?
Obmerk Kronen

คุณติดอยู่ ฉันชอบผสมและจับคู่แบรนด์เพื่อหลีกเลี่ยงปัญหานี้
scruss

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