Einstellen der Seriennummer am USB-Seriengerät CH340


9

Wenn Sie http://playground.arduino.cc/Linux/Udev lesen, scheint es eine Möglichkeit zu geben, in ein FTDI-USB-Seriell-EEPROM zu schreiben, um eine bestimmte Seriennummer festzulegen, sodass Sie einen bestimmten Nano / ein anderes Arduino identifizieren können, um speziell damit umzugehen in UDEV.

Ich habe ein Nano-Boot mit einem QinHeng Electronics HL-340 USB-Serial-Adapter, der eindeutig kein FTDI-Chip ist, und der FTDI-Programmierer funktioniert daher nicht. Kennt jemand ein alternatives Dienstprogramm / wo ich Informationen finden kann, um dasselbe mit diesem Chip zu tun?

Derzeit identifiziert sich das Gerät mit:

[ 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

Was im Wesentlichen nutzlos ist, da ich die angegebene Tafel nicht identifizieren kann (wenn ich zwei anbringe, sind ihre Details dieselben).



1
Leider ist dies weder eine Antwort auf die Frage (da sie nicht beantwortet, ob es eine Möglichkeit gibt, eine neue Seriennummer zuzuweisen, wie dies für FTDI-Chips möglich ist) noch auf die Lösung des Problems (als udev-Seriennummer) Für all diese Boards, wie das Leonardo, 0kann udev daher nicht zwischen mehreren Boards unterscheiden, die an denselben Computer angeschlossen sind.
jvc26

Mein Link führt zu meiner Antwort, in der es darum geht, udev-Regeln für jedes Gerät zu erstellen.
PhillyNJ

1
Wenn Sie Chinesisch lesen können (ich kann nicht), könnte diese Seite helfen: wch.cn/products.php?page=procontent&id=40
Craig

3
Leider ist @Phil Vallone das Problem, dass es keine eindeutige Seriennummer gibt, um das Gerät über udev zu identifizieren. Um ein eindeutiges Gerät zu erkennen und zu identifizieren, benötigen Sie etwas Einzigartiges, um es zu unterscheiden. Diese Geräte haben das gleiche iSerial, daher können Sie sie nicht unterscheiden, und sie haben die gleichen Produkt- und Hersteller-IDs - es gibt also kein Unterscheidungsmerkmal ... Vielen Dank für Ihre Hilfe, leider wird dieses Problem dadurch nicht behoben !
JVC26

Antworten:


3

Auf dem CH340 und der UART-Familie gibt es keinen Speicher, in dem Sie eine eindeutige ID eingeben können. Dies ist auch ein Problem für den Typ PL2303. Ich habe versucht, Lösungen für dieses Problem zu finden. Zunächst und am einfachsten ist die Position des Geräts am USB-Bus. Es ist für jedes Gerät eindeutig. Wenn Sie Linux verwenden, finden Sie jedes Gerät unter / dev / serial / by-path. Es gibt auch eine / dev / serial / by-ID, aber es gibt dort nur einen Eintrag für dieses Gerät, da der letzte angeschlossene angezeigt wird. FTDI-Chips haben hier jeweils eindeutige Einträge. Billige Chips werden es nicht, aber sie haben jeweils einen Eintrag unter / dev / serial / by-path. Diese Position und die Gerätenamen sollten bei Neustarts erhalten bleiben. Wenn Sie viele Änderungen an Ihren USB-Geräten vorgenommen haben, schließen Sie alle CH340-Geräte an denselben Hub an und schließen Sie diese an. Die Geräte werden in der Reihenfolge aufgelistet, in der sie an den Hub angeschlossen sind. Dieser One-Hub-Trick sollte auch für MacOS und Windows funktionieren. Sie sollten in derselben Reihenfolge ausgeführt werden.

Härtere Methodenregeln. Für Geräte mit einer eindeutigen ID wie FTDI können Sie eine udev-Regel festlegen, die die Seriennummer anzeigt und dann einen Symlink zu diesem Gerät erstellt. Dies ist unkompliziert.

Für Geräte mit derselben oder keiner Seriennummer ist dies viel komplexer. Ich habe eine udev-Regel erstellt, die folgendermaßen aussieht:

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"

Wenn das Gerät mit dem Produkt und dem Anbieter des billigen Arduino übereinstimmt, führt es beispielsweise das Skript 'cheapduino.py' mit dem Gerät als Argument aus

cheapduino.py ttyUSB0

Dann stellt das cheapduino-Skript eine serielle Verbindung zum Gerät her und sendet die Zeichenfolge 'ID'. Die Software auf dem Gerät antwortet mit DEVID = THX1138 oder was auch immer. Das Skript erstellt dann einen Symlink / dev / THX1138, der auf / dev / ttyUSB0 verweist

Diese Methode weist viele Nachteile auf. Das Skript muss eine Zeitüberschreitung aufweisen, wenn die Software auf dem cheapduino nicht antwortet. Auch dies verwendet nicht die SYMLINK-Funktion von udev, sodass tote Links beim Trennen der Verbindung nicht bereinigt werden, sondern beim erneuten Verbinden überschrieben werden. Alle Ihre billigen Duinos müssen diese Funktionalität in ihrer Software haben, wobei unterschiedliche Geräte-IDs festgelegt sind. Sie müssen alle dieselbe Baudrate wie das Skript verwenden, es sei denn, Sie möchten ein sehr komplexes Skript schreiben, das lange dauert. Schließlich funktioniert diese Methode bei niedriger Baudrate viel besser als bei hoher Baudrate, was aus zeitlichen Gründen möglicherweise nicht jedes Mal erfolgreich ist. (billigduinos sind billig!) 9600 funktioniert viel besser als 115200, was nach mehreren Versuchen funktioniert. Da jedoch alle Ihre CH340-Arduinos mit dieser Methode die gleiche Geschwindigkeit haben müssen, können Sie nur so langsam fahren wie Ihr schnellstes Gerät.

Diese Methode funktioniert jedoch und ich verwende sie, weil ich viel zu viele dieser billigen Dinge gekauft habe.

Kaufen Sie am Ende echte Arduinos oder zumindest solche mit FTDI-Chips oder etwas anderem, das eine eindeutige Geräte-ID sendet.

= Reich


2

Wenn Sie zwei Geräte unterscheiden möchten, die im Grunde identisch sind, haben Sie zwei Möglichkeiten:

  • Schließen Sie sie immer an dieselben Anschlüsse an und verwenden Sie den USB-Baum, um sie zu unterscheiden
  • Erstellen Sie ein Handshake-Protokoll, bei dem jeder Arduino einen Code verwendet, den Sie zuvor in den jeweiligen EEPROMs gespeichert haben. Möglicherweise kann sogar eine Hilfsfunktion für UDEV geschrieben werden, sodass die Hilfsfunktion den Handshake ausführt und UDEV die in jedem EEPROM gespeicherte Seriennummer mitteilt. Dies würde es ermöglichen, eine UDEV-Regel für Ihre Geräte zu schreiben.

2

CH340B (nicht das G) verfügt über ein EEPROM, in dem Sie die Seriennummer speichern können.

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

Es gibt auch ein Windows-Tool zum Lesen / Schreiben:

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

Ich werde versuchen zu installieren und sehen, wie sich die G-Version verhält ...


Können Sie mir sagen, wo ich auf das chinesische Zeug klicken soll, um das Tool herunterzuladen? Ich habe einige Links zu einer RAR-Datei gefunden, aber sie haben eine Zeitüberschreitung.
Elmue

1

Setzen Sie einen Maxim DS18S20 auf Ihr Board, jeder hat eine eindeutige Seriennummer und ist sehr kostengünstig. Es gibt viele Softwarebeispiele im Internet, die dieses Gerät verwenden. Sie könnten es dem Nano auf den Kopf stellen. Für den Betrieb ist ein 4,7K-Widerstand an +5 und eine Masseverbindung erforderlich. Sie können sowohl den 5-V- als auch den Erdungsanschluss des Geräts mit Masse verbinden. Es wäre leicht, dies dem Nano zu verwehren, dann könnten Sie durch einfache Kommunikation über einen Pin die Seriennummer erhalten. Es stehen mehrere Pakete zur Verfügung. Mit Vorsicht können Sie einen Eingangsstift verwenden, die Seriennummer lesen und für die zukünftige Verwendung aufbewahren. Wenn es anfängt, wird es dies wieder tun. Stellen Sie nur sicher, dass der Eingang während des Init-Vorgangs nicht auf LOW geschaltet wird.

Viel Glück,

Gil


Wenn Sie das Problem nicht in der USB-Seriennummer gelöst haben, sondern etwas, das die Zusammenarbeit des Prozessors auf der Platine erfordert, können Sie den Bootloader auch so ändern, dass er eine Seriennummer enthält, die sowohl dort als auch in einer Anwendung lesbar ist Programm (dh "Skizze")
Chris Stratton

Was für ein Unsinn. Das DS18S20 ist ein digitales Thermometer!
Elmue

Ja, es ist ein Thermometer. Ja, es hat eine eindeutige Seriennummer, die keine Änderung des Codes oder des EEPROM auf jeder Karte erfordert. Preiswert und einfach. Nachteil das Mikro muss reagieren. Es funktioniert ohne Änderung der IDE oder einer Firmware usw., erfordert jedoch einen Pin, der bei Bedarf mit einem Mux umgangen werden kann.
Gil

1

Ich hasse es, es zu sagen, aber die Antwort ist nein, es gibt keine Möglichkeit, mehrere 340-basierte USB-Seriell-Konverter eindeutig zu identifizieren.

Ich habe das gleiche Problem, wenn ich mehrere (4+) USB-Seriell-Konverter habe, jeder kann an einen beliebigen Port angeschlossen werden, und sie wurden zur gleichen Zeit gekauft und sind daher in jeder Hinsicht identisch (einschließlich iSerial von 0).

Wenn ich Dinge bewege, muss ich mich von Hand verbinden, um zu sehen, was angehängt ist, um die Dmesg-Ausgabe zu lesen usw. Es ist ein großer Schmerz.

Tom

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.