Si vous êtes à moins de 1%, vous devriez être OK.
Supposons que votre UART utilise une horloge de suréchantillonnage 16x, par exemple, vous pouvez la régler sur 1 843 200 Hz pour un suréchantillonnage 16 x 115 200 bits / s. (un suréchantillonnage comme celui-ci est assez courant) Cela permet à l'UART de compter 8 sur-horloges à partir du front descendant du bit de démarrage, afin de pouvoir localiser le centre des cellules de bit à +/- une période de l'horloge, après dont il compte 16 périodes de l'over-clock pour déterminer quand échantillonner les données.
Si vous supposez qu'il peut frapper le centre du bit de départ, afin de continuer à échantillonner les données série dans les cellules binaires correctes sur 8 bits de données, la fréquence d'horloge doit rester entre (8-0,5) / 8 et (8 + 0,5 ) / 8, soit +/- 6,25% du débit binaire prévu. Un overclocking plus élevé se rapproche de la condition idéale de frapper le centre du bit de départ, mais 8x ou 16x est généralement suffisamment proche pour que vous puissiez supposer qu'une différence de 5% fonctionnera.
Cependant, vous ne pouvez pas compter sur l'autre côté étant parfaitement sur la fréquence. Si vous connectez un appareil 4% rapide à un appareil 4% lent, vous aurez un problème. J'ai rencontré au moins un cas où un PC fonctionnait un peu lentement et un appareil un peu rapide, et les deux ne pouvaient communiquer que de manière marginale, bien que le même appareil soit bien avec d'autres PC et que le PC soit bien avec d'autres dispositifs. (O-scoped ceux-ci à environ 112 kbps et 119 kbps) Pour cette raison, il est bon d'essayer d'atteindre la fréquence nominale aussi près que possible. Je n'ai jamais rien vu à moins de 2% du nominal avoir un problème.
La chose habituelle à faire est d'utiliser une fréquence d'horloge maître qui fournit un nombre entier multiple du taux de suréchantillonnage UART prévu multiplié par le débit en bauds. Par exemple, si vous vouliez un processeur fonctionnant à environ 8 MHz, vous pourriez utiliser un oscillateur à 7,3728 MHz, qui peut être divisé par 4 pour obtenir 1,8432 MHz, qui se trouve être exactement 16 fois 115200.
La mention 1% @JustJeff n'est pas requise. La plupart des UART permettent une erreur d'un demi-bit sur le dernier bit. La plupart du temps, une trame comprend 1 bit de démarrage, 8 bits de données et 1 bit d'arrêt, pour un total de 10 bits. Un demi-bit sur 10 bits est de 5% (6,25% de JustJeff ne prend pas en compte le bit de début et de fin).
la source
JustJeff a oublié le bit de départ, mais Stevenh a ajouté le bit d'arrêt. En supposant le protocole commun de 8 bits de données, 1 bit de début et aucun bit de parité, (le nombre de bits d'arrêt n'a pas d'importance), il y a 8 temps de 1/2 bit du bord avant du bit de début au centre de la dernier bit de données. Généralement, vous voulez que le récepteur échantillonne ce dernier bit dans un délai de 1/4 bit. Notez que 1/2 bit est le seuil d'échec garanti. Tout ce qui se trouve à proximité devient irréalisable car il y a toujours du bruit électrique et de la gigue.
1/4 divisé par 8 1/2 = 2,94%.
Comme JustJeff l'a mentionné, la plupart des implémentations UART échantillonnent réellement les données entrantes avec une horloge 16x asynchrone. Cela ajoute une autre incertitude de temps de 1/16 bit, car c'est l'erreur avec laquelle le front avant du bit de départ peut être mesuré. Un temps de 1/16 bit sur 8 1/2 bits est un autre 0,74%. Cela vient du budget d'erreur calculé plus tôt. Vous vous retrouvez avec 2,2% de décalage d'horloge autorisé pour que le récepteur échantillonne le dernier bit dans un délai de 1/4 bit de son centre.
Comme d'autres l'ont dit, l'utilisation d'un cristal à 7,3728 MHz est une pratique courante lorsqu'un débit en bauds précis est requis. Habituellement, vous pouvez vous arranger pour faire fonctionner le CPU près de son débit maximum tout en atteignant le débit en bauds UART dans l'erreur cristal.
la source
Un point non encore mentionné est que certains appareils s'attendent à transmettre un octet de données pour chaque octet de données qu'ils reçoivent. Si un tel appareil reçoit des données en continu, sa vitesse de transmission est même 0,1% plus lente que celle de l'appareil émetteur, et il n'a pas la possibilité d'envoyer des bits d'arrêt légèrement rétrécis, sa sortie perdra un octet de retard pour chaque 1000 consécutives octets qui entrent. Si le périphérique est limité à 16 octets de mise en mémoire tampon, il supprimera un octet de données après avoir passé environ 16 000 et baissera ensuite environ un octet pour mille. Il est intéressant de noter que les modems dits "1200 bauds" fonctionnent en fait à une vitesse légèrement supérieure à 1200 bits / seconde (je pense que c'est environ 1202) précisément pour cette raison (de sorte que même si l'émetteur est 0,15% plus rapide qu'il ne le devrait) être,
la source