Problemas com portas seriais USB

Prezados,

Estou com alguns Labrador 32 (core 2.2) com Labrador Base-M V2.1. Estou com o ultimo kernel atualizado, conforme instruções do wiki.

uname -a retorna:
Linux labrador 5.10.191 #1 SMP Sun Oct 22 00:42:00 -03 2023 armv7l GNU/Linux

Estou tentando conectar alguns componentes via USB na labrador 32bits, como chips conversores serial USB (presentes em alguns tipos de ARDUINO e compatíveis) com chipset CH340. A serial é detectada (como pode ser visto no dmesg), mas ao tentar receber qualquer coisa dela, só se recebe lixo. Tentei com outros chipsets, como FTDI, com diversos cabos USB, diferentes velocidades, etc. também sem sucesso. Poderiam me ajudar?

Ao conectar um Arduino UNO na USB da caninos, o dmesg mostra:

[  237.182051] caninos-hcd b0700000.usb: HC IN ep 0 error [0x0F] error type [0x03], reset it...
[  237.186855] usb 2-1: New USB device found, idVendor=0403, idProduct=6001, bcdDevice= 6.00
[  237.186865] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[  237.186871] usb 2-1: Product: FT232R USB UART
[  237.186878] usb 2-1: Manufacturer: FTDI
[  237.186883] usb 2-1: SerialNumber: A105IQZC
[  237.190022] ftdi_sio 2-1:1.0: FTDI USB Serial Device converter detected
[  237.190268] usb 2-1: Detected FT232RL
[  237.192126] usb 2-1: FTDI USB Serial Device converter now attached to ttyUSB0

Ao tentar qualquer comunicação, por exemplo, com o Minicom, só se recebe lixo.

Estou tentando implementar um servidor OctoPrint numa caninos. Mas ela não consegue conversar com nada do tipo “porta serial” via USB.

Atenciosamente
Pellini

Pessoal, tentei remover o driver de suporte ao conversor USB serial (rmmod), fazer o modprobe novamente, mas o erro persiste.

Basicamente parece haver algum tipo de vazamento de memória, conflito ou corrupção dos dados dos buffers da serial pois, independentemente do baud rate ajustado, as informações que aparecem pela serial estão sempre corrompidas. Em algumas ocasiões a quantidade de bytes recebidos parece ser o dobro ou quatro vezes mais do que o esperado. E em algumas ocasiões é possível ler, naquilo que foi recebido do buffer, em ascii, algo como "usb2/ " alguma coisa.

Enquanto isso, no dmesg, nada surge de errado.

Me parece que o módulo usbserial (ou os demais módulos relacionados, como o ftdi_sio) foram compilados de forma errada, para alguma outra arquitetura de arm. Ou então algum outro erro com alinhamento dos buffers em memória (alguns arm não fazem acesso desalinhado à memória).

Me coloco a disposição para ajudar, mas preciso entrar em contato com quem mantem o kernel para a labrador 32. Tenho cerca de 10 placas para uso numa disciplina e não estou conseguindo espetar hubs e conversores USB serial para usar em nossas aplicações.

Preciso de ajuda.

Pellini

Bom dia @elpellini o responsável pela manutenção do Kernel é o @edgar, já mandei para ele seus pontos e pedi para entrar em contato para tentarmos resolver.

Neste meio tempo, sugeriria talvez de utilizar os pinos seriais já disponíveis na Labrador, o conector J4, conforme esquemático da placa.

Você acha que isso seria suficiente para substituir o uso de um conversor serial USB? Caso seja, vai ser necessário suprimir o output de debug que está atualmente nesses pinos seriais da UART3, isso é possível substituindo o bootloader. Caso entenda que seria o suficiente posso te enviar as instruções.

1 Curtida

Olá Augusto, Desculpe a demora em responder, mas faz cerca de 5 meses que praticamente coloquei as as Labrador de lado.
Sim, eu cheguei a improvisar usando a UART3, mas é muito inconveniente não ter suporte funcional a conversores USB serial. Vários projetos nossos ficam bem limitados por que não conseguimos colocar dispositivos diretamente na USB.
Além disso, a impossibilidade de usar HUBs também é um fator limitador importante.
Houve algum avanço no suporte a dispositivos USB seriais ou HUBs ultimamente?
Atenciosamente
Pellini

Olá @elpellini

Sim, a nova versão do kernel disponível no nosso git já está com suporte a hubs USB e mais atualizações do kernel Linux, testei um conversor serial USB com o chipset CP2102 e funcionou, estou vendo se arrumo um CH340 como o seu para testes. Coloquei nesse link uma versão já compilada e um shell script que já tem os comandos para baixar essa versão na Labrador e atualizá-la. Vale observar que a depender da versão do sistema atualmente instalada o script pode dar algum erro, testei na imagem v0.11. Mas vc pode dar uma olhada nos comandos no script ou trocar o kernel conforme instruções do git. Qualquer dúvida, só avisar.