Existe realmente um “protocolo de comunicação USB”?

22

De acordo com Wikipedia , USB:

defines the cables, connectors and communications protocols used in a bus for connection, communication, and power supply between computers and electronic devices

Mas existe realmente um "protocolo de comunicação USB "? Meu entendimento é o seguinte:

  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ônus se você sabe!) e o carrega
  3. O dispositivo agora está conectado em /dev/theDevice
  4. Os aplicativos de espaço do usuário agora podem ler / gravar em /dev/theDevice e o driver lida com o IO de baixo nível para o dispositivo / hardware subjacente

Para mim, em nenhum lugar desse 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 vista de 30.000 pés?

    
por smeeb 27.01.2015 / 18:50

5 respostas

48

Sim, consulte os protocolos 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 podem ser gerenciados por um driver de dispositivo genérico. Alguns dispositivos USB podem se comunicar em um nível mais baixo, de modo que o suporte USB de baixo nível do SO possa reconhecer que os drivers de nível superior específicos do dispositivo são necessários.

    
por 27.01.2015 / 19:32
29

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

Resposta:

Sim, a especificação USB inclui o protocolo USB que define a maneira como o barramento é usado em um 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 detalhes sobre como o protocolo USB funciona, este wiki OSDev é útil. Aqui está outra descrição interessante usando diagramas de seqüência para descrever as várias transações de dados pelo protocolo USB. / p>

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

Resposta

Bônus :

'No Linux ao usar um kernel habilitado para USB, um dispositivo USB em funcionamento será detectado através do hardware e kernel devido à 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 converte os bits de baixo nível na conexão para informações formatadas no protocolo USB. Esta informação é então preenchida no driver do núcleo USB no kernel. '

Parafraseado deste excelente artigo do Opensourceforu , que tem muito mais detalhes e clareza sobre sua pergunta no contexto do Linux.

    
por 27.01.2015 / 20:25
14

Como quase todos os outros tipos de interface de comunicação, o USB é implementado como um protocolo pilha . Os níveis dentro dessa pilha que são comuns a todos ou a vários tipos de dispositivos são definidos pelos próprios padrões USB, que permitem compatibilidade e impedem que cada dispositivo faça um projeto de protocolo redundante. Além disso, cada camada do protocolo abstrai detalhes que a próxima camada não precisa se preocupar. Então, quando você está realmente escrevendo a camada específica do dispositivo, você só tem funções genéricas de 'enviar' e 'receber' que obtêm dados do ponto de extremidade A para o ponto de extremidade B. Você, como designer de dispositivo, não precisa se preocupar como isso acontece. Além disso, níveis mais baixos dentro da pilha de protocolos podem mudar a implementação, desde que exponham uma interface comum à camada acima deles. Dessa forma, quando uma parte da pilha de protocolos é alterada, o restante da pilha não precisa necessariamente mudar. Idealmente, os protocolos em níveis mais altos da pilha nem precisam se preocupar exatamente com o qual protocolo está sendo usado em algum nível inferior da pilha. De um modo geral, cada camada consecutiva ao longo da pilha encapsulará a mensagem produzida pela próxima camada mais alta dentro de seu próprio campo de carga enquanto uma mensagem estiver sendo enviada. Quando uma mensagem é recebida, cada camada descasca a parte relevante para essa camada e encaminha sua carga útil para a próxima camada apropriada na pilha. Isto é verdade, não apenas USB, mas quase todos os barramento de comunicação. A pilha TCP / IP / Ethernet é provavelmente a mais comumente usada, por exemplo. As tarefas pelas quais determinadas camadas são normalmente responsáveis são descritas em modelos, como o modelo OSI .

No USB, existe um protocolo de camada física que define os estados de tensão / temporização / etc. no fio e como eles devem ser interpretados. Esse protocolo obviamente precisa fazer parte dos próprios padrões USB, não específicos 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 quando. Isso é chamado de camada de acesso à mídia no modelo OSI. Em USB, esta camada pode ser resumida como "o dispositivo pode transmitir quando o host lhe diz para fazer isso", então não há um protocolo particularmente complicado nesta camada em USB.

