Al leer http://playground.arduino.cc/Linux/Udev parece que hay una manera de escribir en una EEPROM serie USB FTDI para establecer un número de serie dado, lo que le permite identificar un nano / otro arduino determinado para manejarlo específicamente en UDEV
Tengo una placa de estilo nano con un adaptador serie USB HL-340 de QinHeng Electronics, que claramente no es un chip FTDI, por lo que el programador FTDI no funciona. ¿Alguien sabe de una utilidad alternativa / donde puedo encontrar información para hacer lo mismo con este chip?
Actualmente el dispositivo se identifica con:
[ 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
Lo cual es esencialmente inútil, ya que no puedo identificar la placa adjunta (cuando adjunto dos, sus detalles son los mismos).
arduino-nano
ch340
jvc26
fuente
fuente
0
, por lo tanto, udev no puede distinguir entre múltiples tablas adjuntas a la misma computadora.Respuestas:
No hay almacenamiento en el CH340 y la familia de UART donde puede colocar una identificación única. Esto también es un problema para el tipo PL2303. He estado tratando de encontrar soluciones para este problema. Primero y más fácil es la posición del dispositivo en el bus USB. Será único para cada dispositivo. Si está utilizando Linux, puede encontrar cada dispositivo en / dev / serial / by-path. También hay un / dev / serial / by-id, pero solo habrá una entrada para este dispositivo porque muestra la última conectada. Los chips FTDI tendrán cada uno entradas únicas aquí. Los chips baratos no lo harán, pero cada uno tiene una entrada en / dev / serial / by-path. Esta posición y los nombres de los dispositivos deben persistir durante los reinicios. Si tiene muchos cambios en sus dispositivos USB, conecte todos los dispositivos CH340 en el mismo concentrador, luego conéctelo. Los dispositivos se enumerarán en el orden en que están conectados al concentrador. Este truco de un solo concentrador debería funcionar para MacOS y Windows también, deberían aparecer en el mismo orden.
Método más difícil: reglas de udev. Para dispositivos con una ID única como FTDI, puede establecer una regla udev que vea su número de serie y luego cree un enlace simbólico a ese dispositivo, es sencillo.
Para dispositivos con el mismo número de serie o ninguno, es mucho más complejo. Creé una regla de udev que se ve así:
SUBSISTEMA == "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"
cuando el dispositivo coincide con el producto y el proveedor del arduino barato, ejecuta el script 'cheapduino.py' con el dispositivo como argumento, por ejemplo
cheapduino.py ttyUSB0
Luego, el script cheapduino se conecta en serie al dispositivo y envía la cadena 'ID' y el software en el dispositivo responde DEVID = THX1138 o lo que sea. El script crea un enlace simbólico / dev / THX1138 que apunta a / dev / ttyUSB0
Hay muchos inconvenientes en este método. El script debe agotar el tiempo de espera si el software del cheapduino no responde. Además, esto no está utilizando la función SYMLINK de udev, por lo que no limpiará los enlaces muertos al desconectarse, pero los sobrescribirá al volver a conectarlos. Todos sus dduinos baratos deben tener esta funcionalidad en su software, con diferentes ID de dispositivo establecidos. Todos deben usar la misma velocidad en baudios que el script a menos que desee escribir un script muy complejo que lleve mucho tiempo. Finalmente, este método funciona mucho mejor a baja velocidad en baudios que a alta velocidad en baudios, lo que por razones de tiempo puede no tener éxito cada vez. (¡los cheapduinos son baratos!) 9600 funciona mucho mejor que 115200, que funciona después de varios intentos. Pero dado que todos sus arduinos CH340 deben tener la misma velocidad con este método, solo puede ir tan lento como su dispositivo más rápido.
Sin embargo, este método sí funciona, y es lo que estoy usando porque compré demasiadas de estas cosas baratas.
Al final, compre Arduinos genuinos o al menos unos con chips FTDI o algo más que envíe una identificación de dispositivo única.
= Rico
fuente
Si lo que quiere es distinguir 2 dispositivos que son básicamente idénticos, tiene 2 formas:
fuente
CH340B (no el G) tiene una EEPROM donde puede almacenar el número de serie.
https://www.mpja.com/download/35227cpdata.pdf
También hay una herramienta de Windows para leer / escribir:
http://www.downxia.com/downinfo/196126.html
Intentaremos instalar y ver cómo se comporta la versión G ...
fuente
Coloque un Maxim DS18S20 en su placa, cada uno tiene un número de serie único y son muy económicos. Hay muchos ejemplos de software en Internet que utilizan este dispositivo. Podrías molestarlo con el nano. Para funcionar necesita una resistencia 4.7K conectada a +5 y una conexión a tierra. Puede conectar las conexiones de tierra y 5V del dispositivo a tierra. Sería fácil molestarlo con el nano, luego, mediante una simple comunicación a través de un pin, puede obtener el número de serie. Hay varios paquetes disponibles. Con cuidado, podría usar un pin de entrada, leer el serial y guardarlo para uso futuro. Cuando se inicie, volverá a hacer esto. Solo asegúrese de que la entrada no sea baja durante el proceso de inicio.
Buena suerte,
Gil
fuente
Odio decirlo, pero la respuesta es no, no hay forma de identificar de manera única múltiples convertidores USB-serie basados en 340.
Tengo el mismo problema, donde tengo múltiples (4+) convertidores usb-serial, cualquiera podría conectarse a cualquier puerto, y se compraron al mismo tiempo y, por lo tanto, son idénticos en todos los sentidos (incluido iSerial de 0).
Básicamente, si muevo las cosas, tengo que conectarme a mano para ver qué está conectado, examinar la salida de dmesg, etc. Es un gran dolor.
tom
fuente