Đặt số sê-ri trên thiết bị USB-serial CH340


9

Đọc http://playground.arduino.cc/Linux/Udev dường như là một cách để viết ra một EEPROM USB-nối tiếp FTDI để thiết lập một serialNumber nhất định, cho phép bạn xác định một định nano / Arduino khác để xử lý nó đặc biệt trong UDEV.

Tôi có một tải kiểu nano với bộ chuyển đổi USB-serial QinHeng Electronics HL-340, rõ ràng không phải là chip FTDI và do đó, lập trình viên FTDI không hoạt động. Có ai biết về một tiện ích thay thế / nơi tôi có thể tìm thấy thông tin để làm điều tương tự với con chip này không?

Hiện tại thiết bị tự nhận dạng với:

[ 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

Điều này về cơ bản là vô dụng, vì tôi không thể xác định được bảng được đính kèm (khi tôi đính kèm hai, chi tiết của chúng là như nhau).



1
Thật không may, đây thực sự không phải là một câu trả lời: câu hỏi (vì nó không trả lời liệu có cách nào để gán số sê-ri mới như người ta có thể làm cho chip FTDI không) hoặc giải quyết vấn đề (như sê-ri udev đối với tất cả các bảng này, như Leonardo, 0do đó, udev không thể phân biệt giữa nhiều bảng được gắn vào cùng một máy tính.
jvc26

Liên kết của tôi là câu trả lời của tôi nói về việc tạo quy tắc udev cho mỗi thiết bị.
PhillyNJ

1
Nếu bạn có thể đọc tiếng Trung Quốc (tôi không thể), trang này có thể giúp: wch.cn/products.php?page=procontent&id=40
Craig

3
Thật không may @Phil Vallone vấn đề là không có serial duy nhất để xác định thiết bị thông qua udev. Để phát hiện và xác định một thiết bị duy nhất, bạn cần một cái gì đó độc đáo để phân biệt chúng. Các thiết bị này có cùng iSerial, vì vậy bạn không thể khác chúng về điều đó và chúng có chung ID sản phẩm và nhà cung cấp - vì vậy không có sự khác biệt ... Cảm ơn sự giúp đỡ của bạn, thật không may, nó không khắc phục được vấn đề này !
jvc26

Câu trả lời:


3

Không có bộ lưu trữ trên CH340 và gia đình UARTs nơi bạn có thể đặt một ID duy nhất. Đây cũng là một vấn đề đối với loại PL2303. Tôi đã cố gắng tìm giải pháp cho vấn đề này. Đầu tiên và dễ nhất là vị trí của thiết bị trên bus USB. Nó sẽ là duy nhất cho mỗi thiết bị. Nếu bạn đang sử dụng linux, bạn có thể tìm thấy từng thiết bị trong / dev / serial / by-path. Ngoài ra còn có / dev / serial / by-id nhưng sẽ chỉ có một mục ở đó cho thiết bị này vì nó hiển thị cái cuối cùng được kết nối. Mỗi chip FTDI sẽ có các mục duy nhất ở đây. Các chip giá rẻ sẽ không, nhưng mỗi chip có một mục dưới / dev / serial / by-path. Vị trí này, và tên thiết bị, nên tồn tại trong suốt quá trình khởi động lại. Nếu bạn có nhiều thay đổi đối với các thiết bị USB của mình, hãy cắm tất cả các thiết bị CH340 vào cùng một hub, sau đó cắm nó vào. Các thiết bị sẽ liệt kê theo thứ tự mà chúng được cắm vào trung tâm. Thủ thuật một trung tâm này cũng hoạt động cho MacOS và các cửa sổ, chúng sẽ xuất hiện theo cùng một thứ tự.

Phương pháp cứng hơn - quy tắc udev. Đối với các thiết bị có ID duy nhất như FTDI, bạn có thể đặt quy tắc udev nhìn thấy số sê-ri và sau đó tạo liên kết tượng trưng đến thiết bị đó, điều đó thật đơn giản.

Đối với các thiết bị có cùng số hoặc không có Số sê-ri, nó phức tạp hơn nhiều. Tôi đã tạo một quy tắc udev trông như thế này:

SUBSYSTEM == "tty", ATTRS {sản phẩm} == "USB2.0-serial", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idSản phẩm} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"

ví dụ, khi thiết bị khớp với sản phẩm và nhà cung cấp của arduino giá rẻ, nó sẽ chạy tập lệnh 'cheapduino.py' với thiết bị làm đối số

cheapduino.py ttyUSB0

Sau đó, tập lệnh cheapduino kết nối bằng nối tiếp với thiết bị và gửi chuỗi 'ID' và phần mềm trên thiết bị sẽ phản hồi DEVID = THX1138 hoặc bất cứ điều gì. Tập lệnh sau đó tạo một symlink / dev / THX1138 trỏ đến / dev / ttyUSB0

Có rất nhiều nhược điểm của phương pháp này. Kịch bản phải hết thời gian nếu phần mềm trên Arduino giá rẻ không trả lời. Ngoài ra, điều này không sử dụng chức năng SYMLINK của udev vì vậy nó sẽ không dọn sạch các liên kết chết khi ngắt kết nối, nhưng nó sẽ ghi đè lên chúng khi kết nối lại. Tất cả các máy tính giá rẻ của bạn phải có chức năng này trong phần mềm của họ, với các ID thiết bị khác nhau được đặt. Tất cả đều phải sử dụng tốc độ truyền giống như tập lệnh trừ khi bạn muốn viết một tập lệnh rất phức tạp mất nhiều thời gian. Cuối cùng, phương pháp này hoạt động tốt hơn nhiều ở tốc độ truyền thấp so với tốc độ truyền cao, vì lý do thời gian có thể không thành công mọi lúc. (cheapduinos là giá rẻ!) 9600 hoạt động tốt hơn nhiều so với 115200 hoạt động sau vài lần thử. Nhưng vì tất cả các arduinos CH340 của bạn phải có cùng tốc độ với phương pháp này, bạn chỉ có thể đi chậm như thiết bị nhanh nhất của mình.

Phương pháp này KHÔNG hoạt động, và đó là những gì tôi đang sử dụng vì tôi đã mua quá nhiều thứ rẻ tiền này.

Cuối cùng, hãy mua Arduinos chính hãng hoặc ít nhất là những chiếc có chip FTDI hoặc thứ gì khác gửi ID thiết bị duy nhất.

= Giàu


2

Nếu điều bạn muốn là phân biệt 2 thiết bị về cơ bản giống hệt nhau, bạn có 2 cách:

  • luôn cắm chúng vào cùng một cổng và sử dụng cây USB để phân biệt chúng
  • tạo một giao thức bắt tay, trong đó mỗi Arduino sử dụng một mã mà bạn đã lưu trữ trước đó trong các EEPROM tương ứng của chúng. Thậm chí có thể viết hàm trợ giúp cho UDEV, để hàm trợ giúp thực hiện bắt tay và báo cho UDEV chuỗi nối tiếp được lưu trữ trong mỗi EEPROM. Điều đó sẽ cho phép viết quy tắc UDEV cho thiết bị của bạn.

2

CH340B (không phải G) có EEPROM nơi bạn có thể lưu trữ số sê-ri.

https://www.mpja.com/d Download / 35227cpdata.pdf

Có một công cụ windows để đọc / ghi nó:

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

Sẽ thử cài đặt và xem phiên bản G hoạt động như thế nào ...


Bạn có thể cho tôi biết nơi nhấp vào công cụ Trung Quốc để tải xuống công cụ đó không? Tôi tìm thấy một số liên kết đến một tệp RAR nhưng chúng hết thời gian.
Elmue

1

Đặt một Maxim DS18S20 trên bảng của bạn, mỗi cái có một số sê-ri duy nhất và rất rẻ. Có rất nhiều ví dụ phần mềm trên internet sử dụng thiết bị này. Bạn có thể làm hỏng nó với nano. để vận hành, nó cần một resister 4,7K được kết nối với +5 và kết nối mặt đất. Bạn có thể kết nối cả kết nối 5V và Ground của thiết bị với mặt đất. Sẽ dễ dàng gây ra lỗi này cho nano sau đó bằng cách giao tiếp đơn giản thông qua một pin bạn có thể nhận được số sê-ri. Có một số gói có sẵn. Với sự cẩn thận, bạn có thể sử dụng mã pin đầu vào, đọc nối tiếp và lưu nó để sử dụng trong tương lai. Khi nó vào nó sẽ làm điều này một lần nữa. Chỉ cần chắc chắn rằng đầu vào không bị điều khiển thấp trong quá trình init.

Chúc may mắn,

Gil


Khi bạn không giải quyết được vấn đề trong sê-ri USB, nhưng với điều gì đó cần sự hợp tác của bộ xử lý trên bo mạch để khám phá, bạn cũng có thể sửa đổi bộ nạp khởi động để chứa số sê-ri có thể đọc được ở đó và trong ứng dụng chương trình (tức là "phác họa")
Chris Stratton

Thật là vô nghĩa. DS18S20 là một nhiệt kế kỹ thuật số!
Elmue

Vâng, nó là một nhiệt kế; Có, nó có một số sê-ri duy nhất không yêu cầu thay đổi mã hoặc eeprom trên mỗi bảng. Không tốn kém và đơn giản. Nhược điểm vi phải đáp ứng. Nó sẽ hoạt động với việc thay đổi IDE hoặc bất kỳ phần sụn nào, v.v. Tuy nhiên, nó yêu cầu một pin có thể được xử lý xung quanh với mux nếu cần.
Gil

1

Tôi ghét phải nói điều đó, nhưng câu trả lời là không, không có cách nào để xác định duy nhất nhiều bộ chuyển đổi nối tiếp usb dựa trên 340.

Tôi có cùng một vấn đề, trong đó tôi có nhiều (4+) bộ chuyển đổi nối tiếp usb, bất kỳ bộ chuyển đổi nào cũng có thể được cắm vào bất kỳ cổng nào và chúng được mua cùng một lúc và do đó giống hệt nhau theo mọi cách (bao gồm cả iSerial 0).

Về cơ bản, nếu tôi di chuyển mọi thứ xung quanh, tôi phải kết nối bằng tay để xem những gì được đính kèm, đầu ra dmesg, v.v ... Đó là một nỗi đau lớn.

tom

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.