Commercial

Protocoles synchrones vs asynchrones

Introduction

Vous avez peut-être déjà entendu parler des protocoles de communication synchrones et asynchrones (tel que UART – Universal Asynchrone Receiver and Transmitter), mais savez vous de que signifient ces termes ? Si ce n’est pas le cas, ne vous inquiétez pas car nous allons en parler dans cet article.

En communication numérique – lorsque nous souhaitons envoyer des données entre un appareil et un autre – nous devons piloter des liens de communication de données soit à l’état Haut (1 – HIGH) soit à l’état Bas (0 – LOW). Ce sont les seules options disponibles. Supposons que nous voulions envoyer la donnée ‘Hello’ d’un appareil à un autre. Si nous utilisons le codage ASCII (pour lequel chaque lettre de l’alphabet est représenté par un nombre, car les ordinateurs travaillent en interne uniquement avec des nombres), ceci serait représenté par la séquence de nombres.

72 101 108 108 111

ou en binaire

01001000 01100101 01101100 01101100 01101111

Voir notre article sur les systèmes de numération pour plus d’information.

Si nous ne disposons que d’une seule ligne de données (comme c’est le cas pour la plupart des protocoles de communication) alors nous pouvons émettre un bit après l’autre, en pilotant la ligne de données entre les états haut et bas conformément à la valeur du bit à envoyer (les couleurs ont été ajoutées pour faciliter la lecture, sachant que les données binaires n’ont pas de couleurs !) avec le LSB transmit en premier (Bit le moins significatif – Least Significant Bit).

Hello en binaire (avec un codage ASCII) et le LSB en premier.

Le LSB d’un nombre binaire est le bit de plus petite valeur (le plus lointain sur la droite) et le MSB (Most Significant Bit) est le bit de plus grande valeur (le plus à gauche). Voir notre article sur la signification de Bit & Endian

Interpréter les données

Si les données transmises étaient toujours une séquence alternée de 1 et de 0, il serait assez facile de les interpréter car le motif est régulier et prévisible :

mais évidemment ce n’est pratiquement jamais le cas. Que se passerait il pour la séquence de 4 x 1 suivie de 4 x 0 (11110000) ?

Sans information supplémentaire le récepteur pourrait dire que le signal était 10, 1100, 111000 ou 11110000 (ou 1111100000, et ainsi de suite). Il nous faut absolument quelque chose en plus pour clarifier la communication.

Synchrone ou asynchrone

Cela se résout soit avec une ligne de communication supplémentaire pour indiquer le timing de chaque bit sur la ligne de données, ou en permettant au récepteur de connaître en interne la durée de chaque bit sur la ligne de données. La première possibilité, où une ligne de communication supplémentaire est utilisée pour indiquer les timings de chaque bit, est appelée communication synchrone. La ligne supplémentaire dans la communication synchrone est appelée la ligne d’horloge (parce que les horloges sont utilisées pour chronométrer les choses). La deuxième possibilité, où le récepteur connaît en interne la durée de chaque bit sur la ligne de données, est appelée communication asynchrone. Avec la communication asynchrone, le récepteur et l’émetteur ont besoin d’une horloge interne précise pour mesurer le temps. Le récepteur et l’émetteur doivent également évidemment être réglés pour utiliser la même vitesse/timing (taux de bauds) afin de communiquer avec succès.

La transmission synchrone par rapport à la transmission asynchrone se résume donc à savoir si l’horloge est externe (synchrone) ou interne (asynchrone). Quelques exemples de protocoles asynchrones comprennent UART, USB, CAN et Ethernet. Quelques exemples de protocoles synchrones comprennent SPI, I2C et DDR.

Avantages et inconvénients

