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

24

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:

  1. Você conecta um dispositivo USB a uma máquina (por exemplo, Ubuntu ou qualquer tipo de Linux)
  2. O Linux encontra o driver do dispositivo (de alguma forma - bônus se você souber!) E o carrega
  3. O dispositivo está agora conectado em /dev/theDevice
  4. Agora, os aplicativos de espaço do usuário podem ler / gravar /dev/theDevicee 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?

smeeb
fonte
45
"o driver lida com a E / S de baixo nível do dispositivo / hardware subjacente", ele faz isso usando o protocolo de comunicação que está no padrão.
precisa
29
Ah ... li a pergunta como "Existe realmente um" protocolo de comunicação USB "?" Então a resposta seria sim. Se você quiser saber qual é o protocolo de comunicação real, basta ler o padrão. Ou leia a seção 11 na página wiki à qual você vinculou.
EBGreen 27/01
6
"o USB é apenas o cabo e a conexão elétrica entre o PC e o dispositivo". O cabo Ethernet é apenas um cabo entre o PC e um switch / roteador / o que for. Ainda existem alguns protocolos usados ​​para se comunicar através deste cabo e fazer coisas úteis com ele.
precisa saber é
13
"O Linux encontra o driver de dispositivo para esse dispositivo" Como você acha que o Linux é capaz de detectar qual dispositivo está conectado à outra extremidade. Um protocolo comum, talvez?
spender
4
@ Ramhound "Esses protocolos de comunicação são independentes do padrão, pelo menos no caso da Ethernet." Isto é falso. Os protocolos Ethernet (camada física e MAC) são definidos pelos padrões IEEE Ethernet (especificamente, os padrões 802.3 ). É claro que é possível (e comum) enviar algo diferente do protocolo Ethernet por um cabo de categoria 6 com Conectores RJ-45, mas nesse momento não é mais Ethernet. Essa é uma prática comum em sistemas de telefone não VoIP, por exemplo.
reirab

Respostas:

47

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.

RedGrittyBrick
fonte
30

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.

projectdp
fonte
7
Espero que "pergunta bônus" signifique "recompensa" para você.
dotancohen
@projectdp - Seria muito útil se você colocasse algumas das informações de suas principais referências na própria resposta.
Ramhound 28/01
@ Ramhound - Obrigado pelo seu feedback, reescrevi minha resposta de uma maneira mais útil. Quanto à adição de mais informações dos recursos, o que você gostaria de ver que seja relevante para as perguntas?
Projectdp
14

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.

reirab
fonte
9

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.

MSalters
fonte
"USB é um barramento, o que significa que vários dispositivos precisam compartilhar largura de banda" - um ponto que o OP ignorou quando ele usa apenas uma configuração ponto a ponto para sua pergunta. Como dois (ou mais) dispositivos USB podem compartilhar o cabo com o PC host, podemos inferir que deve haver um protocolo.
serragem
@sawdust Como funciona (até ponto a ponto), podemos inferir que existe um protocolo. A descoberta de dispositivos, por exemplo, não seria possível se não houvesse um protocolo padrão.
reirab 28/01
De fato, existe um padrão de comunicação e, em seu núcleo, é uma comunicação serial Universal Serial Bus.
Ramhound 28/01
@ Ramhound Sim, como a maioria dos projetos modernos de barramento para tudo, exceto interfaces de memória, o USB usa pares diferenciais seriais para transmissão de dados. O USB <= 2.0 tinha um único par diferencial, enquanto o USB 3 possui dois pares diferenciais adicionais (um para transmissão SuperSpeed ​​e outro para recebimento SuperSpeed, permitindo comunicação full-duplex a 5 Gbps em cada direção.)
reirab
Eu apenas pensei em apontar o barramento serial para o núcleo do padrão, o autor não parecia ciente desse fato, daí a questão.
Ramhound 28/01
5

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:

  • Para que a comunicação ocorra, é necessário acordar protocolos.
  • Os sistemas de comunicação usam formatos bem definidos (protocolo) 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 é 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.

O MEU
fonte
1
1. O processo de comunicação envolve (no mínimo) três elementos: (1) codificação / envio E (2) recebimento / decodificação (3) _informações_ (em oposição ao ruído aleatório). Se algum desses 3 elementos estiver faltando, o processo falhará. Elementos adicionais também podem estar presentes, como feedback, mídia (canal) e contexto, entre outros. FONTE: Um dos meus graus está em Estudos de Comunicação
OMY
1
2. SETI não ésobre comunicação, é sobre exploração e descoberta . Mesmo se detectarmos um sinal fabricado autêntico, não há garantia de que algum dia o entenderemos ou poderemos nos comunicar com o remetente. FONTE: [Missão SETI] [1] [1]: seti.org/about-us
OMY
1
3. A compatibilidade entre navegadores geralmente é causada por (a) fabricantes de navegadores que não seguem os protocolos, ou (b) protocolos mal escritos causando implementações defeituosas (por exemplo, considere os infameserros do modelo de caixa do IEe também consulte < quirksmode.org> ). Por isso, agora temos o HTML 5 e o CSS 3 , porque os protocolos precisavam ser aprimorados. FONTE: Possuiu e operou minha própria empresa de desenvolvimento web por vários anos
OMY
1
4. Primeiro, os sinais de rádio que "sincronizam" na frequência usam protocolos AM (modulação de amplitude). Os sinais de rádio FM (modulação de frequência) "sincronizam" com uma integral do tempo. Os protocolos para sistemas FM envolvemelementos fixos e dinâmicos para processar as informações. O elemento dinâmico são asconfigurações de frequência variável , que são restritas a uma faixa de frequências predefinida e limitada.
OMY 29/01
1
Os elementos fixos são as fórmulas matemáticas para modular e desmodular o sinal. Independentemente das frequências, essas fórmulas são constantes e podem ser implementadas para processar o sinal através de hardware analógico ou software digital. FONTE: Experiência pessoal como hobby de eletrônica e também [Wikipedia] [1] [1]: en.wikipedia.org/wiki/Frequency_modulation
OMY