Le bus USB I) Introduction : Le bus USB est comme son nom l'indique un bus série (Universal Serial Bus). Le bus USB s'est répandu de façon très significative ces dernières années, que ce soit dans les applications grand public (imprimantes, scanners, appareils photos) ou dans les applications professionnelles (programmateurs, automates, appareils de mesure). Ce standard (Universal Serial Bus) a été élaboré par Intel, Compaq, Digital, IBM, Microsoft, NEC et Northern Telecom, en 1996 (USB 1.0). Les versions USB 1.1 et USB 2.0 apparurent par la suite. Le bus USB a une architecture série pour deux raisons principales : L'interface série permet d'utiliser une cadence d'horloge beaucoup plus élevée qu'une interface parallèle (dans une architecture parallèle à haut débit, les bits circulant sur chaque fil arrivent avec des décalages temporels, provoquant des erreurs). La connexion série est plus économique que la connexion parallèle de part la simplicité des connecteurs et du faible nombre de conducteurs du câble. II) Architecture du bus USB : Les connexions se font point à point. Le fonctionnement du bus USB est régi par un host unique. Tous les appareils ont une connexion amont vers le host. Il est possible de connecter jusqu'à 127 périphériques simultanément. Les ports USB supportent le «Hot Plug & Play», c'est à dire qu'un périphérique peut être connecté et reconnu, sans redémarrage de l'ordinateur. Les périphériques qui disposent actuellement de ce type de port sont les imprimantes, scanners, webcams, les clés USB... Ils peuvent être connectés directement sur un port USB ou reliés à un Hub (en étoile) comme illustré ci dessous. Afficheur MAT Bus USB 1
III) Connectique : Définition du câble USB Le câblage USB est relativement simple ; il a la même structure quelle que soit la vitesse de transmission. Le câble transporte deux paires de fils : La paire de signal destinée au transfert de données D+ et D- et une seconde paire qui peut être utilisé pour la télé alimentation GND et Vcc. La première paire est non blindée pour les périphériques lents tels que les claviers, souris fonctionnant à 1.5Mbits/s tandis que caméras, micro et autres ont recours à une paire de fils torsadée blindée pour atteindre les 12Mbits/s Composition du câble USB Chaque connecteur dispose de deux fils d'alimentation (5V et GND) et deux fils destinés au transfert de données (D+ et D-). Une connexion entre deux PC est aussi possible par l'adjonction d'une interface spéciale qui déjoue la vigilance du PC maître et transforme le second PC en "esclave" En version Low Speed le blindage n'est pas obligatoire (ce qui assure une plus grande souplesse de manipulation en particulier pour une liaison souris). Identification des fils : 1 rouge alimentation Vbus (+5V) 2 blanc D- 3 vert D+ 4 noir masse GND (0V ou -) La longueur maximale autorisée par la norme est de 3m pour un câble non blindé donc généralement pour un périphérique Low USB (= 1.5Mb/s), priorité à la souplesse du câble pour un confort de l'utilisateur et de 5m pour un câble blindé dans le cas d'un périphérique Full USB (=12Mb/s). Le câble USB est composé de deux fiches bien différentes : En amont d'une fiche appelé connecteur USB de type A, branché au host (PC). L'extrémité aval par contre peut se retrouver en deux versions : Connecteur USB du type B et un mini connecteur type B (appelé souvent optionnel). Ce dernier est réservé aux dispositifs de très faible dimension (ou de grande intégration) tels les appareils photo numériques. Il existe une autre série de connecteurs appelée "mini ou micro A" et "mini ou micro B". Ce sont les connecteurs que l'on retrouve sur les appareils photo et les lecteurs MP3. (La borne 5 est reliée est quelquefois à la masse dans les versions mini et micro Afficheur MAT Bus USB 2
Si on regarde en détail on peut s'apercevoir que ces connecteurs disposent non pas de 4 connexions mais de 5!!! Pourquoi 5 connexions alors que le bus USB a besoin de 4 conducteurs? En fait on retrouve les 4 connecteurs du bus USB et une connexion pour la configuration du périphérique utile lors de l'utilisation OTG (On The Go). Pour faire simple l'otg est une évolution de la norme USB qui permet la connexion entre deux appareils sans ordinateur, exemple : un appareil photo et une imprimante. Comme vu plus haut l'usb a besoin d'un host et un host unique. Lorsqu'on connecte un appareil photo à une imprimante il faut bien donner le rôle de host à l'un des deux ; c'est la fonction de cette connexion supplémentaire sur les connecteurs "mini". A sa première extrémité le câble mini A/mini A positionne la broche supplémentaire à +Vusb et à sa deuxième extrémité à la masse (GND). Le rôle host/device sera donc fixé par le sens du câble. Le host peut décider d'échanger sa fonction avec le périphérique, le host devient périphérique et le périphérique devient host. Cet échange est normalisé par la norme HNP (Host Negociation Protocol). Je n'irai pas plus loin car ce n'est pas du tout indispensable de connaître ce protocole pour développer un host mais c'est intéressant d'en avoir entendu parler. IV) Vitesse de transmission : Le bus USB propose plusieurs vitesses de communication : Haute Vitesse (High Speed) : 480 Mbits/s : idéal pour les périphériques très haut débit ; disque dur, camera... Pleine Vitesse (Full Speed) : 12 Mbits/s : idéal pour les périphériques haut débit : scanners, imprimantes... Basse Vitesse (Low Speed) : 1,5 Mbits/s : idéal pour les périphériques d'interface utilisateur : claviers, souris, manettes de jeu... Remarque : Il y a souvent confusion entre la version de la norme USB (USB1.0, USB1.1, USB2.0) et la vitesse maximale de communication : par abus on entend souvent "ma clé usb va vite parce qu'elle est USB2.0" NON ce n'est pas la raison. En toute rigueur il faut dire qu'un périphérique est capable de communiquer en Low Speed en Full Speed ou en High Speed. USB1.0 USB1.1 USB2.0 sont les trois versions actuelles de la norme, USB2.0 ne signifie pas obligatoirement une communication High Speed. Une souris par exemple peut répondre à la norme USB2.0 et fonctionner en Low Speed (1.5Mbits/s)!!! Ne vous faites pas avoir par les vendeurs malveillants... V) Les caractéristiques matérielles du bus : La transmission sur le bus USB est une transmission «quasi différentielle» qui se réalise sur les deux lignes de données : data+ et data-. La norme USB définie 3 états sur les lignes du bus : Etat J : Data+ - Data- < -200mV Etat K : Data+ - Data- > 200mV Etat SE0 : -200mV < Data+ - Data- < 200 mv Le codage des données se fait selon la méthode NRZI (Non Retour à Zéro Inversé). Un "1" est représenté par l'absence de changement d'état du bus, un "0" est représenté par un changement d'état du bus. Ce codage permet d'avoir un débit en Mbits 1,4 fois plus élevé que la bande passante réelle du système, en l'occurrence ici la bande passante du câble. Ce codage est réalisé de façon matérielle, c'est le composant host qui sérialise les données en respectant ce codage. Le codage est donc transparent pour l'utilisateur. Afficheur MAT Bus USB 3
Ce codage est illustré sur la figure suivante : Les données sur le BUS USB sont transmises avec le bit de poids faible en premier («Little Endian»). V) Communications sur le bus USB : Le host initie toutes les transactions, un périphérique ne peut pas prendre la parole si l'host ne la lui a pas donnée. On parle de maître-esclave, l'abolition de l'esclavage n'ayant pas été prononcée dans le domaine de l'électronique! Les transmissions sur le bus USB se réalisent à l'aide de paquets (principe fondamental du bus USB). Il existe deux types de paquets principaux : les paquets JETON (TOKEN) et les paquets DONNEE (DATA). Les paquets TOKEN permettent d'initier toutes les transactions USB, ils sont produits par le host pour : Décrire ce qui va suivre, donner la direction des données (IN ou OUT). Indiquer l'adresse du périphérique concerné. Indiquer le numéro de la terminaison du périphérique. Les paquets DATA, comme leur nom l'indique sont des paquets qui transportent des données. Composition d'un paquet TOKEN : 8 bits 8 bits 7 bits 4 bits 5 bits SYNC PID ADDRESS ENDP CRC Composition d'un paquet DATA : 8 bits 8 bits 0 to 512 bits 16 bits SYNC PID PAYLOAD CRC SYNC : Tous les paquets doivent commencer avec un champ SYNC. Le champ SYNC est utilisé pour synchroniser l'horloge du récepteur avec celle de l'émetteur/récepteur. PID : PID signifie Paquet ID. Ce champ est utilisé pour identifier le type de paquet qui est envoyé. ADDRESS : Adresse du périphérique auquel le paquet est destiné. ENDP : Numéro de la terminaison du périphérique : il s'agit d'une terminaison virtuelle, en informatique ces terminaisons sont appelées "pipes" ou "endpoints". PAYLOAD : Suite de bits contenant les données à envoyer. Afficheur MAT Bus USB 4
CRC : Cyclic Redundancy Checks (Contrôle de redondance cyclique) : Il s'agit d'une suite de bits permettant de vérifier que les données transmises ont été transférées sans erreur. Il existe plusieurs types de paquets identifiés par leur PID : SETUP : Il permet d'indiquer au périphérique que le host veut lui envoyer une commande. IN : Il permet d'indiquer au périphérique qu'il est autorisé à envoyer des données. OUT : Il permet d'indiquer au périphérique que le host va lui envoyer des données. DATA : Il permet au host ou au périphérique d'envoyer des données. ACK : Il permet d'indiquer que la transmission a bien été reçue. NAK : Il permet d'indiquer que le périphérique n'a pas de donnée à envoyer. Ensuite ces différents paquets sont organisés dans un certain ordre ; c'est ce qu'on appelle le type de transfert. Il existe 4 types de transfert en USB : Control Transfert : Ce transfert est régulièrement utilisé pour les opérations de commande et d'état. Il est utilisé par les fonctions d'initialisation. Interrupt Transfert : Ce transfert est utilisé lorsque le temps de latence doit être garanti, on l'utilise par exemple pour les périphériques HID tels que souris et claviers. Isochronous transfert : C'est un transfert qui garantit la bande passante. Il est utilisé pour les périphériques dont le flux doit être continu comme par exemple une caméra ou un périphérique audio. Bulk : C'est le transfert qui est utilisé lorsque de grandes quantités de données sont échangées. Ce transfert a l'avantage de prendre le maximum de la bande passante si elle est disponible. C'est le protocole qui est utilisé par les scanners, les imprimantes, les disques dur, les clés USB. La détection de la vitesse du périphérique : Lors de la connexion d'un nouveau périphérique le host doit en premier lieu reconnaître la vitesse du périphérique afin de pouvoir dialoguer avec lui. Pour cela la norme USB définit un protocole d'identification de vitesse : Dès son branchement le périphérique doit mettre une des lignes de donnée au niveau haut via une résistance de 1.5 kohms. Le host détermine donc la vitesse en reconnaissant le niveau haut sur l'une des deux lignes. Si la ligne data- est portée au niveau haut ; il s'agit d'un périphérique LOW SPEED. Si la ligne data+ est portée au niveau haut ; il s'agit d'un périphérique FULL SPEED. 1 byte Serial number index 1 byte Configuration number Afficheur MAT Bus USB 5
VII) Les fonctions spécifiques aux clés USB : Une clé USB est une mémoire flash qui fonctionne sur le bus USB, elle répond donc au protocole USB vu dans le chapitre précédent. Dans un premier temps la clé répondra aux requêtes USB standards (énumération) puis elle répondra aux requêtes spécifiques qui permettront d'écrire et de lire dans sa mémoire flash. L'USB comme nous l'avons vu lors de l'énumération est un protocole qui permet de diviser les périphériques en différentes classes. Cette division permet aux utilisateurs de ne pas avoir à installer un driver sur tous les ordinateurs sur lesquels ils branchent une clé USB. L'ordinateur va interroger la clé pour savoir à quelle classe elle appartient. Il utilisera ensuite un driver générique à la classe : la généricité est l'un des grands avantages de l'usb!!! Les clés USB comme les disques durs, les appareils photos, appartiennent à la classe "stockage de masse" (Mass Storage Class). Le numéro de cette classe est donné dans le descripteur d'interface, il s'agit du numéro 0x08. Cette classe se subdivise en deux sous classes : Bulk only Bulk/Control Transfer/Transfert Interrupt Ces deux sous classes définissent deux protocoles différents d'accès au stockage des données : le premier utilise uniquement les transferts Bulk pour échanger des données, tandis que le second utilise le Control Transfert pour envoyer la commande, le Bulk pour envoyer les données et le Transfert Interrupt pour recevoir l'acquittement de la commande. Les PCs utilisent uniquement le Bulk Only qui est un protocole plus rapide et qui peut être considéré plus simple. Ce protocole utilise les fonctions SCSI génériques qu'il empaquette dans des paquets USB. Ce protocole est donc beaucoup plus générique que son homologue. D'autre part le protocole Bulk/Control Transfer/Transfert Interrupt est condamné à disparaître dans les années à venir. D'autre part vu que ce protocole est celui utilisé par les PC on peut avoir un exemple concret (reverse engineering) des échanges qui sont réalisés pour lire/écrire sur les supports de stockage de masse. Comparaison de débit et du nombre de périphérique entre les différents bus du PC : Débit maximun Nombre maximum de périphérique BM IDE 16,7 DMA/33 DMA/66 DMA/100 33,4 66,8 101,2 USB v1.0 et v1.1 1,5 USB v2.0 60 IEEE 1394 50 IEEE 1394 B 200 2 4 4 4 127 127 63 63 Afficheur MAT Bus USB 6