Question:
Bits de démarrage dans les communications série asynchrones
brenzo
2017-03-21 22:17:48 UTC
view on stackexchange narkive permalink

Je comprends conceptuellement la communication série synchrone, mais j'ai des problèmes avec le fonctionnement asynchrone.Plus précisément dans cette situation:

Disons que je veux envoyer un octet: 0x03.Nous avons un bit de démarrage et un bit d'arrêt, respectivement bas et haut.Comment l'appareil récepteur "sait-il" que j'envoie un bit de démarrage suivi de 6 0?Comment sait-il qu'il ne s'agit pas simplement d'un long bit de départ?

Suivi: qu'est exactement un UART?Je demande quelle est l'utilisation courante, car j'ai vu plusieurs endroits le désigner comme un standard et d'autres comme un matériel.

À de très rares exceptions près, les données série sont ** le bit le moins significatif en premier **, donc 0x03 (8 bits sans parité) est start = L 1 = H 1 = H 0 = L 0 = L 0 = L 0 =L 0 = L 0 = L arrêt = H
Cinq réponses:
Olin Lathrop
2017-03-21 22:36:59 UTC
view on stackexchange narkive permalink
Comment le périphérique récepteur "sait-il" que j'envoie un bit de démarrage suivi de 6 0? Comment sait-il qu'il ne s'agit pas simplement d'un long bit de départ?

Parce qu'avec ce type de communication, l'expéditeur et le destinataire doivent s'entendre à l'avance sur quelques paramètres. Les deux paramètres clés ici sont la vitesse de transmission et le nombre de bits de données.

La ligne commence au niveau inactif. L'émetteur envoie d'abord le bit de démarrage, qui est au niveau opposé. Il envoie ensuite les bits de données, suivis du bit d'arrêt.

Contrairement à ce que d'autres ont dit, le bit d'arrêt n'est pas une somme de contrôle. Il est nécessaire pour qu'il y ait toujours une transition au bord avant du bit de départ. Sinon, si le dernier bit de données du caractère précédent était de la même polarité qu'un bit de début, le récepteur ne pourrait pas voir le bit de début si un nouveau caractère était envoyé immédiatement. Le bit d'arrêt est essentiellement le temps d'inactivité de ligne entre les caractères. Cette heure est également utilisée pour absorber un certain décalage d'horloge entre l'expéditeur et le destinataire.

Lorsqu'il est inactif, le récepteur surveille la ligne à la recherche de son passage à l'état non inactif. Lorsque cela se produit, il démarre un chronomètre. Puisqu'il est configuré pour le même débit binaire que l'émetteur, il sait quand chaque bit de données est envoyé, s'il diffère ou non d'un bit précédent. Le milieu du premier bit de données est à 1 ½ bit à partir du front avant du bit de départ. La seconde à 2½ bits, etc.

Une fois le dernier bit de données reçu, le récepteur attend que la ligne revienne à l'état inactif, puis attend à nouveau le bit de démarrage suivant.

Un UART est un appareil qui fait tout ce temps de transmission et de réception pour vous.Vous configurez l'UART pour le débit en bauds que vous utiliserez, le nombre de bits de données et quelques autres paramètres.Après cela, vous ne lui donnez généralement que des octets complets et il s'occupe de récupérer les bits.Pour la réception, il détecte le bit de départ, effectue le chronométrage, saisit les bits et vous donne un octet sur un plateau d'argent, souvent avec des informations d'état facultatives supplémentaires.

