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).
quelle
0
kann udev daher nicht zwischen mehreren Boards unterscheiden, die an denselben Computer angeschlossen sind.Antworten:
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
quelle
Wenn Sie zwei Geräte unterscheiden möchten, die im Grunde identisch sind, haben Sie zwei Möglichkeiten:
quelle
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 ...
quelle
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
quelle
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
quelle