Comment deux UARTS savent-ils quel débit en bauds utiliser?

14

Je lis sur le protocole standard pour UART et je pense que si l'UART de réception n'a aucune idée de la vitesse de transmission des données, il y aurait beaucoup de problèmes. Si le débit en bauds supposé est inférieur au débit en bauds dans lequel les données sont transmises, il y aura des bits qui ne seraient pas «vus» par l'UART récepteur. En revanche, si le débit en bauds utilisé par le récepteur est supérieur au débit en bauds dans lequel les données sont transmises, il y aura des bits qui seront comptés deux fois et entraîneraient une lecture incorrecte des données.

Ma connaissance autour de l'UART est que lorsque la ligne est inactive, elle est maintenue à «1», le bit de démarrage est à «0» et le bit d'arrêt est à «1». En outre, le bit d'arrêt étant «1» n'a aucune différence avec le «1» lorsque la ligne est inactive ou existe-t-il un moyen de différencier?

Les deux UART qui communiquent sont-ils d'accord sur le débit en bauds qu'ils utiliseront? Si oui, comment font-ils?

Batibot323
la source
Le "bit d'arrêt" pourrait également être appelé "retour à l'état inactif", mais en le faisant un peu, il a une longueur minimale définie, mais après ce temps minimum garanti, la ligne restera dans un état "1" jusqu'à ce que le le personnage suivant arrive.
Peter Bennett
Ils pourraient modifier au hasard les débits en bauds communs jusqu'à ce que quelque chose fonctionne XD.
Bradman175
3
Hayes a lancé un moyen de laisser l'UART dans leurs modems définir le même débit en bauds que le terminal lui parlant en utilisant une séquence de caractères «AT» au début de leurs commandes. Cela n'était généralement pas décodé par l'UART, mais par un micrologiciel en temps réel qui configurerait ensuite l'UART pour recevoir le reste de la ligne de commande. Il a essentiellement détecté la largeur du bit de départ et la façon dont la parité a été définie.
infixé le
@infix Donc, si je prévois de modifier ou de créer un code Verilog pour UART, je peux faire en sorte qu'il détecte cette séquence «AT» et ajuste sa vitesse de transmission à partir de là? Je pensais à l'initialiser à la vitesse de transmission la plus élevée pour qu'il capture tout et à partir de là, trouve la séquence «AT».
Batibot323
Un protocole de communication basé sur UART (nommé LIN) qui peut être vu beaucoup dans l'industrie automobile a un mécanisme de détection automatique de bauds, mais les nœuds maître et esclave "doivent" correspondre en termes de longueur de données et de longueur de bits d'arrêt. Ce qui signifie que détecter uniquement le débit en bauds n'est pas suffisant.
Rohat Kılıç

Réponses:

26

Les UART ordinaires doivent être préconfigurés avec la vitesse de transmission souhaitée (ainsi que la longueur des mots, les bits d'arrêt, la parité, etc.) traditionnellement par un humain.

Depuis plusieurs décennies, il existe cependant des implémentations de la détection "auto baud" dans certains paramètres, qui fonctionnent généralement en synchronisant les principales caractéristiques de la forme d'onde pour en déduire la vitesse de transmission. Les premières versions avaient besoin d'un caractère connu pour être transmises, mais des versions plus sophistiquées pourraient être en mesure de trouver le taux à partir de données plus arbitraires.

Un UART récepteur a généralement une horloge locale qui fonctionne à un débit plus rapide - généralement 8 ou 16 fois le débit en bauds. Ceci est utilisé pour échantillonner le signal entrant et détecter les bits dans un mot d'une manière qui peut tolérer quelques pour cent d'erreur. Même deux oscillateurs à cristal ne correspondraient pas parfaitement aux taux, mais la tolérance aux erreurs peut permettre l'utilisation de sources moins précises, y compris parfois des oscillateurs sur puce coupés, etc. une approximation inexacte de certains débits en bauds - dans le passé, les horloges maîtresses UART avaient parfois besoin de fréquences particulières pour accéder aux débits en bauds populaires, par exemple 11,0592 MHz sur la famille 8051.

Chris Stratton
la source
2
Mon hypothèse sur la détection automatique des bauds peut être une minuterie et un compteur travaillant simultanément pour trouver les bords et le temps entre les bords?
ammar.cma
1
Le problème est qu'aucun algorithme ne peut prendre une forme d'onde arbitraire "série uart" et déterminer de manière fiable la vitesse de transmission. Vous pouvez trouver le temps minimum entre les transitions assez facilement, mais cela ne représente pas nécessairement une période de bit unique.
Peter Green
Un algorithme existe (je l'ai entendu appelé "auto-bauding" à divers endroits) mais lorsqu'il est implémenté dans le cadre des ressources limitées d'une puce UART, parfois la seule façon de le faire est de consommer certaines des données envoyées et l'utiliser pour un étalonnage qui persistera pour le reste de la session. Ce n'est souvent pas souhaitable. Si cela est fait dans un logiciel et autorise un peu de latence, il est trivial de le faire sans consommer de données (en les stockant temporairement pour analyse) au moins pour les communications à faible vitesse (moins de 200 Ko / s). Des vitesses plus élevées présentent d'autres difficultés.
Wossname
8

Deux UARTS "conviennent" du débit en bauds au moyen de la documentation et par l'opérateur / utilisateur définissant le débit en bauds à la main, y compris le protocole de prise de contact, la taille du bit d'arrêt, etc.

Ale..chenski
la source
1
..... pour les deux extrémités de l'interface.
Michael Karas
2

Oui, tout est configuré manuellement, ce qui est souvent un peu pénible, surtout lorsque les systèmes sont mal documentés (je vous regarde, tous les systèmes intégrés jamais).

Je sais que l'USB, le SATA et la plupart des autres protocoles de données modernes démarrent après un événement de réinitialisation ou d'initialisation à la vitesse la plus basse avec une configuration par défaut standardisée et négocient avec tout le monde (ou juste le maître, selon le protocole) jusqu'à des vitesses plus élevées . Certains utilisent également des résistances pull-up ou pull-down sur leurs lignes de données / d'alimentation pour indiquer les vitesses prises en charge.

Consultez ce site Web sur la négociation USB si vous souhaitez approfondir un peu plus les autres protocoles.

Adam Naber
la source