Je m'excuse ... au moment où j'ai édité ce que j'avais écrit et publié, votre réponse est apparue en même temps, et je peux voir même sans lire chaque mot que j'ai dupliqué par inadvertance une grande partie de ce que vous avez écrit.
@Randy: Il n'y a aucun problème.Voilà comment fonctionne le site.
D'accord merci, cela a beaucoup plus de sens maintenant.Cela me semblait être un problème de poule et d'œuf.Donc, par exemple, si je voulais parler à une puce avec rs-232 prête à l'emploi, il serait de ma responsabilité de lire sa fiche technique et de configurer mon émetteur pour ce baud?
@Bren: Oui, et la vitesse de transmission n'est pas le seul paramètre.Pour configurer correctement RS-232, vous devez connaître le débit en bauds, le nombre de bits de données et si un bit de parité supplémentaire est utilisé.Un équipement mécanique très ancien (télétypes des années 1960) nécessitait parfois 1 1/2 ou 2 bits d'arrêt pour que le mécanisme ait le temps de se réinitialiser pour attendre le caractère suivant.La configuration RS-232 la plus courante aujourd'hui est 8 bits de données, aucun bit de parité et 1 bit d'arrêt, souvent abrégé "8-N-1".Les taux de bauds varient.Aujourd'hui, 9600, 19,2k et 115,2k bauds sont les plus courants, mais d'autres se trouvent encore occasionnellement.
[Eric Raymond] (http://www.catb.org/esr/faqs/things-every-hacker-once-knew/) note que le préfixe «AT» avait une propriété spéciale utile.Cette séquence de bits (1 + 0 1000 0010 1 + 0 0010 1010 1+, où le suffixe plus indique une ou plusieurs répétitions du bit précédent) a une forme qui permet à un récepteur de la reconnaître aussi facilement que possible, même si lele récepteur ne connaît pas la vitesse de la ligne de transmission;ceci, à son tour, permet de [se synchroniser automatiquement à cette vitesse] (http://esr.ibiblio.org/?p=7333&cpage=1#comment-1802568).
@Brennan _ "Ce serait ma responsabilité de lire sa fiche technique et de configurer mon émetteur pour ce baud? _" Pas exactement.Ce n'est pas un cas où chaque UART a un débit binaire spécifique (bien qu'ils aient un maximum).Le débit binaire est déterminé par la programmation de l'UART.L'API du port série de votre système d'exploitation vous donne un moyen de le faire, c'est-à-dire définir le débit binaire, le nombre de bits de données, etc. Vous devez les définir pour correspondre à ce que le _system_ à l'autre extrémité attend.Les terminaux asynchrones à l'ancienne avaient un bouton ou une option de configuration pour cela.(N.B.: "vitesse de transmission" est vraiment un terme incorrect; c'est comme dire "vitesse de vitesse")
@Brennan: Pas la "puce" mais l'appareil.Par exemple, une souris aura un débit en bauds différent d'un modem qui aura un débit en bauds différent d'un appareil à rayons X qui aura un débit en bauds différent d'un capteur de température industriel.Les appareils spécifieront les paramètres UART tels que 1200, 8N1 ou 9600, 8E1.Le grand nombre est le débit en bauds, le 8 signifie que les données sont de 8 bits (certains périphériques spécifieront 7 bits), le N ou E ou O ou M ou S ne spécifie aucune parité ou parité paire ou parité impaire ou parité de marque (paritétoujours 1) ou parité d'espace (parité toujours 0) et le 1 spécifie 1 bit d'arrêt (parfois 2)
@Brennan De plus, certains appareils auront une détection automatique de la vitesse de transmission et vous diront d'envoyer des octets magiques comme `0x55` ou` "AT" `qui est` 0x41, 0x54` immédiatement après avoir allumé l'appareil
Détails sur "Une fois le dernier bit de données reçu, le récepteur attend que la ligne revienne à l'état de repos" Le bit d'arrêt est échantillonné à proximité de son _middle_.À ce stade, la ligne est dans son état inactif (stop et inactif sont les mêmes).Le récepteur est alors prêt pour un autre "octet" (1 + N + 0,5) bits après son démarrage.Cela gère le décalage d'horloge de l'émetteur / du récepteur.
Randy
2017-03-21 23:13:24 UTC
view on stackexchange narkive permalink

Eh bien, cela fonctionne comme ça. Avec la communication Async, l'extrémité de réception doit généralement déjà connaître le débit en bauds, qui est assez proche de signifier simplement "bits par seconde" pour notre discussion. On a donc un état "normal" ou "au repos" de la ligne de communication référencée au sol qui sera en fait le même état que le bit "stop" (cela aura plus de sens dans une minute).

Maintenant, si vous, en tant que récepteur, "savez" quelle sera la vitesse (Baud ou BPS), alors vous pouvez organiser un circuit pour qu'il se déclenche lorsqu'il détecte une transition vers un nouvel état. Eh bien, puisque ce nouvel état est l'opposé de l'état "au repos", vous SAVEZ maintenant qu'un octet est transmis. Ensuite, puisque vous «connaissez» la vitesse, vous pouvez calculer le temps qu'un peu devrait prendre pour terminer, non? Ainsi, lorsque le récepteur détecte cette transition, il doit attendre 1-1 / 2 le temps d'un bit, puis regarder le nouvel état. Le premier temps de bit "1" à attendre que le bit de démarrage "1" se termine, et le deuxième temps de bit "1/2" est de s'assurer que lorsque vous regardez l'état de votre premier bit de données, vous "échantillonnez" en plein milieu de ce bit.

Donc, à ce stade, votre récepteur échantillonnerait l'état, stockerait le bit dans un registre à décalage, attendrait un autre temps de bit complet, échantillonnerait à nouveau l'état. À ce stade, il décale le dernier bit enregistré d'une position et stocke le nouveau bit. Ce processus se poursuit jusqu'à ce qu'un nombre de bits préalablement convenu soit terminé. (Probablement 8, mais ce n'est pas obligatoire!) À ce stade, vous avez enregistré l'intégralité de l'octet (ou du mot) entrant.

