Les fonctions USB
Quand nous pensons à un appareil USB, nous pensons à un périphérique
USB, mais un appareil USB peut signifier un appareil émetteur / récepteur
USB sur l'hôte ou périphérique, un HUB USB ou un circuit intégré
contrôleur d'hôte ou un appareil périphérique USB. Par conséquent le
standard fait références aux fonctions USB qui peuvent être considérées
comme appareil USB qui fournissent une possibilité ou une fonction comme
une imprimante, in lecteur Zip, un scanner, un modem ou un autre
périphérique.
Donc à l'heure qu'il est nous devrions savoir de quoi est composé un
paquet USB. Ce n'est pas le cas ? Vous avez déjà oublié combien de bits
composent un champ PID ? Bon, ne vous alarmez pas trop. Heureusement la
plupart des fonctions USB manipulent les protocoles USB bas niveau jusqu'à
la couche transaction ( que nous traiterons au chapitre prochain) dans le
silicium. La raison pour laquelle nous traiterons cette information est
que la plupart des contrôleurs de fonction USB signaleront des erreurs
comme l'Erreur d'Encodage PID. Sans traiter rapidement ceci, l'on pourrait
se demander ce qu'est l'erreur d'encodage PID ? Si vous avez proposé que
les 4 derniers bits du PID ne correspondent pas au complément des 4
premiers bits alors vous auriez raison.
La plupart des fonctions auront des séries de tampons (buffers),
généralement de 8 octets de long. Chaque tampon appartiendra à une
terminaison EP0 IN, EP0 OUT etc... Supposons par exemple, que l'hôte
envoie une demande de descripteur d'appareil. La fonction matérielle lira
le paquet d'installation et déterminera à partir du champ adresse si le
paquet est pour lui-même, et si c'est le cas, il copiera la " charge utile
" du paquet de données suivant au tampon de la terminaison appropriée,
dictée par la valeur dans le champ de la terminaison du jeton
d'installation. Il enverra ensuite un paquet " poignée de mains " pour
valider la réception de l'octet et génèrera une interruption interne à
l'intérieur du semi-conducteur / microcontrôleur pour la terminaison
appropriée signalant qu'il a reçu un paquet. C'est en principe déjà
intégré dans la matière (silicium).
Le logiciel a maintenant une interruption, et doit lire le contenu du
tampon de terminaison et analyser la demande de descripteur d'appareil.
Les
terminaisons
Les terminaisons peuvent être décrites comme émetteurs ou récepteurs de
données. Du fait que le bus est régi par l'hôte, les terminaisons se
présentent à la fin de la chaîne de communications sur la fonction USB. Au
niveau de la couche logicielle, le pilote (driver) logiciel de votre
appareil va envoyer, par exemple, un paquet à vos appareils EP1. A la
sortie de l'hôte, la donnée aboutira au tampon EP1 OUT. Votre
microprogramme pourra alors lire à loisir cette donnée. S'il veut
retourner la donnée, la fonction ne peut pas simplement écrire sur le BUS
comme celui-ci est contrôlé par l'hôte. Par conséquent il écrit la donnée
dans EP1 IN qui s'installe dans le tampon jusqu'à ce que l'hôte envoie un
paquet IN à cette terminaison demandant la donnée. Les terminaisons
peuvent être aussi considérées comme l'interface entre le matériel de
l'appareil de fonction et le microprogramme s'exécutant sur ce même
appareil.
Tous les appareils doivent prendre en charge la terminaison zéro. C'est
la terminaison qui reçoit la totalité de la commande des appareils et des
demandes d'états pendant l'énumération et tant que l'appareil est
opérationnel sur le bus.
Canaux de
communications (Pipes)
Tandis que l'appareil envoie et reçoit des données sur une succession
de terminaisons, le logiciel client transfère des données à travers des
canaux de communications. Un canal de communication (Pipe) est une
connexion logique entre l'hôte et les terminaisons. Les canaux de
communications auront aussi un ensemble de paramètres qui leur seront
associés tels que : combien de bande passante leur est allouée, quel type
de transfert (Commande, Bloc, Iso ou Interruption) ils utilisent, la
direction du flux de données et les tailles maximales du paquet / tampons.
Par exemple le canal de communication par défaut est un canal
bidirectionnel composé d'une terminaison zéro IN et d'une terminaison zéro
OUT avec un type de transfert de commande.
L'USB définit 2 types de canaux de communications
- Les flux de données (Stream Pipes) n'ont pas de format USB
défini. Cela veut dire que vous pouvez envoyer n'importe quelle sorte de
données par un flux de données et que vous pouvez rapporter les données
de sorties à l'autre extrémité. Les données circulent séquentiellement
et ont une direction prédéfinie, soit en entrée soit en sortie. Les flux
de données supporteront les types de transferts en Bloc, Isochrone et
d'Interruptions. Les flux de données peuvent soit être contrôlés par
l'hôte ou l'appareil.
- Les canaux de messages (Message Pipes) ont un format USB
défini. Ils sont contrôlés par l'hôte et sont initiés par une demande
émanant de l'hôte. Les données sont ensuite transférées dans la
direction voulue, dictées par la demande. Par conséquent les canaux de
messages permettent aux données de circuler dans les deux directions
mais ne prendront seulement en charge que les transferts de commande.
|