Instructions pas à pas pour l'utilisation d'un lecteur flash. Les ports USB ne fonctionnent pas sur l'ordinateur - moyens de résoudre le problème Fonctionnement de l'interface USB

Après avoir lu cet article et la discussion qui l'accompagne, j'ai décidé d'essayer de clarifier ce qu'est l'USB Power Delivery et comment cela fonctionne réellement. Malheureusement, j'ai eu l'impression que la plupart des participants à la discussion prennent 100 watts sur USB trop littéralement, et ne comprennent pas complètement ce qui se cache derrière au niveau des schémas et des protocoles.

Alors, brièvement - les points principaux:

  • USB PD définit 5 profils d'alimentation standard - jusqu'à [email protégé] A, avant [email protégé] A, avant [email protégé] A, avant [email protégé] A et avant [email protégé] MAIS
  • Les câbles et les ports Power Delivery sont certifiés et ont des broches supplémentaires dans le connecteur
  • Le type de câble et sa conformité au profil sont déterminés automatiquement grâce à des broches supplémentaires et la détermination du type de connecteur USB (micro, standard, A, B, etc.)
  • Les câbles USB ordinaires (pas Power Delivery) sont certifiés uniquement pour le premier profil avant [email protégé]
  • Une fois connecté, les rôles sont attribués, entre celui qui donne le courant ( La source) et qui consomme ( Évier / Récepteur)
  • La source et la destination échangent des messages à l'aide d'un protocole spécial qui fonctionne en parallèle avec l'USB traditionnel
  • Le protocole utilise une paire VBus/GND comme support physique. C'est pourquoi Power Delivery est indépendant du protocole USB sous-jacent et est rétrocompatible avec USB 2.0 et 3.0.
  • A l'aide de messages, la source et le récepteur peuvent changer de rôle à tout moment, changer le courant et/ou la tension, passer en hibernation ou se réveiller, etc.
  • Les appareils peuvent éventuellement prendre en charge le contrôle PD via des requêtes USB traditionnelles, des descripteurs, etc.
Détails sous la coupe.

À propos des hommes À propos des câbles

USB Power Delivery fonctionne avec six types de connecteurs :

En conséquence, les types de connexions suivants sont autorisés par paires

  1. USB 3.0 PD Standard-A<->Prise USB 3.0 PD Standard-B
  2. USB 3.0 PD Standard-A<->Prise USB 3.0 PD Micro-B
  3. USB 3.0 PD Micro-A<->Prise USB 3.0 PD Micro-B
  4. USB 3.0 PD Micro-A<->Prise USB 3.0 PD Standard-B
  5. USB 2.0 PD Standard-A<->Prise USB 2.0 PD Standard-B
  6. USB 2.0 PD Standard-A<->Prise USB 2.0 PD Micro-B
  7. USB 2.0 PD Micro-A<->Prise USB 2.0 PD Micro-B
  8. USB 2.0 PD Micro-A<->Prise USB 2.0 PD Standard-B
Par ailleurs, il convient de noter que la spécification interdit directement les perversions avec plusieurs connecteurs d'un côté du câble de connexion, ce qui est assez logique, compte tenu des courants jusqu'à 100 watts. En revanche, l'utilisation d'adaptateurs et d'adaptateurs n'est pas interdite, à condition qu'ils correspondent au profil de l'alimentation, et ne court-circuitent pas le blindage du câble à sa masse.

À propos des ports

Après certification, les ports USB PD sont étiquetés comme suit :

Ce logo informe sur la version USB (2.0 ou 3.0 SuperSpeed), ainsi que sur les profils d'alimentation pris en charge par ce port. La valeur "I" signifie le profil consommé, qui est nécessaire pour le fonctionnement complet de l'appareil, et la valeur "O" signifie quel profil le port peut fournir. Exemples de marquages ​​portuaires :

  • Le premier port prend en charge USB2. Il peut fournir de la nourriture selon le profil 1 ( [email protégé]) et utilise le profil 3 ( [email protégé] ou alors [email protégé]) pour un fonctionnement complet. Par exemple, un port pour une tablette ou un netbook.
  • Le deuxième port prend en charge USB2. Il peut se nourrir selon le profil 2 ( [email protégé] ou alors [email protégé]) et utilise le profil 4 ( [email protégé] ou alors [email protégé] ou alors [email protégé]) pour un fonctionnement complet. Par exemple, un port pour un ordinateur portable ou un ordinateur portable.
  • Le troisième port prend en charge USB3. Il ne se nourrit que du profil 1 ( [email protégé]). Lui-même n'est pas alimenté par VBus. Par exemple, un port d'un ordinateur de bureau, d'un moniteur, d'un téléviseur, etc.
  • Le quatrième port prend en charge USB3. Comme dans le premier exemple, il peut fournir une alimentation selon le profil 1 ( [email protégé]) et lui-même nécessite une alimentation conformément au profil 3 pour un fonctionnement complet ( [email protégé] ou alors [email protégé]). Pensez à un exemple vous-même :)

Canal physique

USB PD définit le schéma de principe de l'organisation physique d'une connexion par câble comme suit :

Comme vous pouvez le voir sur le schéma, l'USB PD nécessite également que la source et le récepteur mettent en œuvre des circuits de détection de chute de tension / surtension, ainsi que des méthodes pour déterminer une batterie déchargée dans les cas où l'une des parties ne peut pas être alimentée par sa source interne. .

Les algorithmes suivants sont suggérés pour déterminer une batterie déchargée. Si l'un des côtés fixe une résistance de 1kΩ entre l'écran et la masse, cela indique que sa batterie est déchargée. Dans une telle situation, l'autre côté joue le rôle d'une source et commence à donner le minimum de 5 V pour alimenter l'autre côté via VBus et commencer à échanger des messages en utilisant le protocole USB PD.

Comme mentionné précédemment, le protocole USB PD utilise la ligne VBus pour échanger des messages. Vous trouverez ci-dessous un schéma fonctionnel définissant les éléments fonctionnels clés de l'émetteur :

Et, en conséquence, le même schéma fonctionnel pour le récepteur :

Le codage sérialisé 4b5b et le décodage 5b4b signifient que toutes les données sur le bus, à l'exception du préambule du paquet, sont transmises par séquences de cinq bits conformément à la table de codage définie par la norme. Chacune de ces séquences code soit l'un des 16 chiffres (0x00..0x0F), soit les signaux de démarrage/synchronisation/réinitialisation et de fin de paquet. Ainsi, le transfert d'un octet prend 10 bits, un mot de 16 bits - 20 bits et un double mot de 32 bits - 40 bits, etc.

Canal logique

Le protocole USB PD est basé sur des paires challenge-réponse en série. Les demandes et les réponses sont envoyées à l'aide de paquets. Les paquets se composent d'un préambule (phase préparatoire), d'un début de paquet SOP (trois signaux Sync-1 et d'un Sync-2 final codé en 4b5b), d'un en-tête, de 0..N octets de charge utile, d'une somme de contrôle (CRC-32) et un paquet de signal de fin (signal EOP unique) :

