Frage:
Wie man zwischen 2 Micros unter Linux unterscheidet
Ben
2015-08-28 00:03:56 UTC
view on stackexchange narkive permalink

Ich habe 2 Arduino Micro-basierte Geräte, die ich auf meinem Ubuntu Linux-Computer verwenden möchte. Ich brauche sie, um eindeutige serielle Schnittstellen zu haben. Leider haben beide die gleiche Seriennummer, was die Identifizierung durch udev-Regeln schwierig (wenn nicht unmöglich) macht.

Dies ist die Seriennummer, die ich für beide erhalte:

  $ udevadm info -a -p $ (udevadm info -q Pfad -n / dev / ttyACM0) | grep -i serial ATTRS {serial} == "0000: 00: 14.0"  

Gibt es eine Möglichkeit, die Seriennummer auf einem Arduino Micro manuell einzustellen? Oder gibt es andere eindeutige identifizierende Eigenschaften, die ich für udev-Regeln verwenden kann?

Normalerweise mache ich so etwas in meiner /etc/udev/rules.d/99-usb-serial.rules -Datei:

  SUBSYSTEM == "tty", ATTRS {product} == "Arduino Uno", ATTRS {serial} == "64936333936351911191", SYMLINK + = "MyDevice"  

Randnotiz: Ich auch Ich habe eine Fälligkeit, die dieselbe Seriennummer wie das Micros hat, aber da ATTRS {Produkt} unterschiedlich ist, kann ich sie unterscheiden.

Zwei antworten:
Majenko
2015-08-28 02:38:57 UTC
view on stackexchange narkive permalink

Die USB-VID, PID und Seriennummer werden beim Hochladen Ihrer Skizze in den Chip programmiert. Die VID und die PID sind an die Karte gebunden, und die Seriennummer ist unabhängig von der Karte immer dieselbe.

Unabhängig davon, welche Karte Sie programmieren, werden dieselben Details wie bei jeder anderen Karte derselben Karte angezeigt Art.

Es gibt keine Option zum Ändern der Seriennummer (es gibt IIRC, tatsächlich ist keine Seriennummer definiert), aber die VID und PID werden als Makropaar in der Kompilierungsbefehlszeile bereitgestellt: USB_VID und USB_PID .

Sie können also (cheakly) eine neue Board-Definition (basierend auf der vorhandenen Micro-Definition) erstellen, die "The other Micro" lautet, und bereitstellen eine andere (inoffizielle) PID als diese Karte. Sie können dann die beiden Karten in udev mithilfe der VID / PID-Kombination unterscheiden.

Natürlich müssen Sie dann sicherstellen, dass Sie die richtige Karte ausgewählt haben, wenn Sie sie programmieren, und den Vorgang des Aufrufen des Bootloaders auf der "anderen" Karte würde auf die alte PID zurückgesetzt, die im Bootloader programmiert ist, aber ich bin sicher, dass Sie damit fertig werden können.

Ran Talbott
2019-01-07 12:00:25 UTC
view on stackexchange narkive permalink

Das "0000: 00: 14.0" ist nicht die Seriennummer für das Arduino: udevadm druckt Informationen für mehr als ein Gerät, und das gilt für den USB-Controller-Chip.

Arduinos, die auf dem ATMEGA32U4 erhält keine Seriennummer: Ich habe einige Leonardos, die mir das gleiche Problem geben, das Sie haben. Als der Bootloader ursprünglich entworfen wurde, ließ der Programmierer ihn nicht melden. Ich habe einen modifizierten Bootloader gefunden, der dies tut, aber ich habe ihn noch nicht ausprobiert: http://forum.arduino.cc/index.php?topic=503703.0

Echte Arduinos mit einem FTDI-Chip melden eindeutige Seriennummern. Einige der Nachahmungen setzen es entweder nicht in den Chip ein oder setzen es auf eine nicht eindeutige Zahl (überspringen Sie diesen Schritt, um ein paar Cent Herstellungskosten zu sparen). Personen, die einen 16U2-Chip für die USB-Schnittstelle verwenden (wie der Uno R3), sollen eine eindeutige Seriennummer erhalten. Die Chinesen, die ich gerade gekauft habe, haben es getan, aber es ist möglich, dass andere Hersteller wie einige Benutzer von FTDI-Chips Abstriche machen.

Arduinos, die den chinesischen CH340-USB-Chip verwenden, geben auch keine Seriennummer an : Der Chip unterstützt es nicht. Ich denke , dass dies auch für den CP2102 gilt, bin mir aber nicht sicher.

Möglicherweise können Sie das Problem mit diesem modifizierten Bootloader beheben ( Ich hoffe es: Ich habe ein halbes Dutzend Leonardos und es ist immer dann ein Problem, wenn ich mehr als einen gleichzeitig angeschlossen habe. Glücklicherweise verwende ich sie normalerweise nicht als "PC-Peripheriegeräte". Oder Sie kaufen einen anderen der "winzigen" Arduinos mit einem 328P, der einen USB-zu-Seriell-Chip verwendet, und stützen die udev-Regeln auf VID und PID, um sie zu unterscheiden.



Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...