De acordo com a Wikipedia , USB:
define os cabos, conectores e protocolos de comunicação usados em um barramento para conexão, comunicação e fonte de alimentação entre computadores e dispositivos eletrônicos
Mas existe realmente um " protocolo de comunicação USB "? Meu entendimento é que:
- Você conecta um dispositivo USB a uma máquina (por exemplo, Ubuntu ou qualquer tipo de Linux)
- O Linux encontra o driver do dispositivo (de alguma forma - bônus se você souber!) E o carrega
- O dispositivo está agora conectado em
/dev/theDevice
- Agora, os aplicativos de espaço do usuário podem ler / gravar
/dev/theDevice
e o driver gerencia o IO de baixo nível no 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? Em caso afirmativo, o que é e como funciona em uma visão de 30.000 pés?
linux
usb
linux-device-driver
smeeb
fonte
fonte
Respostas:
Sim, consulte 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 ser gerenciados por um driver de dispositivo genérico. Alguns dispositivos USB podem se comunicar em um nível inferior, de forma que o suporte USB de baixo nível do SO reconheça que são necessários drivers de nível superior específicos do dispositivo.
fonte
Pergunta: Existe um protocolo de comunicação USB de baixo nível em ação e o que é?
Responda:
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, como armazenamento em massa, HID, etc.
Para detalhes sobre como o protocolo USB funciona, este wiki do OSDev é útil. Aqui está outra descrição interessante usando diagramas de seqüência para descrever as várias transações de dados por protocolo USB.
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 do 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 do host assume e converte os bits de baixo nível no fio para informações formatadas no protocolo USB. Essas informações são preenchidas no driver do núcleo USB no kernel. '
Eu parafraseiei este excelente artigo Opensourceforu , que tem muito mais detalhes e clareza sobre sua pergunta no contexto do Linux.
fonte
Como quase todos os outros tipos de interface de comunicação, o USB é implementado como uma pilha de protocolos. Os níveis nessa pilha que são comuns a todos ou vários tipos de dispositivos são definidos pelos próprios padrões USB, o que permite compatibilidade e impede que cada dispositivo faça um design de protocolo redundante. Além disso, cada camada do protocolo abstrai os detalhes com os quais a próxima camada acima não precisa se preocupar. Portanto, quando você está realmente escrevendo a camada específica do dispositivo, você apenas possui funções genéricas de 'enviar' e 'receber' que obtêm dados do ponto A ao ponto B. Você, como designer do dispositivo, não precisa se preocupar com como isso acontece. Além disso, níveis mais baixos na 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 é alterada, o restante da pilha não precisa necessariamente ser alterado.qual protocolo está sendo usado em algum nível inferior da pilha. De um modo geral, cada camada consecutiva abaixo da pilha encapsulará a mensagem produzida pela próxima camada mais alta dentro de seu próprio campo de carga quando uma mensagem estiver sendo enviada. Quando uma mensagem é recebida, cada camada separa a parte relevante para essa camada e encaminha sua carga útil para a próxima camada apropriada na pilha. Isso vale não apenas para USB, mas para quase todos os barramentos de comunicação. A pilha TCP / IP / Ethernet é provavelmente a mais usada, por exemplo. As tarefas pelas quais as camadas são geralmente responsáveis são descritas em modelos, como o modelo OSI .
No USB, existe um protocolo de camada física que define estados de tensão / tempo / etc. no fio e como eles devem ser interpretados. Obviamente, esse protocolo precisa fazer parte dos padrões USB, 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).
Em seguida, há um protocolo de gerenciamento de barramento, usado para descrever quem pode falar no barramento 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 solicita", para que não exista um protocolo particularmente complicado nessa camada no USB.
A seguir, há um protocolo padrão para descrever um pacote de dados e como ele deve ser roteado do remetente para o 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 ocorrer 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, também existe o conceito em USB de um ID de terminal. Isso permite que qualquer dispositivo tenha vários pontos de extremidade USB, que são multiplexados e desmultiplexados pela pilha USB padrão, da mesma maneira 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é-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 todo fabricante de dispositivos não precise reinventar o roda. No entanto, dispositivos mais complicados podem criar 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 protocolo do dispositivo pode ser dividida em várias 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 em particular do dispositivo ou de um terminal em particular para o host. Mais uma vez, ter a interface padrão entre as camadas permite a separação de preocupações; portanto, uma camada não precisa se preocupar com o funcionamento interno de outra camada, mas apenas os dados específicos aos quais deve passar ou esperar receber das camadas imediatamente acima ou abaixo na pilha.
fonte
Na verdade, há um conjunto de protocolos de comunicação relacionados que interagem.
No nível mais baixo, há um protocolo que descreve como os pacotes de bytes são enviados por uma conexão serial. Isso é comum em todos os dispositivos USB (mas diferente entre USB2 e USB3).
Um dos primeiros pacotes enviados solicita que o dispositivo se descreva. 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 largura de banda. Isso significa que há um protocolo que informa a cada dispositivo quando ele pode falar e quando não. Como todos os dispositivos USB devem cumprir isso, um protocolo comum é usado para organizar isso.
Por fim, muitos dispositivos USB simples são tão simples que existem protocolos adicionais que descrevem toda uma classe de dispositivos (mouse, teclado, armazenamento, adaptadores Ethernet, ...). A maioria dos dispositivos suporta zero ou um desses protocolos funcionais.
fonte
Universal Serial Bus
.Talvez parte da resposta esteja dentro da definição da frase " protocolo de comunicação ". Indo para a mesma fonte que você (Wikipedia), você encontrará informações úteis, como:
Uma maneira simples de pensar é que um protocolo é uma maneira pré-definida e acordada de fazer alguma coisa ; nesse caso, a coisa é como mover dados para dentro e para fora de um dispositivo conectado via USB. Em termos de hardware, cada pino possui um nível de tensão e protocolo de uso predefinidos, cada tipo de dispositivo possui um protocolo de uso predefinido para cada pino e cada pacote de dados possui uma sintaxe e um formato de dados predefinidos. Também existe um protocolo de comunicação de tremor de mão incorporado. Coletivamente, essas são todas partes da coleção de padrões para o uso de dispositivos USB, também conhecido como protocolo USB, que é decidido (ou seja, projetado, proposto, debatido, revisado e eventualmente acordado) pelos membros do USB Implementers Forum, Inc.
Então, sim, há é um protocolo USB, ou mais corretamente lá são um número de pré-definido e acordado protocolo USB s para diferentes usos USB.
fonte