Criando um suporte robusto a USB 3.0

Uma das importantes funções que o Windows desempenha dentro de um grande ecossistema é desenvolver suporte a novos itens de hardware. É um processo que exige muita dedicação e por isso, nesta postagem, pensamos em falar um pouco sobre o suporte a USB 3.0, pois sabemos que todos estão ansiosos para experimentar as melhorias que ele traz. Esta também é a nossa primeira postagem de vídeo; pretendíamos usar vídeos de "engenharia", em vez de grandes bens de produção, mas acho que foi melhor assim (os vídeos foram inseridos em HTML5 e estão disponíveis para download). Se você é como eu quando assiste a um vídeo, achará que os indicadores de progresso de cópia de arquivo estão um pouco desatualizados. Fique ligado. Esta postagem é de autoria de Dennis Flanagan, diretor de gerenciamento de programas do grupo de dispositivos e rede. – Steven

Com uma taxa de transferência até dez vezes mais rápida que o USB 2.0 e um gerenciamento de energia aperfeiçoado proporcionando maior vida útil da bateria, o USB 3.0 possui motivos convincentes para melhorar a mais famosa interface de PC do mundo.Em 2015, todos os novos PCs deverão oferecer portas USB 3.0, e mais de dois bilhões de novos dispositivos USB "SuperSpeed" serão vendidos somente naquele ano.

Figura 1 - Previsão de mercado de PCs com USB 3
In-Stat, junho de 2011

Figura 2 - Previsão de mercado de dispositivos USB, junho de 2011
In-Stat, junho de 2011

A decisão de investir em USB 3.0 foi fácil; difícil foi fazê-lo sem comprometer o ecossistema USB existente. Nosso design teve de seguir a especificação 3.0 revisada à risca para poder criar um hardware USB 3.0. Ainda há bilhões de dispositivos USB antigos com os quais o Windows precisa manter a compatibilidade. Como escrever um único software que habilite a tecnologia mais recente de um hardware em evolução e, ao mesmo tempo, garantir que ele funcione com dez bilhões de dispositivos existentes em residências e escritórios do mundo todo?

Primeiro, um pouco de história

Em 1996, a organização de padrões USB lançou a primeira especificação USB, que definiu duas velocidades para dispositivos USB: baixa velocidade (1,5 Mbps) e alta velocidade (12 Mbps). Na época, a ideia de fazer um dispositivo com "conexão automática" (conectar e desconectar sem precisar reiniciar) era revolucionária. O USB também suportava diferentes métodos para transferir dados: em massa, para dispositivos como impressoras que enviam uma grande de quantidade de dados e não precisam guardá-los na memória, isócrono, para dispositivos como alto-falantes que recebem dados continuamente em uma ordem específica, e de interrupção, para dispositivos como teclados que enviam dados ocasionalmente.

A especificação de 1996 também reduziu a complexidade do dispositivo USB no PC, tornando os dispositivos mais baratos e fáceis de implementar. Graças a esses recursos, o USB tornou-se o mais atraente conector externo de dispositivos. Consequentemente, os fabricantes de dispositivos adotaram o USB e ingressaram para o órgão de padrões a fim de definir interfaces comuns entre software e hardware para diferentes classes de dispositivos. Essas interfaces comuns permitem que um único driver de software, um driver de classe, ofereça suporte a toda uma categoria de dispositivos. Desde o início, a Microsoft adotou a tecnologia USB e a organização de padrões, contribuindo com várias especificações ao longo dos anos. Nós introduzimos o suporte a USB 1.1 no Windows 95 OSR 2.

Em 2000, a especificação USB 2.0 surgiu com uma velocidade mais alta (480 Mbps). Infelizmente, o controlador de host, o hardware usado para conectar um PC aos dispositivos, não era compatível com versões anteriores. Os dispositivos de alta velocidade funcionavam com todos os controladores, mas dispositivos de baixa e máxima velocidade não funcionavam com controladores USB 2.0. Os PCs precisavam ser feitos com dois controladores diferentes, ou inserir um hub USB 2.0, para oferecer suporte a todos os tipos de dispositivos. No Windows XP SP1, aprimoramos o driver de software existente, adicionando a funcionalidade USB 2.0.

O caminho para o USB 3: começar com uma forte especificação

Participando ativamente da organização de padrões USB, ajudamos a criar uma especificação atraente e interoperável. Assim como outros membros do fórum de implementadores de USB, queremos uma versão de USB mais rápida e eficiente no consumo de energia, na qual, diferentemente do USB 2.0, a combinação a hardware e software funcione com todos os dispositivos USB.

