Question sur un paragraphe de la leçon généralité sur la voie série

a marqué ce sujet comme résolu.

Bonjour tous le monde ! je n’arrive pas à comprendre quels sont les tensions que l’on peut utiliser dans le paragraphe suivant :

Ainsi, toutes les tensions au delà des valeurs imposées, donc entre -3V et +3V, au dessous de -25V et au dessus de +25V, sont hors normes. Pour les tensions trop élevées (aux extrêmes de + et -25V) elles pourraient endommager le matériel. Quand aux tensions comprises entre + et -3V, eh bien elles sont ignorées car c’est dans ces zones là que se trouvent la plupart et même la quasi totalité des parasites. C’est un moyen permettant d’éviter un certain nombre d’erreurs de transmissions.

voilà le liens de la page en question

Bonjour tous le monde,

dans > Émulation du port série Le premier objectif et le seul que nous mettrons en place dans le cours, va être de connecter et d’utiliser la voie série avec l’ordinateur. Pour cela, rien de plus simple, il n’y a que le câble USB à brancher entre la carte Arduino et le PC. En fait, la voie série va être émulée à travers l’USB. C’est une forme virtuelle de cette liaison. Elle n’existe pas réellement, mais elle fonctionne comme si c’était bien une vraie voie série. Tout ça va être géré par un petit composant présent sur votre carte Arduino et le gestionnaire de port USB et périphérique de votre ordinateur.

je ne comprend pas pourquoi on dit que la voie série est émulée ? pour moi la liaison ordinateur / microcontrôleur ce fait par l’intermédiaire du câble usb qui est une forme physique de voie série qu’est ce qui est virtuelle ?

Le cable USB n’est pas une voie série, les signaux qui transitent dessus sont très différents. Techniquement, c’est aussi un bus série, mais il n’a rien à voir avec la liaison série asynchrone décrite dans le cours.

Si tu mes une sonde d’oscilloscope sur une liaison série, tu observeras des signaux ayant la forme suivante:

trame UART
trame UART

Tu n’observeras pas ces signaux sur les fils d’un cable USB. Le protocole USB est composite, et permet de faire plusieurs choses. Une de ces choses est de faire semblant qu’une liaison série existe. Le device, l’Arduino, dit au host "je sais faire comme si j’étais une liaison série", et le host "ok, ben on va faire comme si j’avais envoyé ces données sur la liaison série", et la classe USB décrit comment, dans le protocole USB, on passe les données qui aurait du passer sur la liaison série. Par contre il le fait à sa vitesse, et n’a pas besoin de s’encombrer des bits de start, de stop, de parité, etc… bref ce qui fait le protocole de la liaison série.

On fait seulement un transfert de données équivalent à celui de la liaison série, d’où le terme émulation. C’est comme un émulateur de NES: le résultat est le même, on peut jouer de la même façon, mais il n’y a pas réellement de NES en train d’executer le programme.

Enfin, sur la plupart des Arduino, il y a une liaison série physique, entre le microcontrôleur et le composant électronique qui fait USB vers UART: il prend la communication émulée sur USB, et la reproduit sur une liaison série physique. Mais la liaison série n’est que sur la carte, pas dans le cable USB.

Alors, probablement pas comme tu l’entends. Je vais détailler le fonctionnement de chaque partie sans utiliser le terme "émuler", mais je dois préciser que la compréhension en de ce qui suit n’est pas utile pour utiliser un Arduino. Pour l’explication simple, tu peux passer directement au dernier paragraphe. Le reste de la réponse n’est là que pour éviter de répondre "tu n’as pas besoin de le savoir", qui n’est pas une réponse très satisfaisante.

Donc reprenons par partie:

D’abord, le cable USB, ce n’est que du fil électrique, il porte le signal physique USB, et c’est tout.

Ensuite, côté PC, il y a un driver (pilote) logiciel qui propose les même fonctions qu’une interface série, mais envoie les données sur une liaison USB avec un protocole dédié (par exemple l’USB CDC-ACM. Inutile de le retenir, je le mentionne juste pour dire que ce sont des protocoles connus et documentés, que tous les gens qui font de l’USB peuvent utiliser et reconnaitre).

Et sur la carte arduino, il y a un une puce qui contient un contrôleur USB device, un contrôleur de liaison série, et probablement un cœur processeur executant un programme (inscrit en dur dans la puce) qui récupère les données reçues par l’USB, décode le protocole utilisé (l’USB CDC ACM si on suit mon exemple ci-avant), en extrait les données, et les envoie sur la liaison série. Et, dans l’autre sens, il récupère les données recues sur la liaison série, les formate dans le protocole USB utilisé, et les donnes au contrôleur USB qui les enverra au PC.

Sur la carte Arduino, il y a 2 pistes (rien de plus qu’un fil électrique sur un circuit imprimé) qui font passer les signaux RX et TX de la liaison série entre la puce ci-avant, et le microcontrôleur principal.

Et toujours sur la carte Arduino, il y a le microcontrôleur principal (un ATMEL pour les premières cartes Arduino) qui exécute ton programme, qui a une interface série, et qui envoie et reçoit les données sur cette interface à chaque fois que tu utilises l’objet Serial.

Autrement dit on n’émule pas de machine, il n’y a pas de machine virtuelle. Ce qu’on émule, c’est une liaison série directe entre le PC et le microcontrôleur de la carte Arduino, alors que, physiquement, les données ont un parcours beaucoup plus complexe. Cette complexité est simplement invisible pour le programme sur le PC (le logiciel "Arduino" que tu as probablement installé quand tu as commencé à faire de l’arduino) comme pour le programme qui s’exécute sur le microcontrôleur.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte