Настройка серийного номера на устройстве USB-Serial CH340

9

Читая http://playground.arduino.cc/Linux/Udev, кажется, есть способ записать в USB-последовательную EEPROM FTDI, чтобы установить заданный SerialNumber, позволяя вам идентифицировать данный нано / другой arduino для его конкретной обработки. в УДЕВ.

У меня есть устройство в стиле нано с USB-последовательным адаптером QinHeng Electronics HL-340, который явно не является чипом 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

Что, по сути, бесполезно, так как я не могу идентифицировать данную прикрепленную доску (когда я прикрепляю две, их детали одинаковы).

jvc26
источник
1
К сожалению, на самом деле это не ответ ни на вопрос: на вопрос (так как он не отвечает на вопрос, есть ли способ назначить новый серийный номер, как это можно сделать для чипов FTDI), или на решение проблемы (как на серийном устройстве udev для всех этих плат, как и у Леонардо 0, udev не может различить несколько плат, подключенных к одному компьютеру
jvc26
Моя ссылка на мой ответ, который говорит о создании правил udev для каждого устройства.
PhillyNJ
1
Если вы можете читать по-китайски (я не могу), эта страница может помочь: wch.cn/products.php?page=procontent&id=40
Крейг,
3
К сожалению, @Phil Vallone проблема в том, что не существует уникального серийного номера для идентификации устройства через udev. Чтобы обнаружить и идентифицировать уникальное устройство, вам нужно что-то уникальное, чтобы различать их. Эти устройства имеют один и тот же iSerial, поэтому вы не можете их различать, и у них одинаковые идентификаторы продукта и поставщика - так что различия нет ... Спасибо за вашу помощь, к сожалению, эта проблема не устраняется !
jvc26

Ответы:

3

На CH340 и семействе UART нет места для хранения уникального идентификатора. Это также проблема для типа PL2303. Я пытался найти решение этой проблемы. Первым и самым простым является расположение устройства на шине USB. Это будет уникальным для каждого устройства. Если вы используете Linux, вы можете найти каждое устройство в / dev / serial / by-path. Существует также / dev / serial / by-id, но там будет только одна запись для этого устройства, поскольку оно показывает последнюю подключенную. Каждый из чипов FTDI будет иметь уникальные записи. Дешевые чипы не будут, но у каждого есть запись в / dev / serial / by-path. Эта позиция и имена устройств должны сохраняться при перезагрузке. Если у вас есть много изменений в ваших USB-устройствах, подключите все устройства CH340 к одному и тому же концентратору, а затем подключите его. Устройства будут перечислять в том порядке, в котором они подключены к концентратору. Этот трюк с одним хабом должен работать и для MacOS, и для окон, они должны появляться в том же порядке.

Сложнее методика правил. Для устройств с уникальным идентификатором, таких как FTDI, вы можете установить правило udev, которое видит его серийный номер, а затем создает символическую ссылку на это устройство, это просто.

Для устройств с одинаковым серийным номером или без него это намного сложнее. Я создал правило udev, которое выглядит так:

SUBSYSTEM == "tty", ATTRS {product} == "USB2.0-Serial", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"

когда устройство соответствует продукту и поставщику дешевого arduino, оно запускает скрипт «cheapduino.py», например, с устройством в качестве аргумента

cheapduino.py ttyUSB0

Затем скрипт cheapduino подключается к устройству через последовательный порт и отправляет строку «ID», а программное обеспечение на устройстве отвечает DEVID = THX1138 или что-то еще. Затем скрипт создает символическую ссылку / dev / THX1138, которая указывает на / dev / ttyUSB0

У этого метода есть много недостатков. Срок действия сценария должен истечь, если программное обеспечение на cheapduino не отвечает. Также это не использует функцию SYMLINK в udev, поэтому она не удаляет мертвые ссылки при отключении, а перезаписывает их при повторном подключении. Все ваши cheapduinos должны иметь эту функцию в своем программном обеспечении с разными идентификаторами устройств. Все они должны использовать ту же скорость передачи данных, что и сценарий, если вы не хотите писать очень сложный сценарий, который занимает много времени. Наконец, этот метод работает намного лучше при низкой скорости передачи данных, чем при высокой скорости передачи данных, которая по причинам синхронизации может не всегда успешна. (cheapduinos дешевы!) 9600 работает намного лучше, чем 115200, который работает после нескольких попыток. Но так как все ваши arduinos CH340 должны иметь одинаковую скорость с этим методом, вы можете работать только так медленно, как ваше самое быстрое устройство.

Этот метод работает, хотя, и это то, что я использую, потому что я купил слишком много этих дешевых вещей.

В конце концов, купите подлинные Arduinos или хотя бы те с чипами FTDI или что-то еще, что отправляет уникальный идентификатор устройства.

= Rich

Рич Хамфри
источник
2

Если вам нужно разделить 2 устройства, которые в основном идентичны, у вас есть 2 способа:

  • всегда подключайте их к одним и тем же портам и используйте дерево USB, чтобы различать их
  • создайте протокол рукопожатия, в котором каждый Arduino использует код, который вы ранее сохранили в своих соответствующих EEPROM. Может даже оказаться возможным написать вспомогательную функцию для UDEV, чтобы вспомогательная функция выполняла рукопожатие и сообщала UDEV серийный номер, который хранится в каждой EEPROM. Это позволило бы написать правило UDEV для ваших устройств.
Игорь Стоппа
источник
2

CH340B (не G) имеет EEPROM, где вы можете сохранить серийный номер.

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

Также есть инструмент для чтения и записи:

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

Попробую установить и посмотреть, как ведет себя версия G ...

zoobab
источник
Можете ли вы сказать мне, где нажать на китайские материалы, чтобы загрузить этот инструмент? Я нашел несколько ссылок на RAR-файл, но они истекли.
Elmue
1

Поместите Maxim DS18S20 на вашу плату, каждый имеет уникальный серийный номер и очень недорогой. В Интернете есть много примеров программного обеспечения, использующего это устройство. Вы могли бы это сделать нано. для работы требуется резистор 4.7K, подключенный к +5, и заземление. Вы можете подключить как 5 В, так и заземление устройства к земле. Было бы несложно исправить ошибку в nano, затем с помощью простой связи через один контакт вы можете получить серийный номер. Есть несколько доступных пакетов. С осторожностью вы можете использовать входной контакт, прочитать серийный номер и сохранить его для дальнейшего использования. Когда это начнется, он сделает это снова. Просто убедитесь, что во время процесса инициализации на входе нет низкого уровня.

Удачи,

Гил

Гил
источник
Как только вы не решаете проблему с последовательным портом USB, а скорее с чем-то, что требует взаимодействия процессора на плате для обнаружения, вы также можете просто изменить загрузчик так, чтобы он содержал серийный номер, читаемый как там, так и в приложении. программа (то есть "эскиз")
Крис Страттон
Что за ерунда. DS18S20 - это цифровой термометр!
Elmue
Да, это термометр; Да, он имеет уникальный серийный номер, который не требует изменения кода или eeprom на каждой плате. Недорого и просто. Недостаток микро должен ответить. Он будет работать без смены IDE, любой прошивки и т. Д., Однако для этого потребуется вывод, который можно обойти с помощью мультиплексора, если это необходимо.
Gil
1

Мне неприятно это говорить, но ответ - нет, нет способа однозначно идентифицировать несколько последовательных USB-конвертеров на основе 340.

У меня та же проблема, когда у меня есть несколько (4+) USB-последовательных преобразователей, любой из них может быть подключен к любому порту, и они были приобретены одновременно и, следовательно, идентичны во всех отношениях (включая iSerial of 0).

По сути, если я перемещаю вещи, мне нужно соединиться вручную, чтобы посмотреть, что подключено, просмотреть dmesg и т. Д. Это большая боль.

Том

Том
источник