Existe realmente um "protocolo de comunicação USB"?

Existe realmente um "protocolo de comunicação USB"?

De acordo comWikipédia, USB:

define os cabos, conectores e protocolos de comunicação utilizados em um barramento para conexão, comunicação e alimentação entre computadores e dispositivos eletrônicos

Mas existe realmente um "USBprotocolo de comunicação"? Meuentendimentoé aquele:

  1. Você conecta um dispositivo USB a uma máquina (digamos, Ubuntu ou qualquer tipo de Linux)
  2. O Linux encontra o driver de dispositivo para esse dispositivo (de alguma forma -bônusse você sabe!) e carrega
  3. O dispositivo agora está conectado em/dev/theDevice
  4. Os aplicativos de espaço do usuário agora podem ler/gravar /dev/theDevicee o driver lida com o IO de baixo nível para o dispositivo/hardware subjacente

Para mim, em nenhum lugar deste fluxo aparece um "protocolo de comunicação USB". Se meu entendimento estiver correto, o USB é apenas o cabo e a conexão elétrica entre o PC e o dispositivo.

Estou errado aqui? O USB realmente implementa algum tipo de protocolo de baixo nível que ressalta o fluxo acima? Se sim, o que é e como funciona a uma visão de 30.000 pés?

Responder1

Sim, vejaProtocolos USB

Pelo que entendi, a especificação USB define um conjunto complexo de protocolos em camadas e perfis de dispositivos.

Por exemplo, os dispositivos USB podem estar em conformidade com modelos de alto nível, como armazenamento em massa, teclado (ou dispositivo de interface humana, etc.) e ser gerenciados por um driver de dispositivo genérico. Alguns dispositivos USB podem se comunicar em um nível inferior, de modo que o suporte USB de baixo nível do sistema operacional possa reconhecer que são necessários drivers de nível superior específicos do dispositivo.

Responder2

Pergunta: Existe um protocolo de comunicação USB de baixo nível em ação e o que é?

Responder:

Sim, existe, a especificação USB inclui oProtocolo USBque define a maneira como o barramento é usado em nível de bit. Este seria o protocolo de 'baixo nível' subjacente aos protocolos de nível superior, ou seja, armazenamento em massa, HID, etc.

Para obter detalhes sobre como o protocolo USB funciona, esteWiki OSDevé útil. Aqui está outrodescrição interessanteusando diagramas de sequência para descrever as várias transações de dados pelo protocolo USB.

Pergunta bônus: Como o Linux encontra e carrega o driver de dispositivo para esse dispositivo?

Bônusresponder:

'No Linux, ao usar um kernel habilitado para USB, um dispositivo USB funcional será detectado através dohardwareenúcleodevido à especificação USB. No lado do hardware, a detecção é feita pelo USB Host Controller. Em seguida, no kernel, o driver do controlador host assume e traduz os bits de baixo nível na conexão em informações formatadas pelo protocolo USB. Essas informações são então preenchidas no driver principal USB no kernel.'

Parafraseei este excelenteArtigo Opensourceforu, que traz muito mais detalhes e clareza sobre sua dúvida no contexto Linux.

Responder3

Como quase todos os outros tipos de interface de comunicação, o USB é implementado como um protocolopilha. Os níveis dentro desta pilha que são comuns a todos ou a vários tipos de dispositivos são definidos pelos próprios padrões USB, o que permite a compatibilidade e evita que cada dispositivo execute um design de protocolo redundante. Além disso, cada camada do protocolo abstrai detalhes com os quais a próxima camada não precisa se preocupar. Então, quando você está realmente escrevendo a camada específica do dispositivo, você apenas tem funções genéricas de 'envio' e 'recebimento' que levam dados do ponto final A ao ponto final B. Você, como designer do dispositivo, não precisa se preocupar com como isso acontece. Além disso, os níveis mais baixos da pilha de protocolos podem alterar a implementação, desde que exponham uma interface comum à camada acima deles. Dessa forma, quando uma parte da pilha de protocolos muda, o restante da pilha não precisa necessariamente mudar. Idealmente, os protocolos em níveis mais altos da pilha nem precisam se preocupar exatamentequalprotocolo está sendo usado em algum nível inferior da pilha. De modo geral, cada camada consecutiva na pilha encapsulará a mensagem produzida pela próxima camada mais alta em seu próprio campo de carga útil à medida que uma mensagem for enviada. Quando uma mensagem é recebida, cada camada retira a parte relevante para aquela camada e encaminha sua carga para a próxima camada apropriada na pilha. Isso se aplica não apenas ao USB, mas a quase todos os barramentos de comunicação. A pilha TCP/IP/Ethernet é provavelmente a mais comumente usada, por exemplo. As tarefas pelas quais determinadas camadas são comumente responsáveis ​​são descritas em modelos, como oModelo OSI.