Un avantage des protocoles synchrones est qu’ils ne nécessitent pas que le dispositif ait une horloge interne très précise (plus la communication est rapide, plus l’horloge interne devrait être précise). En conséquence, les protocoles de communication synchrones sont souvent utilisés dans de petits périphériques peu coûteux tels que des capteurs. Un autre avantage des protocoles synchrones est que les deux côtés de la communication n’ont pas besoin de connaître à l’avance quel sera le débit de données (timing). Certains protocoles synchrones ont même des débits de données variables et/ou peuvent utiliser la ligne d’horloge pour indiquer qu’ils sont toujours occupés en la maintenant dans le même état jusqu’à ce qu’ils soient prêts à recevoir de nouvelles données (c’est une fonctionnalité de l’I2C) ; les protocoles asynchrones nécessitent une ligne de communication supplémentaire pour implémenter cette fonctionnalité (comme la ligne CTS/RTS dans UART).

Un avantage des protocoles asynchrones est qu’ils nécessitent moins de lignes de communication et, de ce fait, ils génèrent moins de bruit électromagnétique (voir notre article sur les interférences EMI/EMC).

Comme il peut être difficile avec les protocoles asynchrones d’obtenir une synchronisation parfaite des horloges des deux côtés, généralement ils nécessiteront de temps en temps au moins une transition sur la ligne de données afin de réaligner leurs horloges internes. Cela peut faire partie de la trame du protocole (comme avec UART), ou cela peut être mis en œuvre en exigeant l’insertion d’un bit de bourrage (stuff bit) de polarité opposée après un certain nombre de bits consécutifs de la même polarité (le bit de bourrage est éliminé lors du décodage du protocole, comme avec le protocole CAN).

Bit de bourrage du CAN après 5 bits identiques

Résumé

C’est tout ce qu’il y a à comprendre dans les termes de communication synchrone ou asynchrone.

  • Synchrone = Horloge externe
  • Asynchrone = Horloge interne

Proteus inclut dans ses bibliothèques de nombreux composants modélisés utilisables en simulation, que ce soit pour les protocoles synchrones ou asynchrones. De plus, il existe également des instruments virtuels qui supportent ces protocoles de communication.

Copyright Labcenter Electronics Ltd. 2024

Traduction française

Copyright Multipower France 2024

Signification de bit & endian

Introduction

Cet article suppose que vous êtes familier avec les systèmes de numération (Décimal / Hexadécimal) – si ce n’est pas le cas, veuillez commencer par lire l’article sur ce sujet.

En informatique, la plus petite unité de nombre est généralement l’octet (Byte – 8 bits). Techniquement la plus petite unité est le bit (1 ou 0, Vrai ou Faux), mais en terme de représentation c’est l’octet que constitue le plus petit bloc de base. Des nombres plus grands sont construits en utilisant plusieurs octets et les protocoles de communication utilisent typiquement l’octet comme la plus petite unité pour transférer des données.

Signification des bits

Par exemple, si nous considérons le nombre binaire ‘10000001’, alors les bits aux deux extrémités de la séquence binaire ont des noms spéciaux – le bit à l’extrême droite s’appelle le LSB (Least Significant Bit – Bit de moindre poids) et le plus à l’extrême gauche s’appelle le MSB (Most Significant Bit – Bit de poids le plus élevé).

Le listing des bits dans un octet illustre le MSB et le LSB. Le bit le plus à droite a la valeur décimale 1 et le bit le plus à gauche a la valeur décimale 128 (donnant ainsi la valeur totale de 129 à cet octet) – le bit de gauche a la plus grande valeur (la plus élevée) et le bit de droite a la plus petite valeur (la moins élevée).

Avec les protocoles de transmission de données série, les données peuvent être transmises soit en commençant par le LSB, soit en commençant par le MSB. Les protocoles USB et UART transmettent le LSB en premier alors que les protocoles I2C et CAN transmettent le MSB en premier. Le SPI peut être configuré pour utiliser l’une ou l’autre option, mais généralement, c’est le MSB qui est utilisé.

Exemple de communication UART – LSB en premier

Exemple de communication I2C – MSB en premier

Endian

Lorsque plusieurs octets sont combinés en mémoire pour représenter des nombres plus grands (16 bits, 32 bits, 64 bits, etc.) il faut décider de la manière de disposer ces octets multiples en mémoire.

