Protocoles de communication d’une clé USB : Analyse approfondie de la connectivité

Lorsque la clé USB est connectée à un appareil, décrit comme étant l’hôte, une communication s’effectue entre les deux parties. C’est cette communication qui nous permet de copier un fichier dans la clé ou vers l’ordinateur ; ou de lire un fichier se trouvant à l’intérieur de la clé.

En réalité, l’USB est considéré comme étant un protocole à part entière. Toutefois, la communication lors de l’utilisation de ce protocole s’effectue sur plusieurs couches de protocoles. Les parties inférieures de ces dernières étant traitées par le contrôleur, dans cet article, nous n’allons voir que le fonctionnement des couches supérieures.

Les paquets envoyés lors d’un transfert avec une clé USB

clé USB sur PC portable

Lors de chaque transaction, c’est-à-dire une communication, entre l’hôte et la clé, trois types de paquets sont envoyés. Il s’agit du paquet jeton, du paquet Data et du paquet d’états.

Le paquet Jeton, ou Token, sert d’en-tête pour chaque transaction. Il existe trois sortes de Token à savoir :

  • Les Jetons IN, signifiant que l’hôte veut lire des informations ;
  • Les Jetons OUT, voulant dire que l’hôte veut transmettre des informations ;
  • Et les Jetons SETUP, permettant d’entamer la transaction.

Le paquet Data ou paquet de données est celui dans lequel les informations utiles sont contenues. C’est donc dans ce paquet que les données que l’on souhaite lire ou écrire sur la clé sont acheminées. Il existe deux types de paquets data : Data0 et Data1. Ces derniers sont transmis alternativement afin de détecter les éventuels manques de paquets. Un paquet de données contient entre 0 à 1024 octets.

Et enfin, le paquet d’états, également appelé paquet « poignée de main » ou Handshaking, permet de valider chaque transaction. Il offre également les moyens permettant de corriger les éventuelles erreurs survenant lors de cette transaction.

Un paquet USB contient les champs suivants :

  • Sync, utilisé pour initier le paquet et synchroniser l’horloge de l’hôte et de la clé ;
  • PID, servant à identifier le type de paquet. Il existe plusieurs types de PID tels que SOF, SETUP, STALL, etc. ;
  • ADDR, utilisé pour déterminer le destinataire du paquet ;
  • ENDP, servant de champ de terminaison ;
  • CRC, un champ de contrôle à redondance cyclique ;
  • Et EOP, le champ de fin de paquet.

Il faut noter que c’est toujours l’hôte qui formule et réalise les transactions lors d’un protocole USB.

Les fonctions, les terminaisons et les canaux de communications

Les fonctions sont, entre autres, la partie qui va effectuer les tâches demandées par l’hôte. Il est composé de plusieurs séries de tampons qui appartiennent chacun à une terminaison donnée.

Une terminaison est une sorte d’intermédiaire entre le bus, c’est-à-dire la liaison entre l’hôte et la clé USB, et la fonction. Elle comprend un endpoint qui, lui-même, est associé à un buffer. Le buffer ou tampon peut être un buffer d’entrée ou de sortie. Ainsi, on pourrait obtenir les combinaisons suivantes : EP0 In, EP0 Out, EP1 In et EP1 Out. L’endpoint par défaut utilisé par l’hôte est EP0.

Pour ce qui est des canaux de communications, ou Pipes, il s’agit d’un moyen de connexion entre l’hôte et les terminaisons. Autrement dit, les données passent à travers ces canaux avant d’atteindre leurs destinations. Ils demandent certains paramètres tels que le nombre de bandes passantes nécessaires, la taille du paquet, le type de transfert effectué, etc. On retrouve deux types de canaux de communications à savoir :

  • Les flux de données, qui permettent de faire transiter n’importe quel type de données ;
  • Les flux de messages, qui n’acceptent que les données de type commande.

Les types de protocoles utilisés dans les clés USB

Voyons maintenant les différents types de protocoles USB. Le premier est le protocole Bulk Only Transport ou BOT. C’est le type de protocole utilisé par les clés USB 1.0 et 2.0. Il n’offre pas la possibilité d’envoyer plusieurs commandes simultanément.

Puis, le deuxième type de protocole est le protocole USB Attached SCSI Protocol ou UASP. Contrairement au protocole BOT, celui-ci permet de traiter plusieurs commandes en même temps. Ce sera au contrôleur de la clé de réorganiser le traitement de ces commandes afin de l’optimiser.