Comme mentionné ci-dessus, le préambule n'est pas codé en 4b5b. SOP, CRC et EOP sont codés 4b5b au niveau de la couche physique, l'en-tête et la charge utile sont codés au niveau de la couche de protocole logique.
Le bus est remis à zéro en envoyant trois signaux RST1 et un signal de terminaison RST2, conformément au codage 4b5b.

Protocole

Tous les messages USB PD se composent d'un en-tête et d'un bloc de données de longueur arbitraire. Les messages sont soit générés au niveau de la couche de protocole logique puis transmis à la couche physique, soit reçus au niveau de la couche physique puis transmis à la couche de protocole logique.

L'en-tête du message a une longueur fixe de 16 bits et se compose des champs suivants :

Il existe deux types de messages - de contrôle et d'information (données).

Messages de contrôle
Les messages de contrôle se composent uniquement d'un en-tête et d'un CRC. Le nombre d'objets de données pour de tels messages est toujours défini sur 0. Les types de messages de contrôle USB PD sont indiqués dans le tableau ci-dessous :

Par ailleurs, il convient de mentionner que les champs du formulaire tActivitéSource, tSinkRequest etc. sont des constantes dont les valeurs sont globalement fixées par la spécification elle-même dans un chapitre séparé. Cela a été fait parce qu'elles ont été déterminées empiriquement à la suite d'un prototypage, et les valeurs optimales trouvées ont simplement été substituées dans un chapitre distinct afin de ne pas parcourir l'ensemble de la spécification.

Messages d'information
Ce type de message est destiné à recevoir des informations détaillées sur la source ou le récepteur, ainsi qu'à transmettre les caractéristiques demandées de l'alimentation - intensité du courant, tension, etc. Les messages de données contiennent toujours une valeur non nulle dans le champ "Nombre d'objets de données".

La spécification définit quatre types de messages d'information :

  • Objet de données de puissance t (PDO) - utilisé pour décrire les caractéristiques du port source ou les exigences du récepteur
  • Objet de données de demande(RDO) - utilisé par le port récepteur pour définir l'accord de spécification de puissance
  • BIST(Autotest intégré) Objet de données(BDO) - utilisé pour tester la connexion par rapport aux spécifications de la connexion physique
  • Objet de données de fournisseur(VDO) - utilisé pour transférer des informations non standard, supplémentaires ou autres, déterminées par le fabricant de l'équipement et en dehors du champ d'application de la spécification USB PD.
Les types de messages d'information sont codés dans le champ "Message Type" de l'en-tête du message comme suit :

Message sur les performances
Le port source doit toujours communiquer ses caractéristiques au récepteur en transmettant une série de PDO 32 bits. Les informations transmises à travers ces objets sont utilisées pour déterminer les capacités de la source, y compris la capacité de fonctionner en mode récepteur.
Les messages de performance sont représentés par un ou plusieurs objets suivant le titre :

Les messages de performance sont transmis :

  • De la source au récepteur à un certain intervalle de temps, avec une connexion directe du câble. La source doit continuer à envoyer des messages pendant une minute après la connexion jusqu'à ce qu'un accord d'alimentation réussi soit établi ou que le récepteur renvoie un RDO avec l'indicateur Capability Mismatch.
  • De la source au puits dans le but de forcer la réinitialisation de l'accord de puissance ou de modifier les caractéristiques.
  • En réponse aux messages de contrôle Get_Source_Cap ou alors Get_Sink_Cap
Chaque AOP doit caractériser un élément d'alimentation distinct faisant partie de l'appareil aux valeurs de tension maximales autorisées pour celui-ci. Par exemple, batterie intégrée 2.8-4.1V, alimentation stationnaire 12V, etc. Tous les éléments d'alimentation doivent supporter au moins 5V et, par conséquent, chaque source doit avoir au moins un PDO correspondant au profil 5V.

Le PDO correspondant à un élément de type constant 5V doit toujours venir en premier dans la chaîne d'objet.

Structure de l'objet PDO :

Différentes caractéristiques sont proposées pour chaque type d'alimentation.

Constant type d'alimentation, tension constante. La source doit avoir au moins un tel élément :

Programmable type d'alimentation, la tension peut être régulée par des demandes entre minimum et maximum :

Variante type d'alimentation, la tension peut varier dans les limites spécifiées du minimum absolu et du maximum absolu, mais ne peut pas être régulée :

Batterie, ce type est utilisé pour indiquer les batteries qui peuvent être directement connectées à la ligne VBus :

Demander un message
Des messages de requête sont envoyés par le récepteur à la source pour communiquer ses requêtes lors de la phase d'établissement du contrat de puissance. Ce message est envoyé en réponse à un message de performance et DOIT contenir un et un seul objet de demande de données, RDO, qui décrit les spécifications de puissance requises pour le récepteur.

Cette requête est de deux types, selon le type d'alimentation adressable véhiculé dans le message de caractéristiques de la source. Pour les requêtes vers un élément d'alimentation de type constant ou variable, ou une batterie, les champs "Operating Current / Power" et "Total Current / Prog Voltage" sont interprétés d'une manière, et pour les requêtes vers un élément de type programmable - d'une autre manière , puisque dans ce cas la tension est également demandée. , et l'intensité du courant.

Structure de l'objet RDO :

À mon avis, ces informations sont suffisantes pour bien comprendre le fonctionnement de l'USB Power Delivery. Je n'ai délibérément pas plongé dans la jungle associée aux minuteries, aux compteurs et à la gestion des erreurs.

Interaction avec l'USB traditionnel

Comme mentionné ci-dessus, Power Delivery est un sous-système autonome qui fonctionne en parallèle et indépendamment de l'USB canonique. Cependant, dans les cas où les appareils implémentent à la fois les protocoles USB et Power Delivery, la spécification recommande la mise en œuvre de ce qu'on appelle. System Policy Manager ou SPM, un composant qui peut contrôler l'équipement USB PD via des requêtes USB traditionnelles.

Pour les systèmes prenant en charge SPM, la spécification recommande de fournir des informations PD via des types spéciaux de descripteurs USB. Je ne considère pas nécessaire de les approfondir en détail, je vais simplement lister leurs noms :

  • Descripteur de capacité de distribution d'énergie, fait partie du descripteur BOS et indique si l'appareil prend en charge le chargement de la batterie USB, s'il prend en charge la norme USB PD, s'il peut servir de source d'alimentation et s'il peut être un récepteur. De plus, ce descripteur contient des informations sur le nombre de ports source, de ports récepteurs et la version des spécifications de charge de batterie USB et d'alimentation électrique prises en charge.
  • Descripteur de capacité d'informations sur la batterie, est requis pour tous les appareils revendiquant une batterie comme l'un des éléments d'alimentation. Contient des informations sur le nom, le numéro de série et le fabricant de la batterie, sa capacité, ainsi que les valeurs seuils du courant à l'état chargé et déchargé.
  • Descripteur de capacité de port consommateur PD, est requis pour tous les appareils qui ont déclaré la prise en charge d'au moins un port récepteur. Contient des informations sur la prise en charge des normes d'alimentation et de charge de la batterie, la tension minimale et maximale, la puissance de fonctionnement, la puissance de crête maximale et la durée maximale pendant laquelle elle peut consommer cette puissance de crête
  • Descripteur de capacité de port de fournisseur PD, est requis pour tous les appareils qui ont déclaré la prise en charge d'au moins un port d'alimentation. Contient des informations sur la prise en charge des normes Power Delivery et Battery Charging, ainsi qu'une liste de tous les objets PDO qui caractérisent les éléments d'alimentation disponibles pour l'appareil.
  • Descripteur d'exigence d'alimentation PD, requis pour tous les appareils récepteurs compatibles USB PD. Chaque appareil doit renvoyer au moins un de ces descripteurs dans le cadre de son descripteur de configuration. Ce descripteur doit venir immédiatement après le premier descripteur d'interface. S'il y en a plusieurs, il doit aller après chaque premier descripteur d'interface de fonction si IAD est utilisé, ou dans le cas d'un périphérique composite sans IAD, immédiatement après chaque descripteur d'interface et avant les descripteurs de point de terminaison.