4 octets sont utilisés pour représenter un nombre de 32 bits

Little endian est de loin l’option la plus couramment utilisée. Dans ce cas, les positions de valeur des octets en mémoire restent les mêmes à mesure que le nombre d’octets utilisés pour représenter le nombre augmente.

Le terme endian provient du roman de 1726 ‘Les voyages de Gulliver’, dans lequel il y a un conflit entre des sectes de Lilliputiens selon qu’ils cassent la coquille d’un œuf à la coque par son extrémité la plus petite ou la plus grande.

 

Copyright Labcenter Electronics Ltd. 2024

Traduction française

Copyright Multipower France 2024

PCB Multicouches : Comprendre l’Empilement des Couches et son Impact sur la Fabrication

Découvrez ce qu’est un convertisseur boost qui permet d’obtenir une tension plus élevée et comment il fonctionne.

Découvrez ce qu’est un convertisseur buck qui permet d’obtenir une tension plus basse et comment il fonctionne. Un projet de simulation Proteus est disponible en fin d’article !!!

Les nouveautés de Flowcode 10

Changements apportés aux licences

• Flowcode est gratuit pour les amateurs avec des fonctionnalités complètes pour une gamme limitée de puces.

• Les puces gratuites comprennent des solutions de fabricants connus tels que Arduino Uno, Nano, PIC16F877 ainsi que 70 autres. 

• Les utilisateurs professionnels obtiennent des droits d’utilisation commerciale du code, un soutien prioritaire dans les forums et des fonctionnalités avancées.

• Les établissements universitaires doivent acheter une licence site et les étudiants peuvent utiliser la version gratuitement à la maison.

Panneaux de composants 2D dédiés

• Les nouveaux panneaux 2D offrent des graphismes plus clairs, une personnalisation de tous les panneaux avec vos propres dessins, notes et d’autres options disponibles.
• Vous pouvez ajouter un nombre illimité de panneaux 2D à votre projet.
• Déverrouille une multitude de nouvelles options de panneau 2D, tels que les outils graphiques.

Nouveaux composants 2D

• Tous les composants ont été redessinés avec des graphiques plus clairs.
La compatibilité avec les panneaux V9 est assurée.
• La 3D est toujours prise en charge – notre objectif est de prendre en charge les modèles d’exportation de Solidworks tandis que le contrôle se déplace vers les panneaux 2D pour plus de clarté.
• Nouveaux composants primitifs avec propriétés de nidification logiciel et une autre famille de microcontrôleurs.

 

Créer des applications Web*

• L’exportation HTML vous permet de créer des projets de contrôle et de collecte de données qui fonctionnent sur n’importe quel navigateur de n’importe quelle plateforme.
• Les composants basés sur Javascript permettent de produire des applications web simples.
• Fonctionne sur du matériel à faible coût comme Arduino et Raspberry Pi.
Compatible avec les composants de serveur web existants dans Flowcode.
* Bientôt disponible

Documentation et exportation du projet

• Nouveaux rapports de projet.
• Les nouvelles primitives 2D vous permettent d’annoter chaque logigramme et panneau.
• Permet un partage facile des projets.

Simulation améliorée

• Tracer les variables sur le graphique et l’enregistreur de données.
• Amélioration de l’affichage des variables lors de la simulation.
• Simulation plus rapide.

Composants open source

• Le code des composants peut être visualisé.
• Le code de n’importe quel composant peut être modifié et personnalisé (obtenir la source à partir du wiki)

Autres améliorations :

• Sélections par vue à présent conservées.
• Messages de débogage des composants étendus.
• Listes de composants connectés sur les fenêtres analogiques/numériques.
• Arborescences personnalisables dans l’explorateur de projet et listes d’icônes.
• Les icônes sont maintenant regroupées par macro
• Fichiers de code C sauvegardés en option sous forme de fichiers c/h séparés à intégrer dans des projets externes.
• Améliorations apportées aux variables constantes.

