USB - Estrutura Elétrica
Por Ricardo Zelenovsky e Alexandre Mendonça em 03 de junho de 1998
Introdução
Este artigo complementa o estudo sobre o USB, quando foram abordadas as estruturas de software associadas aos processos de instalação e operação de dispositivos via USB. Desta vez, serão detalhadas as estruturas elétricas envolvidas.
O Universal Serial Bus (USB) é uma nova filosofia de barramento serial para o fluxo de dados entre um computador e dispositivos periféricos. O USB foi projetado para preencher certas lacunas deixadas, até então, pelos outros barramentos seriais. Ele oferece:
- Melhor integração entre a computação e os sistemas de comunicações, focalizando-se na CTI (Computer Telephony Integration);
- Maior comodidade para o usuário, que não necessita de configurar o dispositivo, pois o próprio sistema se encarrega desta tarefa; o USB incorpora a filosofia plug-and-play;
- Expansão no número de portas; ele pode endereçar até 127 dispositivos.
O sistema USB é composto pelo Controlador Host USB, por dispositivos USB e por interconexões. A Figura 1 mostra a topologia de um sistema USB. O host é responsável por: detectar a inserção e a remoção de um dispositivo, por gerenciar o fluxo de dados e de controle, monitorando o estado das transferências, e por controlar a interface elétrica entre ele e os dispositivos.
Um dispositivo USB pode ser de dois tipos: função ou hub. A função é capaz de transmitir ou receber dados ou informações de controle pelo barramento. Ela serve para aumentar a capacidade do sistema. Exemplos de funções são: mouse, teclado, impressora e adaptador telefônico como um ISDN. Cada função contém informações descrevendo suas capacidades e os recursos dos quais necessita.
O hub é o elemento chave na topologia USB, pois é ele que permite a expansão do número de conexões do sistema. Cada hub converte um ponto de conexão em outros múltiplos pontos. A arquitetura USB permite o uso de múltiplos hubs.
O USB permite dois modos de comunicação: um de alta velocidade, operando a 12 Mb/s, e outro de baixa velocidade, a 1,5 Mb/s. O modo de baixa velocidade visa a atender a um pequeno número de dispositivos com largura de banda estreita, como mouses. Cada função é responsável por indicar em que modo irá operar.
Estrutura Elétrica do USB
O barramento físico é composto de um cabo com quatro fios: VBus, D+, D- e GND. O fio VBus é o meio de fornecimento de alimentação para os dispositivos que necessitarem dela. Em um sistema USB, existem hubs e funções que possuem alimentação própria e hubs e funções que são alimentados pelo barramento através de VBus. VBus é nominalmente +5 V. Para aplicações de alta velocidade, os fios D+ e D- são entrelaçados. Os dados são transmitidos através de D+ e D- por meio de diferenças de tensão entre eles. O USB usa uma codificação NRZI.
Os cabos são conectados aos dispositivos conforme ilustrado na Figura 2. A posição dos resitores de pull-up muda dependendo de tratar-se de alta ou baixa velocidade. Quando não existe função conectada ao hub, os resistores de pull-down fazem com que ambos D+ e D- fiquem abaixo de um valor de tensão de limiar para a detecção da presença do dispositivo. Se essa condição persistir por mais que 2,5 microssegundos, é caracterizada a desconexão do dispositivo. A conexão de um dispositivo é caracterizada pela situação oposta, ou seja, quando apenas uma das linhas é levada além da tensão de limiar e esta situação persiste por mais de 2,5 microssegundos.
clique para ampliar
Figura 2: Esquema Físico de Conexão do Barramento
Protocolo de Barramento
A transmissão de dados via USB é baseada no envio de pacotes. A transmissão começa quando o o Controlador Host envia um pacote (Token Packet) descrevendo o tipo e a direção da transmissão, o endereço do dispositivo USB e o referido número de endpoint. A transmissão de dados pode ser realizada tanto do Host para o dispositivo quanto em sentido inverso. O dispositivo USB decodifica o campo de endereço, reconhecendo que o pacote lhe é referente. A seguir, a fonte da transmissão envia um pacote de dados (Data Packet) ou indica que não há dados a transferir. O destino responde com um pacote de Handshake (Handshake Packet) indicando se a transferência obteve sucesso.
O USB utiliza três tipos de pacotes: Token, Data e Handshake Packets, mostrados nas figuras 3(a), (b) e (c), respectivamente. Esses pacotes possuem os seguintes campos:
clique para ampliar
Figura 3: (a) Token, (b) Data e (c) Handshake Packets
- PID (Packet Identifier): composto de oito bits. Os quatro mais significativos identificam e descrevem o pacote e os restantes são bits de verificação para prevenção de erros (check bits). Esses check bits são constituídos pelo complemento um dos quatros bits identificadores;
- ADDR (Address): endereço do dispositivo USB envolvido. Composto de 7 bits, limita o número de dispositivos endereçáveis em 127;
- ENDP (Endpoint): possui 4 bits que representam o número do endpoint envolvido. Permite maior flexibilidade no endereçamento de funções que necessitem de mais de um subcanal;
- CRC (Cyclic Redundancy Checks): bits destinados à detecção de erros na transmissão;
- DATA : bits de dados.
Um Token Packet pode identificar a transmissão como sendo de transferência para o Host (IN), de transferência para a função (OUT), de início de frame (SOF) ou de transferência de informações de controle para o endpoint (SETUP). O CRC de um Token Packet possui 5 bits e atua apenas sobre os campos ADDR e ENDP, uma vez que o PID possui seu próprio sistema de prevenção contra erros. Os dados transmitidos via Data Packet devem ter um número inteiro de bytes. O CRC de um Data Packet possui 16 bits e age apenas sobre o campo DATA. O Handshake Packet é constituído apenas de um PID. Esse pacote pode significar que o receptor recebeu os dados livres de erros (ACK), que o receptor não pode receber os dados, que o transmissor não pode transmitir (NAK) ou que o endpoint está em parado (STALL).
O USB aceita quatro tipos de transferências diferentes: Control, Bulk, Interrupt e Isochronous.
A transferência do tipo Control serve para configurar ou transmitir parâmetros de controle a um dispositivo. Inicialmente, em idle, ele recebe um Token de SETUP oriundo do Controlador Host. Em seguida, o Host envia um Data Packet para o endpoint de controle da função. A função envia, então, ao Host um Handshake Packet de reconhecimento (ACK) e entra em idle.
A transferência Bulk é utilizada para a transmissão de grande quantidade de dados, como em impressoras ou scanners. Ela garante uma transmissão livre de erros por meio da detecção de erros e de novas retransmissões, se necessário. Caso o Host deseje receber uma grande quantidade de dados, ele envia um Token de IN e a função devolve um Data Packet. Se houver algum problema, a função envia um STALL ou NAK e entra em idle. Ao final, o Host devolve um ACK. Se, em vez de receber, o Host desejar enviar dados, ele manda um Token de OUT em vez de IN.
A transmissão do tipo Interrupt é requisitada pelo Host e consiste numa transferência de pequena quantidade de dados. Os dados podem representar a notificação de algum evento, como os de um mouse ou caneta ótica.
A transferência tipo Isochronous permite o tráfego de dados que são criados, enviados e recebidos continuamente em tempo real. Nessa situação não há handshake, devido à própria continuidade com que os dados são transmitidos. Caso contrário, haveria atraso e a transmissão em tempo real seria comprometida.
Todas as especificações técnicas do padrão USB estão rigorosamente estabelecidas na Universal Serial Bus Specification Revision 1.0.
Para saber mais:
Originalmente em http://www.clubedohardware.com.br/artigos/USB-Estrutura-Eletrica/870
© 1996-2012, Clube do Hardware. Todos os direitos reservados.
É expressamente proibida a reprodução total ou parcial do conteúdo deste site e dos textos disponíveis, seja através de mídia eletrônica, impressa, ou qualquer outra forma de distribuição. Os infratores serão indiciados e punidos com base na lei nº 9.610 de 19/02/1998.
Não nos responsabilizamos por danos materiais e/ou morais de qualquer espécie promovidos pelo uso das informações contidas no Clube do Hardware.