Pour contrôler la distribution d'alimentation USB sur les requêtes USB, si l'appareil prend en charge la classe Power Delivery, la spécification fournit des commandes qui peuvent être utilisées pour transférer des requêtes et des objets PD sur USB, c'est-à-dire sur le bus de données. Un tableau récapitulatif est donné ci-dessous :

Conclusion

J'espère qu'avec cet article, j'ai suscité l'intérêt du public pour l'USB Power Delivery. Je noterai humblement que l'auteur est directement lié à cette spécification, il est donc prêt à répondre à toutes vos questions sur le Power Delivery en particulier et l'USB en général.

Interface USB (Universal Serial Bus - Universal Serial Interface) est conçu pour connecter des périphériques à un ordinateur personnel. Permet d'échanger des informations avec des périphériques à trois vitesses (spécification USB 2.0):

  • Faible vitesse ( Faible vitesse- LS) - 1,5 Mbit/s ;
  • Pleine vitesse ( Pleine vitesse- FS) - 12 Mbits/s ;
  • Haute vitesse ( Haute vitesse- HS) - 480 Mbit/s.
Un câble à 4 conducteurs est utilisé pour connecter les périphériques : alimentation +5 V, fils de signal J+ et RÉ-, fil commun.
L'interface USB se connecte les uns aux autres héberger (héberger) et l'appareil. L'hôte est situé à l'intérieur de l'ordinateur personnel et contrôle le fonctionnement de l'ensemble de l'interface. Pour connecter plusieurs appareils à un port USB, appliquez hubs (moyeu- un appareil qui fournit une connexion à l'interface d'autres appareils). Hub racine (hub racine) réside à l'intérieur de l'ordinateur et est connecté directement à l'hôte. L'interface USB utilise un terme spécial "une fonction" est un appareil logiquement complet qui remplit une fonction spécifique. La topologie de l'interface USB est un ensemble de 7 couches ( étage) : le premier niveau contient l'hôte et le hub racine, et le dernier ne contient que des fonctions. Un appareil qui comprend un concentrateur et une ou plusieurs fonctions est appelé composite (appareil compand).
Un hub ou un port de fonctionnalité qui se connecte à un hub de niveau supérieur est appelé un port en amont ( port en amont), et un port de concentrateur qui se connecte à un concentrateur ou à une fonction de niveau inférieur est appelé port en aval ( port aval).
Tous les transferts de données sur l'interface sont initiés par l'hôte. Les données sont transmises sous forme de paquets. L'interface USB utilise plusieurs types de packages :
  • paquet d'étiquettes (paquet de jetons) décrit le type et le sens du transfert de données, l'adresse de l'appareil et le numéro de série du point d'extrémité (CT est la partie adressable de l'appareil USB) ; Les balises de package sont de plusieurs types : DANS, EN DEHORS, SOF, INSTALLER;
  • paquet de données (paquet de données) contient les données transmises ;
  • paquet d'approbation (paquet de poignée de main) est destiné à rapporter les résultats du transfert de données ; il existe plusieurs types de forfaits de rabais : ACK, NAK, PARALYSER.
Ainsi, chaque transaction se compose de trois phases : la phase de transmission du paquet d'étiquettes, la phase de transmission de données et la phase de négociation.
L'interface USB utilise plusieurs types de transferts d'informations.
  • Renvoi de contrôle (transfert de contrôle) est utilisé pour la configuration de l'appareil ainsi qu'à d'autres fins spécifiques à l'appareil.
  • Streaming (transfert en vrac) est utilisé pour transmettre une quantité relativement importante d'informations.
  • Renvoi d'interruption (transfert interrompu) est utilisé pour transférer une quantité relativement faible d'informations, pour lesquelles une transmission rapide est importante. A une durée limitée et une priorité accrue par rapport aux autres types de transferts.
  • Renvoi isochrone (transfert isochrone) est également appelé streaming en temps réel. Les informations transmises lors d'un tel transfert nécessitent une échelle de temps réel lorsqu'elles sont créées, envoyées et reçues.

Transferts en streaming se caractérisent par une transmission de données sans erreur garantie entre l'hôte et la fonction en détectant les erreurs de transmission et en redemandant des informations.
Lorsque l'hôte devient prêt à recevoir des données de la fonction, il les envoie à la fonction dans la phase de transmission du paquet drapeau. DANS-paquet. En réponse à cela, la fonction, dans la phase de transfert de données, envoie un paquet avec des données à l'hôte ou, si elle ne peut pas le faire, envoie NAK- ou alors PARALYSER-paquet. NAK- le package informe de l'indisponibilité temporaire de la fonction de transmission de données, et PARALYSER-package informe de la nécessité d'une intervention de l'hôte. Si l'hôte a bien reçu les données, il envoie des fonctions dans la phase de négociation ACK
Lorsque l'hôte est prêt à transmettre des données, il envoie des fonctions EN DEHORS-package suivi d'un package de données. Si la fonction a bien reçu les données, elle envoie à l'hôte ACK-colis, sinon envoyé NAK- ou alors PARALYSER-paquet.
Transferts de contrôle comporter au moins deux étapes : Étape de configuration et stade de l'état... Entre eux peut également être situé étape de transfert de données. Étape de configuration utilisé pour effectuer CONFIGURER les transactions, au cours de laquelle des informations sont envoyées à la fonction CT de contrôle. CONFIGURER l'opération contient INSTALLER-paquet , paquet de données et paquet de réconciliation. Si le paquet de données est reçu avec succès par la fonction, alors il envoie à l'hôte ACK-paquet. Sinon, la transaction se termine.
DANS étapes de transfert de données les transferts de contrôle contiennent un ou plusieurs DANS- ou alors EN DEHORS- transactions dont le principe de transfert est le même que celui des transferts en streaming. Toutes les transactions au stade du transfert de données doivent être effectuées dans le même sens.
DANS stade de l'état la dernière transaction est effectuée, qui utilise les mêmes principes qu'en streaming. Le sens de cette transaction est l'inverse de celui utilisé dans la phase de transfert de données. L'étape d'état est utilisée pour rapporter le résultat de l'étape SETUP et de l'étape de transfert de données. Les informations d'état sont toujours transmises de la fonction à l'hôte. À dossier de contrôle (Contrôler le transfert d'écriture) les informations d'état sont transmises dans la phase de transfert de données de l'étape d'état de la transaction. À lecture de contrôle (Contrôler le transfert de lecture), les informations d'état sont renvoyées dans la phase de négociation de l'étape d'état de la transaction, après que l'hôte a envoyé un paquet de données de longueur nulle dans la phase précédente du transfert de données.
Interrompre les transferts peut contenir DANS- ou alors EN DEHORS- expédition. Dès réception DANS La fonction -package peut renvoyer un paquet de données, NAK-paquet ou PARALYSER-paquet. Si la fonction ne dispose pas d'informations pour lesquelles une interruption est requise, alors dans la phase de transfert de données, la fonction renvoie NAK-paquet. Si le fonctionnement du TC avec interruption est suspendu, alors la fonction retourne PARALYSER-paquet. Si une interruption est nécessaire, la fonction renvoie les informations nécessaires dans la phase de transfert de données. Si l'hôte a bien reçu les données, il envoie ACK-paquet. Sinon, le paquet correspondant n'est pas envoyé par l'hôte.
Transactions isochrones contenir phase de transmission et phase de transfert de données mais n'ont pas phase de négociation... L'hôte envoie DANS- ou alors EN DEHORS-signe, après quoi, dans la phase de transfert des données CT (par DANS-sign) ou hôte (pour EN DEHORS-sign) envoie des données. Les transactions isochrones ne prennent pas en charge la phase de réconciliation et le renvoi des données en cas d'erreurs.