• Sélections par vue à présent conservées.
• Messages de débogage des composants étendus.
• Listes de composants connectés sur les fenêtres analogiques/numériques.
• Arborescences personnalisables dans l’explorateur de projet et listes d’icônes.
• Les icônes sont maintenant regroupées par macro
• Fichiers de code C sauvegardés en option sous forme de fichiers c/h séparés à intégrer dans des projets externes.
• Améliorations apportées aux variables constantes.

• Ajout du support fantôme pour la carte ESP EB0058.
• Améliorations visuelles du diagramme d’interruption.
• Amélioration du support des chaînes.
• Nouvelle API pour l’utilisation de panneaux 2d (GetPanel et GetPanelName).
• Nouvelle API pour le contrôle de la vitesse de simulation (SetSimSpeed).
• Liste des icônes TODO.
• Options pour afficher uniquement les composants et/ou dispositifs sous licence.
• Badges pour afficher le nombre de cibles dans l’arborescence des périphériques.

Communication I2C

Introduction

I2C (ou IIC) contraction de Inter-IC Communication, est un des plus populaires protocoles de communication implémenté sur les microcontrôleurs. Il est couramment utilisé pour interagir avec des capteurs mais se retrouve également dans beaucoup d’autres applications.

I2C est un protocole de communication synchrone, ce qui signifie qu’il existe une ligne horloge dédiée (voir les protocoles de communication synchrones/asynchrones).

Communication I2C

Bien que l’I2C n’utilise que deux lignes de communication (horloge et données), il peut prendre en charge plusieurs périphériques sur le même bus I2C. Cela est réalisé en utilisant un schéma d’adressage où chaque périphérique sur le bus a une adresse unique. La communication commence par l’envoi de l’adresse du périphérique avec lequel la communication est prévue, et le périphérique adressé doit ensuite accuser réception en indiquant qu’il est présent et prêt à communiquer.

Comme il n’y a qu’une seule ligne de données (SDA – données sérielles), utilisée à la fois pour l’envoi et la réception de données (mode half-duplex), un mécanisme est nécessaire pour permettre au maître et au périphérique esclave de contrôler la ligne de données sans conflits. Il est essentiel d’éviter les contentions sur le bus, où un périphérique tente d’écrire un niveau haut sur le bus tandis qu’un autre périphérique tente d’écrire un niveau bas sur le bus, ce qui créerait un court-circuit.

Pour y parvenir, on utilise un mécanisme open-drain ; où chaque périphérique ne peut mettre le bus qu’à un niveau « bas » ou le « relâcher », et des résistances de tirage sont utilisées pour ramener la ligne à un niveau haut lorsqu’elle est relâchée (si vous n’êtes pas familier avec les termes open-drain ou résistance de tirage, veuillez consulter notre article sur le sujet). La ligne d’horloge (SCL – Horloge sérielle) utilise également ce mécanisme, et quelques techniques innovantes sont utilisées pour ajouter des fonctionnalités utiles au protocole I2C – nous en parlerons plus en détail sous peu.

Le diagramme ci-dessous illustre les caractéristiques typiques d’une séquence de communication I2C.

La communication débute avec le bus I2C en état de repos – les lignes d’horloge et de données ne sont pas activées et sont donc tirées vers le haut par les résistances de tirage. Ensuite, la communication est initiée par le maître (le périphérique initiant la communication) tirant d’abord la ligne SDA puis la ligne SCL vers le bas – cela est défini comme une condition de départ (Start).

Ensuite, le maître transmet l’adresse sur 7 bits du périphérique avec lequel il souhaite communiquer, suivie d’un bit « lire ou écrire » qui indique si le maître souhaite écrire (0) ou lire (1) à partir du périphérique. La ligne de données est considérée comme valide (lue par les esclaves) sur les fronts montants de la ligne d’horloge, et les données sont transmises en commençant par le bit le plus significatif (MSB).

