L'USB comporte plusieurs couches, décrites dans la spécification USB 2.0 . Si vous connaissez le modèle de réseau en couches OSI, vous pouvez le penser comme ceci:
- Couche de session = Chapitre 10 Matériel et logiciel hôte USB (pilotes de périphérique)
- Couche de transport = Chapitre 9 Framework de périphérique USB
- Couche réseau = Chapitre 8 Couche de protocole (train de bits)
- Couche liaison de données = Chapitre 7 Électrique (circuit)
- Couche physique = Chapitre 6 Mécanique (câble et connecteur)
Conceptuellement, l'USB est basé sur des flux de données, appelés points d'extrémité , qui peuvent être IN (vers l'hôte) ou OUT (depuis l'hôte). Chaque appareil a un point de terminaison 0, qui est utilisé pour le contrôle et l'état. Un appareil peut avoir des points de terminaison supplémentaires pour les données d'application. Chaque point de terminaison se comporte comme un tampon FIFO.
Les données sont transférées sur un point de terminaison en tant que Bulk (comme TCP / IP, garanti que chaque octet arrive et dans le bon ordre), ou Isochronous (comme UDP / IP, garanti d'être frais mais peut laisser tomber des paquets). Il existe un type de transfert " Interruption " trompeusement nommé , qui est vraiment juste interrogé par l'hôte.
L'USB 2.0 utilise une paire différentielle pour la liaison de données. Je n'entrerai pas dans les détails car cela est couvert par le chapitre 7 de la spécification USB 2.0. Généralement sur la configuration PCB, nous traitons cela comme une paire différentielle de longueur assortie, et nous mettons les résistances en série requises par n'importe quel USB PHY (physique Interface) est utilisé. Le périphérique USB utilise une résistance de valeur élevée sur l'une des lignes D + ou D- pour informer l'hôte qu'il s'agit d'un périphérique haute vitesse ou basse vitesse.
Peu de temps après que l'hôte USB découvre qu'un périphérique est présent, l'hôte demande un tas de descripteurs au périphérique. Ceci est pris en charge dans les coulisses par la puce FTDI. Les descriptos sont décrits au chapitre 9.5 . Ceux - ci comprennent l' appareil Descriptor , descripteur de configuration , interface Descripteurs , Descripteurs Endpoint , chaîne Descripteurs , peut - être même rapport HID Descripteurs .
Le descripteur d'appareil comprend les numéros USB VID (identification du fournisseur) et PID (identification du produit). Le système d'exploitation utilise cette paire de chiffres, VID_PID, pour déterminer le pilote de périphérique à utiliser pour ce périphérique. Notez que le numéro VID est émis en étant membre du forum des implémenteurs USB, c'est donc un problème si vous êtes un inventeur individuel.
De plus, il existe le pilote de classe HID (Human Interface Device), qui fournit une entrée quelque peu générique pour le clavier / souris / etc, ainsi que toute entrée / sortie générique. Un avantage de HID est qu'il ne nécessite pas de fournir un pilote de périphérique personnalisé, mais son débit est quelque peu limité par rapport à un pilote de masse personnalisé. Il existe un tout autre document de spécification sur les descripteurs HID; et un document de table d'utilisation HID qui détaille tous les numéros de code qui décrivent les diverses fonctionnalités disponibles sur un appareil interfacé humain donné.
La puce FTDI telle que la fiche technique FT220X fournit le "moteur d'interface série" USB (à ne pas confondre avec série SPI ou série RS232). Cela prend en charge la plupart des éléments de bas niveau décrits dans les chapitres 6, 7 et 8.
FTDI utilise une EEPROM (puce sur le FT2232H, sur puce sur le FT220X) pour contenir un peu des informations qui entrent dans les descripteurs. Vous pouvez personnaliser les valeurs VID / PID et fournir des chaînes de description personnalisées.