Dispositivo USB com 2 portas - como se proteger contra o usuário conectar ambos

11

Eu tenho um dispositivo USB de velocidade total que desejo fornecer 2 portas - uma em extremidades opostas do gabinete. Isso permite que o cabo possa ser conectado sempre que for mais conveniente. Meu MCU (atmega32u4) possui apenas uma interface, portanto as portas físicas serão compartilhadas, mas apenas uma deve ser conectada ao mesmo tempo.

Obviamente, não se pode confiar nos usuários para não conectar os dois lados ao mesmo tempo. Como se proteger contra isso?

Idéias que tive:

  • Apenas conecte-os "como estão" e espere que o host possa lidar com pinos D + / D- unidos
  • Porta NAND com pinos de 5V separados como entrada, saída para um MOSFET que desconecta o Vcc quando os dois estão conectados.

A segunda opção parece razoável ou é necessária uma solução mais complexa?

monty
fonte
Como você propõe conectar as duas portas para conectar D + e D- juntos? Você deve adicionar um diagrama explicando o layout que propõe.
Solar Mike
@SolarMike Compartilhado entre os dois - no cenário "correto", com apenas um cabo conectado, o D + / D- do outro conector ficará pendurado.
Monty
7
Você também deve projetar o gabinete com uma tampa móvel para que apenas uma porta USB seja exposta ao mesmo tempo. Dessa forma, você comunica claramente ao usuário que ele só pode conectar-se a uma das portas ao mesmo tempo, em vez de confundi-lo quando conectar dois hosts e um não funcionar.
criar o seu
4
não se esqueça do usuário que consegue encontrar um cabo usb macho-macho e conecta o dispositivo a ele mesmo !!!
RozzA

Respostas:

23

Conforme indicado, você não pode conectar diretamente dois hosts a um dispositivo - portanto, se você os conectasse e alguém o conectasse nas duas extremidades, teria um problema.

No entanto, você também terá um problema se apenas uma extremidade estiver conectada. USB, especialmente o modo de alta velocidade (480 Mbps), é impedância controlada. Se você conectar as duas linhas de dados dos conectores, terá o que é conhecido como esboço no design de alta frequência. O cabo que vai para o conector não utilizado prejudicará o desempenho do conector ativo.

Para fazer isso corretamente, você deseja um IC multiplexador. Você pode comprar multiplexadores USB2.0 dedicados projetados especificamente para esse tipo de aplicativo - algo como o TS3USB30 . Isso permitiria conectar as linhas de dados de ambas as portas às entradas mux e conectar a saída ao seu dispositivo internamente. O mux desconectará o conector não utilizado, que desconectará os stubs da linha de transmissão.

Para energia, provavelmente usaria um multiplexador de energia, como um circuito de diodo OR-ing. A linha VBUS de uma das portas (antes do multiplexador de energia) pode ser usada como entrada para o multiplexador de dados.

O aterramento seria comum (conectado) entre as duas portas USB e o seu dispositivo.

Tom Carpenter
fonte
1
Não considerei os stubs - esse multiplexador (combinado com o power multiplex) parece ideal!
Monty
3
Os stubs não devem ser um problema no Full Speed, que é tudo o que você perguntou na sua pergunta.
Dave Tweed
1
@DaveTweed Adicionei o esclarecimento sobre velocidade total depois de perceber que essa resposta abordava a alta velocidade. Saber que posso "me safar disso" é bom para esse design, mas eu definitivamente aprecio conhecer as implicações em velocidades mais altas.
Monty
Agora estou realmente interessado como fazer atmega32u4 apoio 480Mbps :)
Dmitry Grigoryev
9

O multiplexador, conforme sugerido por Tom Carpenter, é uma boa solução.

Mas para USB de velocidade máxima (12 Mbps), os stubs nos sinais não são particularmente importantes. Se a distância entre as extremidades das pontas permanecer abaixo de 1/10 do comprimento de onda, ou seja, abaixo de ~ 2 metros, as reflexões não distorcerão muito a forma de onda.

Além disso, os níveis de tensão nos pinos D + e D- permanecerão dentro da faixa aceitável, portanto, não há muito risco de danos eletrônicos a qualquer host.

O principal problema que resta é se você conectar os pinos de + 5V de ambos os hosts juntos, poderá haver grandes correntes envolvidas. Você pode usar um diodo do pino de + 5V de cada conector USB para permitir que a corrente entre, nunca saia.

jpa
fonte
4

A maneira preguiçosa do design eletrônico seria apenas usar um comutador físico de múltiplos conectores para escolher entre qual deles seria usado.

Observe que isso teria o benefício adicional de poder deixá-los conectados e usar o comutador para selecionar qual entrada será usada.

Lassi Kinnunen
fonte
2

Não existe uma maneira compatível com USB de fazer isso. O USB não foi projetado para ser compartilhado entre dois hosts e a tentativa de fazê-lo levará a situações potencialmente desastrosas.

Na melhor das hipóteses, você pode usar um multiplexador USB ou alternar IC, com o GPIO para determinar qual conector está conectado. Você terá que decidir qual conexão USB tem precedência, porque ambas não podem ser conectadas à sua interface USB ao mesmo tempo.

Ou procure alternativas. Faça com que um computador se comunique com o outro. Ou use Bluetooth ou Wi-Fi ou outro tipo de conexão.

Transeunte
fonte
Eu adicionei esclarecimentos à pergunta - apenas uma porta será usada ao mesmo tempo e (espero) o portão NAND pode resolver o problema de precedência simplesmente negando o cenário "ambos conectados".
Monty
Que tipo de situações desastrosas você acha que isso poderia levar?
jpa
1
@jpa suponha que os dois sistemas tenham potenciais de "terra" 50V diferentes, por exemplo. Conectar os dois ao D- pode ser "interessante". Mesmo que os potenciais sejam apenas 50mV diferentes, você pode ter criado um "loop de terra" que gera ruído.
alephzero
1
@alephzero Claro, mas mesmo um IC multiplexador ou de switch típico não daria conta disso. A conexão à terra primeiro no conector USB, no entanto, elimina principalmente esse problema.
jpa
2

Eu tenho um tablet Wacom com esse recurso. Eles lidam com o problema que você está descrevendo usando um intertravamento mecânico.

Há um controle deslizante de plástico que bloqueia uma porta ou outra, dependendo da posição.

insira a descrição da imagem aqui

Desenhou
fonte
1

Talvez seja mais fácil deixar o conector USB em um lado do gabinete e duplicar e / ou realocar todos os outros elementos voltados para o usuário simetricamente. Em seguida, o gabinete pode ser girado para que a porta USB fique voltada para o conector, enquanto todos os outros elementos ainda estão convenientemente acessíveis.

Outra opção é localizar as duas portas em um lado do gabinete (nas extremidades opostas) e adicionar um esboço deslizante no interior do gabinete que o usuário pode mover para abrir uma porta ou a outra. O USB de 12 MHz tem uma boa chance de trabalhar com uma porta desconectada extra conectada a ele.

Dmitry Grigoryev
fonte