Como o USB 2.0 evitou colisões?

33

Observando os pinos dos receptáculos USB 3.0, posso ver que existem pares separados de transmissão e recepção; no entanto, para o USB 2.0, existe apenas um par de pinos "dados". Como o USB 2.0 garante que os dispositivos não estejam se comunicando simultaneamente?

VortixDev
fonte
2
Você também pode estar interessado em olhar para coisas como CSMA / CD, que é como ele é resolvido em outros contextos
PlasmaHH
1
Pares de transmissão / recepção separados não resolvem todos os conflitos. Imagine que você tem um pendrive e um modem, os dois desejam enviar alguns dados para o host e, assim, começam a transmitir. Onde? No mesmo par: host recebe. O conflito ainda está lá. Não é assim que o USB funciona, mas é exatamente assim que a Ethernet 10/100 funciona: todas as direções têm seu próprio par, mas a luz de "colisão" no hub continua piscando.
Agent_L 19/02/19

Respostas:

67

USB é estritamente mestre-escravo. O dispositivo não transmite, a menos que o host solicite a transmissão.

Mesmo o chamado modo "interrupção" é realmente interessante: por exemplo, a cada 8 milissegundos (ou menos, se você tiver um mouse para jogador), o PC pergunta ao mouse "qual é a sua posição" e o mouse responde.

Mesmo se você tiver uma interface serial USB, por exemplo. Quando a interface recebe dados na linha serial, não os transmite ao PC. Em vez disso, aguardará o PC iniciar a transação e solicitará os dados.

Esta página tem uma boa explicação sobre os pacotes que são trocados. Basicamente, lembre-se de que o USB foi implementado para permitir que o periférico mais burro e mais barato possível funcione, o que significa que a maior parte da inteligência está no host, no controlador USB do host, no SO e nos drivers. Isso é muito aparente ao ler as especificações.

O Firewire (por exemplo) tem uma filosofia completamente diferente, é muito mais poderoso, é multi-mestre para que os dispositivos possam conversar entre si sem a ajuda de um host / mestre. Na verdade, é muito mais próximo em sua filosofia de algo como anel de token com transferências isócronas batidas na parte superior do que USB. No entanto, "multi master" significa que requer um microcontrolador poderoso nos dispositivos, executando uma pilha de software complexa. Portanto, é mais caro e, portanto, limitado a produtos caros, como câmeras de vídeo e gabinetes de disco rígido rápidos. Um mouse firewire não faz sentido, seria muito caro. Essa é uma das razões pelas quais o FireWire falhou.

peufeu
fonte
3
Excelente explicação e comparação muito adequada com o FireWire (e sim, vamos construir uma rede de arbitragem baseada em token para ... realisticamente, no máximo 5 dispositivos em um barramento).
Marcus Müller
3
Essa é uma boa resposta, mas acho que seria mais completa se você mencionasse a enumeração. Descobrir quais dispositivos estão conectados a uma rede dinâmica sem capacidade de arbitragem (como teria uma rede multimestre) é um problema não trivial e, de várias maneiras, define por que o USB não pode usar uma topologia de barramento verdadeira.
Jon
Obrigado;) Embora eu não conheça os detalhes sangrentos sobre a enumeração do lado do host. Mas, na IMO, a verdadeira razão pela qual o USB é assim é que ele foi projetado em meados da década de 1990 e, na época, os microcontroladores eram mais caros do que hoje, e o caminho para dispositivos baratos era torná-los o mais burros possível com o mínimo de RAM e código que possível. Além disso, funciona muito bem, meio que atingiu um ponto ideal.
peufeu
5
Incorreto, USB é um barramento . Ele apenas possui uma topologia diferente (estrela), oposta ao barramento "linear" mais familiar. Todas as transações de host USB 2.0 (HS) são transmitidas por todos os segmentos da estrela, portanto, não são muito diferentes do barramento "linear". Semelhante ao barramento linear, todos os dispositivos veem a atividade do barramento quase ao mesmo tempo. A única diferença é que as respostas do dispositivo não são visíveis para outros dispositivos que estão em ramificações diferentes.
214418 Ale..chenski
2
@rahuldottech é decentemente legal se funcionar , mas o FireWire era muito menos confiável que o USB, em particular o WRT plug & play. E com o USB, você pode facilmente conectar muitas unidades a uma única porta usando um hub extra. Há uma troca de desempenho, mas a confiabilidade e a facilidade superam.
leftaroundabout
18

Na estrutura USB, os dispositivos não podem se comunicar simultaneamente, porque apenas "conversam" quando o host USB "permite" que eles falem. E o host USB permite que outro dispositivo "fale" somente quando o protocolo de transação seqüencial com o primeiro dispositivo for concluído. E os dispositivos USB não têm como "conversar" sozinhos, não há mecanismo de interrupção ativo no USB. Em resumo, o mecanismo de implementação dessa disciplina é o seguinte.

Após a conexão dos dispositivos USB 2.0, o host os enumera atribuindo endereços exclusivos a cada dispositivo.

Toda transação no barramento é iniciada pelo host USB.

Os cabeçalhos de todas as transações USB possuem um endereço de dispositivo específico. Mesmo quando as transações são transmitidas por toda a árvore USB (na instância específica do controlador host), apenas o dispositivo com endereço correspondente responderia à transação e pegaria os dados ou responderia com dados.

O link "parceiros" enviará uma confirmação na direção de quem recebe os dados com sucesso. Toda a transação segue um protocolo estabelecido com uma sequência definida de tokens, tempos limite e códigos de correção de erros, para garantir a integridade da transação.

Todos os outros dispositivos estão apenas ouvindo e ignorando o tráfego que não é direcionado a eles.

É isso, é interface "half-duplex".

Ale..chenski
fonte
1
Não estou familiarizado com o protocolo USB, então como o host sabe que o dispositivo correto respondeu?
Derek # 17/0218
@Derek 功夫 會 功夫, o host sabe disso porque este é o único dispositivo que deve responder; ninguém mais responderá. As transações USB 2.0 são "atômicas", não há respostas adiadas, tudo depende do tempo limite. Nenhuma resposta oportuna (transação incompleta) resultará em uma nova tentativa.
214418 Ale..chenski
Para acompanhar, minha pergunta é que, como todos os dispositivos estão conectados ao mesmo barramento, o que me impede de fingir ser outro dispositivo também conectado?
Derek朕會功夫
7
@Derek 功夫 會 功夫: Nada. É por isso que você não conecta chaves USB aleatórias obtidas em mercados fora da rua. Você não pode confiar neles.
Lightness Races com Monica
7
@Derek 功夫 會 功夫, com intenção maliciosa, um dispositivo USB precisa aceitar um endereço durante a enumeração e outro dispositivo terá um endereço diferente, todos controlados pelo host. Isso não é diferente do que quando vários módulos de memória estão conectados a um barramento paralelo, mas cada módulo responde apenas ao endereço de seleção de decodificador / chip. E se dois dispositivos USB responderem acidentalmente (por exemplo, host estragado com a atribuição de endereços), haverá uma confusão de colisões no barramento e nenhum pacote passará pelo CRC (que está conectado a cada token USB), e a porta correspondente será ser desativado devido a erros maciços.
21418 Alemannchenski