Etape 21 : Annexe c: la plus courte explication d’USB jamais
Bus USB ont un animateur et un périphérique, l’ordinateur est généralement l’hôte, notre lecteur de musique est un appareil, plus précisément, un périphérique de stockage de masse. Il est important de noter que l’hôte toujours initier une communication, ou l’hôte vérifie l’appareil fréquemment pour voir si il y a quelque chose à dire.
Il y a des résistances de pull-up sur D + ou D - selon si le périphérique est USB 1.0, USB 1.1 ou USB 2.0. La présence de ces résistances de pull-up est aussi un ordinateur sait lorsque quelque chose s’est connecté. Dans le AT90USB1286 (aka le microcontrôleur sur le Teensy ++), les résistances de pull-up sont intégrés et configurable via le logiciel.
Lorsqu’un périphérique se connecte à un hôte, l’hôte essaie de « énumérer » l’appareil. Si elle échoue à faire tellement (dispositif ne répond ne pas, ou répond avec garbage), c’est quand Windows dit « périphérique non reconnu ».
L’hôte et le périphérique parle sur des canaux appelés « points de terminaison », points de terminaison sont identifiés par un numéro. Il y a certains critères d’évaluation qui a réservé pour une utilisation particulière, tandis que d’autres peuvent être configurées pour fonctionner sous différents modes (interruption, en vrac, etc.).
L’hôte utilisera toujours d’abord le « point de terminaison de contrôle » (point de terminaison 0) tout d’abord à la demande de la description de l’appareil, ce « descripteur » contient les identificateurs de l’instrument (vendor ID et ID de produit, etc.), ainsi que de sa classe, sous-classe, etc. (HID comme une souris ou un clavier? ou stockage de masse peut-être?). Puis le descripteur de configuration est demandé, qui contient également le nombre de points de terminaison disponibles sur l’appareil. Chaque point de terminaison possède son propre descripteur ainsi. Toutes ces données sont envoyées sous forme de paquets d’octets de données représentant une structure bien connue de données spécifié.
APUL (Lightweight USB cadre pour rea) et autres cadres/piles USB ont « structures » et autres méthodes pour permettre au programmeur de modifier le contenu dans les descripteurs. Vous devez d’abord comprendre chaque descripteur et ensuite vérifier la documentation de LUFA pour voir comment les changer.
L’hôte fait les demandes en envoyant des « paquets d’installation » au « point de terminaison de contrôle ». Le programme d’installation de paquets ont une structure définie, ce qui facilite pour l’appareil pour comprendre ce que veut l’hôte. APUL (cadres similaires et) gère habituellement les paquets d’installation par défaut. Un programmeur peut écrire les pilotes qui envoie des paquets d’installation personnalisé, auquel cas le firmware doit gérer les paquets d’installation manuellement, APUL (e.a.) fournit des méthodes pour aider avec ça.
Dans certains de mes exemples, j’ai inclus un dump des descripteurs capturé par mon analyseur de trafic USB. Vous pouvez jeter un coup d’oeil et il coïncident avec les spécifications USB pour voir ce que représente chaque portion.
Une fois que tous les descripteurs ont été récupérées de l’appareil, l’hôte peut alors comprendre l’appareil et communiquer avec lui. Dans certains de mes démonstrations, le périphérique USB agit comme un port série virtuel. Lorsque vous appelez la fonction « usb_serial_putchar », le caractère à envoyer est placé dans une mémoire tampon et envoyé quand l’ordinateur (hôte) fait un bilan de santé périodique (Rappelez-vous ce que j’ai dit sur l’hôte toujours initier de communication). Lorsque le AT90USB1286 sur le Teensy ++ est un périphérique de stockage de masse USB, lorsque l’ordinateur envoie via des commandes SCSI à lire des blocs de données, l’appareil répond avec les données au cours d’un point de terminaison en vrac.
J’ai un autre Instructable qui vous montre comment construire un clavier USB qui types le code stocké dans les étiquettes RFID :
Travail à domicile : Lire USB en un mot http://www.beyondlogic.org/usbnutshell/usb1.shtml qui est à peu près une bible USB