Ouvi dizer que D + e D- são sinais diferenciais, importa se eu os trocar ao conectar um dispositivo USB ao computador?
Ouvi dizer que D + e D- são sinais diferenciais, importa se eu os trocar ao conectar um dispositivo USB ao computador?
Respostas:
Ao entrar e sair do estado inativo, a polaridade é importante e a troca das linhas D + e D- causará problemas.
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.
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.
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.
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).
Edit: obrigado a quem comentou. Acrescentei ênfase e detalhes de suas anotações úteis.
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.