Hub USB descartando dados de adaptadores USB para serial

Hub USB descartando dados de adaptadores USB para serial

Atualmente estou projetando um sistema que precisa receber dados de dispositivos seriais (principalmente placas ARM). Para conseguir isso, eu uso alguns adaptadores USB para serial (FTDI232). Codifiquei um programa de loopback simples (9600 baud) para testar a configuração, atualizei a placa ARM e consegui receber tudo o que enviei, sem qualquer perda de dados.

No entanto, este sistema eventualmente exigirá a comunicação com muitas placas. Portanto, conectei um hub USB à porta USB e usei-o para conectar mais placas. Porém, depois de alguns dias notamos alguns problemas. Primeiro parecia que tivemos algumas reviravoltas. Descobriu-se então que até mesmo bytes inteiros são eliminados quando recebemos mensagens dos fóruns. Quando conectamos esses adaptadores a portas USB normais (sem hub entre elas), o problema desapareceu.

Presumimos que é um problema de buffer. Talvez o controlador serial ou o dispositivo esteja enviando dados muito rápido. Portanto, instalamos o controle de fluxo RTS/CTS no lado serial. Novamente, os bytes foram eliminados pelos hubs USB e não quando o adaptador serial está conectado diretamente ao PC.

Trocamos o hub USB por um mais caro, mas não mudou nada. Trocamos o PC, mas também não resolveu o problema. Além disso, é confuso que o hub não descarte os pacotes que enviamos para o adaptador serial, mas apenas os pacotes que são enviados pelo adaptador serial.

Alguém sabe como eu poderia resolver isso ou qual é a causa do problema? Estamos pensando que o hub USB está causando isso. Porém, dependemos disso, pois teremos que conectar muitos dispositivos. Portanto, antes de criarmos nossa própria solução de manipulação serial (baseada em FPGA ou Pi dedicada), gostaria de perguntar se alguém aqui sabe o que está acontecendo. Existem arquivos de configuração do Linux, que talvez permitam pesquisas mais rápidas (se for um problema de pesquisa)? Acho que o adaptador serial não é o problema aqui.

Responder1

Para conseguir isso, eu uso alguns adaptadores USB para serial (FTDI232)

Obtenha adaptadores melhores que usam o protocolo USB 2.0 HS. Uma coisa com dispositivos FS sobre hubs HS é que o host deve usar o protocolo de transação dividida, que é conhecido por dificuldades de implementação devido à terrível complexidade. Eu não apostaria que o mecanismo de transação dividida já foi testado em um grande número de pontes FS UART de baixa qualidade.

A outra coisa é que muitos hubs USB 2.0 têm um único TT, então o desempenho geral é uma droga e o buffer/agendamento deve ser muito cuidadoso. Novamente, com o protocolo maluco de pesquisa do CDC, todas as apostas deveriam ser canceladas. Obtenha uma ponte USB-UART melhor, algo baseado no FT232H.

A diferença entre conexão direta ao host e conexão via hub USB é que no caso do host as transações são realizadas diretamente no protocolo FS nativo, enquanto a conexão através de hubs precisa de um driver especial que funcione com transações divididas. Você pode ter um driver de transação dividido fraco.

Responder2

Seja prudente ao misturar dispositivos e interfaces USB2 e USB3. Alguns problemas podem ocorrer devido a essa mistura. Além disso, lembre-se de que alguns hubs USB são simplesmente uma porcaria.

informação relacionada