Après que l’adresse a été transmise, et en supposant que l’esclave adressé est présent sur le bus I2C, le maître relâchera la ligne de données (open drain), et l’esclave maintiendra la ligne de données basse pendant un cycle d’horloge pour accuser réception (ack) qu’il est présent et prêt à communiquer. Si l’esclave n’est pas présent sur le bus, alors la résistance de tirage tirera la ligne de données vers le haut, et le maître saura que l’esclave n’est pas disponible.

À ce stade, les données peuvent être transmises entre le maître et l’esclave. Si des données sont lues, alors l’esclave transmettra les données (pendant que le maître continue de piloter la ligne d’horloge), ou si des données sont écrites, alors le maître transmettra les données. Après chaque octet de données, il y a un seul bit d’acquittement (Ack), pendant lequel le récepteur (qui peut être le maître ou l’esclave, selon le côté qui a transmis les données) doit maintenir la ligne de données basse pour indiquer qu’il a reçu la communication (et qu’il est prêt à passer à la communication suivante si nécessaire).

Etirement d'horloge

Les périphériques esclaves sur le bus I2C ont la capacité de retarder leurs réponses (s’ils sont toujours occupés et ne sont pas encore prêts à répondre) en maintenant la ligne d’horloge (SCL) à un niveau bas, une fonctionnalité connue sous le nom d’« étirement d’horloge » (clock stretching) ; une fois prêt à répondre, l’esclave relâche la ligne d’horloge et la transmission des données se poursuit. Ceci est similaire aux lignes de contrôle de flux dans l’UART (CTS/RTS), mais sans nécessiter de lignes de communication supplémentaires (notez que le protocole SPI n’a pas de fonction de contrôle de flux).

Un ou plusieurs octets de données peuvent être communiqués en séquence, avec un acquittement (ack) survenant après chaque octet.

Redémarrage

Parce que les périphériques esclaves peuvent avoir une multitude de valeurs disponibles à lire (telles que plusieurs valeurs de capteurs ainsi que des valeurs de réglages), l’esclave peut exiger que le maître émette d’abord une instruction indiquant ce qu’il souhaite lire avant de procéder à la lecture effective. Dans ce cas, le maître émettra d’abord une écriture avec les données indiquant ce qui doit être lu, puis le maître émettra immédiatement après une lecture. Cependant, il n’y a pas d’arrêt émis entre les deux. À la place, le maître utilise une condition de redémarrage (repeated start), suivie de l’adresse de 7 bits et du bit de lecture/écriture d’1 bit, maintenant réglé sur lecture, pour passer de l’écriture à la lecture. Pour émettre un redémarrage, le maître place d’abord la ligne de données à un niveau haut, puis la ligne d’horloge, et ensuite le maître abaisse la ligne de données suivie de la ligne d’horloge.

Débit et distances

La communication sur le bus I2C se déroule généralement à des vitesses de 100 kHz ou 400 kHz. Ces vitesses relativement basses conviennent bien pour de petites quantités de transmission de données, mais le SPI (utilisant des horloges dans la plage des mégahertz, et éventuellement en mode Dual ou Quad) est généralement préféré pour des applications à haut débit où de grandes quantités de données doivent être transmises. L’I2C est plutôt utilisé pour des communications sur des distances relativement courtes, cependant, des mécanismes existent permettant la transmission d’I2C sur des paires différentielles pour communiquer sur des distances plus longues (veuillez consulter notre article sur la conception à haut débit pour plus d’informations sur les paires différentielles).

Proteus inclut un instrument analyseur de protocole I2C en mode DUAL (maître ou esclave) à placer sur les liens du schéma. Cela vous permet ensuite de saisir et d’injecter des séquences I2C dans la simulation en cours et de visualiser les paquets reçus en provenance d’autres périphériques sur le bus I2C. C’est un excellent outil pédagogique qui permet un test rapide et facile des firmwares en mode maître et en mode esclave. Vous trouverez beaucoup d’exemples de projets qui incluent des communications I2C avec des capteurs ou des projets multi-processeurs. Tous ceux-ci peuvent être simulés dans la version de démonstration.


Copyright Labcenter Electronics Ltd. 2024

Traduction française

Copyright Multipower France 2024

Retour en haut