Il peut y avoir ou non un bit de "parité" supplémentaire, toujours en fonction des paramètres convenus entre l'émetteur et le récepteur. S'il y a un bit de parité, le processus de décalage / échantillonnage se poursuit encore une fois. Un calcul simple est alors effectué pour compter le nombre de bits "1" dans le mot enregistré et voir si le total est impair ou pair, et comparer le résultat au bit de parité détecté. (sans surprise, la bonne réponse dépend du fait que la parité "impaire" ou "paire" est le format convenu).

Désormais, le bit "stop" est moins une science exacte, c'est pourquoi vous voyez parfois des options pour les bits "stop" allant de "1" (au minimum) à 2, incluant parfois un 1-1 / 2 comme une option. Le bit (ou les bits) d'arrêt est simplement le temps que le récepteur espère avoir pour déplacer le dernier octet dans le tampon d'octets qu'il reçoit, et être réinitialisé et prêt à recevoir un autre octet. C'est pourquoi le bit "stop" est simplement un retour à l'état "au repos".

Enfin, un UART (récepteur et émetteur asynchrone universel) est un circuit, souvent fourni en tant que partie distincte ou en tant que fonction intégrée à un microprocesseur. Il vous permettra généralement de programmer tous ces paramètres "attendus", la vitesse de transmission, les bits de démarrage et d'arrêt, les options de parité, et est capable de gérer toute la séquence de détection d'état, d'échantillonnage et un registre à décalage pour recevoir ou envoyer un octet. Il aura également des fonctionnalités intéressantes pour vous permettre de contrôler le taux d'échantillonnage binaire. En règle générale, un UART fournira également une interruption et un "vecteur" de programme, de sorte que lorsqu'un octet est reçu, le processeur de contrôle peut immédiatement répondre et stocker l'octet.

Enfin, bien que vous ne l'ayez pas demandé, il existe également des appareils USART, qui offrent essentiellement toutes les fonctionnalités d'un UART, mais ajoutent en plus les capacités nécessaires à la communication SYNCHRONUS.