Em 2008, a organização de padrões USB lançou a nova especificação USB 3.0, que incluía um novo controlador host e definia o novo dispositivo USB "SuperSpeed" (5 Gbps). Juntos, o controlador e o dispositivo, teoricamente, eram até dez vezes mais rápidos que o USB 2.0. Com esse novo padrão, o usuário seria capaz de copiar um filme em alta definição de uma unidade de armazenamento USB em cerca de 80 segundos, em vez de 15 minutos como acontecia no USB 2.0. A especificação também apresentava um novo tipo de transferência (fluxos) que permitia que as unidades de armazenamento processassem a leitura e a gravação com mais eficiência.

A nova especificação fornecia 80% mais energia que o USB 2.0. Isso significava um carregamento mais rápido e eliminava a necessidade dos estranhos cabos "Y" usados por unidades de DVD externas e outros dispositivos alta potência. Mas o carregamento não foi o único item de energia a ser considerado. Com a computação móvel, as pessoas queriam PCs que conservassem a vida útil da bateria. Por introduzir também novos estados de baixa energia, concluir as tarefas com maior rapidez e economizar energia sempre que possível, o USB 3.0 consumia a energia com mais eficiência que seus predecessores. Isso significa uma vida útil da bateria maior para notebooks e um consumo de energia menor para desktops.

Além disso, a especificação promete habilitar a nova geração de dispositivos USB e também manter a compatibilidade com dispositivos de baixa, máxima e alta velocidade. Até os plugues são compatíveis com versões anteriores.

Parceria com o setor de hardware

Quando a especificação começou a se consolidar, começamos a criar o Windows e nos deparamos com a primeira difícil decisão. Atualizamos o software USB existente, que modificamos gradualmente desde o Windows 95 OSR2, ou escrevemos um novo software seguindo os princípios de design modernos? Diversos dispositivos e seus drivers dependem do comportamento do software existente, por isso não podíamos simplesmente adotar um design totalmente novo. A solução? Não nos precipitarmos, mas criar meticulosamente uma nova pilha de software USB para o novo controlador, mantendo as interfaces e os comportamentos existentes para garantir que todos os dispositivos e drivers funcionem. Para controladores antigos, mantivemos a pilha de software existente.

Para criar uma pilha de software USB totalmente nova, tivemos de começar a trabalhar cedo. Se esperássemos o hardware ficar disponível, não haveria tempo para dar suporte ao novo ecossistema USB 3.0. Decidimos começar antes que existisse qualquer dispositivo USB 3.0, criando dispositivos "virtuais". Os dispositivos virtuais são representações de software de um hardware USB físico real: as portas, os hubs e outros dispositivos.

Com o desenvolvimento dos dispositivos virtuais a caminho, nos dedicamos ao design e ao protótipo. O software USB é complexo porque precisa gerenciar hubs e dispositivos, além de lidar com erros. Para criar algo pensando em longevidade, precisávamos visualizar e documentar o fluxo. Criamos três enormes fluxogramas e geradores de código para converter automaticamente um diagrama Visio em software. Com o Microsoft Research, aperfeiçoamos uma ferramenta chamada Zing, que era capaz de validar cada aspecto do modelo de software.

 
Fluxograma com seus arquitetos, Randy Aull e Vivek Gupta

Quando terminamos o desenvolvimento inicial, vieram os primeiros controladores host. Reconhecemos que a simulação fornecia um ótimo ponto de partida, mas não era suficiente. Com o hardware, identificamos suposições incorretas, questões de tempo e outros problemas exclusivos dos cenários do mundo real. Na etapa seguinte, também precisávamos ajudar a promover um novo ecossistema que exigiria muita colaboração de nossos parceiros de hardware. Precisávamos trabalhar juntos no protótipo, trocar ideias, ter sérias discussões técnicas e relatar bugs dos dois lados. Precisávamos assumir o compromisso mútuo de trabalhar em sintonia para poder identificar as questões problemáticas antes do design final.

Conforme o USB 3.0 progredia, nossa cooperação também crescia. O software só funcionará bem se o hardware permitir. Ao lado de nossos parceiros do setor de hardware, detectamos os problemas, desenvolvemos soluções e criamos a base para um novo ecossistema USB.

Testo, portanto existo

