
Componentes:
Adriano César Machado Pereira
Bruno Augusto Vivas e Pôssas
Eduardo Kraemer Góes
Renato Mangini
Thiago Augusto Leite Quadros
Definindo de forma bastante simplificada, USB é um protocolo de comunicação que suporta transferência de dados entre computadores e periféricos.
Esse protocolo está sendo desenvolvido
por grandes líderes industriais com o intuito de torná-lo
um padrão definitivo para comunicação de periféricos.
A partir dessa definição,
a primeira pergunta que nos vem a cabeça é:
A resposta provém do seguinte fato: com o aumento da variedade de periféricos disponíveis para microcomputadores tem aumentado também a complexidade envolvida na instalação e troca de periféricos (novas placas a serem acopladas a placa-mãe, emaranhado de cabos atrás das CPUs, assim como a grande quantidade de drivers que precisam ser instalados com os novos dispositivos). Um outro problema que se tenta solucionar é a inexistência de um formato padrão de conexão de periféricos.
Outra pergunta que pode surgir é:
A resposta para essa outra pergunta baseia-se no fato de que com o aumento das tecnologias envolvidas na área da informática torna-se necessário que os projetistas de arquiteturas adquiram novos conhecimentos a respeito de barramentos internos e externos.
Antes de caracterizarmos melhor esse
protocolo seria interessante definir alguns conceitos fundamentais relativos
a USB:

- Bus Master/Slave
O USB se comportam como um bus Master/Slave onde
o Master é o USB Host que toma conhecimento da insercao e do desligamento
dos devices, inicia o processo de enumeracao e comanda todas as transações
subsequentes no bus. É de sua responsabilidade também coletar
os status e as estatísticas de cada periférico. Os periféricos
são slaves do barramento podendo ser de dois tipos:
1) Funcionais - como teclado, mouse, joysticks,...
2) Hubs - que funcionam para conectar outros dispositivos
- 127 dispositivos
As especificações do USB preveem a conexão de até 127 dispositivos ao mesmo tempo.
- Conexão via Hubs
Uma vez que a itenção é eliminar as placas e cabos, o USB trabalha com hubs que fazem as transferências de dados entre os periféricos. Os hubs podem ser conectados de diversas formas permitindo que os dispositivos se organizem em cascata ou estrela.
- Hot Swap
O USB foi desenvolvido para que a instalação e desinstalação de dispositivos possam ser feitas com o computador em funcionamento, não sendo necessário nova configuração ou boot do sistema.
- Taxas de Transferência
O USB pode operar em dois modos que variam a velocidade
com que os dados são transmitidos:
1) full-speed que permite uma velocidade
de 12Mbps
2) low-speed que permite uma velocidade
de 1.5 Mbps
- Bidirecional
Permite o tráfego de dados em duas direções:
1) Downstream (Host -> Device ou Host ->
Hub; Hub -> Device)
2) Upstream (Device -> Host)
- Cabo USB
O cabo USB consiste de 4 fios. Dois deles, D+ e
D- são usados para transmissão de dados através de
variações de sinais. O D+ é usado para transferência
de dados a 12 Mbps e o D- para transferência de dados a 1,5 Mbps.
Os outros dois são para transmissão de energia (Vbus) e aterramento
(Gnd). Normalmente, cabos desprotegidos (unshielded) são
usados para transmissão a baixas velocidades, enquantos que cabos
protegidos (shielded) são usados para altas velocidades de
transmissão.
Um fato interessante é que as duas extremidade
do cabo são diferentes, e consequentemente, não comutáveis.
Isto permite a transmissão bidirecional e evita confusões
nas conexões dos cabos.
USB HOST
Estrutura do software :
- Host Controler driver : Camada que "linka" as diferentes
implementações do host ao resto da estrutura USB.
- USB System software : Camada que atua entre o Controlador
e o software cliente (parte do sistema operacional).
- Client software: Permite ao cliente comunicar com um
device USB através de abstrações da camada USB System.
Só pode existir um USB Host, e este é o master do barramento. Ele toma conhecimento da inserção e do desligamento dos devices, inicia o processo de enumeração e comanda todas as transações subsequentes no bus. É de sua responsabilidade também coletar os status e as estatísticas de cada device.
O Protocolo USB
O host USB envia constantemente, a cada 1 milisegundo, um pacote de início de frame (SOF - start of frame). Todos os devices estao continuamente "ouvindo" o barramento. Quando o host envia um token cujo endereço "casa" com o do device, este decodifica o pacote, verifica o tipo do mesmo (veja abaixo) e, de acordo com o tipo, toma as devidas atitudes.
O escalonamento de envio pela banda compartilhada é feito trocando o device-alvo nos SOF.
Cada pacote tem um PID que especifica o tipo. A transação inicia quando o host controller envia um pacote token com o endereço do periférico, endpoint number (porto), a direção de transferência de dados e o tipo de canal de transferência. O endereço do periférico é selecionado de acordo com o endereço passado pelo token. Se o host estiver pedindo dados, então o pacote de dados é enviado pelo periférico. Geralmente, depois que o dado é enviado, o destinatário(host ou periférico) envia um pacote handshake, que pode ser ACK, NAK ou STALL (para maiores informações referir a www.usb.org).
Acoplamento e desligamento de devices
O protocolo USB preve hot-swap dos devices,
ou seja, eles podem ser plugados e desplugados sem necessidade
de desligá-los nem de desligar ou reinicializar o host. O cabo
do device possui quatro fios. Desses, dois (D+ e D-)
são usados para transmissão de informações
e os outros dois são de alimentação e terra. Os periféricos
que usam alta velocidade (12MB) devem ter um resistor no cabo D+, e os
de baixa velocidade (1,5 MB) devem ter um resistor no D-.
O host usa a diferença de voltagem causada pela inclusão
destes resistores no barramento para saber que um novo device
foi acoplado e qual a sua velocidade.
Categorias de Transferência de Dados
As transferências entre host e device podem ser de quatro tipos :
- Control : é usada pelo host para solicitar informações e configurar devices.
- Interrupt : é usada pelo device para causar
uma interrupção no host. Como o host é o bus master
e nenhum slave pode interrompê-lo, o que acontece na realidade é
que, de tempos em tempos, o host envia um pacote do tipo Interrupt para
cada
device. Se o device tiver alguma interrupção na fila,
ele envia os dados dela.
- Isochronous : É uma transferencia sem "handshakes"
ou reenvio de pacotes. Se um pacote chegar com erro no destino (que pode
ser tanto o host quanto o device), ele é simplesmente descartado.
Usado para transferências em que a integridade
é menos importante do que a velocidade dos dados. Exemplo: transferência
de som.
- Bulk : Consiste de protocolos de "handshaking",
para verificação de erros e eventual reenvio do pacote. É
usado em devices cuja confiabilidade dos dados é crítica.
Ao ligar um grande número de
periféricos ocorre falta de energia para alimentar todos eles, por
isso há necessidade de hubs auto-alimentados, aumentando o custo
com periféricos.

A figura acima mostra como o USB pode simplificar a vida do usuário.
O USB acaba por apresentar-se uma boa solução para o problema de conectividade de periféricos em PC’s, apresentando um bom desempenho, e apesar das desvantagens atuais que o mercado apresenta.