Em seguida, há um protocolo padrão para descrever um pacote de dados e como ele deve ser roteado a partir do remetente para o receptor. Essa camada também precisa fazer parte do próprio padrão USB, de modo que a comunicação inicial para descobrir que tipo de dispositivo foi anexado pode acontecer antes que o tipo específico de dispositivo seja realmente conhecido pelo host. Além de cada dispositivo ter um ID específico nessa camada, há também o conceito em USB de um ID de terminal. Isso permite que qualquer dispositivo tenha vários terminais USB, que são multiplexados e desmultiplexados pela pilha USB padrão, da mesma forma que os soquetes são multiplexados e desmultiplexados pela pilha TCP / IP padrão. Um aplicativo pode tratar cada um desses pontos de extremidade como fluxos de dados separados.

Finalmente, há o protocolo definido para o próprio dispositivo. Observe que, na verdade, existem alguns pré-desenhados comuns incluídos como parte do padrão USB para casos de uso comum, como dispositivos de armazenamento em massa, mouses, teclados etc., para que todos os fabricantes de dispositivos não precisem reinventar o roda. No entanto, dispositivos mais complicados estão livres para projetar seu próprio protocolo personalizado nessa camada. A saída dessa camada para uma determinada transmissão é passada como a carga útil de um pacote de dados na camada anterior. Observe que, para dispositivos suficientemente complicados, a parte específica do dispositivo do protocolo pode ser dividida em várias camadas independentes, mas os níveis inferiores 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 endpoint de dispositivo específico ou de um endpoint de dispositivo específico para o host. Novamente, ter a interface padrão entre camadas permite a separação de interesses, portanto, 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 dela na pilha.

    
por 28.01.2015 / 04:37
9

Na verdade, há um conjunto de protocolos de comunicação relacionados que interagem.

No nível mais baixo, existe um protocolo que descreve como os pacotes de bytes são enviados através de uma conexão serial. Isso é comum para todos os dispositivos USB (mas diferentes entre USB2 e USB3).

Um dos primeiros pacotes enviados pede ao dispositivo para se descrever. Para evitar um problema de galinha e ovo, o protocolo de identificação é o mesmo para todos os dispositivos USB. O sistema operacional pode usar essa identificação para carregar o driver correto.

Em outro nível, o USB é um barramento, o que significa que vários dispositivos devem compartilhar a largura de banda. Isso significa que há um protocolo que informa cada dispositivo quando ele pode falar e quando não. Como todos os dispositivos USB devem obedecer a isso, um protocolo comum é usado para organizar isso.

Finalmente, muitos dispositivos USB simples são tão simples que existem protocolos adicionais que descrevem uma classe inteira de dispositivos (mouses, teclados, armazenamento, adaptadores ethernet, ...). A maioria dos dispositivos suporta zero ou um desses protocolos funcionais.

    
por 27.01.2015 / 23:30
5

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

  • Para que a comunicação ocorra, os protocolos devem ser acordados.
  • Os sistemas de comunicação usam formatos bem definidos (protocolo) para trocar 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 sobre isso é que um protocolo é uma maneira predefinida e acordada de fazer algo , nesse caso, o algo é como mover dados dentro e fora de um dispositivo conectado via USB. Hardware-wise cada pin tem um nível de tensão pré-definido e protocolo de uso, cada tipo de dispositivo tem um pré Protocolo de uso definido para cada pin e cada pacote de dados tem uma sintaxe e um formato de dados pré-definidos. Existe também um protocolo de comunicação mão-agitando incorporado. Coletivamente, essas são partes da coleção de padrões para o uso de dispositivos USB, também conhecidos como protocolo USB , que é decidido (isto é, projetado, proposto, debatido, revisado e eventualmente aceito) pelos membros do USB Implementers Forum, Inc.

Então, sim, <<> existe um protocolo USB, ou mais corretamente são um número de protocolos USB pré-definidos e acordados s para diferentes usos USB.

    
por 28.01.2015 / 01:13