La vitesse de transmission en communication série (USB ou RS232) doit-elle être exacte?

8

En communication série, la vitesse de transmission signifie-t-elle que nous devons utiliser la vitesse d'horloge exacte ou s'agit-il d'une plage de vitesses que nous pouvons utiliser?

et si c'est une valeur exacte, quelle doit être son exactitude? par exemple, puis-je utiliser le 555 comme horloge d'un circuit de communication série?

sonslikefiziks
la source
Un UART peut généralement tolérer un écart d'environ ~ 3%. Cela dépend d'un point spécifique, cependant.
Eugene Sh.
Pour l'USB, il sera spécifié dans la norme, qui est téléchargeable gratuitement.
Le Photon

Réponses:

6

Les synchronisations doivent être suffisamment précises pour ne pas s'écarter avant que le protocole ne se resyncronise.


La série UART resyncronise sur chaque octet et un octet fait environ 10 bits (8 bits de données plus démarrage et arrêt). Nous supposons que notre UART cible le milieu de chaque bit. Si tout est parfait et qu'une seule extrémité est inexacte, cela permet une différence d'environ 5% entre les deux extrémités du lien.

Toutefois:

  1. Les deux extrémités du lien peuvent être inexactes par rapport à la valeur nominale. Dans le pire des cas, une extrémité peut être inférieure à la valeur nominale tandis que l'autre est supérieure à la valeur nominale.
  2. Il peut y avoir des imprécisions systématiques. Par exemple, la plupart des UARTS ont une gamme limitée de paramètres de générateur de vitesse de transmission.
  3. Votre UART est basé sur une horloge maître à vitesse finie. Même si le générateur d'horloge et de débit en bauds est parfait, cela n'empêchera pas le milieu exact de chaque bit.

L'essentiel est qu'une erreur de 1% sur votre horloge est presque certainement très bien. Une erreur de 5% est presque certainement un problème. Entre ces deux chiffres, il peut ou non être un problème en fonction de l'image globale.

C'est un défi de taille pour un oscillateur RC. Disons que votre R a une tolérance de 1% et votre C a une tolérance de 2%. Cela donne une tolérance d'environ 3% pour la constante de temps du réseau RC et c'est avant de penser aux erreurs introduites par votre puce de pilote.

Donc, l'essentiel est que vous devriez regarder un résonateur en cristal ou en céramique.


Quant à l'USB, je n'ai pas l'expérience pour analyser à partir des premiers principes, mais https://www.silabs.com/community/interface/knowledge-base.entry.html/2004/03/15/usb_clock_tolerance-gVai dit 1,5% pour basse vitesse et 0,25% pour pleine vitesse.

Peter Green
la source
Si l'on peut programmer le débit en bauds par pas de 3% ou plus fin et utiliser une séquence "d'entraînement" appropriée, la précision RC peut ne pas être un problème. Si l'on sait que l'autre extrémité alternera l'envoi de 0xF8 et 0xF0 à plusieurs reprises (faible pour quatre et cinq bits, respectivement), la définition de son débit en bauds 33% plus rapidement devrait faire en sorte que l'un reçoive systématiquement 0xF0 (5,33 bits) et 0x80 (6,67 bits). fois). La réception d'autres valeurs permettra de savoir que l'on est plus rapide ou plus lent que cette vitesse "33% supérieure", tandis que la réception de 0xF0 0x80 répété indiquera que l'on devrait réduire la vitesse de 25% et démarrer une véritable communication.
supercat
8

Les UART généralement utilisés dans les systèmes série de type RS232 fonctionnent en échantillonnant la ligne de données quelque part au milieu du bit selon une division de l'horloge de fréquence de base du débit en bauds prédéfini. Ainsi, si les données envoyées et le récepteur ne sont pas sur la même fréquence, le "point d'échantillonnage" se rapprochera du bord de la trame binaire sur les bits successifs.

Avec un UART normal, la longueur de bit pour un octet est de 10 ou 11 bits. 1 démarrage, 8 données et 1 ou 2 bits d'arrêt. Un demi-dérapage sur le 10e bit se traduit par une erreur de 0,5 / 10 = 5%.

Cependant, en réalité, votre tolérance est inférieure à cela car vous devez également ajouter la latence de votre période de fréquence de base qui ajoutera un décalage par rapport au bord avant du bit de départ. Plus votre fréquence de base est élevée, moins cela a d'effet.

Quant à l'utilisation d'une minuterie 555 à cet effet, je ne le recommanderais pas sauf si vous prévoyez d'avoir un réglage manuel dans le circuit 555.

Un USART d'autre part utilise une méthode de contrôle plus complexe qui tente de synchroniser la transmission avec les données reçues. Cela peut se faire en utilisant un modèle de données qui a une horloge intégrée, en utilisant une horloge passée ou par une certaine forme de verrouillage de phase sur les bords de données reçus. (Bien que ce dernier soit sans doute vraiment pseudo-synchrone.)

Trevor_G
la source
Puisque vous savez de quoi vous parlez, j'ai pensé mentionner l'abréviation "U S ART", qui devrait faire partie de cette réponse. Eh bien, cela rendrait la réponse complète à mon avis, et après cela mérite un +1 de ma part.
Harry Svensson
1
@HarrySvensson hmm .. Je suis d'accord .. mais essayer de décider est que cela rend la réponse plus confuse pour un OP 555 d'emballage.
Trevor_G
1
Un USART est différent en ce qu'il peut être synchrone. Et s'il est utilisé comme interface synchrone, alors l'horloge est commune aux deux extrémités, puis la vitesse d'horloge n'a pas d'importance.
gbarry
1
Eh bien, ça peut être dans les commentaires à la place, merci @gbarry. Ça ne me dérange pas. +1 à Trevor.
Harry Svensson
@HarrySvensson J'ai ajouté une brève explication ondulée à la main de la différence pour l'exhaustivité ..
Trevor_G