การตั้งหมายเลขประจำเครื่องบนอุปกรณ์ USB-CH340 แบบอนุกรม


9

การอ่านhttp://playground.arduino.cc/Linux/Udevดูเหมือนจะมีวิธีการเขียนไปยัง FTDI USB-Serial EEPROM เพื่อตั้งค่า SerialNumber ที่กำหนดช่วยให้คุณสามารถระบุนาโน / Arduino อื่น ๆ เพื่อจัดการกับมันโดยเฉพาะ ใน UDEV

ฉันมี boad แบบนาโนที่มีอะแดปเตอร์ QinHeng Electronics HL-340 USB-Serial ซึ่งเห็นได้ชัดว่าไม่ใช่ชิป FTDI และโปรแกรมเมอร์ FTDI จึงไม่ทำงาน มีใครรู้บ้างเกี่ยวกับยูทิลิตี้สำรอง / ที่ฉันสามารถหาข้อมูลเพื่อทำสิ่งเดียวกันกับชิปนี้ได้หรือไม่?

ปัจจุบันอุปกรณ์ระบุตัวตนด้วย:

[ 6850.608080] usb 2-1.2: new full-speed USB device number 7 using ehci-pci
[ 6850.701496] usb 2-1.2: New USB device found, idVendor=1a86, idProduct=7523
[ 6850.701505] usb 2-1.2: New USB device strings: Mfr=0, Product=2, SerialNumber=0
[ 6850.701510] usb 2-1.2: Product: USB2.0-Serial
[ 6850.702201] ch341 2-1.2:1.0: ch341-uart converter detected
[ 6850.704210] usb 2-1.2: ch341-uart converter now attached to ttyUSB0

ซึ่งไม่มีประโยชน์อย่างมากเนื่องจากฉันไม่สามารถระบุกระดานที่แนบมาได้



