2010-04-13 3 views
6

Mon cerveau est frit, alors j'ai pensé que je transmettrais celui-ci à la communauté.La vitesse UART peut-être mal

Lors de l'envoi d'un caractère à mon système embarqué, il pense systématiquement qu'il reçoit 2 caractères. Le premier caractère reçu semble correspondre au caractère transmis (d'une manière inconnue) et le second caractère reçu est toujours 0xff.

Voici ce que j'ai observé:

Tx char (in hex) Rx character (in hex), I left out the second byte (always ff) 
31     9D 
32     9B 
33     99 
61     3D 
62     3B 
63     39 
64     37 
65     35 
41     7D 
42     7B 
43     79 

Je vérifie mes horloges et les semblent être OK. La seule différence entre cette version non fonctionnelle et la version précédente est que j'utilise maintenant une puce RS485.

j'ai tracé le signal sur toute la hauteur de l'unité MCU et il semble bien (confirmé la valeur du bit sur la broche RX)

+0

Vous pouvez également obtenir une bonne réponse de ChipHacker. – Earlz

+0

Ceci est mon message (j'étais trop paresseux pour me connecter). J'étais raisonnablement confiant avant de tester que j'avais tout correct. J'utilise un sn75 quelque chose ou un autre traducteur rs485. Le plan de masse est bon et les signaux +/- sont propres (correctement terminés). Le débit en bauds est réglé correctement sur 9600 sans parité, 1 bit d'arrêt. – michael

+0

Si possible, écoutez vos propres transmissions comme moyen de détection de collision.J'avais personnellement une situation où un octet avait réussi à sortir du registre à décalage pour TX et je relâchais prématurément la broche de contrôle à l'émetteur-récepteur rs485, résultant en le dernier char transmis (la somme de contrôle) pour être incorrect. – Nate

Répondre

9

Le premier caractère reçu semble plan pour le caractère transmis (en quelque façon inconnue)

Dans chaque cas, l'octet TX est décalée vers la gauche de 1 bit puis inversé.

Par exemple:

31 = 00110001 9D = 10011101

0x31 < < 1 = 01100010

le complément de 01100010 est 0x9D

J'ai vérifié deux autres, semble être le même pour tous. Je ne sais pas d'où vient le deuxième octet, mais il pourrait être le résultat de l'inversion du signal probable qui se passe.

RS485 utilise la signalisation différentielle. Ça sent comme si vous utilisiez la sortie inversée de la puce et branché sur une entrée RS232.

J'ai tracé le signal tout le chemin jusqu'à la MCU et il semble bien (confirmé la valeur du bit sur la broche rx )

Quel signal avez-vous utilisé comme référence au sol ?

+0

Un convertisseur rs485 fonctionnera-t-il si les lignes + et - sont permutées? ie le côté uart va-t-il encore générer un octet? si c'est le cas, alors ce qui est généré ici est logique car l'UART serait confus lorsque les bits d'arrêt et de démarrage sont inversés. – michael

+0

Et l'octet de merde supplémentaire à la fin aurait aussi un sens. Si un bit de départ était vu par erreur à la fin, l'octet suivant serait tout simplement logique. Je pense. Je ne suis pas près de ma portée, et mon kit de dev. – michael

+0

Bonne réponse - qui a besoin d'une portée lorsque vous avez Mark sur Stackoverflow? –

1

RS485 est tout à fait différent de RS232 au niveau électrique (écart par rapport à une seule extrémité et +/- 6V contre + 15/-3V) - sont les deux côtés de votre lien de communication en utilisant le même protocole?

+0

Absolument! J'ai une puce sn75 .... rs485 sur le côté du câble USB/série, et 1 sur mon micro-carte. – michael

+0

Bien. J'ai été confus quand vous avez dit "maintenant en utilisant une puce RS485" - ça m'a fait penser que vous n'aviez changé qu'une extrémité du lien. Quoi qu'il en soit, on dirait que Mark aurait pu le résoudre par inspection! – mtrw

1

Si c'est RS485 avez-vous l'état "par défaut" du jeu de bus correctement? Que diriez-vous du nombre correct de bits d'arrêt?

+0

Oui, ça devrait être bon, le code est le même depuis que j'ai utilisé UART recto (rs232) et ça a marché! J'ai également fait en sorte que les broches de sélection appropriées définissent la direction de la puce rs485 lors de l'envoi ou de la réception. – michael

Questions connexes