Du fait que l'interface USB met en œuvre un protocole d'échange d'informations complexe, une unité à microprocesseur est requise dans le dispositif d'interface USB pour prendre en charge le protocole. Par conséquent, la principale option dans le développement d'un dispositif d'interface est l'utilisation d'un microcontrôleur, qui prendra en charge le protocole d'échange. Actuellement, tous les principaux fabricants de microcontrôleurs fabriquent des produits qui incluent un bloc USB.

Fabricant de l'entreprise Nom La description

Atmel
AT43301 Contrôleur de hub LS / FS 1-4 avec gestion de l'alimentation en liaison descendante partagée.
AT43312A Contrôleur de concentrateur LS / FS 1-4 avec gestion de l'alimentation du port en aval individuel.
AT43320A Microcontrôleur basé sur le noyau AVR. Dispose d'une fonction USB intégrée et d'un hub avec 4 ports aval externes fonctionnant en modes LS/FS, 512 octets de RAM, 32x8 registres à usage général, 32 broches programmables, interfaces série et SPI. La fonction dispose de 3 TC avec des FIFO de 8 octets. Une gestion individuelle de l'alimentation est fournie pour les ports en aval du concentrateur.
AT43321 Contrôleur de clavier basé sur le noyau AVR. Dispose d'une fonction USB intégrée et d'un hub avec 4 ports aval externes fonctionnant en modes LS/FS, 512 octets de RAM, 16 ko de ROM, 32x8 registres à usage général, 20 sorties programmables, interfaces série et SPI. La fonction dispose de 3 TC. Les ports en aval du hub sont alimentés individuellement.
AT43324

Microcontrôleur basé sur le noyau AVR. Dispose d'une fonction USB intégrée et d'un hub avec 2 ports aval externes fonctionnant en modes LS/FS, 512 octets de RAM, 16 ko de ROM, 32x8 registres à usage général, 34 sorties programmables. La matrice de clavier peut être de taille 18x8. Le contrôleur dispose de 4 sorties pour connecter des LED. La fonction dispose de 3 TC. Une gestion individuelle de l'alimentation est fournie pour les ports en aval du concentrateur.

AT43355 Microcontrôleur basé sur le noyau AVR. Comprend une fonction USB intégrée et un hub avec 2 ports aval externes fonctionnant en modes LS/FS, 1 Ko de RAM, 24 Ko de ROM, 32x8 registres à usage général, 27 broches programmables, interfaces série et SPI, 12 canaux 10 bits ADC. La fonction possède 1 TC de contrôle et 3 TC programmables avec des FIFO 64/64/8 octets.
Fairchild Semi-conducteur USB100 Contrôleur de manipulateurs (souris, trackball, joystick). Prend en charge la souris 2D/3D, le joystick avec trois potentiomètres, le manipulateur avec 16 boutons.

Intelligence
8x931Ax Microcontrôleur avec architecture MSC-51. Il dispose d'une fonction USB intégrée fonctionnant en modes LS/FS, 256 octets de RAM, 0/8 ko de ROM, 8x4 registres polyvalents, 32 sorties programmables, une interface série, une interface de contrôle clavier. La fonction dispose de 3 TC avec des FIFO 8/16/8 octets.
8x931Hx Microcontrôleur avec architecture MSC-51. Dispose d'une fonction USB intégrée et d'un hub avec 4 ports aval externes fonctionnant en modes LS/FS, 256 octets de RAM, 0/8 ko de ROM, 8x4 registres polyvalents, 32 sorties programmables, une interface série, un clavier interface de contrôle. La fonction dispose de 3 TC avec des FIFO 8/16/8 octets.
8x930Ax Microcontrôleur avec architecture MSC-251. Dispose d'une fonction USB intégrée qui fonctionne en modes LS/FS, 1024 octets de RAM, 0/8/16 Ko de ROM, 40 registres généraux, 32 broches programmables, une interface série. La fonction dispose de 4 (6) TC avec des FIFO de 16/1024 (256) / 16 (32) / 16 (32) / (32) / (16) octets.
8x930Hx Microcontrôleur avec architecture MSC-251. Dispose d'une fonction USB intégrée et d'un hub avec 4 ports aval externes fonctionnant en modes LS/FS, 1024 octets de RAM, 0/8/16 Ko de ROM, 40 registres généraux, 32 broches programmables, une interface série. La fonction dispose de 4 TC avec des buffers FIFO 16/1024/16/16 octets.

Puce électronique
PIC16C745 Microcontrôleur avec architecture PIC. Possède une fonction USB intégrée fonctionnant en mode LS, 256 octets de RAM, 14336 octets de ROM, 22 broches programmables, une interface série, un ADC 8 bits à 5 canaux.
PIC16C765 Microcontrôleur avec architecture PIC. Il possède une fonction USB intégrée fonctionnant en mode LS, 256 octets de RAM, 14336 octets de ROM, 33 broches programmables, une interface série, un ADC 8 canaux 8 bits.
PIC18F2450 Microcontrôleur avec architecture PIC. Dispose d'une fonction USB intégrée fonctionnant en mode LS / FS, 1536 octets de RAM, 16384 octets de ROM, 19 broches programmables, interfaces série et SPI, ADC 10 bits à 5 canaux. La fonction dispose de 8 TC.
PIC18F2550 Microcontrôleur avec architecture PIC. Dispose d'une fonction USB intégrée fonctionnant en mode LS / FS, 1536 octets de RAM, 32768 octets de ROM, 19 broches programmables, interfaces série, CAN et SPI, ADC 10 bits à 5 canaux. La fonction dispose de 8 TC.
PIC18F4450 Microcontrôleur avec architecture PIC. Dispose d'une fonction USB intégrée fonctionnant en mode LS/FS, 1536 octets de RAM, 16384 octets de ROM, 34 broches programmables, interfaces série, CAN et SPI, ADC 8 canaux 10 bits. La fonction dispose de 8 TC.
PIC18F4550 Microcontrôleur avec architecture PIC. Il dispose d'une fonction USB intégrée fonctionnant en mode LS / FS, 1536 octets de RAM, 32768 octets de ROM, 34 broches programmables, interfaces série, CAN et SPI, ADC 8 canaux 10 bits. La fonction dispose de 8 TC.
Texas Instruments TUSB2036 Contrôleur LS / FS hub 1-3 avec gestion de l'alimentation individuelle des ports en aval.