No USB, existe um protocolo de camada física que define estados de tensão/temporização/etc. no fio e como eles devem ser interpretados. Obviamente, esse protocolo precisa fazer parte dos próprios padrões USB, e não específico de um determinado dispositivo (especialmente porque o host não tem como saber que tipo de dispositivo está prestes a ser conectado a uma determinada porta USB).

A seguir, há um protocolo de gerenciamento de barramento, usado para descrever quem pode falar no ônibus e quando. Isso é chamado de camada de acesso à mídia no modelo OSI. No USB, essa camada pode ser resumida como "o dispositivo pode transmitir quando o host solicitar", portanto, não há um protocolo particularmente complicado nessa camada no USB.

A seguir, há um protocolo padrão paradescrevendo um pacote de dadose como deve ser roteado do remetente ao destinatário. Essa camada também precisa fazer parte do próprio padrão USB, para que a comunicação inicial para descobrir que tipo de dispositivo foi conectado possa acontecer antes que o tipo específico de dispositivo seja realmente conhecido pelo host. Além de cada dispositivo possuir um ID específico nesta camada, existe também o conceito em USB de um ID de endpoint. Isso permite que qualquer dispositivo tenha vários terminais USB, que são multiplexados e demultiplexados pela pilha USB padrão, da mesma forma que os soquetes são multiplexados e demultiplexados pela pilha TCP/IP padrão. Um aplicativo pode tratar cada um desses terminais como fluxos de dados separados.

Por fim, existe o protocolo definido para o próprio dispositivo. Observe que na verdade existem alguns pré-projetados comuns incluídos como parte do padrão USB para casos de uso comuns, como dispositivos de armazenamento em massa, mouses, teclados, etc., para que cada fabricante de dispositivos não precise reinventar o roda. No entanto, dispositivos mais complicados são livres para projetar seu próprio protocolo personalizado nesta camada. A saída desta camada para uma determinada transmissão é passada como carga útil de um pacote de dados na camada anterior. Observe que, para dispositivos suficientemente complicados, a parte específica do protocolo do dispositivo pode ser dividida em múltiplas camadas independentes, mas os níveis mais baixos não precisam saber ou se preocupar com isso. Tudo o que eles precisam saber é que precisam passar um determinado conjunto de bytes do host para um terminal de dispositivo específico ou de um terminal de dispositivo específico para o host. Novamente, ter a interface padrão entre camadas permite a separação de interesses, de modo que uma camada não precisa se preocupar com o funcionamento interno de outra camada, mas apenas com os dados específicos que ela deve passar ou esperar receber das camadas imediatamente acima ou abaixo dele na pilha.

Responder4

Talvez parte da resposta esteja na definição da frase "protocolo de comunicação". Indo para a mesma fonte que você (Wikipedia), você encontrará informações úteis, como:

  • Para que a comunicação ocorra, os protocolos devem ser acordados.
  • Os sistemas de comunicação utilizam formatos (protocolo) bem definidos para troca de mensagens.
  • um protocolo deve definir a sintaxe, a semântica e a sincronização da comunicação.
  • Um protocolo pode, portanto, ser implementado como hardware, software ou ambos.

Uma maneira simples de pensar nisso é queum protocolo é uma maneira predefinida e acordada de fazer algo, neste caso oalgoé como mover dados para dentro e para fora de um dispositivo conectado por USB. Em termos de hardware cadaalfinetepossui nível de tensão e protocolo de uso predefinidos, cada tipo de dispositivo possui um protocolo de uso predefinido paracada alfinete, e cadapacote de dadostem uma sintaxe e um formato de dados predefinidos. Há também uma comunicaçãoaperto de mãosprotocolo incorporado. Coletivamente, tudo isso faz parte da coleção de padrões para o uso de dispositivos USB, também conhecidos comoo protocolo USB, que é decidido (ou seja, concebido, proposto, debatido, revisado e eventualmente acordado) pelos membros doo Fórum de Implementadores USB, Inc.

Então sim, háéum protocolo USB, ou mais corretamente lásãouma série de protocolos USB predefinidos e acordadosépara diferentes usos USB.

informação relacionada