Lendo http://playground.arduino.cc/Linux/Udev , parece haver uma maneira de gravar em uma EEPROM USB-Serial FTDI para definir um determinado SerialNumber, permitindo identificar um determinado nano / outro arduino para lidar especificamente com ele em UDEV.
Eu tenho um carregamento de estilo nano com um adaptador USB-Serial QinHeng Electronics HL-340, que claramente não é um chip FTDI, e o programador FTDI, portanto, não funciona. Alguém sabe de um utilitário alternativo / onde posso encontrar informações para fazer o mesmo com este chip?
Atualmente, o dispositivo se identifica com:
[ 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
O que é essencialmente inútil, pois não consigo identificar o quadro em anexo (quando anexo dois, os detalhes são os mesmos).
arduino-nano
ch340
jvc26
fonte
fonte
0
, portanto, udev não pode distinguir entre várias placas ligados ao mesmo computador.Respostas:
Não há armazenamento no CH340 e na família de UARTs em que você pode colocar um ID exclusivo. Este também é um problema para o tipo PL2303. Eu tenho tentado encontrar soluções para este problema. Primeiro e mais fácil é a posição do dispositivo no barramento USB. Será exclusivo para cada dispositivo. Se você estiver usando o Linux, poderá encontrar cada dispositivo em / dev / serial / by-path. Também existe um / dev / serial / by-id, mas haverá apenas uma entrada para este dispositivo, pois mostra o último conectado. Os chips FTDI terão entradas únicas aqui. Fichas baratas não, mas cada uma tem uma entrada em / dev / serial / by-path. Esta posição e os nomes dos dispositivos devem persistir durante as reinicializações. Se houver muitas alterações nos seus dispositivos USB, conecte todos os dispositivos CH340 no mesmo hub e conecte-os. Os dispositivos serão enumerados na ordem em que estão conectados ao hub. Esse truque de um hub também deve funcionar para MacOS e Windows; eles devem aparecer na mesma ordem.
Regras mais rígidas do método udev. Para dispositivos com um ID exclusivo, como o FTDI, você pode definir uma regra do udev que veja o número de série e, em seguida, criar um link simbólico para esse dispositivo, é simples.
Para dispositivos com o mesmo ou nenhum número de série, é muito mais complexo. Eu criei uma regra do udev que se parece com isso:
SUBSISTEMA == "tty", ATTRS {produto} == "USB2.0-Serial", EXECUÇÃO + = "/ usr / local / bin / cheapduino.py% k", ATTRS {idVendor} == "1a86", ATTRS { idProduct} == "7523", ENV {ID_MM_DEVICE_IGNORE} = "1"
quando o dispositivo corresponde ao produto e fornecedor do arduino barato, ele executa o script 'cheapduino.py' com o dispositivo como argumento, por exemplo
cheapduino.py ttyUSB0
Em seguida, o script cheapduino se conecta por série ao dispositivo e envia a string 'ID' e o software no dispositivo responde DEVID = THX1138 ou o que for. O script cria um link simbólico / dev / THX1138 que aponta para / dev / ttyUSB0
Existem muitas desvantagens neste método. O script deve expirar se o software no cheapduino não responder. Além disso, isso não está usando a função SYMLINK do udev, para que ele não limpe os links mortos ao desconectar, mas os substituirá ao reconectar. Todos os seus dicionários baratos devem ter essa funcionalidade em seu software, com diferentes IDs de dispositivo definidos. Todos eles devem usar a mesma taxa de transmissão que o script, a menos que você queira escrever um script muito complexo que demore muito. Por fim, esse método funciona muito melhor em baixa taxa de transmissão do que em alta taxa de transmissão, o que, por razões de tempo, pode não ser bem sucedido todas as vezes. 9600 funciona muito melhor que 115200, que funciona após várias tentativas. Mas como todos os seus arduinos CH340 devem ter a mesma velocidade com esse método, você pode ir tão devagar quanto o seu dispositivo mais rápido.
Esse método funciona, porém, e é o que estou usando porque comprei muitas dessas coisas baratas.
No final, compre Arduinos genuínos ou pelo menos outros com chips FTDI ou qualquer outra coisa que envie um ID de dispositivo exclusivo.
= Rico
fonte
Se o que você quer é separar 2 dispositivos que são basicamente idênticos, você tem 2 maneiras:
fonte
O CH340B (não o G) possui uma EEPROM onde é possível armazenar o número de série.
https://www.mpja.com/download/35227cpdata.pdf
Também existe uma ferramenta do Windows para ler / escrever:
http://www.downxia.com/downinfo/196126.html
Vai tentar instalar e ver como a versão G se comporta ...
fonte
Coloque um Maxim DS18S20 em sua placa, cada um com um número de série único e é muito barato. Existem muitos exemplos de software na internet usando este dispositivo. Você pode dar um bug no nano. Para operar, é necessário um resistor de 4,7 K conectado a +5 e uma conexão de aterramento. Você pode conectar as conexões de 5V e de aterramento do dispositivo ao terra. Seria fácil corrigir esse problema com o nano e, com uma simples comunicação através de um pino, você pode obter o número de série. Existem vários pacotes disponíveis. Com cuidado, você pode usar um pino de entrada, ler o serial e salvá-lo para uso futuro. Quando o Inits fará isso novamente. Apenas certifique-se de que a entrada não seja reduzida durante o processo de inicialização.
Boa sorte,
Gil
fonte
Eu odeio dizer isso, mas a resposta é não, não há como identificar exclusivamente vários conversores serial USB baseados em 340.
Eu tenho o mesmo problema, onde tenho vários (4+) conversores USB-serial, qualquer um pode ser conectado a qualquer porta e eles foram comprados ao mesmo tempo e, portanto, são idênticos em todos os aspectos (incluindo iSerial de 0).
Basicamente, se eu mudar as coisas, tenho que conectar manualmente para ver o que está anexado, ler a saída dmesg, etc. É uma grande dor.
tom
fonte