1
น่าเสียดายที่นี่ไม่ใช่คำตอบจริงๆ: คำถาม (เพราะมันไม่ตอบว่ามีวิธีการกำหนดหมายเลขใหม่เป็นหนึ่งสามารถทำเพื่อ FTDI ชิป) หรือแก้ไขปัญหา (เป็นอนุกรม udev สำหรับบอร์ดเหล่านี้ทั้งหมดเช่น Leonardo คือ0ดังนั้น udev จึงไม่สามารถแยกความแตกต่างระหว่างบอร์ดหลายอันที่เชื่อมต่อกับคอมพิวเตอร์เครื่องเดียวกันได้
jvc26

ลิงก์ของฉันคือคำตอบที่พูดถึงการสร้างกฎ udev สำหรับอุปกรณ์แต่ละเครื่อง
PhillyNJ

1
หากคุณสามารถอ่านภาษาจีน (ฉันทำไม่ได้) หน้านี้อาจช่วยได้: wch.cn/products.php?page=procontent&id=40
Craig

3
น่าเสียดายที่@Phil Valloneปัญหาคือไม่มีซีเรียลที่ไม่ซ้ำกันในการระบุอุปกรณ์ผ่านทาง udev ในการตรวจจับและระบุอุปกรณ์ที่ไม่ซ้ำใครคุณต้องมีสิ่งที่ไม่เหมือนใครเพื่อแยกแยะ อุปกรณ์เหล่านี้มี iSerial เหมือนกันดังนั้นคุณจึงไม่สามารถแยกได้และแบ่งปันรหัสผลิตภัณฑ์และผู้ขายเดียวกันดังนั้นจึงไม่มีความแตกต่าง ... ขอบคุณสำหรับความช่วยเหลือของคุณขออภัยที่ไม่สามารถแก้ไขปัญหานี้ได้ !
jvc26

คำตอบ:


3

ไม่มีที่เก็บข้อมูลใน CH340 และตระกูล UART ที่คุณสามารถใส่ ID เฉพาะได้ นี่เป็นปัญหาสำหรับรุ่น PL2303 ด้วย ฉันพยายามค้นหาวิธีแก้ไขปัญหานี้แล้ว สิ่งแรกและง่ายที่สุดคือตำแหน่งของอุปกรณ์บนบัส USB มันจะไม่ซ้ำกันสำหรับแต่ละอุปกรณ์ หากคุณใช้ linux คุณสามารถค้นหาแต่ละอุปกรณ์ภายใต้ / dev / serial / by-path นอกจากนี้ยังมี / dev / serial / by-id แต่จะมีเพียงหนึ่งรายการสำหรับอุปกรณ์นี้เพราะจะแสดงรายการล่าสุดที่เชื่อมต่อ ชิป FTDI แต่ละคนจะมีรายการที่ไม่ซ้ำกันที่นี่ ชิปราคาถูกจะไม่ แต่พวกเขาแต่ละคนมีรายการภายใต้ / dev / อนุกรม / โดยเส้นทาง ตำแหน่งนี้และชื่ออุปกรณ์ควรคงอยู่ตลอดการบู๊ตเครื่อง หากคุณมีการเปลี่ยนแปลงอุปกรณ์ USB จำนวนมากให้เสียบอุปกรณ์ CH340 ทั้งหมดเข้ากับฮับเดียวกันจากนั้นเสียบอุปกรณ์ดังกล่าว อุปกรณ์จะแจกแจงตามลำดับที่เสียบเข้ากับฮับ เคล็ดลับหนึ่งฮับนี้ควรใช้งานได้กับ MacOS และ windows ด้วยเช่นกันพวกเขาควรอยู่ในลำดับเดียวกัน

กฎระเบียบวิธีที่ยากขึ้น สำหรับอุปกรณ์ที่มี ID เฉพาะเช่น FTDI คุณสามารถตั้งค่ากฎ udev ที่เห็นว่ามันเป็นหมายเลขซีเรียลแล้วสร้าง symlink ให้กับอุปกรณ์นั้นมันตรงไปตรงมา

สำหรับอุปกรณ์ที่มีหมายเลขซีเรียลเหมือนกันหรือไม่มีหมายเลขซีเรียลก็ซับซ้อนกว่ามาก ฉันสร้างกฎ udev ที่มีลักษณะเช่นนี้:

SUBSYSTEM == "tty", ATTRS {product} == "USB2.0- อนุกรม", RUN + = "/ usr / local / bin / cheapduinoia %% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"

เมื่ออุปกรณ์ตรงกับผลิตภัณฑ์และผู้จำหน่ายของ arduino ราคาถูกมันจะเรียกใช้สคริปต์ 'cheapduino.py' กับอุปกรณ์เป็นอาร์กิวเมนต์เช่น

cheapduino.py ttyUSB0

จากนั้นสคริปต์ cheapduino จะเชื่อมต่อแบบอนุกรมกับอุปกรณ์และส่งสตริง 'ID' และซอฟต์แวร์บนอุปกรณ์จะตอบสนอง DEVID = THX1138 หรืออะไรก็ตาม จากนั้นสคริปต์จะสร้าง symlink / dev / THX1138 ซึ่งชี้ไปที่ / dev / ttyUSB0

มีข้อเสียมากมายกับวิธีนี้ สคริปต์จะต้องหมดเวลาหากซอฟต์แวร์ใน cheapduino ไม่ตอบ นอกจากนี้สิ่งนี้ไม่ได้ใช้ฟังก์ชั่น SYMLINK ของ udev ดังนั้นมันจะไม่ล้างลิงก์ที่ไม่ทำงานเมื่อยกเลิกการเชื่อมต่อ cheapduinos ทั้งหมดของคุณจะต้องมีฟังก์ชั่นนี้ในซอฟต์แวร์ของพวกเขาด้วยชุดอุปกรณ์ต่าง ๆ พวกเขาทุกคนจะต้องใช้อัตรารับส่งข้อมูลเดียวกันกับสคริปต์เว้นแต่คุณต้องการเขียนสคริปต์ที่ซับซ้อนมากซึ่งใช้เวลานาน ในที่สุดวิธีนี้ทำงานได้ดีกว่ามากในอัตราบอดต่ำกว่าอัตราบอดสูงซึ่งด้วยเหตุผลด้านเวลาอาจไม่สำเร็จทุกครั้ง (cheapduinos ราคาถูก!) 9600 ทำงานได้ดีกว่า 115200 ซึ่งสามารถใช้งานได้หลายครั้ง แต่เนื่องจากอาร์ดิโน CH340 ทั้งหมดของคุณต้องมีความเร็วเท่ากันกับวิธีนี้คุณจึงสามารถทำได้ช้าเท่ากับอุปกรณ์ที่เร็วที่สุด

วิธีนี้ใช้ได้ผลและมันเป็นสิ่งที่ฉันใช้เพราะฉันซื้อของเหล่านี้ในราคาถูกมากเกินไป

ในที่สุดซื้อ Arduinos ของแท้หรืออย่างน้อยกับชิป FTDI หรืออย่างอื่นที่ส่งรหัสอุปกรณ์ที่ไม่ซ้ำกัน

= รวย


2

หากสิ่งที่คุณต้องการคือการแยกอุปกรณ์ 2 ชิ้นที่เหมือนกันโดยทั่วไปคุณมี 2 วิธี:

  • เสียบไว้ในพอร์ตเดียวกันเสมอและใช้ทรี USB เพื่อแยกความแตกต่าง
  • สร้างโปรโตคอลการจับมือกันโดยที่ Arduino แต่ละตัวใช้รหัสที่คุณเก็บไว้ก่อนหน้านี้ใน EEPROM ที่เกี่ยวข้อง อาจเป็นไปได้ที่จะเขียนฟังก์ชันตัวช่วยสำหรับ UDEV เพื่อให้ฟังก์ชันตัวช่วยจับมือกันและบอก UDEV อนุกรมที่จัดเก็บในแต่ละ EEPROM ที่จะอนุญาตให้เขียนกฎ UDEV สำหรับอุปกรณ์ของคุณ

2

CH340B (ไม่ใช่ G) มี EEPROM ซึ่งคุณสามารถจัดเก็บหมายเลขอนุกรมได้

https://www.mpja.com/download/35227cpdata.pdf

มีเครื่องมือ windows เช่นเดียวกับการอ่าน / เขียน:

http://www.downxia.com/downinfo/196126.html

จะลองติดตั้งและดูว่ารุ่น G ทำงานอย่างไร ...


คุณบอกฉันได้ไหมว่าจะให้คลิกที่สิ่งที่จีนเพื่อดาวน์โหลดเครื่องมือนั้น ฉันพบลิงค์ไปยังไฟล์ RAR แต่หมดเวลา
Elmue

1

ใส่ Maxim DS18S20 บนบอร์ดของคุณโดยแต่ละอันมีหมายเลขประจำเครื่องที่ไม่ซ้ำใครและมีราคาไม่แพงมาก มีตัวอย่างซอฟต์แวร์จำนวนมากบนอินเทอร์เน็ตที่ใช้อุปกรณ์นี้ คุณสามารถกำจัดแมลงไปยังนาโนได้ ในการใช้งานจำเป็นต้องมีตัวต้านทาน 4.7K ที่เชื่อมต่อกับ +5 และการเชื่อมต่อภาคพื้นดิน คุณสามารถเชื่อมต่อทั้ง 5V และการเชื่อมต่อกราวด์ของอุปกรณ์กับกราวด์ มันจะเป็นเรื่องง่ายที่จะตายข้อผิดพลาดนี้ไปที่นาโนแล้วโดยการสื่อสารง่ายๆผ่านหนึ่งพินคุณจะได้รับหมายเลขซีเรียล มีหลายแพ็คเกจให้เลือก ด้วยความระมัดระวังคุณสามารถใช้หมุดป้อนข้อมูลอ่านซีเรียลและบันทึกไว้เพื่อใช้ในอนาคต เมื่อมันเริ่มจะทำสิ่งนี้อีกครั้ง ตรวจสอบให้แน่ใจว่าอินพุตไม่ได้ถูกขับเคลื่อนในระหว่างกระบวนการเริ่มต้น

โชคดี,

กิล


เมื่อคุณไม่ได้แก้ปัญหาในซีเรียล USB แต่มีบางอย่างที่ต้องได้รับความร่วมมือจากหน่วยประมวลผลบนบอร์ดเพื่อค้นหาคุณอาจเพียงแค่ปรับเปลี่ยน bootloader เพื่อให้มีหมายเลขซีเรียลที่อ่านได้ทั้งที่นั่นและในแอปพลิเคชัน โปรแกรม (เช่น "ร่าง")
Chris Stratton

ช่างเป็นเรื่องไร้สาระ DS18S20 เป็นเทอร์โมมิเตอร์แบบดิจิตอล!
Elmue

ใช่มันเป็นเทอร์โมมิเตอร์ ใช่มีหมายเลขซีเรียลที่ไม่ซ้ำซึ่งไม่จำเป็นต้องเปลี่ยนรหัสหรือ eeprom ในแต่ละบอร์ด ราคาไม่แพงและเรียบง่าย ข้อเสียเปรียบไมโครมีการตอบสนอง มันจะทำงานได้โดยไม่ต้องเปลี่ยน IDE หรือเฟิร์มแวร์อื่น ๆ อย่างไรก็ตามมันต้องใช้พินซึ่งสามารถใช้งานได้กับ mux หากจำเป็น
Gil

1

ฉันเกลียดที่จะพูด แต่คำตอบคือไม่ไม่มีวิธีระบุตัวแปลง usb แบบอนุกรมหลาย 340 ที่ไม่ซ้ำกัน

ฉันมีปัญหาเดียวกันที่ฉันมีตัวแปลง usb แบบอนุกรม (4+) หลาย ๆ ตัวสามารถเสียบเข้ากับพอร์ตใดก็ได้และพวกเขาซื้อในเวลาเดียวกันดังนั้นจึงเหมือนกันทุกวิธี (รวมถึง iSerial 0)

โดยทั่วไปถ้าฉันเคลื่อนย้ายสิ่งต่าง ๆ ฉันต้องเชื่อมต่อด้วยมือเพื่อดูว่ามีอะไรติดอยู่ตรวจดูเอาต์พุต dmesg ฯลฯ มันเป็นความเจ็บปวดครั้งใหญ่

ทอม

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