Initier une communication série avec la bibliothèque c open () oblige TX à envoyer un bit sur RPi

J’essaie d’établir une communication série entre le RPI et un FPGA. Cependant, il y a un problème lors de l’utilisation de la bibliothèque standard C open () pour initialiser l’interface série: j’utilise une scope pour surveiller ce qui est envoyé et reçu via les lignes RX et TX. Un appel à ouvrir amène la ligne TX du RPI à descendre pour une longueur d’un bit. Je ne vois pas ce comportement avec d’autres ordinateurs / ordinateurs Linux. Le fait est que le FPGA suppose une transmission valide, car il pense que c’est un début, mais ce n’est pas le cas.

J’ai vérifié avec minicom installé sur le RPI. Même chose. Le démarrage de minicom entraîne l’envoi d’un bit par la ligne TX. Une fois que minicom a démarré, la communication fonctionne comme prévu et tous les octets ont la taille de trame correcte. Existe-t-il un moyen de supprimer le niveau bas de la ligne TX lors de l’appel ouvert pour lancer la communication série? Est-ce un comportement attendu?

C’est une intuition extra-farfelue, mais ce code semble un peu suspect, de la fonction pl011_startup() dans le pilote de port série PL011:

 /* * Provoke TX FIFO interrupt into asserting. */ 

Il semblerait que vous ayez à tourner la ligne TX lors du démarrage du port, ce qui expliquerait le pouls que vous voyez. Une enquête plus poussée serait sûrement nécessaire avant de conclure que c’est bien ce qui se passe.

Donc, je suppose que ma “réponse” se résume à ceci: cela semble étrange, peut-être que c’est quelque chose avec le conducteur?

Bien sûr, l’un des moyens de contourner ce problème consiste à appliquer certaines précautions du côté du FPGA, en supposant que vous en ayez plus le contrôle. Un “bon” cadrage s’occuperait de cela, et indiquerait clairement que l’envoi parasite peut être ignoré.

UPDATE : Je voulais dire que si les messages “appropriés” devaient toujours être encadrés par une séquence d’octets, le FPGA pourrait tout de même pouvoir supprimer les données non valides (“non encadrées”) et ainsi être immunisé contre l’impulsion aléatoire. Par exemple, les messages pourraient être définis pour toujours commencer par les symboles SOH (début d’en-tête) ou SOT (début de texte) ( octets avec les valeurs 0x01 et 0x02 , respectivement).