Em um cabo USB, é permitido trocar os fios D + e D?

54

Ouvi dizer que D + e D- são sinais diferenciais, importa se eu os trocar ao conectar um dispositivo USB ao computador?

Yan King Yin
fonte
Pergunta interessante ... Válido para todos os protocolos diferenciais válidos .. como o CAN!
Swanand

Respostas:

58

Sumário

Ao entrar e sair do estado inativo, a polaridade é importante e a troca das linhas D + e D- causará problemas.

Transmissão de dados

Os dados USB são codificados por NRZ, de modo que "Um" seja representado por nenhuma mudança no nível físico e "Zero" seja representado por uma mudança no nível físico (veja a figura abaixo). Portanto, inverter o sinal (por exemplo, trocando D + e D-) não resulta em alteração funcional durante a transmissão de dados. Mas pode haver problemas antes e depois da transmissão de dados que podem prejudicar a comunicação com o dispositivo.

Saindo do estado ocioso

O host inclui resistores pull-down de 15 kΩ em cada linha de dados. Quando nenhum dispositivo está conectado, isso puxa as duas linhas de dados para o estado "zero final único" (SE0 na documentação USB) e indica uma conexão redefinida ou desconectada. Um dispositivo USB eleva uma das linhas de dados com um resistor de 1,5 kΩ. Isso supera um dos resistores pull-down no host e deixa as linhas de dados em um estado inativo chamado "J". Para USB 1.x, a escolha da linha de dados indica quais taxas de sinal o dispositivo é capaz; os dispositivos de largura de banda máxima puxam D + alto, enquanto os de largura de banda baixa puxam D-alto.

Enquanto os dados são codificados por NRZI, a sequência de sincronização e a EoP são definidas em termos de estados fixos (J / K / SE0). Quando D + e D- são comutados, o estado J é alternado com K e SE0 ainda é SE0 (ambas as linhas estão baixas). Portanto, a sequência de sincronização e a EoP ficarão incorretas na inversão. No USB 1.x, se D + e D- forem trocados, os dispositivos de largura de banda total serão reconhecidos como largura de banda baixa e vice-versa. Portanto, o dispositivo nem se comunica na mesma velocidade que o host.

Inserindo estado ocioso

O fim de um pacote USB, chamado EOP (fim de pacote), é indicado pelo transmissor acionando 2 bits de SE0 (D + e D - ambos abaixo do máximo) e 1 bit de tempo no estado J. Depois disso, o transmissor deixa de acionar as linhas D + / D- e os resistores de tração mencionados acima o mantêm no estado J (inativo).

Com um driver D + / D- trocado, o host verá a sequência (SE0, SE0, K) em vez da correta (SE0, SE0, J). O host pode falhar ao reconhecer o final do pacote, o que causaria problemas.

insira a descrição da imagem aqui

Conclusão

Se o dispositivo e o host obedecerem estritamente às especificações USB, a troca dos pinos D + e D- resultará em falha. É concebível que o projetista do host previsse esse modo de falha e tenha compatibilidade com ele. Mas, se um cabo trocado seria ou não funcional na prática, certamente não seguiria as especificações.

Outro membro, Andrew Kohlsmith, experimentou isso quando os pinos de um hub USB foram trocados acidentalmente. O problema se manifestou como dispositivos conectados não aparecendo. O dispositivo USB mostraria que estava ligado, mas não foi reconhecido pelo computador no lado upstream do hub (que foi conectado corretamente ao host).

Fonte: wikipedia

Edit: obrigado a quem comentou. Acrescentei ênfase e detalhes de suas anotações úteis.

travisbartley
fonte
2
Deve-se notar que o host diferencia a velocidade baixa / máxima pela linha que eles puxaram para cima. Se você trocar as linhas D + / D-, o dispositivo nem se comunicará na mesma velocidade que o host. Além disso, enquanto os dados são codificados por NRZI, a sequência de sincronização e a EoP são definidas em termos de J / K / SE0 e se tornam incorretas na inversão.
avakar
2
Posso falar por experiência própria que a troca de D + / D- resulta em uma interface USB não funcional. Eu tive que refazer alguns protótipos que tinham um hub USB embutido neles. Não é tão divertido.
akohlsmith
@avakar Obrigado pelos detalhes. Penso que a resposta abordou a maior parte disso brevemente, mas tentarei adicionar mais detalhes para que fique mais claro.
travisbartley
@ Andrew Kohlsmith É uma informação útil. Se você se lembra, eu tenho algumas perguntas para você. O dispositivo ou hub teve a troca de pinos? Como o erro se manifestou? Quando você conectou o dispositivo, ele não foi reconhecido ou reconhecido como defeituoso? Como você diagnosticou o problema? Qualquer detalhe ajudaria, tentarei adicionar suas informações à resposta.
travisbartley
2
@ trav1s Troquei o D + / D- no lado do hub. O problema se manifestou como o dispositivo não aparecendo. A chave USB mostraria que estava energizada, mas não foi reconhecida pelo computador no lado upstream do hub (que foi conectado corretamente ao host). Diagnóstico Estou com vergonha de escrever, passei muito tempo pensando que era um problema de configuração / software do hub. No final, tracei os fios, mas fiz isso por último, porque estava convencido de que o USB era como Ethernet e podia trocar automaticamente os pinos. Eu estava errado. :-)
akohlsmith
1

Vi dispositivos negociarem como baixa velocidade somente quando d + e d- são trocados. Isso foi feito com um dispositivo de velocidade máxima (12 Mbps) e uma porta baseada em chipset VIA.

Dean Franks
fonte
2
Isso corrobora o que o @ trav1s disse sobre o USB 1.x.
Vaibhav Garg