Question:
Comment différencier 2 Micros sous Linux
Ben
2015-08-28 00:03:56 UTC
view on stackexchange narkive permalink

J'ai 2 appareils basés sur Arduino Micro que je souhaite utiliser sur ma machine Linux Ubuntu. J'ai besoin qu'ils aient des ports série uniques. Malheureusement, les deux ont le même numéro de série, ce qui rend l'identification via les règles udev difficile (voire impossible).

Voici le numéro de série que j'obtiens pour les deux:

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

Existe-t-il un moyen de définir manuellement le numéro de série sur un Arduino Micro? Ou y a-t-il d'autres propriétés d'identification uniques que je peux utiliser pour les règles udev?

En général, je fais quelque chose comme ça dans mon fichier /etc/udev/rules.d/99-usb-serial.rules :

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

Note latérale: Moi aussi avoir un Due, qui a le même numéro de série que le Micros, mais comme ATTRS {product} est différent, je peux le différencier.

Deux réponses:
Majenko
2015-08-28 02:38:57 UTC
view on stackexchange narkive permalink

Le VID USB, le PID et le numéro de série sont tous programmés dans la puce lorsque vous téléchargez votre croquis. Le VID et le PID sont liés à la carte, et le numéro de série est toujours le même quelle que soit la carte.

Ainsi, peu importe la carte que vous programmez, elle obtiendra les mêmes détails que toute autre carte de la même kind.

Il n'y a pas d'option pour changer le numéro de série (il n'y a, IIRC, en fait aucun numéro de série défini) mais le VID et le PID sont fournis sous forme de paire de macros sur la ligne de commande de compilation: USB_VID et USB_PID.

Ainsi, vous pourriez (par hasard) créer une nouvelle définition de carte (basée sur le Micro existant) qui est "L'autre Micro" et fournir un PID (non officiel) différent de cette carte. Vous pouvez ensuite différencier les deux cartes dans udev en utilisant la combinaison VID / PID.

Bien sûr, vous devez ensuite vous assurer que vous avez la bonne carte sélectionnée lorsque vous les programmez, et l'acte d'entrer dans le chargeur de démarrage sur "l'autre" carte reviendrait à l'ancien PID qui est programmé dans le chargeur de démarrage, mais je suis sûr que vous pouvez faire face à cela.

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

Ce "0000: 00: 14.0" n'est pas le numéro de série de l'Arduino: udevadm imprime des informations pour plus d'un appareil, et c'est pour la puce du contrôleur USB.

Arduinos construit sur le ATMEGA32U4 n'obtient pas de numéro de série: j'ai des Leonardos qui me donnent le même problème que vous. Lorsque le chargeur de démarrage a été conçu à l'origine, le programmeur ne l'avait pas signalé. J'ai trouvé un bootloader modifié qui le fait, mais je ne l'ai pas encore essayé: http://forum.arduino.cc/index.php?topic=503703.0

Arduinos authentiques avec une puce FTDI signalent des numéros de série uniques. Certaines des imitations ne le placent pas dans la puce ou peuvent lui attribuer un numéro non unique (sauter cette étape pour économiser quelques centimes de coût de fabrication). Ceux qui utilisent une puce 16U2 pour l'interface USB (comme l'Uno R3) sont supposés obtenir un numéro de série unique. Les chinois que je viens d'acheter l'ont fait, mais il est possible que d'autres fabricants d'entre eux prennent des raccourcis, comme le font certains utilisateurs de puces FTDI.

Les arduinos qui utilisent la puce USB chinoise CH340 ne signalent pas non plus de numéro de série : la puce ne le prend pas en charge. Je pense que c'est également vrai pour le CP2102, mais je ne suis pas certain.

Vous pouvez être en mesure de résoudre le problème avec ce chargeur de démarrage modifié ( J'espère que oui: j'ai une demi-douzaine de Leonardos, et c'est un problème à chaque fois que j'en ai plus d'un connecté simultanément. Heureusement, je ne les utilise normalement pas comme "périphériques PC"). Ou vous pouvez acheter un autre des "petits" Arduinos avec un 328P qui utilise une puce USB-série, et baser les règles udev sur VID et PID pour les distinguer.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...