Atualmente existem três versões de conexão USB entre seu PC e o periférico conectado, são elas USB 1.0, USB 1.1 e USB 2.0.
A principal diferença entre elas é a velocidade de transmissão de dados, o que conta muito quando se está usando, por exemplo, um HD USB externo.
USB 1.0 opera em velocidade de até 1.5mbps por segundo;
USB 1.1 opera em velocidade de até 12mbps por segundo;
USB 2.0 pode chegar em velocidade de até 480mbps por segundo.
No GNU/Linux o suporte a USB 2.0 existe desde o kernel 2.4 (aprox. ano 2001), portanto não há motivo para se preocupar com o suporte, visto que já estamos no kernel 3.7. A preocupação deve se concentrar é no seu periférico. Na hora de comprar, verificar se ele possui suporte a conexão USB 2.0.
Bom, agora vamos a dica em si. Você tem um dispositivo USB e deseja verificar a versão de sua conexão USB com o PC. Neste exemplo verificarei um HD externo que acabei de espetar.
Para listar os dispositivos USB conectados:
dmesg | grep -i usb
[1396440.848019] usb 4-1: >new full-speed USB device number 87 using uhci_hcd
[1396441.117077] usb 4-1: >Parent hub missing LPM exit latency info. Power management will be impacted.
[1396441.157077] usb 4-1: >New USB device found, idVendor=0bc2, idProduct=5031
[1396441.157082] usb 4-1: >New USB device strings: Mfr=2, Product=3, SerialNumber=1
[1396441.157085] usb 4-1: >Product: FreeAgent GoFlex
[1396441.157087] usb 4-1: >Manufacturer: Seagate
[1396441.157090] usb 4-1: >SerialNumber: NA0Q6TRK
[1396441.161237] scsi33 : usb-storage 4-1:1.0
Neste caso "4-1" é o identificador do periférico.
Então o que temos que fazer é:
cat /sys/bus/usb/devices/4-1/version
2.10
Basta substituir "4-1" do comando acima pelo USB identifier do seu periférico.
[1] Comentário enviado por ranzes em 22/12/2012 - 12:44h
Interessante , mas é muito mais fácil digitar apenas: lsusb
lhe informará a versão de cada porta , pois nem toda placa trabalha com a mesma versão em todas as portas e os dispositivos conectados.
Exemplo:
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Neste caso tenho apenas 1 porta 2.0 e o restante 1.1
e no momento nenhum dispositivo conectado.
[2] Comentário enviado por fabio em 22/12/2012 - 16:44h
Olá Ranzes,
Boa! Mas neste caso ele mostra a versão da porta e, se o dispositivo estiver conectado, a versão USB que o dispositivo suporta. No comando da dica, ele mostra a versão da comunicação entre o PC e o dispositivo, que pode ser diferente. Por exemplo:
$ lsusb
Bus 001 Device 026: ID 03f0:8d11 Hewlett-Packard
Bus 001 Device 002: ID 046d:c408 Logitech, Inc. Marble Mouse (4-button)
Bus 004 Device 087: ID 0bc2:5031 Seagate RSS LLC FreeAgent GoFlex USB 3.0
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Neste caso meu HD externo indica suporte USB 3.0, mas a comunicação com o sistema operacional é 2.1.
[3] Comentário enviado por ranzes em 22/12/2012 - 23:13h
Exato.
O linux ainda não tem suporte total a todas as controladoras USB 3.0 como o dispositivo é retro-compátivel acaba carregando driver 2.0 ou 2.1 o que você precisa fazer é desconectar o dispositivo e verificar a versão da sua USB.
Eu tenho um notebook com USB 3.0 mas o driver não suporta , fazendo funcionar a 2.0 tive que mudar.
Aí na sua dúvida funciona na seguinte forma:
O dispositivo funcionará na menor velocidade suportada.
usb root 3.0 ---> dispositivo 2.0 = velocidade será 2.0
usb root 2.0 ---> dispositivo 3.0 = velocidade será 2.0
entendeu ? ele irá se adequar a menor velocidade suportada, caso não sejam iguais.
O ideal é verificar a controladora usb 3.0 e verificar se tem algum driver já funcionando com sua velocidade máxima , ou compilar o kernel 3.7.1 que no meu caso detectou corretamente o driver e ativou, mais aí também não tenho nada de dispositivo usb 3.0 para brincar.
[4] Comentário enviado por ranzes em 24/12/2012 - 15:12h
Segue a tela do meu notebook com usb 3.0 após compilar o kernel 3.7.1
detectou normalmente.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 138a:003c Validity Sensors, Inc. VFS471 Fingerprint Reader
Bus 002 Device 003: ID 04f2:b230 Chicony Electronics Co., Ltd Integrated HP HD Webcam
Bus 002 Device 004: ID 03f0:231d Hewlett-Packard 4 GB Flash Drive
[5] Comentário enviado por Teixeira em 25/12/2012 - 10:42h
Tirem-me uma dúvida:
Quando espetamos dispositivos 1.1 e 2.0 no mesmo conjunto USB, penso que a tendência deveria ser a de funcionar com a MENOR velocidade (no caso 1.1).
Digam-me se isso faz sentido ou se falei besteira.
[6] Comentário enviado por ranzes em 25/12/2012 - 12:23h
Você está certo.
Mas esta forma de nivelamento de velocidade só será executado se os dispositivos estiverem no mesmo root hub.
Cada root Hub possui sua própria velocidade individualizada no chipset de controle USB.
Caso você espete um dispositivo USB 1.1 e um outro na mesma porta digamos assim (root hub) será nivelado a velocidade do menor.
Que no caso seria o dispositivo 1.1.
[7] Comentário enviado por pelo em 14/03/2014 - 16:54h
Pessoal,
Juntando um pouco de cada, algumas leituras e com alguns testes consegui chegar a um resultado final.
1) Temos no PC alguns controladores USB que são:
- Interface de Controlador Host Aberta (Open Host Controller Interface ou OHCI).
- Interface de Controlador Host Universal (Universal Hosto Controller Interface ou UHCI).
- Interface de Controlador Host Aprimorada (Enhanced Host Controller Interface ou EHCI).
- Interface de Controlador Host Extensível (eXtensible Host Controller Interface ou XHCI)
OHCI e UHCI são controladores da especificação USB 1.1 que tranmitem a 12Mbps.
Já o EHCI é o cara do 2.0 que tem velocidade máxima de 480Mpbs.
2) Os BUS Linux Foundation X.X root hub não representam a quantidade de portas USB, mas sim a quantidade de controladores USB.
Tenho em meu note 4 USB, mas mostra apenas 3 BUS.
sergio@debian:~$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
3) Cada dispositivo conectado a uma porta USB será verificado seu padrão e associado a um controlador USB.
4) Vamos aos testes:
Tenho 4 portas USB como falei anteriormente.
Conectei um mouse sem fio que possuo nas 4 portas, mas antes vou mostrar como está o comando lsusb sem conectar nada:
sergio@debian:~$ lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/4p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/4p, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/8p, 480M
|__ Port 1: Dev 4, If 0, Class=vend., Driver=rtl8187, 480M
|__ Port 6: Dev 3, If 0, Class=stor., Driver=ums-realtek, 480M
Tenho no BUS 1 dois devices (Dev 3 e 4) com usando driver rtl8187 (wireless) e ums-realtek (leitor de cartões).
Como podemos ver, o BUS utiliza o driver ehci_hcd (2.0) e com velocidade de 480Mbps.
- Com mouse
sergio@debian:~$ lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/4p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/4p, 12M
|__ Port 3: Dev 9, If 0, Class=HID, Driver=usbhid, 12M
|__ Port 3: Dev 9, If 1, Class=HID, Driver=usbhid, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/8p, 480M
|__ Port 1: Dev 4, If 0, Class=vend., Driver=rtl8187, 480M
|__ Port 6: Dev 3, If 0, Class=stor., Driver=ums-realtek, 480M
Foi utilizado pelo BUS 2 a 12Mbps. Conectei ele nas outras USB e sempre era associado ao BUS 2, mas com o incremento do campo Dev (número anterior + 1).
- Com pendrive
Fiz o mesmo teste do mouse, mas em seu lugar um pendrive.
sergio@debian:~$ lsusb -t
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/4p, 12M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ohci_hcd/4p, 12M
|__ Port 3: Dev 9, If 0, Class=HID, Driver=usbhid, 12M
|__ Port 3: Dev 9, If 1, Class=HID, Driver=usbhid, 12M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci_hcd/8p, 480M
|__ Port 1: Dev 4, If 0, Class=vend., Driver=rtl8187, 480M
|__ Port 3: Dev 20, If 0, Class=stor., Driver=usb-storage, 480M
|__ Port 6: Dev 3, If 0, Class=stor., Driver=ums-realtek, 480M
No caso, conectei em todas as 4 postas. Sempre era associado ao Bus 2 (Driver=usb-storage) e como no caso do mouse, campo Dev (no exemplo 20) era alterado para o Dev anterior + 1.
Creio que no USB 3.0 a mesma coisa. Se alguém puder replicar o meu teste com USB 3.0 e complementar seria legal.
Para verificar se possui suporte, no comando lsusb -t deve aparecer como driver do BUS o XHCI que possui velocidade máxima 10x maior que o USB 2.0 chegando a 4,8Gbps.
Outra coisa importante é o suporte no kernel. Segundo a revista Linux Magazine está disposível desde o kernel 2.6.31 (http://www.linux-magazine.com/Online/News/Linux-Kernel-2.6.31-Brings-USB-3.0)
Se ele for menor que isso, talves tenha que compilar o driver (se existir ou for possível).
Posso conseguir um note com USB 3.0 outro dia e fazer uma dica atualizada. O que acha Fábio?
[8] Comentário enviado por zurczurc em 11/04/2014 - 14:00h
Muito interessante, mas estou interessado em algo mais avançado, a velocidade de conexão de um dispositivo USB, tipo um teclado.
Não estou me referindo a velocidade de repetição . essa velocidade afeta diretamente a velocidade de transferência .
[9] Comentário enviado por pelo em 11/04/2014 - 14:22h
Zurczurc,
Com os procedimentos que fiz acima é possível descobrir qual é a velocidade máxima de seu teclado que deve ser USB 1.0 ou 1.1. (12M)
Que creio ser suficiente para um teclado.
Caso encontre o que precisa complemente esse post.