Como solucionar problemas / testar / benchmark hub usb (Hubs estão agindo como gargalo… Por que ??)

2

Estou executando um Ubuntu 14.04 LTS e alguns hardwares seriais incomuns, que usam conversores serial para USB.

Não consigo conectar vários dispositivos lentos (conversor RS232 para USB 2.0 e conversor RS422 para USB 2.0 e outro dispositivo USB 2.0) em um hub 3.0 sem que meu aplicativo falhe devido à falta de mensagens recebidas. No entanto, se todos os dispositivos estiverem conectados diretamente ao PC, tudo funcionará. Você poderia por favor explicar por que isso está acontecendo? Por favor, leia para mais detalhes ...

Comprei um hub USB 3.0 feito pela Orico. Ele tem 4 portas e é alimentado pela porta USB que ele conecta.

Eu conectei dois conversores seriais (com dispositivos para conversar) e um único dispositivo USB para ele. Aqui estão os detalhes:

  • RS422 para USB (2.0) - configurado como / dev / ttyUSB0 a 500.000 8N1.
  • RS232 para USB (2.0) - configurado como / dev / ttyUSB1 em 115200 8N1.
  • Dispositivo USB 2.0 (Labjack U3, que é um sistema IO de uso geral ... coleta botões pressionados e afins ...).

Eu observei um comportamento muito estranho que me custou dois dias de 14 horas de turbo alto estresse até que percebi que o hub é o problema.

Comportamento "Ruim" do Hub USB que demorou algum tempo a descobrir:

  • quando apenas o RS232 para USB estava conectado, o dispositivo serial com o qual eu estava se comunicando estava recebendo todos os dados que o PC estava enviando, mas todas as respostas do dispositivo estavam sendo descartadas pelo hub (ou mais precisamente desde que o hub foi usado).
  • Quando dois dispositivos foram conectados (Dispositivo Labjack USB 2.0 + RS422 para USB 2.0), tudo estava funcionando (as mensagens de ambos os dispositivos estavam chegando ao PC em um bom ritmo). Se o conversor RS232 para USB estava conectado enquanto os outros dois dispositivos já estavam conectados, tudo ainda estava bem, e eu poderia configurar a porta RS232. No entanto, assim que o dispositivo serial conectado ao RS232 foi ligado e começou a enviar "mensagens", o aplicativo em execução no PC falhava com um erro indicando que estava com falta de mensagens do dispositivo RS422 (que deveria estar chegando via USB cubo). Isso aconteceria dentro de 5 segundos após ligar (ligar online) o dispositivo serial que estava conectado ao conversor RS232 para USB.

Fiquei desconcertado por um tempo ... até que removi o hub USB e conectei todos os dispositivos diretamente ao PC ... então tudo começou a funcionar como um encanto.

Poderia, por favor, explicar por que isso está acontecendo? Além disso, você poderia sugerir algumas ferramentas ou um procedimento para me ajudar a identificar exatamente o que está errado com a rede USB?

Eu preciso do hub para carregar todos os dados seriais que são convertidos em mensagens USB para o PC sem um gargalo; e quando consideramos que as velocidades de série dos meus dispositivos RS232 e RS422 são tão lentas (em comparação com o USB ... não com a minha velocidade de resolução de problemas ...), eu pensaria que qualquer hub faria o truque. Tendo descoberto esse problema, estou curioso para saber por que um hub com velocidades muito mais rápidas do que os dispositivos conectados a ele está agindo como um gargalo.

Por favor, esteja ciente de que o hub não é (susceptível de ser) com defeito ... Ele carrega os dados muito bem; até encontrar 2 conversores seriais e um dispositivo USB conectado ao mesmo tempo, no ponto em que a velocidade (ou talvez a voltagem) trava meu robô.

################# EDIT # 1

Eu suspeitava que uma queda de tensão estava causando um problema, então usei um hub de porta USB 2.0 com alimentação 2.0 e os resultados foram os mesmos! O aplicativo fica sem necessidade de mensagens assim que todos os três dispositivos começam a enviar mensagens.

########################################### EDIT # 2

Se eu conectar o dispositivo RS422 diretamente no PC, e os dispositivos RS232 e Labjack USB no hub USB (e, em seguida, o hub USB no PC), o Labjack U3 falhará com um erro.

Isso significa que um hub USB não pode transmitir os dados transmitidos a ele por dois dispositivos seriais e um único dispositivo USB na proporção em que as mensagens estão chegando? Isso parece realmente errado.

Se eu puder fornecer mais informações, por favor me avise. Agradecemos antecipadamente.

    
por Mike 19.11.2017 / 06:01

1 resposta

2

Os dispositivos RS232 são geralmente dispositivos FS, com o protocolo USB sendo executado em 12Mbps. Quando conectada a um hub, USB2 ou USB3, a comunicação passa pelo processador especial de comunicação chamado "Transaction Translator", ou "TT", que é incorporado em todos os hubs USB. Existem dois tipos de hubs, aqueles que têm apenas um TT para todas as portas e os que têm TT individual para cada porta downstream.

Se você tiver vários dispositivos FS conectados a um hub único-TT, o recurso de armazenamento em buffer será dispensado e a largura de banda do FS (12Mbps) será compartilhada entre os dispositivos conectados. Para obter largura de banda total do FS em cada conexão downstream, é necessário ter o chamado hub "Multi-TT".

Além disso, a manipulação de transações do FS sobre o TT requer uma abordagem especial no lado do host, chamada "transações divididas".

Os computadores modernos têm suporte nativo a FS através de controladores host XHCI (USB 3.0), portanto a conexão direta é feita naturalmente pelo driver XHCI. Computadores mais antigos têm suporte a FS dentro de seu hardware e portas multiplexadas a controladores OHCI ou UHCI mais antigos, para que também tenham suporte direto para as taxas de tráfego de FS.

No entanto, se um hub estiver no meio, o tráfego do FS deve ser tratado pela técnica de transação dividida, que é exclusivamente baseada em software. As regras divididas são terrivelmente complicadas e cobertas por cerca de 150 páginas de especificações USB. Se o driver do seu robô tiver baixo (ou nenhum) suporte para transações divididas, os dispositivos FS e LS não funcionarão por trás de um hub, especialmente se houver muitos desses dispositivos.

Adição: o hub Orico usa o controlador IC VL812 , que tem apenas um TT no caminho do HS. Com dispositivo (supostamente FS) 422-USB configurado para 500.000 bauds e outros dispositivos FS, provavelmente não resta largura de banda, e o host tem problemas com o agendamento de transações e barfs em algo.

    
por 22.11.2017 / 03:14