"Le bit d'arrêt ... est simplement la durée pendant laquelle le récepteur espère ... et être réinitialisé et prêt à recevoir un autre octet." Presque.Le récepteur doit être prêt à peu près à mi-chemin dans le dernier bit d'arrêt pour que le prochain bit de démarrage puisse faire face au décalage d'horloge de l'émetteur / récepteur.
Je suis d'accord avec @chux, mais après avoir travaillé sur ce truc à l'époque des TRÈS vieux équipements, il m'a toujours semblé que le large éventail d'options de bit d'arrêt côté transmission (parfois jusqu'à 5!) Était dû à des problèmes de conception inattendus sur lecôté récepteur.Par exemple, si l'UART du récepteur (ou équivalent) était "interrogé" par un processeur plus occupé que prévu, l'ajout de plusieurs bits STOP du côté émetteur était une bonne stratégie pour compenser.Le fabricant du matériel du récepteur a peut-être spécifié un bit d'arrêt, mais il n'a pas toujours pris en compte les retards supplémentaires causés par un logiciel lent.
Trevor_G
2017-03-21 22:21:20 UTC
view on stackexchange narkive permalink

La communication asynchrone repose sur l'exactitude du débit en bauds.Le bit de démarrage indique au récepteur de vérifier le niveau de bit à chaque temps BIT défini par le débit en bauds.

Ainsi, le récepteur est essentiellement interrompu par le bit de départ et commence à interroger la ligne de signal à chaque bit par la suite pour recevoir les bits suivants.

Le bit d'arrêt est comme une somme de contrôle et assure également un espace entre chaque octet de données.Il s'attendra à voir cela ou ces bits dans un état défini.Sinon, une condition d'erreur est générée.

Un UART, récepteur / émetteur asynchrone universel, est le matériel de la machine d'état qui englobe toutes ces fonctionnalités.

Si vous sélectionnez un débit ou un format en bauds différent de celui attendu par le récepteur, la communication échouera.

old_timer
2017-03-22 04:54:28 UTC
view on stackexchange narkive permalink

Vous avez raison de dire qu'il existe des modèles qui ressemblent à beaucoup de bits de départ ou de bits d'arrêt. L'arrêt pour démarrer est une transition connue (comme Olin l'a indiqué la raison du bit d'arrêt) mais si les données se déplacent à la vitesse de la ligne et qu'un récepteur arrive au milieu quelque part, il peut prendre de nombreux symboles avant que le récepteur puisse trouver un arrêt pour démarrer transition de bits que le nombre convenu de bits se termine ultérieurement par un autre bit d'arrêt. Il est facile de créer des modèles qui, si vous envoyez à plusieurs reprises au débit de ligne, le récepteur pourrait se verrouiller sur le mauvais arrêt pour démarrer la transition et décoder les données de manière erronée. Les bits de parité aident avec cela, mais ne sont pas infaillibles, ils ne sont vraiment résolus qu'en faisant varier les données dans le temps ou en forçant des périodes d'inactivité de temps en temps.

Si vous avez trop de bits de départ dans une ligne, il s'agit d'une "rupture" qui est une erreur de cadrage mais une erreur de cadrage spécifique qui est parfois utilisée intentionnellement.

Il est considéré comme asynchrone en ce que chaque côté a sa propre horloge, les messages sont suffisamment courts pour que vous puissiez être décalé d'un peu et toujours extraire les 8-10 bits environ. Les uarts typiques auront un suréchantillonnage 8 ou 16 fois, ce qui signifie qu'ils sont 8x suréchantillonnés, donc il y a 8 périodes d'horloge par bit de temps, et si le front de départ est sur, disons, compter 2 du suréchantillonnage, alors pour les bits suivants vous échantillonnez sur le compte 6 qui serait une cellule de bits d'enchère, vous ne devez être bon que pour 10 cellules de bits environ. Vous pouvez même faire ajuster votre logique s'il y a des transitions s'il n'y a pas tous des uns ou tous les zéros et vous arrivez à mi-chemin et vous voyez un bord sur le compte 1 au lieu du compte 2 sur votre logique de suréchantillonnage, alors vous pouvez échantillonner les prochaines cellules sur comptez 5 au lieu de 6 pour affiner le milieu de la cellule de bits. Très typique pour les données continues à ajuster, pour les séries lorsque nous avons généralement, disons, 10 ou 11 bits par symbole / caractère, vous pouvez que les horloges source et réceptrice soient assez décalées et fonctionnent toujours assez bien.

