O USB possui várias camadas, descritas na especificação USB 2.0 . Se você conhece o modelo de rede em camadas OSI, pode pensar assim:
- Camada da sessão = Capítulo 10 Hardware e software host USB (drivers de dispositivo)
- Camada de transporte = Capítulo 9 Estrutura de dispositivos USB
- Camada de rede = Capítulo 8 Camada de protocolo (fluxo de bits)
- Camada Data Link = Capítulo 7 Elétrico (circuito)
- Camada física = Capítulo 6 Mecânico (cabo e conector)
Conceitualmente, o USB é baseado em fluxos de dados, chamados Endpoints , que podem ser IN (para o host) ou OUT (do host). Todo dispositivo possui o Endpoint 0, que é usado para controle e status. Um dispositivo pode ter pontos de extremidade adicionais para dados do aplicativo. Cada nó de extremidade se comporta como um buffer FIFO.
Os dados são transferidos em um nó de extremidade como Bulk (como TCP / IP, garantido que cada byte chegue e na ordem correta) ou Isócrono (como UDP / IP, com garantia de atualização, mas pode descartar pacotes). Há um tipo de transferência " Interromper " chamado enganosamente , que é realmente apenas consultado pelo host.
O USB 2.0 usa um par diferencial para o datalink. Não entrarei em muitos detalhes, pois isso é coberto pelo capítulo 7. da especificação USB 2.0. Geralmente, no layout da placa de circuito impresso, tratamos isso como um par diferencial de comprimento combinado e inserimos os resistores em série exigidos por qualquer USB PHY (físico). Interface) está sendo usada. O periférico USB usa um resistor de alto valor em uma das linhas D + ou D- para notificar o host de que é um periférico de alta ou baixa velocidade.
Logo após o host USB descobrir que um dispositivo está presente, o host solicita vários descritores ao dispositivo. Isso é resolvido nos bastidores pelo chip FTDI. Os descritores estão descritos no capítulo 9.5 . Estes incluem dispositivos descritor , Configuração descritor , interface Descritores , Endpoint Descritores , Cordas Descritores , talvez até HID Relatório Descritores .
O descritor de dispositivo inclui os números USB VID (identificação do fornecedor) e PID (identificação do produto). O sistema operacional usa esse par de números, VID_PID, para determinar qual driver de dispositivo deve ser usado para este dispositivo. Observe que o número do VID é emitido ao ser membro do fórum de implementadores USB, então isso é um problema se você é um inventor individual.
Além disso, existe o driver de classe HID (Human Interface Device), que fornece entrada um tanto genérica para teclado / mouse / etc, assim como qualquer entrada / saída genérica. Uma vantagem do HID é que ele não requer o fornecimento de um driver de dispositivo personalizado, mas sua taxa de transferência é um pouco limitada em comparação com um driver em massa personalizado. Há todo um outro documento de especificação sobre os descritores HID; e um documento da Tabela de uso da HID que detalha todos os números de código que descrevem os vários recursos disponíveis em um determinado dispositivo com interface humana.
O chip FTDI, como a folha de dados do FT220X, fornece o "mecanismo de interface serial" USB (não deve ser confundido com o serial SPI ou o serial RS232). Isso cuida da maioria das coisas de baixo nível descritas nos capítulos 6, 7 e 8.
O FTDI usa uma EEPROM (desmarcação no FT2232H, on-chip no FT220X) para conter um pouco das informações que entram nos descritores. Você pode personalizar os valores VID / PID e fornecer seqüências de descrição personalizadas.