Bonjour,
Bossant dans l'embarqué, j'ai développé un driver COM 9 bits multidrop pour capteurs (protocole archi utilisé dans l'industrie) avec son pendant sur PC en python. En gros, la com est en 8 bits avec un 9ème bit à 1 (Mark) pour chaque premier octet de la trame envoyée par le maitre. Cet octet est le numéro de canal, chaque esclave se réveille et va voir si c'est lui qui est concerné. Tous les autres octets en émission ont leur 9ème bit à 0 (Space). S'il est concerné, il reçoit la trame, execute la commande et répond. S'il n'est pas concerné, il se rendort immédiatement.
Côté PC, c'est simple dans le principe, mais Bill nous met des bâtons dans les roues. le PC (qui sert de maitre) doit envoyer un 9ème bit à 1 pour le premier octet (pour les autres, même principe mais raisonnement inverse). Il doit donc calculer la parité et en fonction du résultat configurer le port série en parité paire ou impaire de façon à ce que le 9ème bit soit un 1 (Mark). C'est cette commutation dans le mode de travail qui prend un temps fou (valeurs généralement constatées, de 50 à 100msec et malheureusement parfois beaucoup plus...) et fait chuter la vitesse à 10 octets secondes, sans parler de ce qui est beaucoup plus grave, la gestion du time out dans les microcontrôleurs embarqués.
L'idée, ce serait donc de courcuircuiter la couche de Bill pour écrire directement dans les registres de l'UART. Quelqu'un aurait une piste? En tout cas, merci d'avoir lu jusqu'ici!
Partager