-
Notifications
You must be signed in to change notification settings - Fork 0
Protocole UART
Le protocole de communication entre le Raspberry Pi et le microcontrôleur est construit par dessus un canal de transmission série de type UART, géré nativement par les deux éléments.
Ce canal assure la transmission byte par byte d'un système à l'autre, et permet de ne pas s'occuper de la partie technique de la transmission pour plutôt se concentrer sur les données à transmettre.
La configuration utilisée est dite 115200/8-N-1, c’est à dire 8 bits de données - pas de parité - 1 bit d’arrêt, avec une cadence de transmission fixée à 115200 bauds.
Le système UART du Rapsberry Pi est associé aux pins GPIO 14 et 15 (ports physiques 8 et 10), et nécessite également l’utilisation du port Ground adjacent (port physique 6).
Par défaut, l’entrée/sortie de la console du Rapsberry est également transmis par UART, ce qui permet d'utiliser le port série d’un ordinateur pour accéder au système. La première étape est de désactiver cette fonctionnalité.
Par la suite, le canal UART apparaît dans l'environnement Linux comme un périphérique série sous l'adresse /dev/ttyAMA0. Celui-ci peut être ouvert, configuré et utilisé depuis un programme (en C) d’une façon similaire à un simple fichier texte.
Le composant UART du microcontrôleur fonctionne indépendamment du reste du système. Cependant, par défaut ses entrées / sorties ne sont pas directement accessible sur les différents ports du système. Pour connecter physiquement le composant UART, il est nécessaire de configurer les registres du Crossbar de tel façon que l’UART soit accessible depuis les pins 0 et 1 du port 0. D’une façon similaire au Raspberry, il sera nécessaire d’utiliser le pin Ground de ce même port.
La communication entre le Raspberry Pi et le microcontrôleur est construite sous la forme de messages indépendants et asynchrones. Ceux-ci sont constitués d’un byte représentant le type du message, suivi éventuellement d’un byte d’information supplémentaire.
Les messages envoyés par le microcontrôleur au Raspberry Pi sont pour la plupart événementiels. C’est à dire qu’il sont envoyés dès lors qu’un changement dans les informations qu’il véhicule est détecté, sans requête préalable du Raspberry Pi.
Note: la notation [R->M, +1] utilisée dans cette section signifie que le message est transmis du RaspberryPi au Microcontrôleur et qu’il est accompagné de 1 byte d’information supplémentaire.
Message envoyé périodiquement par le microcontrôleur auquel le Raspberry doit simplement répondre par un message identique.
Lorsqu’un des deux éléments détecte une absence prolongée de messages KEEP_ALIVE, le système est considéré déconnecté et les mesures de sécurité provoquent l’arrêt du circuit.
Active la sortie de contrôle d’alimentation du microcontrôleur.
Lorsqu’à la fois le Raspberry Pi et le microcontrôleur ont leur sortie de contrôle d’alimentation activée, le relais d’alimentation commute et le circuit est alimenté.
Désactiver la sortie de contrôle d’alimentation du microcontrôleur.
Indique un changement d’au moins un bit sur la première série de capteurs. Ce message est suivi d’un byte supplémentaire indiquant l’état de chaque capteur.
Indique un changement d’au moins un bit sur la seconde série de capteurs. Similaire à 0x41.
Indique un changement d’au moins un bit sur la troisième série de capteurs. Similaire à 0x41.
Indique un changement d’état d’au moins un aiguillage du circuit. Ce message est suivi d’un byte supplémentaire indiquant l’état de chaque aiguillage.
Indique que le microcontrôleur a terminé sa routine d’initialisation et qu’il est à présent prêt pour un fonctionnement opérationnel normal.
Demande l’envoi par le microcontrôleur d’un message SENSORS_1. Opération non exploité.
Demande l’envoi par le microcontrôleur d’un message SENSORS_2. Opération non exploité.
Demande l’envoi par le microcontrôleur d’un message SENSORS_3. Opération non exploité.
Demande l’envoi par le microcontrôleur d’un message SWITCHES. Opération non exploité.
Défini la position de tous les aiguillages en une seule opération. Ce message est suivi d’un byte supplémentaire avec l’état souhaité pour chaque aiguillage.
Commute un aiguillage en position alternativee. Ce message est suivi d’un byte supplémentaire indiquant l’aiguillage à modifier sous la forme d’un entier non signé sur 8 bits.
Commute un aiguillage en position par défaut. Similaire à 0x66.
Envoyé par le microcontrôleur lorsque celui-ci effectue sa routine de démarrage (à l’enclenchement ou lors de sa réinitialisation).
Lors de la réception de ce message, le Raspberry Pi transmet au microcontrôleur l’état initial dans lequel il souhaite positionner chaque aiguillage.
Provoque la réinitialisation du microcontrôleur. Il est envoyé au démarrage de Raild afin de placer le micro dans un état déterminé.