2013-06-11 1 views
0

Une idée de pourquoi mon application C native ne peut pas atteindre des baudrates plus élevés que 38400? J'ai exactement la même application que je réussi à initialiser pour écouter et transmettre sur 9600, 19200, 38400 baudes. Cependant, dès que j'ai mis en place pour 57600 je reçois le garabage hors de l'émetteur (récepteur je ne sais pas). Je l'écoute avec un terminal donc je vois la poubelle directement à partir de l'en-tête de broche. J'utilise Raspbian et uart sur les broches 14 et 15 de l'en-tête GPIO.Uart plus élevé BaudRate problèmes dans Raspberry Pi

Y a-t-il un ajustement de la fraction de précisions qui cause le problème?

En ce moment je fais juste cela (et ça marche): cfsetispeed (& options, B38400); cfsetospeed (& options, B38400); tcsetattr (options uart0_filestream, TCSANOW, &); fcntl (uart0_filestream, F_SETFL, O_NDELAY); TX: int a = écriture (uart0_filestream, StartOfTheMessage, Length);

Merci.

+1

Pas une solution mais des idées de débogage. 1) Qu'est-ce que vous envoyez et quelle est la poubelle? 2) Essayez de boucler vos données de transmission à elle-même et voir si vous pouvez lire ce que vous transmettez. 3) Lorsque vous transmettez à 57600 et écoutez avec un terminal, vous signalez des déchets. Mais si vous écoutez à d'autres tarifs tels que 38400, 115200, 19200 avec votre terminal encore en train d'envoyer à 57600, que voyez-vous? – chux

Répondre

0

Vos fils UART ne prennent pas en charge la vitesse de transmission plus élevée.

+0

J'ai vérifié le problème avec Jumper et Oscilloscope et finalement j'ai noté que le B38400 qui est la vitesse du termios.h est le plus haut taux de bauds mis en application. Le cfsetispeed (& options, B38400); cfsetospeed (& options, B38400) au-dessus de ces baudrates ne change pas car le B57600 n'existe tout simplement pas selon la documentation de termios.h. Connaissez-vous une autre bibliothèque prête que je peux facilement utiliser pour obtenir la vitesse? Merci – Gregorek