Concentrados em desenvolver o suporte aos chips USB 3.0 dentro do PC, não podíamos ignorar a imensidão de dispositivos. Tivemos de pensar sob novos padrões, literalmente. Há mais de dez bilhões de dispositivos USB no mundo. Alguns são usados diariamente e outros ficam esquecidos num canto juntando poeira, mas todos foram originalmente criados para funcionar em PCs com Windows. Compatibilidade é uma promessa do Windows. Nossos clientes se acostumaram a esperar que as novas versões do Windows funcionem com os dispositivos e drivers existentes. Esse compromisso com a compatibilidade ainda é uma das prioridades do Windows 8, em todo o produto.

Para testes de compatibilidade com USB, a abordagem da "força bruta" não funciona porque há uma infinidade de dispositivos, novos surgem a cada dia e muitos não estão mais disponíveis para compra. Precisávamos desenvolver uma estratégia de teste de dispositivo inteligente. Depois de analisar as estatísticas, dividimos os dispositivos em três principais categorias:

  1. Popularidade do dispositivo 
    Ao examinarmos as fontes de telemetria para os dispositivos mais populares, observamos um padrão. Cada classe de dispositivos (teclado, webcam, impressoras, armazenamento etc.) tinha um conjunto de fabricantes principais com poucas linhas de produtos importantes. Depois de projetar essas descobertas, conseguimos representar de 70% a 80% dos dispositivos com algumas centenas deles. Os testadores usaram o termo matemático "classificação de equivalência" para descrever essa tarefa.
  2. Chipset
    Uma porcentagem significativa de dispositivos ainda ficaria sem teste se nos contentássemos com os dados de popularidade, por isso examinamos mais atentamente o design do circuito em si. Assim como os seres humanos, os dispositivos são muito diferentes por fora, mas bastante semelhantes por dentro. Se pudéssemos garantir que todos os chipsets USB funcionassem, provavelmente os dispositivos que os tivessem também funcionariam. Um pequeno número de fabricantes de chipset é inserido nos dispositivos, por isso decidimos representar seu IP USB em placas de desenvolvimento.
  3. Dispositivos complexos de grande visibilidade
    Não raro, um dispositivo USB é a causa das chamadas de suporte. Se isso acontecer, queremos garantir que o Windows dê conta do recado.

Depois de dez anos de experiência em USB, uma dúzia de fontes de telemetria e toneladas de pesquisas e análises, conseguimos reduzir o esforço de compatibilidade com USB a praticamente mil dispositivos únicos que testamos regularmente nos laboratórios do Windows. Garantimos que os dispositivos sejam reconhecidos corretamente quando conectados aos PCs, que entrem em suspensão e sejam reiniciados de forma apropriada para economizar energia, e que sejam capazes de suportar várias condições de estresse. Nossos dados de telemetria indicam que mais de 90% dos dispositivos dependem dos 16 drivers de classe do Windows, mas, para dispositivos personalizados, verificamos se os drivers são baixados perfeitamente com o Windows Update, sempre que possível (o fabricante do dispositivo precisa cooperar para dar suporte a nesse cenário). Se o USB 3.0 fornecer total compatibilidade com versões anteriores, os drivers antigos continuarão a funcionar sem qualquer alteração.

Também investimos pesado para criar uma ferramenta personalizada, o MUTT (Microsoft USB Test Tool), para simular diversos comportamentos de dispositivos que observamos ao longo dos anos. Criamos o MUTT do zero, internamente. Nossos engenheiros de teste de software projetaram o design de circuito com a ajuda de sofisticadas ferramentas de design (MS Paint... acredite). Depois, eles desenvolveram o firmware e geraram um novo conteúdo de teste para executar internamente. Assim nasceu o MUTT (imagine um pendrive USB com mil dispositivos). Com o tempo, compartilhamos o MUTT com nossos parceiros de hardware, que o usaram para descobrir e corrigir problemas em seus dispositivos antes do lançamento.

Figura 4 - Designer do MUTT, David Hargrove, com o dispositivo MUTT
Designer do MUTT, David Hargrove, com o dispositivo MUTT

Vídeo de demonstração

Talvez o aspecto mais importante do USB 3.0 seja a expectativa dos clientes em relação ao USB: se é USB 3, então deve funcionar, certo? Cada e todo dispositivo USB, seja SuperSpeed, de baixa, máxima e alta velocidade, deve funcionar no Windows 8. Essa é a nossa meta, além de fornecer uma pilha de USB robusta e confiável.

Vejamos o USB 3.0 em ação enquanto ele realiza tarefas de cópia bastante significativas e compete com o USB 2.0.

Seu navegador não dá suporte a este vídeo HTML5.

Se você não estiver vendo um vídeo ou não puder executá-lo, baixe-o aqui: MP4 de alta qualidade | MP4 de baixa qualidade

-- Dennis