chux - Reinstate Monica
2017-03-22 09:00:51 UTC
view on stackexchange narkive permalink

D'autres réponses expliquent bien l'échantillonnage au niveau des bits, mais je voulais expliquer plus en détail les activités des sous-bits et les détails sur le décalage et la phase d'horloge.


comment fonctionne l'asynchrone.

L'expéditeur et le récupérateur s'accordent sur le format: une trame de 1 bit de début, N bits de données, parité optionnelle et 1, 1,5 ou 2 bits d'arrêt.

Ils s'accordent sur un débit de communication commun approximatif comme 1/115 200 secondes par "bit" ou en bauds. Chaque côté a sa propre horloge. Le résultat est que les horloges peuvent être légèrement différentes les unes des autres. Loi de Segal. En théorie, une différence d'environ 10% est autorisée, en pratique, c'est plutôt 5%.

Pourtant, un élément important du partage do not est la phase de leurs horloges. Même si l'émetteur et le récepteur avaient des fréquences d'horloge identiques, la relation phase entre les horloges émetteur / récepteur n'est pas contrôlée. Avec des horloges presque identiques, cette phase change lentement.


Pour faire face à cette différence de phase , le récepteur échantillonne à un débit plus élevé que le baud. Supposons 16x plus vite.

Un récepteur se réveille pour regarder son entrée, qu'il échantillonne à 16x bauds. Si l'entrée n'est pas inactive, elle attend que la ligne soit inactive pendant un certain temps.

Une fois que l'entrée est dans l'état inactif (aucune donnée n'est envoyée), le récepteur recherche un exemple de transition vers l'état actif. Une fois que cela est détecté, un bon récepteur recherche également 1/2 bit de temps (8x échantillons) plus tard pour un état actif continu. Si cela est détecté, alors un bit d'état est trouvé et la phase (à 1/16 de bit) est détectée des données entrantes. Sinon, le signal parasite est généralement discrètement ignoré et le récepteur le rejette comme du bruit et recommence comme ci-dessus.

Les N échantillons suivants, effectués à pleine largeur de bits à partir du décalage de 1/2 bit du bit de début, supposent que la ligne est data et que le LSbit à MSbit est lu.

Parfois, un bit de parité est inclus.

Enfin, les 1 bits suivants (ou rarement 2) sont échantillonnés (au milieu) et devraient être à l'état inactif. Sinon, la trame reçue est dite avoir une erreur de bit d'arrêt ou une erreur de trame . Un bit de début long est une erreur de cadrage spéciale appelée pause .

Une fois le dernier bit d'arrêt échantillonné, près de son milieu, le récepteur est immédiatement prêt pour un autre bit de démarrage. Cela permet aux horloges de l'expéditeur et du destinataire d'être jusqu'à environ 5-10% l'une de l'autre et la communication réussit.

Comment l'appareil récepteur "sait-il" que j'envoie un bit de démarrage suivi de 6 0?

Dans le cas d'OP, en envoyant x03 ou b0000-0011, après que la ligne a été inactive (état 1-1-1-1 -...) pendant un certain temps et que le récepteur est prêt, l'émetteur sort un start 0, 1-1-0-0-0-0-0-0, bit d'arrêt 1. Le récepteur détecte le bit de démarrage, les données et le bit d'arrêt. Succès!


Les attributs supplémentaires, non couverts, incluent le suréchantillonnage des données avec une détection majoritaire, une rupture, des détails de parité, des protocoles de niveau supérieur, une détection automatique en bauds, etc.



Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...