Connecteur USB type A le plus courant et le plus reconnaissable. Les souris d'ordinateur, les claviers, les disques durs externes sont équipés de ce connecteur. Le développement de ce facteur de forme USB a été achevé dans les années 90 du siècle dernier, la sortie a eu lieu avec la première version de la norme. Le principal avantage est la robustesse et la fiabilité, lui permettant de supporter un grand nombre de connexions sans aucun problème. Malgré la forme rectangulaire du connecteur, il ne peut pas être mal inséré, grâce à la protection spéciale. Cependant, en raison des grandes dimensions qui n'étaient pas adaptées aux appareils portables, des connecteurs USB plus petits ont été développés.

Connecteurs Type USBB généralement utilisé pour connecter des périphériques à un ordinateur côté périphérique. Or ce type de connecteur n'est pas courant. Il existe également des connecteurs portables de type B - MiniUSB etMicroUSB.

L'émergence du Mini USB était due à l'utilisation généralisée d'appareils miniatures, dont la taille ne permettait pas l'utilisation de connecteurs à part entière. Cependant, il est vite devenu évident que ce connecteur n'était pas fiable. Par conséquent, il a été remplacé par la spécification Micro USB. La forme modifiée a permis une prise ferme dans l'appareil, de plus, le connecteur était encore plus petit que le Mini USB. L'utilisation du Micro USB est devenue la norme de facto pour tous les appareils compacts. Mais déjà maintenant, il est remplacé par l'USB de type C.

USBTaper-C ou USB-C est la dernière norme de connecteur USB disponible. La spécification a été publiée en 2014. Cette version offre un transfert de données à haute vitesse ainsi qu'une connectivité bidirectionnelle.

Normes USB

Le 15 janvier 1996, la première spécification de la norme de bus série universel a été introduite - USB 1.0... Le taux de transfert de données ne dépassait pas 12 Mbps et le courant maximal fourni aux appareils connectés était de 500 mA.

VersionUSB 1.1 n'a corrigé que les erreurs commises dans la conception de la première spécification, mais c'est la 1.1 qui a d'abord été largement utilisée. La norme USB 2.0 a été annoncée en avril 2000 et a servi de mise à jour à USB 1.1.

USB 2.0 fourni une bande passante supplémentaire pour les applications, les médias et le stockage. La vitesse de transfert de données a augmenté de 40 (!) Fois. Pour assurer une transition en douceur vers la nouvelle norme pour les consommateurs et les fabricants, l'USB 2.0 était entièrement compatible avec les périphériques USB d'origine.

Cette norme prend en charge trois modes de vitesse (1,5, 12 et 480 mégabits par seconde) :

  • Basse vitesse (pas plus de 1,5 Mbps) - claviers, souris, manettes de jeu ;
  • Pleine vitesse (pas plus de 12 Mbps) - appareils audio et vidéo;
  • Haute vitesse (pas plus de 480 Mbps) - périphériques hautes performances;

L'introduction de l'USB 2.0 a fait des progrès significatifs dans le développement de "dispositifs" périphériques pour ordinateurs personnels. Cette norme permettait à plusieurs appareils énergivores d'être connectés à l'hôte en même temps.

Standard USB 3.0 (Très rapideUSB) est devenu officiel le 17 novembre 2008. La nouvelle spécification prenait en charge des taux de transfert 10 fois plus rapides (jusqu'à 4,8 gigabits par seconde) que l'USB 2.0. Le courant maximum fourni aux périphériques est passé de 500 mA à 900 mA. Cela a permis de ne pas utiliser d'alimentations supplémentaires pour certains gadgets, ainsi que d'augmenter le nombre d'appareils alimentés par un port.

La transition vers l'USB 3.0 a été très lente. Intel a reporté l'introduction de la norme dans ses chipsets jusqu'en 2011. Le logiciel manquait également de support pour la nouvelle spécification : ni Windows ni Linux ne pouvaient fonctionner avec la version 3.0 à ce moment-là.

À l'été 2013, une norme mise à jour a été élaborée - USB 3.1... Le taux de transfert de données est passé à 10 Gbps. La norme 3.1 est rétrocompatible avec les versions 2.0 et 3.0. C'est avec cette version que de nouveaux connecteurs USB Type-C ont commencé à apparaître.

L'USB 3.2 promet de doubler à nouveau le taux de transfert de données - jusqu'à 20 Gbps.

Concentrateurs USB (concentrateurs USB, concentrateurs USB)

Les ordinateurs ont au moins un ou deux ports USB. Mais avec autant de périphériques USB sur le marché, vous manquerez rapidement de ports disponibles. Vous pouvez avoir un clavier, une souris, une imprimante, un microphone et une webcam connectés via USB en même temps. La question évidente se pose : « Comment connecter tous les appareils ?

Une solution simple au problème consiste à acheter un concentrateur USB bon marché (hub). Qu'est-ce qu'un concentrateur USB ?

Le concentrateur USB est un appareil qui agit comme un "adaptateur" d'un connecteur USB à plusieurs.

La norme USB prend en charge la connexion de jusqu'à 127 appareils à un seul port, et les concentrateurs USB font partie de la norme. De plus, en utilisant des concentrateurs USB, vous pouvez augmenter la longueur du câble USB du maximum possible pour un câble de 5 mètres à 30.

Vous branchez un répartiteur sur votre ordinateur, puis branchez vos appareils (ou autres répartiteurs) directement dessus. En connectant des hubs ensemble, vous pouvez créer des dizaines de ports USB disponibles sur un seul ordinateur.

Les concentrateurs peuvent ou non alimenter les appareils connectés. Les appareils énergivores (imprimantes, scanners, etc.) ont leur propre source d'alimentation, mais les appareils à faible consommation (souris, claviers, etc.) sont alimentés par l'ordinateur. Cela simplifie grandement le travail avec eux. L'alimentation (jusqu'à 500 milliampères à 5 volts pour l'USB 2.0 et 900 milliampères pour l'USB 3.0) provient du bus de l'ordinateur. Si vous disposez de nombreux périphériques auto-alimentés (tels que des imprimantes et des scanners), votre hub n'a pas besoin d'alimentation. Si vous avez beaucoup d'appareils non alimentés tels que des souris et des claviers, vous avez probablement besoin d'un concentrateur puissant avec sa propre alimentation.

Comment fonctionne l'USB ?

