oficina usb
TRANSCRIPT
Comunicação USB, abordagem geral com Libusb Bolsisa: Lászlon Rodrigues da Costa.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
1
Sumário
• Comunicação Serial x Paralela
• Motivação para o USB
• Objetivos do USB 2.0
• O que é USB e como funciona
• Alimentação
• Velocidade
• Visão Geral: Arquitetura
• Tipos de Comunicação USB
• Protocolo USB
• Transferência de Controle – Panorama
• Descritores USB
• Libusb-1.0
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
2
Comunicação Serial x Paralela
• Comunicação Paralela é o processo de enviar dados em que todos os bits de um símbolo são enviados juntos.
• Comunicação Serial é o processo de enviar dados um bit por vez, sequencialmente, num canal de comunicação ou barramento.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
3
Motivação para o USB
• Conexão de PC com telefones: Está entendida que a relação entre computação e telecomunicações é a base para a próxima geração de aplicações produtivas.
• Uso facilitado: A falta de flexibilidade de se reconfigurar o computador foi a maior complicação no desenvolvimento.
• Extensão de Portas.
• Porém a mais recente motivação do desenvolvimento do USB é o rápido aumento da capacidade de processar dados em alta velocidade.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
4
Motivação para o USB
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
5
Objetivos do USB 2.0
• Facilidade de uso para periféricos de PC.
• Solução de baixo custo para transferência até 480 Mb/s.
• Total suporte em tempo real para voz, áudio e vídeo.
• Protocolo flexível por mixar comunicação isócrona de dados e de mensagens assíncronas.
• Reconfiguração simples de vários dispositivos.
• Total compatibilidade com dispositivos usados em versões anteriores.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
6
O que é USB e como funciona.
• Com o aumento de variedade de periféricos se viu a necessidade de um protocolo de comunicação padrão.
• USB é uma sigla para Universal Serial Bus.
• Foi desenvolvido por um consórcio de empresas. Chamado de USB implementers Forum. • Destaque: Microsoft, Apple, Hewlett-Packard, NEC e Intel.
• Versões:
• USB 0.7: novembro de 1994;
• USB 0.8: dezembro de 1994;
• USB 0.9: abril de 1995;
• USB 0.99: agosto de 1995;
• USB 1.0: janeiro de 1996;
• USB 1.1: setembro de 1998;
• USB 2.0: abril de 2000 com a velocidade de 480 Mbps;
• USB 3.0: setembro de 2009 com a velocidade de 4,8 Gbps.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
7
O que é USB e como funciona.
• Conectores:
• Serie A:
• Serie B:
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
8
Pinos Nome Descrição 1 VBUS +5 VDC 2 D- Data - 3 D+ Data + 4 GND Ground
O que é USB e como funciona -Alimentação • Os dispositivos USB especificam o consumo de energia,
expressa em unidades de 2mA, no descritor de configuração.
• Um dispositivo não pode aumentar seu consumo para acima do que foi especificado durante a enumeração.
• Há três classes de funções USB:
• Baixa potência alimentado pelo barramento.
• Alta potência alimentado pelo barramento.
• Auto alimentados.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
9
O que é USB e como funciona -Velocidade • Existem 3 modos de velocidade no protocolo USB:
• High-Speed: Usado em vídeo e armazenamento. Taxa de transferência de bit é de 480Mb/s.
• Full-Speed: Pode ser usado em dispositivos de áudio, e vídeos comprimidos. Tem a característica de ter a largura de banda garantida e tempo de latência garantido. Taxa de transferência de bit é de 12Mb/s.
• Low-Speed: Para dispositivos interativos, como mouse, teclado, acessório de games. Taxa de 1,5 Mb/s.
• High-Speed e Full-Speed são geralmente usados em transmissão isócrona.
• Low-Speed é mais usada em dispositivos interativos.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
10
O que é USB e como funciona -Identificação de Velocidade • A identificação da velocidade de operação é feita no
acoplamento do dispositivo.
• Nível lógico alto em D+ = FS-USB (full speed).
• Nível lógico alto em D- = LS-USB (low speed).
• O nível lógico é garantido através de um resistor pull up de 1.5kΩ.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
11
O que é USB e como funciona -Identificação de Velocidade
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
12
O que é USB e como funciona -Identificação de Velocidade
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
13
Visão Geral: Arquitetura
• O USB é um barramento de cabos que suporta a troca de dados de uma vasta gama de componentes simultaneamente.
• Tem que permitir que dispositivos sejam conectados, configurados, usados e desconectados sem interferir na atividade de outros.
• Os dispositivos USB são um desses que se seguem:
• Hubs: proporcionam pontos adicionais para outros dispositivos;
• Funções: eles proporcionam capacidades ao sistema, ou seja, um dispositivo final.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
14
Visão Geral: Arquitetura
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
15
Visão Geral: Arquitetura
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
16
A topologia do barramento é uma estrutura estrela em camadas.
Visão Geral: Arquitetura
• O número máximo de camadas é sete.
• O número máximo de hubs não root em um caminho é de apenas cinco.
• Todos os dispositivos no barramento apresentar uma interface USB padrão que segue os requisitos:
• Compreensão do protocolo USB;
• Respostas as operações padrões USB, como configuração e reset;
• Capacidade de descrição de informação padrão.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
17
Tipos de Comunicação USB
• Control Transfers • Controle de dados é usado pelo software do sistema USB para
configurar dispositivos assim que são anexados.
• Outros drives do dispositivo pode optar por esta comunicação par um uso especifico.
• Esta comunicação entrega os dados sem perdas.
• Bulk Transfers • É usado para troca de dados em massa. Geralmente é usado em
impressoras e em scanners.
• Os dados são enviados sequencialmente. A confiabilidade é garantida em nível de hardware, usando uma detecção de erros e um número máximo de tentativas.
• A largura de banda pode variar de acordo com o uso do barramento.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
18
Tipos de Comunicação USB
• Interrupt Transfers
• Mais usado em transferências com a finalidade de comunicar uma ação com poucos dados
• Apesar de não ter uma taxa de sincronismo explicito pode haver a exigência de um tempo mínimo de resposta.
• Isochronous Transfers
• Esta é usada em casos que o envio dos dados seja enviado assim que sejam criados, ou seja, uma resposta em tempo real.
• Um típico exemplo de transferência desse tipo é a voz.
• Não há como fazer um tratamento de erros na transmissão, porem este a taxa de erros em bits deve ser tolerável para este tipo de transmissão.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
19
Tipos de Comunicação USB
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
20
Protocolo USB
• Protocolo é uma convenção padrão que controla e possibilita uma conexão, comunicação e troca de dados entre sistemas.
• Protocolo mais antigo é a língua falada.
• Diferentemente do RS-232, em que o formato de dados não está bem definido, o USB é constituída por várias camadas de protocolos.
• A realidade é que se trabalha com as camadas mais superiores deixando o USB controller cuidar das partes inferiores.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
21
Protocolo USB - Tipos de Pacotes USB • O protocolo suporta 3 principais tipos de pacotes diferentes:
• Token: indica que tipo de operação será realizada, e a direção
• Dados: Contém outros dados alheios ao protocolo se for necessário.
• Handshake: Para reconhecer dados ou relatório de erros.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
22
Protocolo USB - Campos dos pacotes USB
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
23
Protocolo USB - Campos dos pacotes USB • ADDR
• O endereço que especifica para qual pacote o dispositivo é especificado. Campo contém 7 bits, fazendo assim possível a suporte de 127 dispositivos.
• O endereço 0 é reservado para novos dispositivos.
• ENDP • Campo que contém 4 bits, podendo assim um dispositivo ter até
16 possíveis endpoints. Dispositivos low-speed podem conter apenas 4.
• CRC • Cyclic Redundancy Checks. Campo reservado para detecção de
erros. Pacotes token contém 5 bits e os pacotes de dados 16.
• EOP • End of packet. Sinaliza o final do pacote e contém 2 bits.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
24
Protocolo USB - Campos dos pacotes USB
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
25
Protocolo USB - Campos dos pacotes USB • Sync
• Todo pacote deve começar com um pacote de sincronização. Este campo tem 8 bits para troca com velocidade low e full e 32 bits em high. Usado para sincronização do relógio.
• PID
• Identifica que tipo de pacote se trata.
• A informação contém 4 bits, porém para evitar erros há uma repetição dos bits.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
26
Protocolo USB - Tipos de Pacotes USB • Pacote Token
• Existem basicamente três tipos:
• In: Informa ao dispositivo USB que o Host deseja receber informação.
• Out: Informa que o Host deseja enviar informação.
• Setup: Usado para inicio de transferência de controle.
• Os pacotes devem seguir o seguinte padrão:
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
27
Protocolo USB - Tipos de Pacotes USB • Pacote de dados
• São dois tipos de pacotes de dados (DATA 0, DATA1), cada um tem a capacidade de transferir 1024 bytes.
• Em high-speed existem mais 2 novos PID: DATA2 e MDATA.
• O pacote deve seguir a seguinte estrutura:
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
28
Protocolo USB - Tipos de Pacotes USB • Pacote Handshake
• Estes pacotes contém apenas a identificação no campo PID. São divididos em:
• ACK - Reconhecimento de que o pacote foi recebido com sucesso.
• NAK- Relatório que o dispositivo não pode enviar ou receber dados temporariamente.
• STALL-O dispositivo está bloqueado e necessita de uma intervenção do host.
• Tem o seguinte formato:
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
29
Transferência de Controle - Panorama • Primeiro é feito a enumeração e configuração do dispositivo.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
30
Transferência de Controle - Panorama
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
31
Transferência de Controle - Panorama
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
32
Transferência de Controle - Panorama
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
33
Descritores USB
• É necessário que o host saiba conheça detalhes dos dispositivos no barramento.
• Para isso existem os descritores que seguem uma hierarquia e traz informações sobre o dispositivo: • Versão USB suportada;
• Quais maneiras pode ser configurado;
• O número de parâmetros.
• Os mais comuns são: • Descritores de dispositivos;
• Descritores de configuração;
• Descritores de Interface;
• Descritores de Endpoint;
• Descritores de String.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
34
Descritores USB
• Descritores de Dispositivo: • Carregam informações gerais sobre o dispositivo;
• ID Vendor e ID Product.
• Descritores de Configuração: • Especifica valores como quantidade de energia na configuração
atual, se o dispositivo é auto alimentado ou mesmo o número de interfaces.
• Descritor de interface: • É o agrupamento de endpoints para uma determinada
configuração funcional;
• Permite ter mais de uma interface ativa por vez.
• Descritor de endpoint: • Descreve o tipo de intervalo, direção de transferência e tamanho
máximo de cada pacote.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
35
Composição dos Descritores
• Todos os descritores tem um formato comum;
• O primeiro byte informa o tamanho do descritor, o segundo o tipo:
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
36
Libusb-1.0
• Libusb é uma biblioteca de código aberto para comunicação USB.
• Para desenvolvimento aplicativos para comunicação direta com o periférico.
• Necessita apenas conhecimento do ponto de vista de Software para operar a USB:
• Descritores;
• Configurações;
• interfaces;
• Transferências – bulk, interrupt, isochronous e control.
• Suporta comunicação síncrona e assíncrona.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
37
Libusb-1.0 – Síncrona e Assíncrona • Em lógica uma transferência ocorre em 2 etapas:
• Ler dados:
• 1- Um pedido de dado é enviado para o dispositivo;
• 2- Os dados de entrada são recebidos.
• Escrever dados:
• 1- O host envia dados;
• 2- O dispositivo envia confirmação de recebimento.
• Considerando que o dispositivo seja um botão que quando apertado retorna uma informação
• As etapas acima em programação síncrona são feitas em uma única chamada.
• Assíncrona cada passo é chamado no código.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
38
Libusb-1.0 - Contexto
• Contexto possibilita a utilização de várias comunicações simultâneas a partir de 2 threads independentes.
• Para iniciar um contexto é usado a função libusb_init(libusb_context** context).
• Para aplicação simples, pode-se usar NULL como parâmetro.
• Contextos são destruídos com libusb_exit().
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
39
Libusb-1.0 – Estruturas
• libusb_context
• Representa um contexto no código.
• libusb_device
• Representa e faz referencia a um dispositivo conectado ao barramento.
• libusb_device_handle
• Representa um identificador para um dispositivo;
• Usado como parâmetro para as funções de comunicação.
• libusb_device_descriptor
• Contém os descritores de dispositivos.
• Pode ser usado para localizar um dispositivo no barramento.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
40
Libusb-1.0 – Funções (Síncrona) • (*)libusb_get_device_list (libusb_context* ctx,
libusb_device** list) • Preenche list com todos os dispositivos no barramento.
• (*)libusb_free_device_list(libusb_device** list, int unref_devices ) • Limpa list. Cuidado, depois que se perde a referencia, não se
pode atribuir um “handle”.
• int libusb_get_device_speed (libusb_device* dev) • Retorna a velocidade do dispositivo.
• uint8_t libusb_get_device_address ( libusb_device * dev) • Retorna o endereço do dispositivo
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
41
Libusb-1.0 – Funções (Síncrona) • int libusb_get_device_speed (libusb_device* dev)
• Retorna a velocidade do dispositivo.
• O retorno pode ser:
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
42
LIBUSB_SPEED_UNKNOWN O SO não conseguiu identificar a velocidade
LIBUSB_SPEED_LOW (1.5MBit/s).
LIBUSB_SPEED_FULL (12MBit/s).
LIBUSB_SPEED_HIGH (480MBit/s).
LIBUSB_SPEED_SUPER (5000MBit/s).
Libusb-1.0 – Funções (Síncrona) • (*) libusb_get_device_descriptor(libusb_device* dev, struct
libusb_device_descriptor* desc ) • Preenche a estrutura libusb_device_descriptor com os
descritores de dispositivos. Entre eles idVendor e idProduct.
• libusb_open(libusb_device* dev, libusb_device_handle* handle) • Abre o dispositivo e preenche handle com parâmetros para
operações.
• (*)libusb_open_device_with_vid_pid (libusb_context* ctx, uint16_t vendor_id, uint16_t product_id) • Abre o dispositivo e preenche o handle a partir dos
identificadores vendor e product.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
43
Libusb-1.0 – Funções (Síncrona) • libusb_kernel_driver_active(libusb_device_handle* dev,
int interface_number)
• Verifica se a interface está sendo usada pelo kernel SO.
• Essa função não funciona no windows.
• libusb_detach_kernel_driver(libusb_device_handle* dev, int interface_number)
• Desliga a interface do dispositivo do kernel.
• Não funciona no Darwin e Windows.
• libusb_attach_kernel_driver(libusb_device_handle* dev, int interface_number)
• Religa a interface ao dispositivo do kernel.
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
44
Libusb-1.0 – Funções (Síncrona)
int libusb_control_transfer ( Libusb_device_handle * dev_handle,
uint8_t bmRequestType,
uint8_t bRequest,
uint16_t wValue,
uint16_t wIndex,
unsigned char * data,
uint16_t wLength,
unsigned int timeout
)
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
45
Libusb-1.0 – Funções (Síncrona)
int libusb_bulk_transfer ( struct libusb_device_handle * dev_handle,
unsigned char endpoint,
unsigned char * data,
int length,
int * transferred,
unsigned int timeout
)
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
46
Libusb-1.0 – Funções (Síncrona)
int libusb_interrupt_transfer
( struct libusb_device_handle* dev_handle,
unsigned char endpoint,
unsigned char * data,
int length,
int * transferred,
unsigned int timeout
)
24
/04
/20
12
Lá
szlo
n R
od
rigu
es d
a C
ost
a -
PET
En
gen
har
ia d
a C
om
pu
taçã
o
47