Programação de Sistemas
USB – Universal Serial Bus
Programação de Sistemas USB: 1/32
Introdução (1)
• O USB foi definido por um consórcio de fabricantes de
computadores e periféricos (Agere, Apple, Intel,
Hewlett-Packard, Microsoft e NEC) por forma a permitir a ligação /
retirada de periféricos sem desligar o computador.
– USB 1.0 [Jan 1996] com velocidades entre 1.5-LS (“Low Speed”) e 12 Mbps-NS (“Normal Speed”).
(“Normal Speed”).
– USB 1.1 [Set 1998] resolve problemas USB 1.0 e define interface única. – USB 2.0 [Abr 2000] velocidades até 480 Mbps-HS (”High Speed”) para
multimedia. Aceita dispositivos USB 1.0. Disponibilizado no Kernel 2.4.0
– USB 3.0 [Nov 2008] full-duplex com velocidades até 4.8 Gbps-SS (”Super Speed”) para transferências massivas de dados.
• Não é um barramento (“bus”) clássico, existe apenas a
nível lógico. Fisicamente necessita o estabelecimento de
uma ligação ponto-a-ponto.
Introdução (2)
• Tem mecanismos de plug and play: o hospedeiro detecta
que um dispositivo foi ligado e instala o respectivo driver.
• O USB adopta protocolo mestre/escravo (“master/slave”)
– Nenhum dispositivo inicia transferência por si próprio.
– O hospedeiro encarregue da maior complexidade no protocolo de – O hospedeiro encarregue da maior complexidade no protocolo de
transferência.
• Permite ligar até 127 periféricos a uma única porta do
computador hospedeiro (“host”), numa topologia em
estrela por camadas (“tier”)-máximo 5.
• Para informação detalhada consultar
Universal Serial Bus System Architecture, Don Anderson,
Addison-Wesley.
Programação de Sistemas USB : 3/32
Introdução (3)
Comparação entre interfaces
Interface Formato Max. númerointerfaces Comp. máximo Vel. máxima (bits/sec.) Uso típico USB Série assíncrona 127 5m (32m com 5 hubs) 1.5M, 12M, 480M
Rato, teclado, disco, modem, audio
RS-232 Série 2 16-33m 20k (115k com Modem, rato,
RS-232 Série assíncrona 2 16-33m 20k (115k com HW especial) Modem, rato, instrumentação Centronics Paralelo 2 (8 com apoio
daisy-chain) 3–10m 8M Impressoras, scanners, discos IEEE-1394 (FireWire) Série 64 5m 400M (3.2G com IEEE-1394b Vídeo, memória massa
•
USB admite transferências de dados síncronas ou assíncronas.
•
Diversos SOs suportam periféricos USB 2.0: Linux, Mac OS,
Windows.
Arquitectura (1)
• O USB envolve 3 tipos de entidades:
1. Hospedeiro (“host”)
• Único, montado no barramento PCI do computador, inclui também o distribuidor raíz (“root hub”).
• Responsável pela complexidade do protocolo. • Controla acesso dos dispositivos ao sistema USB.
Programação de Sistemas USB : 5/32
Hub (monitor) Hub (teclado) PCI bus Root Hub altifalantes rato
Arquitectura (2)
2. Distribuidor (“hub”)
• Um ou mais, permitem vários dispositivos serem ligados ao hospedeiro. • Detecta ligação e retirada de dispositivos.
• Responsável pela detecção e correcção de erros. • Gere energia entregue a dispositivos passivos.
• Um distribuidor possui um, ou mais, portos a ligar a outros dispositivos • Um distribuidor possui um, ou mais, portos a ligar a outros dispositivos
ou distribuidores.
High Speed only High Speed only
Full/Low Speed
Full/Low Speed
Routing Logic
Routing Logic
Routing Logic
Routing Logic
Transaction Transaction Translator Translator Transaction Transaction Translator
Translator HS SignalHS SignalHS SignalHS SignalRepeaterRepeaterRepeaterRepeater Hub Hub Controller Controller Hub Hub Controller Controller
Arquitectura (3)
3. Dispositivo
• Um ou mais, igualmente designados por nós, é tudo que não seja hospedeiro (incluindo distribuidor).
• Os dispositivos USB não são mapeados no espaço de memória nem no espaço E/S e não usam canais IRQ nem DMA.
• Elevado número de periféricos com interface USB • Elevado número de periféricos com interface USB
– Ratos
– Memorystick, DOK-Disk On Key, ... – Webcam, câmaras fotográficas digitais...
Programação de Sistemas USB : 7/32
Arquitectura (4)
• O comportamento dos dispositivos é representado por um
autómato de 6 estados.
Estado Significado
Attached Distribuidor assinalou inserção de dispositivo Powered Distribuidor configurado e operacional
Default USB recebeu descritores do dispositivo Default USB recebeu descritores do dispositivo Addressed USB atribuiu endereço ao dispositivo Configured USB verificou que dispositivo é endereçável
Suspended Dispositivo em modo de poupança de energia Attached
Powered
Suspended
Arquitectura (5)
•
No dispositivo USB, o software é dividido por 3 camadas
(“layers”):
L1: USB Bus Interface
• Transfere dados a baixo nível através de cabos USB.
Programação de Sistemas USB : 9/32
através de cabos USB.
• A comunicação física entre o hospedeiro e o dispositivo é definida por: i. Sinalização eléctrica ii. Mecanismos de transferência de pacotes.
Arquitectura (6)
L2: USB Logical Device
• Implementa mecanismo de comunicação.
• No hospedeiro, a camada correspondente é constituída por:
• USBD (“USB Driver”) – implementa serviços para a camada superior, aloca largura de banda no bus, gere processo de configuração.
configuração.
• USB Host Controller Driver – escala e controla as transacções.
L3: Function
Arquitectura (7)
• A cada dispositivo é atribuído um endereço único
Rede física:
Hospedeiro Hub@:2 Dok@:3 Rato@:4 IP phone@:5 Root Hub@:1 Teclado@:6Programação de Sistemas USB : 11/32
IP phone@:5 Teclado@:6
Rede lógica:
Hospedeiro HID driver MSD driver HUB driver Audio driver Root Hub@:1 Hub@:2 Dok@:3 Rato@:4 IP phone@:5 Teclado@:6Modelo de comunicação (1)
A. O modelo de comunicação do USB envolve 3 entidades:
endpoints, interfaces e configurações.
Dispositivo Config Interface USB Endpoint Endpoint Endpoint Interface Endpoint Endpoint Interface USB driver Gestores de dispositivos ligados a interfaces
Modelo de comunicação (2)
1. Endpoints transportam dados numa direcção.
– Dispositivos lentos (rápidos) possuem 2 (até 16) endpoints. – Possuem direcção de transferência de dados:
• OUT se dados transportados do hospedeiro para o dispositivo. • IN se dados transportados do dispositivo para o hospedeiro.
– Existem 4 tipos de endpoints: – Existem 4 tipos de endpoints:
• CONTROL, para configurar o dispositivo ou recolha do estado.
Todos os dispositivos possuem o endpoint de controlo 0, usado para configurar na inserção do dispositivo.
• INTERRUPT, para transferência de pequenas quantidades de dados (ex: ratos). • BULK, para transferência fiável de elevadas quantidades de dados (ex:
impressoras e memórias de massa).
• ISOCHRONOUS, para transferência não fiável de elevadas quantidades de dados (ex: dispositivos áudio e vídeo).
– Endpoints correspondem a tampões separados de comunicação.
Programação de Sistemas USB : 13/32
Modelo de comunicação (3)
– A cada endpoint, o hospedeiro atribui um endereço único (endpoint de endereço 0 existe sempre, usado na instalação do dispositivo).
2. Interfaces agrupam os endpoints de uma conexão lógica.
– Alguns dispositivos podem ter mais de uma interface Exemplos:
• Altifalantes, com uma interface para os botões de controlo – volume, balanço...-e outra intbalanço...-erfacbalanço...-e para a strbalanço...-eam dbalanço...-e áudio).
• CDROM, com uma interface para armazém de dados, uma interface para stream de áudio, uma interface para stream de vídeo).
3. Configuration agrupa as interfaces.
– Alguns dispositivos podem ter mais de uma configuração, por exemplo uma com consumos energéticos elevado (entre 100mA e 500mA), outra com consumo reduzido (até 100mA, que limita as funcionalidades).
Modelo de comunicação (4)
B. Pipes
Um Pipe é uma associação entre um endpoint e o software
do controlador do hospedeiro.
Um pipe tem de ser estabelecido antes da transferência de
dados.
dados.
Programação de Sistemas USB : 15/32
L1:Sinalização eléctrica (1)
A. Cabos
– VBUS: de valor nominal 5V para alimentação de dispositivos passivos.
– GND.
– D+, D-: 2 ligações (entrelaçadas para minimizar o ruído) para trasmissão diferencial de sinais. ruído) para trasmissão diferencial de sinais. Os sinais referenciam o GND.
L1:Sinalização eléctrica (2)
A. Fichas: dois tipos para evitar ciclos
– A, orientado do dispositivo para hospedeiro. – B, orientados do hospedeiro para dispositivo.
Nota1: definidas fichas mais pequenas A e mini-B para PDAs e telemóveis.
Programação de Sistemas USB : 17/32
Nota2: fichas e cabos USB 3.0 são incompatíveis.
L1:Sinalização eléctrica (3)
C. Detecção de dispostivos
– Se nenhum dispositivo estiver ligado ao porto USB, D+=D-=low.
– Quando um dispositivo é inserido
• D+passa a high, se o dispositivo for rápido. • D-passa a high, se o dispositivo for lento.
D. Transmissão de dados
– Os fios de dados não incluem relógio. O sincronismo é efectuado pela codificação.
– Transmissão é sempre half-duplex (ou do hospedeiro para o dispositivo, ou do dispositivo para o hospedeiro).
Não existem colisões, porque o controlo é exercido apenas pelo hospedeiro.
L1:Sinalização eléctrica (4)
E. Codificação
– Dígitos codificados em NZRI-Non Return to Zero Inverted.
• 0 codificado por alteração do par diferencial. • 1 codificado por manutenção do par diferencial.
Programação de Sistemas USB : 19/32
1 1 1 1 1 1 0 0 0 0 0
0 1 0 1 0 1 0 1 0 1 0
1 0 1 0 0 1 0 1 1 1 1
L1:Sinalização eléctrica (5)
– Problema: numa sequência longa de 1’s, a linha de transmissão mantém-se estática e o receptor pode perder a conta.
– Solução: imediatamente antes da codificação NZRI, injectar um “0” após uma sequência de seis “1”s.
Nota: técnica designada por “bit-stuffing”.
Exemplo:
Exemplo:
data:010
111111
101
L1:Tramas (1)
• O controlador USB envia uma trama (“frame”) em cada
ms.
• Transferências de dados são obrigatoriamente feitas numa
trama, que comporta teoricamente1ms*480MHz = 60KB.
• As tramas são iniciadas pelo pacote SOF e terminam com
• As tramas são iniciadas pelo pacote SOF e terminam com
um intervalo mínimo com o bus idle designado por EOF
(“End Of Frame”).
Os pacotes SOF são enviados a todos os dispositivos, pelo
que são os únicos que não indicam o endereço do endpoint
destino.
Programação de Sistemas USB : 21/32
L1:Tramas (2)
• As tramas são encaminhadas (“routed”), não difundidas
(“broadcast”)!
Os hospedeiros (“hub”) limitam-se a implementar
procedimentos de “store and forward”.
S O F D is p 1, e ndpoi nt 2 D is p 2, e ndpoi nt 2 D is p 3, e ndpoi nt 5 D is p 5, e ndpoi nt 4 D is p 3, e ndpoi nt 3 S O F D is p 1, e ndpoi nt 2 D is p 2, e ndpoi nt 0 D is p 3, e ndpoi nt 5 D is p 5, e ndpoi nt 4 S O F D is p 1, e ndpoi nt 2 D is p 2, e ndpoi nt 0 D is p 3, e ndpoi nt 5 1 ms 1 ms 1 ms
Nota: se um dispositivo não identificar um pacote SOF em 3 ms, considera que o PC foi desligado e entra em modo de suspensão.
L1:Tramas (3)
• A alocação da trama pelos endpoints é decidida pelo
controlador.
– Um intervalo fixo (até 90%) é garantido a transferências INTERRUPT e ISOCHRONOUS.
O controlador pode recusar entrada de dispositivos que requeiram transferências INTERRUPT e ISOCHRONOUS para além dos transferências INTERRUPT e ISOCHRONOUS para além dos 90%.
– Um intervalo mínimo é garantido às transferências CONTROL. – O resto disponível é entregue às transferências BULK.
Programação de Sistemas USB : 23/32
Control transfers Iso + Interrupt transfer Bulk transfer
Fixed width Variable width
Variable width
L1:Pacotes (1)
• Todas as transferências de informação, em pacotes de
controlo ou de dados, são sempre executadas por iniciativa
do hospedeiro.
• Cada transacção ocorre em 3 fases, cada uma formada por
pacotes de grupo
pacotes de grupo
1. Token 2. Data 3. Handshake
•
Os dispositivos escutam os dados OUT, ou transmitem
dados/handshake IN nas alturas indicadas pelo
controlador.
Token Data Handshake
L1:Pacotes (2)
• Dentro de cada pacote os Bytes são enviados por ordem
inversa de bits (do lsb ao msb).
• Cada pacote é dividido até 7 campos:
a. [Obrigatório] SYNC Byte (0x01, para acerto de relógio) b. [Obrigatório] PID Byte, dividido em duas partes:
b. [Obrigatório] PID Byte, dividido em duas partes:
• Tipo de pacote (4 bits)
• Verificação (4 bits), igual ao complemento para 1 do tipo de pacote.
c. Endereço dispositivo: 7 bits,4 bits para uso interno do dispositivo. d. Sequência de 0, 1 ou mais Bytes de carga (“load”).
e. CRC sobre a endereço (5 bits) e sobre a carga (11 bits), para detecção de erros de transmissão.
f. [Obrigatório] EOP Byte, com D+e D-a low durante dois bits.
Programação de Sistemas USB : 25/32
L1:Pacotes (3)
• Os valores do PID são
dados na seguinte
tabela:
Grupo PID Identificador pacote
Token 0001 OUT token 1001 IN token 0101 SOF token 1101 SETUP token Data 0011 DATA0 1011 DATA1 1011 DATA1 0111 DATA2 1111 MDATA
Handshake 0010 ACK Handshake 1010 NAK Handshake 1110 STALL Handshake 0110 No Response Yet Special 1100 PREamble 1100 ERR 1000 Split 0100 Ping
L2:Enumeração (1)
• Inicialmente, todos os portos USB encontram-se
incapacitados (“disabled”).
• Ao ligar um dispositivo a um porto USB, ele mantem-se
isolado. Assim que o distribuidor verifica a inserção de
um dispositivo, inicia-se o processo de enumeração
um dispositivo, inicia-se o processo de enumeração
(“enumeration”).
1. O distribuidor espera pelo menos 100 ms, para que o dispositivo seja completamente instalado e a energia estabilize.
O dispositivo passa para o estado POWERED.
2. O hospedeiro envia para o distribuidor o comando “Set Port RESET”: o distribuidor habilita (“enable”) o porto e o dispositivo é forçado a responder apenas pelo endpoint 0. O dispositivo passa para o estado DEFAULT.
Programação de Sistemas USB : 27/32
L2:Enumeração (2)
3. O hospedeiro envia para o distribuidor o comando “Set Address”, que fixa o endereço único, entre 1 e 127, do dispositivo.
O dispositivo passa para o estado ADDRESSED, mas continua a responder pelo endpoint 0.
4. O hospedeiro interroga o dispositivo sobre o código do descritor 4. O hospedeiro interroga o dispositivo sobre o código do descritor
de dispositivo pelo comando “Get Descriptor”.
Com a resposta, o hospedeiro identifica diversas capacidades do dispositivo: tamanho de pacotes, número de configurações, ID do vendedor, ID do produto,...
Nota: o tamanho de pacotes é essencial para reservar espaço nas tramas.
L2:Enumeração (3)
Classes foram definidas para abranger dispositivos de
fabricantes distintos.
Classe Uso Descrição Exemplos
0x00 Dispositivo Não especificado Descritores de interface usados para determinar o controlador do disp. 0x01 Interface Audio Altifalante, microfone, carta som
Programação de Sistemas USB : 29/32
0x03 Interface HID-Human Interface Dev. Teclado, rato, joystick
0x08 Interface Armazém de massa Memorystick, Câmara fotográfica digital 0x09 Dispositivo USB hub
0x0E Interface Vídeo Webcam
6. O descritor de dispositivo selecciona uma configuração e envia para o dispositivo o comando “Set Configuration”
O dispositivo passa para o estado CONFIGURED.
L2:Transferência (1)
1. O software do hospedeiro
inicializa a transferência de/para o dispositivo.
O software do hospedeiro divide a transferência entre 1, ou mais,
transacções. A divisão depende
Transferência
Transacção n-1Transacção n-1
Transacção n-2 Transacção n-3
transacções. A divisão depende
das características do dispositivo (tipo, dimensão do pacote,…).
2. O software do hospedeiro escala e executa transacções durante 1 ms. Cada trama é formada por
diversas transacções de transferências distintas.
Transferência
Transacção n-1 Transacção n-1 Transacção n-2 Transacção n-3 Transacção n-1L2:Transferência (2)
3. Cada transacção é formada por uma sequência de pacotes.
i. Token : determina o tipo de pacote.
Transferência
Transacção n-1Transacção n-1
Transacção n-2 Transacção n-3
Transacção n-1 Sync. Packet IDDevice
Address ENDP
Nr CRC EOP
8 bits 8 bits 7 bits 4 bits 5 bits 2 bits
ii. Data : dados
iii. Handshake : informação sobre o resultado final da transacção.
Programação de Sistemas USB : 31/32
Token Data Handshake
Sync. Packet ID Data Field CRCCRC EOP
8 bits 8 bits 0-1023 Bytes 16 bits16 bits 2 bits
Sync. Packet ID EOP
8 bits 8 bits 2 bits
L2:Transferência (3)
Exemplo: o hospedeiro interroga o rato USB em cada 10
tramas (100 vezes por seg).
O endpoint do rato é do tipo interrupção e dois casos
podem ocorrer:
• O rato tem dados na sua memória tampão (“buffer”)
• O rato tem dados na sua memória tampão (“buffer”)
• O rato não tem dados na sua memória tampão (“buffer”)
IN DATA1 ACK