A conexão entre o host e os dispositivos USB é dada através de um hub, chamado hub raiz, que se conecta diretamente ao host USB. Este hub tem a função de detectar a conexão e a desconexão de novos dispositivos, incluindo outros hubs. Neste processo de detecção, chamado de enumeração, o dispositivo USB deve estar pronto para responder a pedidos sem assumir que eles serão feitos a uma ordem específica.
Para disparar a enumeração, o dispositivo USB deve ser conectado a uma porta USB, ou o sistema iniciado com o dispositivo já conectado. Com isso, ele passa a receber energia do hub, no estado chamado de “energizado”. Após isso, o hub, que monitora a voltagem nas linhas de sinal da portas USB, detecta a sua presença e ativa uma interrupção indicando que ele ou uma porta USB presenciou um evento, indicando a porta, se necessário. O host recebe essa interrupção e solicita aos hub mais informações sobre o estado da porta.
O hub responde a essa solicitação detectando, novamente através da voltagem nas linhas de sinal da porta, qual a velocidade a que o dispositivo funciona: Low Speed ou Full Speed. Ele envia esta informação ao host, que solicita ao hub que resete a porta. Após resetá-la, o hub detecta se o dispositivo é capaz de responder a High Speed. Enquanto isso, o host solicita ao hub o estado da porta para verificar se ela ainda se encontra no estado de Reset, repetindo esta solicitação até que ela deixe este estado. Neste momento, o dispositivo passa para o estado padrão, pronto para responder a transferências no endpoint 0 de sua conexão.
Sabendo que há um dispositivo preparado, o host solicita, através do endereço 0, endpoint 0, o descritor do dispositivo, para descobrir o tamanho máximo de pacote do canal endpoint 0. No entanto, após receber o primeiro pacote de resposta, que já contém esta informação, ele designa ao dispositivo um endereço único. O dispositivo, então, termina de responder à solicitação do descritor e programa o novo endereço, passando para o estado “endereçado”. Este novo endereço será utilizado em todas as transferências posteriores até que ele seja disconectado, o sistema reinicie ou a porta seja resetada.
Novamente o host solicita ao dispositivo o seu descritor, e desta vez recebe-o por completo. Este descritor contém o tamanho máximo do pacote do endpoint 0, as configurações que o dispositivo suporta, além de outras informações básicas que serão utilizadas em comunicações futuras. O host também solicita ao dispositivo os descritores de configuração especificados no seu próprio descritor. Munido deste conhecimento, ele é capaz de escolher o driver mais adequado para gerenciar as comunicações com o dispositivo. Este driver é carregado pelo sistema operacional. Após isto, o host solicita uma configuração específica ao dispositivo, e ele ativa esta configuração, passando para o estado “configurado”. Alguns dispositivos possuem mais de uma interface, o que significa que a ele podem ser designados drivers diferentes. Neste caso, a designação ocorre após a configuração ser ativada.
Os dispositivos também podem encontrar-se em outros dois estados: “plugado”, em que o dispositivo não está recebendo energia do hub (por solicitação do próprio hub, por exemplo), e “suspenso”, estado em que ele entra após detectar ausência de atividade no barramento; neste estado, o dispositivo deve minimizar o seu uso de energia vinda do barramento.
Top