Comme nous l'avons déjà dit, plusieurs appareils peuvent être connectés à un hôte USB en même temps. Chaque appareil se voit attribuer un l'adresse- Nombre binaire 7 bits (d'où la limite de 127 appareils). Au moment de la connexion à l'hôte, l'appareil envoie des données contenant des informations sur le type d'appareil, le fabricant, etc. Sur la base de ces données, l'hôte décide dans quel mode travailler avec cette machine.

L'échange de données entre les appareils s'effectue à l'aide transactions- des séquences constituées de plusieurs paquets (blocs) d'informations. L'échange commence toujours par l'envoi d'un petit paquet (jeton) de l'hôte, qui contient des informations sur l'adresse de l'appareil, le sens de transmission, etc. Afin de ne pas aller trop loin, nous allons donner un exemple des tokens les plus couramment utilisés :

  • DANS(l'hôte est prêt à recevoir des données de l'appareil) ;
  • EN DEHORS(l'hôte est prêt à transmettre des données à l'appareil) ;
  • INSTALLER(l'hôte informe l'appareil du transfert ultérieur des informations de configuration) ;

Une transaction peut transmettre plusieurs paquets à la fois, à condition que la longueur des données dans le paquet soit le maximum autorisé. La transmission des données se termine lorsqu'un paquet de données incomplet est reçu. Après cela, l'appareil renvoie un paquet de confirmation de la réussite ou de l'échec de l'opération. Les paquets d'une transaction sont transmis en continu et sans pause, le délai ne doit pas dépasser 1 microseconde. Si la pause est prolongée, la transaction sera considérée comme fausse.

L'utilisation de ports et de connecteurs USB est devenue omniprésente. Ils sont utilisés sur les ordinateurs, les appareils mobiles et les périphériques de stockage. Les connecteurs USB ont grandement facilité le processus d'alimentation des appareils et de transfert de données dans le monde moderne.

Aujourd'hui, l'utilisateur ordinateur sait qu'il est possible de connecter vos systèmes à une large gamme d'appareils externes : non seulement des imprimantes et des modems, mais aussi des scanners, des caméscopes, des périphériques de stockage portables, des PDA et de nombreux autres périphériques. Mais pendant longtemps, quiconque tentait de le faire était gêné par le manque de ports E/S adaptés.

À notre époque de technologies innovantes, personne ne peut imaginer sa vie sans ordinateur. Mais que faire si vous avez des problèmes avec cela? Pas toujours, même l'utilisateur le plus avancé, n'est capable de faire face seul aux problèmes informatiques. Par conséquent, notre aide informatique Perovo propose ses services avec une visite à n'importe quel point de Perovo, la réparation d'ordinateurs pour vous, où que vous soyez

Pendant longtemps le seul universel Interface PCétait SCSI, une option coûteuse justifiée uniquement pour les périphériques à large bande passante. Les périphériques nécessitent généralement un port série ou parallèle, ou utilisent une interface propriétaire.
Conçus à l'origine pour les imprimantes et les modems, les ports série et parallèle de l'ordinateur laissent beaucoup à désirer en tant que cibles d'interface générales. Leurs taux de transfert de données sont faibles (maximum 115Kbit/sec pour le port série, jusqu'à 400KB/sec pour l'interface parallèle), et chaque appareil nécessite sa propre interruption matérielle (IRQ), ce qui limite le nombre d'extensions possibles. Et il n'y avait aucun espoir d'atteindre la connectivité et le fonctionnement avec ces interfaces, cela est essentiel si vous connectez des périphériques à ordinateur doit être fait d'une manière qui peut être réalisée par des utilisateurs non techniques.
Le besoin de vitesses moyennes, d'une interface peu coûteuse pouvant être utilisée pour connecter un nombre presque illimité d'appareils a finalement été reconnu et une solution a été trouvée. Bus série universel - USB.
Conception d'objectif
USB a été conçu pour permettre l'installation d'un grand nombre (jusqu'à 127) de périphériques bas et moyen débit sur un PC, avec un taux de transfert maximum de 12Mbit/sec. L'USB n'a jamais été conçu comme une alternative au port SCSI, mais il est toujours beaucoup plus rapide que les ports série ou parallèle.
Une attention particulière a été accordée aux besoins des appareils audio et vidéo, pour lesquels une plus grande importance a été accordée aux performances pour la prochaine génération d'applications personnelles. La conception USB fournit des données isochrones qui seront livrées sans délai et qui peuvent nuire à la qualité de l'image et de la parole.
interface USB a été conçu pour être facile à brancher et à jouer. Des périphériques peuvent être ajoutés et supprimés même lorsque le système est en cours d'exécution, évitant ainsi d'avoir à redémarrer et à reconfigurer le système. Des problèmes techniques tels que l'attribution d'un identifiant à un appareil, qui prennent en charge l'architecture matérielle et logicielle, de sorte que ces sources communes ne seront pas un problème et une erreur de configuration. Un système a été introduit pour économiser l'énergie, permettant de suspendre des appareils.
Appareils typiques USB nécessitant une bande passante faible à moyenne. Au bas de la bande passante, USB peut être utilisé pour connecter le clavier et la souris à l'ordinateur. Sur le dessus, des scanners, des périphériques de sauvegarde ou des caméras pour les applications de visioconférence pouvant utiliser USBéliminant le besoin de cartes d'interface propriétaires et les problèmes d'installation et de configuration associés.
Une architecture de bus dans laquelle les données de différents appareils transitent sur le même câble a également le potentiel de simplifier les communications. Par exemple, une souris peut se connecter à un clavier et un seul câble les reliera alors à ordinateur... Bien que les moniteurs nécessitent toujours un câble VGA analogique, une liaison USB séparée permettra aux moniteurs de fonctionner à partir du logiciel sur ordinateur plutôt que sur l'écran. Dans le cas d'un moniteur multimédia, les données audio des haut-parleurs et du microphone intégrés peuvent également être envoyées via le même câble.
Couche physique
Périphériques USB sont reliés entre eux à l'aide d'un câble à quatre conducteurs blanc de 90 ohms bon marché. Périphériques USB peut être auto-alimenté (avec son propre auto-alimenté) ou alimenté par bus. Une des paires de fils du câble USB utilisé pour transmettre la puissance + 5 : la broche 1 porte la tension d'alimentation +5 V, la broche 4 est commune. Il existe deux classes de dispositifs alimentés par bus. Les appareils à faible puissance ne peuvent pas consommer plus de 100 mA de courant, tandis que les appareils à haute puissance peuvent consommer jusqu'à 500 mA. La deuxième paire de fils, D + et D-sur les broches deux et trois, est une paire torsadée utilisée pour la transmission de données. Ces fils utilisent une signalisation différentielle : et transportent un signal par rapport à la terre, une transition se produit lorsque deux lignes de données inversent la polarité l'une par rapport à l'autre. Cela donne une meilleure immunité au bruit qu'un signal logique asymétrique conventionnel.
Les données sont envoyées sous la forme d'un flux de bits série synchrone codé avec NRZI (0 représente la transition du signal et 1 dans la période de transition.) Le bit est utilisé pour garantir que les transitions se produisent suffisamment fréquemment pour que les récepteurs ne perdent pas la synchronisation. Des signaux temporels sont transmis avec les données, la synchronisation de champ précède chaque paquet de données.
USB fonctionne à deux vitesses différentes. La pleine vitesse donne une bande passante de 12Mbit/sec. A cette vitesse, un câble blindé doit être utilisé pour obtenir une immunité adéquate aux interférences et éviter les interférences électromagnétiques (EMI). Câble blindé environ 5 mm. de diamètre, les segments de câble peuvent avoir une longueur maximale de 5 mètres.
Pour les applications qui nécessitent une faible bande passante, la vitesse de fonctionnement est plus faible. Cela permet d'utiliser un câble non blindé légèrement plus fin et moins cher. La longueur du câble est réduite avec un câble non blindé et peut atteindre 3 m maximum. Pour empêcher le signal, le haut débit est transmis sur un câble non blindé (ce qui conduira à l'EMI) et pour éviter le risque que les appareils à faible débit ne détectent par erreur le débit en bauds complet sous la forme de commandes auxquelles ils doivent répondre, les connexions des appareils à faible vitesse sont désactivés à ce moment-là lorsque la signalisation à pleine vitesse est utilisée.
Deux types de fiches et prises, appelées série A et série B, qui sont spécifiées pour USB ports. La série plug and socket est conçue pour être utilisée avec des appareils auxquels un câble externe est fermement connecté, tels que des claviers, des souris et des concentrateurs. Les connecteurs de la série B sont utilisés lorsque le câble est USB amovible, comme dans le cas des imprimantes, des scanners et des modems. Les deux types ne sont pas interchangeables.
La série B a des connecteurs de 10,6 mm x 12,0 mm avec des rainures pour broches. Les fiches et les prises sont petites, donc les ports USB installé sur les ordinateurs portables, ainsi que sur les ordinateurs de bureau ordinateurà mesure que la technologie devient plus répandue. Ports USB l'icône graphique montrée dans la figure est assignée.

La suite de l'article suit, nous lisons dans les articles suivants.

Commençons par un minimum :
inclure 18f2455 - bibliothèque pour le MK utilisé
--
enable_digital_io () - commutation de toutes les entrées en mode numérique
--
alias Bouton est broche_B7 - puisque nous avons un bouton connecté, nous le déclarerons
pin_B7_direction = entrée - le bouton fonctionne pour nous d'entrer
--
- une ligne - et nous avons tout ce dont vous avez besoin pour travailler avec USB CDC
inclure usb_serial - bibliothèque pour travailler avec usb
--
usb_serial_init () - --initialiser le CDC USB
boucle éternelle- le cycle principal, est effectué en permanence
usb_serial_flush () - mise à jour usb. Cette procédure effectue toutes les opérations nécessaires
- actions pour maintenir une connexion avec un PC
boucle de fin

En compilant ce code, en écrivant le fichier HEX résultant sur le MK à l'aide d'un chargeur de démarrage et en démarrant le périphérique, vous pouvez observer comment un nouveau périphérique est défini dans le système : port de communication virtuel.

Maintenant que l'appareil fonctionne déjà, nous allons lui apprendre à communiquer.

Pour lire l'octet reçu, il existe une fonction usb_serial_read ( octet ) : booléen. S'il y a un octet reçu, il le stocke dans la variable spécifiée et renvoie vrai, sinon il retourne faux.

Il existe une procédure pour envoyer un octet usb_serial_data... Il est déguisé en variable, donc pour envoyer un octet il suffit de lui affecter la valeur de l'octet envoyé.

Déclarons une variable de la taille d'un octet avant la boucle principale, dans la boucle principale, nous vérifierons la présence des octets reçus et, le cas échéant, les renverrons.

inclure 18f2455
--
enable_digital_io ()
--
alias Bouton est broche_B7
pin_B7_direction = entrée
--
--
inclure usb_serial
--
usb_serial_init ()
var octet ch - on déclare une variable
boucle éternelle- boucle principale
usb_serial_flush ()
si(usb_serial_read (canal)) ensuite- si un octet est reçu, il sera écrit dans ch
usb_serial_data = ch - renvoyer l'octet reçu
fin si
boucle de fin

On compile, on maintient le bouton enfoncé, on jongle avec l'alimentation, on lance le bootloader, on change le firmware, on l'exécute.
L'appareil a de nouveau été détecté dans le système, nous avons maintenant besoin d'un logiciel pour tester le fonctionnement de l'appareil.

Bien que nous n'ayons pas le nôtre, nous utilisons un terminal prêt à l'emploi : j'ai utilisé le programme RealTerm.
Nous ouvrons le port avec le numéro souhaité et envoyons les données.


Et nous récupérons ce que nous avons envoyé. Donc tout fonctionne comme il se doit.

Logiciel

Ainsi, notre microcontrôleur est capable de recevoir des octets et de les renvoyer immédiatement. Écrivons maintenant notre propre logiciel pour communiquer avec lui (j'utiliserai Delphi).

Nous créons un nouveau projet, répartissons les composants nécessaires sous la forme :
SpinEdit1 - pour spécifier le numéro de port
Button1 - pour établir une connexion
Button2 - pour déconnecter la connexion
SpinEdit2 - pour la saisie d'octets décimaux
Button3 - pour envoyer un octet
Memo1 - pour afficher les informations reçues.

Comme mentionné ci-dessus, vous devez travailler avec le port com de la même manière qu'avec un fichier texte normal : en utilisant les fonctions CreateFile, WriteFile et ReadFile.

Afin de ne pas entrer dans les détails, prenons une bibliothèque prête à l'emploi pour travailler avec un port com : ComPort.

Nous accrochons la tâche nécessaire sur chaque bouton et obtenons le code final :

unité Unité1;

interface

Les usages
Windows, messages, SysUtils, variantes, classes, graphiques, contrôles, formulaires,
Boîtes de dialogue, StdCtrls, Spin, ComPort ;

Taper
TForm1 = classe (TForm)
SpinEdit1 : TSpinEdit ;
Button1 : TButton ;
Button2 : TButton ;
SpinEdit2 : TSpinEdit ;
Button3 : TButton ;
Mémo1 : TMémo ;
procédure OnRead (Expéditeur : TObject ; ReadBytes : tableau d'octets) ;
procédure Button1Click (Expéditeur : TObject) ;
procédure Button2Click (expéditeur : TObject) ;
procédure FormDestroy (expéditeur : TObject) ;
procédure Button3Click (Expéditeur : TObject) ;
privé
(Déclarations privées)
Port : TComPort ;
Publique
(Déclarations publiques)
finir;

var
Form1 : TForm1 ;
nombre : entier ;
la mise en oeuvre

Procédure TForm1.Button1Click (expéditeur : TObject) ;
commencer
Port : = TComPort.Create (SpinEdit1.Value, br115200) ; // crée une connexion
Port.OnRead : = OnRead ; // crée un flux pour lire les données reçues
Button2.Enabled : = vrai ; // activer le bouton pour fermer la connexion
finir;

Procédure TForm1.Button2Click (expéditeur : TObject) ;
commencer
Port.Gratuit ; // ferme la connexion
Button2.Enabled : = faux ; // désactiver le bouton
finir;

Procédure TForm1.Button3Click (expéditeur : TObject) ;
commencer
si Button2.Enabled alors Port.Write ();
finir;

Procédure TForm1.FormDestroy (expéditeur : TObject) ;
commencer
si Button2.Enabled alors
Port.Gratuit ;
finir;

Procedure TForm1.OnRead (Expéditeur : TObject ; ReadBytes : tableau d'octets) ;
var
i : entier ;
commencer
pour i : = Faible (ReadBytes) à High (ReadBytes) do // parcourir le tableau des octets reçus
commencer
Mémo1.Texte : = Mémo1.Texte + "." + InttoHex (ReadBytes [i], 2); // ajoute sa valeur HEX à la fenêtre
inc (nombre); // compte le nombre d'octets reçus
finir;
si num> 10 alors commencer
Mémo1.Lignes.Ajouter (""); // boucle la ligne
nombre : = 0 ;
finir;
finir;

Nous commençons, établissons une connexion, envoyons des octets :

Ainsi, notre terminal le plus simple est prêt à fonctionner avec le périphérique USB le plus simple.

Comme vous pouvez le voir, la lecture et l'écriture se font avec des tableaux d'octets dynamiques.

En traitant les informations reçues, il est possible de composer le protocole d'échange nécessaire adapté à la tâche en cours.

inclure 18f2455
--
enable_digital_io ()
--
alias Bouton est broche_B7
pin_B7_direction = entrée
--
--
inclure usb_serial
--
usb_serial_init ()
var octet ch
var octet je - on déclare la deuxième variable
boucle éternelle- boucle principale
usb_serial_flush ()
si(usb_serial_read (canal)) ensuite- si un octet est reçu, nous effectuons les actions nécessaires
Cas ch de - itérer sur le numéro d'octet
0 : usb_serial_data = 0xff
1 : usb_serial_data = bouton - l'état du bouton d'envoi
AUTREMENT bloquer- si autre chose est reçu
pour 16 en utilisant je boucle- envoyer 10 octets avec des données
usb_serial_data = ch + i - ch à ch + 15
boucle de fin
bloc de fin
cas de fin
fin si
boucle de fin

Caractéristiques supplémentaires

Si vous vous arrêtez à cela, vous obtenez un article régulier avec une description détaillée d'un exemple d'utilisation de la bibliothèque, dont il existe suffisamment sur Internet. Par conséquent, je vais ajouter des informations un peu plus approfondies.

Simplifier l'envoi de données

L'envoi d'informations un octet à la fois n'est pas toujours pratique. Une bibliothèque peut souvent être utile imprimer... Il contient des procédures pour envoyer des données de toutes les longueurs possibles dans tous les formats possibles : octet, hexadécimal, déc, bin, booléen, ce qui peut simplifier la sortie des données dans un programme.
> inclure l'impression
...
var dword Les données
print_dword_hex (usb_serial_data, données)

Le nom de toutes les commandes se trouve dans le fichier de bibliothèque.

En attente de connexion PC

Si, avant de démarrer le cycle principal du microcontrôleur, il est nécessaire d'établir d'abord une connexion avec le PC, alors vous pouvez ajouter des lignes devant celui-ci
tandis que(usb_cdc_line_status () == 0x00) boucle
boucle de fin

Lier le numéro de port à l'appareil

Si vous laissez tout tel quel, le système attribuera le premier numéro de port libre à chaque nouvelle connexion. Et cela signifie que vous devrez toujours le surveiller.
Afin d'éviter que cela ne se produise, l'appareil doit se voir attribuer une valeur unique pour le numéro de série avant de connecter la bibliothèque USB :
Le numéro peut être de n'importe quelle longueur et contenir des caractères différents.
octet const USB_STRING3 =
{
24 , - longueur du tableau
0x03, - bDescriptorType
"0" , 0x00,
"1" , 0x00,
"2" , 0x00,
"3" , 0x00,
"4" , 0x00,
"5" , 0x00,
"6" , 0x00,
"7" , 0x00,
"8" , 0x00,
"9" , 0x00,
"X", 0x00
}

Remplacez le nom de l'appareil par le vôtre

Vous pouvez modifier le nom du périphérique visible dans le système avant d'installer les pilotes en déclarant un tableau avec le nom, comme le numéro de série, cela doit être fait avant de connecter la bibliothèque USB.
octet const USB_STRING2 =
{
28 , --
0x03, - bDescriptorType
"RÉ", 0x00,
"e", 0x00,
"m", 0x00,
"o", 0x00,
" " , 0x00,
"B", 0x00,
"o", 0x00,
"une", 0x00,
"r", 0x00,
"ré", 0x00,
" " , 0x00,
"=" , 0x00,
")" .0x00
}

Mais hélas, après avoir installé les pilotes, le périphérique changera le nom en celui spécifié dans le fichier .inf, nous allons donc changer le nom là aussi.


DESCRIPTION = "Démo CDC"

Nous organisons la connexion automatique des appareils

Hélas, il n'y a pas de moyens directs pour accomplir cette tâche, vous devez donc vous arranger.

Tout d'abord, vous devez attribuer à votre appareil un fabricant et une valeur de produit uniques afin de l'identifier facilement parmi des centaines d'autres firmwares CDC standard.
Le VID et le PID sont émis contre de l'argent, alors suivons le chemin des chinois : on va tranquillement prendre pour nous des valeurs évidemment gratuites.

Micrologiciel :
Deux variables doivent être déclarées dans le firmware avant de connecter la librairie USB

mot de const USB_SERIAL_PRODUCT_ID = 0xFF10
mot de const USB_SERIAL_VENDOR_ID = 0xFF10

Au lieu de FF10, vous pouvez insérer deux mots quelconques (2 octets). Le résultat final est contenu dans l'archive jointe.

Conducteurs:
Étant donné que les pilotes ne sont pas destinés à notre combinaison de VID et PID, ajoutons manuellement nos valeurs au fichier .inf :


% DESCRIPTION% = DriverInstall, USB \ VID_FF10 & PID_FF10


% DESCRIPTION% = DriverInstall, USB \ VID_FF10 & PID_FF10

Logiciel:
Pour capturer les événements de connexion / déconnexion d'un périphérique, connectez la bibliothèque ComponentUSB. Je ne pense pas qu'il soit nécessaire d'expliquer chaque ligne : tous les changements peuvent être vus dans le projet ci-joint.

Résultat

C'est difficile à voir dans la capture d'écran, mais le bouton d'envoi n'est actif que lorsqu'il y a un appareil connecté, alors que toutes les 50 ms le programme envoie une demande pour recevoir l'état du bouton (ce qui est cependant faux, car appuyer sur le bouton doit être traité sur le MC).

Comme vous pouvez le voir, organiser l'échange de données entre MK et PC via USB n'est pas la tâche la plus difficile. La connexion résultante peut être utilisée non seulement à des fins finales : elle convient également au débogage d'un programme. Après tout, envoyer les résultats des calculs, les états actuels des registres et des variables à un ordinateur est beaucoup plus clair que de faire clignoter une paire de LED en code Morse.

Et enfin : je vous conseille de regarder dans le code source de la lampe d'ambiance. Vous y trouverez une très bonne option pour traiter les données reçues afin d'organiser un protocole d'échange pratique.

Vous avez aimé l'article ? A partager entre amis :