En lisant http://playground.arduino.cc/Linux/Udev, il semble y avoir un moyen d'écrire sur une EEPROM USB-série FTDI pour définir un numéro de série donné, vous permettant d'identifier un nano / autre arduino donné pour le gérer spécifiquement dans UDEV.
J'ai une charge de style nano avec un adaptateur série USB QinHeng Electronics HL-340, qui n'est clairement pas une puce FTDI, et le programmeur FTDI ne fonctionne donc pas. Quelqu'un connaît-il un autre utilitaire / où puis-je trouver des informations pour faire de même avec cette puce?
Actuellement, l'appareil s'identifie avec:
[ 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
Ce qui est essentiellement inutile, car je ne peux pas identifier la carte donnée attachée (lorsque j'en attache deux, leurs détails sont les mêmes).
arduino-nano
ch340
jvc26
la source
la source
0
, donc udev ne peut pas faire la distinction entre plusieurs cartes connectées au même ordinateur.Réponses:
Il n'y a pas de stockage sur le CH340 et la famille d'UART où vous pourriez mettre un ID unique. C'est également un problème pour le type PL2303. J'ai essayé de trouver des solutions à ce problème. La première et la plus simple est la position de l'appareil sur le bus USB. Il sera unique pour chaque appareil. Si vous utilisez Linux, vous pouvez trouver chaque périphérique sous / dev / serial / by-path. Il y a aussi un / dev / serial / by-id mais il n'y aura qu'une seule entrée pour cet appareil car il montre la dernière connectée. Les puces FTDI auront chacune des entrées uniques ici. Les puces bon marché ne le seront pas, mais elles ont chacune une entrée sous / dev / serial / by-path. Cette position et les noms des périphériques doivent persister lors des redémarrages. Si vous avez apporté de nombreuses modifications à vos périphériques USB, branchez tous les périphériques CH340 sur le même concentrateur, puis branchez-le. Les appareils sont énumérés dans l'ordre où ils sont connectés au concentrateur. Cette astuce à un concentrateur devrait également fonctionner pour MacOS et Windows, ils devraient apparaître dans le même ordre.
Méthodes plus dures - udev. Pour les appareils avec un ID unique tel que FTDI, vous pouvez définir une règle udev qui voit son numéro de série, puis crée un lien symbolique vers cet appareil, c'est simple.
Pour les appareils avec le même ou aucun numéro de série, c'est beaucoup plus complexe. J'ai créé une règle udev qui ressemble à ceci:
SOUS-SYSTÈME == "tty", ATTRS {produit} == "USB2.0-Série", RUN + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"
lorsque l'appareil correspond au produit et au fournisseur de l'arduino bon marché, il exécute le script 'cheapduino.py' avec l'appareil comme argument, par exemple
cheapduino.py ttyUSB0
Ensuite, le script cheapduino se connecte en série à l'appareil et envoie la chaîne 'ID' et le logiciel sur l'appareil répond DEVID = THX1138 ou autre. Le script crée ensuite un lien symbolique / dev / THX1138 qui pointe vers / dev / ttyUSB0
Cette méthode présente de nombreux inconvénients. Le script doit expirer si le logiciel du cheapduino ne répond pas. De plus, cela n'utilise pas la fonction SYMLINK d'udev, donc il ne nettoiera pas les liens morts lors de la déconnexion, mais il les écrasera lors de la reconnexion. Tous vos bon marché doivent avoir cette fonctionnalité dans leur logiciel, avec différents ID d'appareil définis. Ils doivent tous utiliser le même débit en bauds que le script, sauf si vous voulez écrire un script très complexe qui prend beaucoup de temps. Enfin, cette méthode fonctionne beaucoup mieux à faible débit qu'en débit élevé, qui pour des raisons de synchronisation peut ne pas réussir à chaque fois. (cheapduinos sont bon marché!) 9600 fonctionne bien mieux que 115200 qui fonctionne après plusieurs essais. Mais puisque tous vos Arduinos CH340 doivent avoir la même vitesse avec cette méthode, vous ne pouvez aller aussi lentement que votre appareil le plus rapide.
Cette méthode fonctionne bien, et c'est ce que j'utilise parce que j'ai acheté beaucoup trop de ces choses bon marché.
En fin de compte, achetez de véritables Arduinos ou au moins des Arduinos avec des puces FTDI ou autre chose qui envoie un ID d'appareil unique.
= Riche
la source
Si vous voulez distinguer 2 appareils fondamentalement identiques, vous avez 2 façons:
la source
CH340B (pas le G) a une EEPROM où vous pouvez stocker le numéro de série.
https://www.mpja.com/download/35227cpdata.pdf
Il existe également un outil Windows pour le lire / l'écrire:
http://www.downxia.com/downinfo/196126.html
J'essaierai d'installer et de voir comment la version G se comporte ...
la source
Mettez un Maxim DS18S20 sur votre carte, chacun a un numéro de série unique et est très bon marché. Il existe de nombreux exemples de logiciels sur Internet utilisant cet appareil. Vous pouvez le mettre sur le nano. pour fonctionner, il a besoin d'une résistance de 4,7 K connectée à +5 et d'une connexion à la terre. Vous pouvez connecter les connexions 5V et Ground de l'appareil à la terre. Il serait facile de supprimer cela sur le nano, puis par une simple communication via une broche, vous pouvez obtenir le numéro de série. Plusieurs packages sont disponibles. Avec précaution, vous pouvez utiliser une broche d'entrée, lire la série et l'enregistrer pour une utilisation future. Quand il commencera, il recommencera. Assurez-vous simplement que l'entrée n'est pas trop basse pendant le processus d'initialisation.
Bonne chance,
Gil
la source
Je déteste le dire, mais la réponse est non, il n'y a aucun moyen d'identifier de manière unique plusieurs convertisseurs USB-série basés sur 340.
J'ai le même problème, où j'ai plusieurs (4+) convertisseurs USB-série, n'importe lequel peut être branché sur n'importe quel port, et ils ont été achetés en même temps et sont donc identiques à tous points de vue (y compris iSerial de 0).
Fondamentalement, si je déplace des objets, je dois me connecter à la main pour voir ce qui est attaché, parcourir la sortie dmesg, etc. C'est une grande douleur.
à M
la source