TP Driver de communications CAN sous RTAI


Le Poly de cours


Travail à réaliser

Le but de ce TP est de réaliser et valider les primitives de communications d'accès à un bus CAN sous un environnement de développement temps réel Linux RTAI.

  1. Lire complètement ce document avant de commencer les développements. Il vous donne toutes les informations utiles à la réalisation de ce TP.
  2. Ecrire un module RTAI réalisant l'envoi périodique d'un message sur le bus CAN.
  3. Ecrire une fonction qui affiche dans la console les paramètres d'un
    message reçu sur le CAN. Pour détecter l'arrivée d'un message, on
    réalisera une scrutation périodique du bit de réception du SJA 1000 qui gère les communications CAN.
  4. Idem question précédente, mais cette fois le sja1000 devra déclencher une interruption à l'arrivée d'un message.

Architecture Matérielle

Chaque groupe disposera sur sa table du matériel suivant : une station de développement de type PC sous Linux RTAI, un PC embarqué sous Linux RTAI. Ces 2 calculateurs sont reliés entre eux par un bus CAN via une carte de communication CAN (boucle locale) . Une boucle CAN globale relie l'ensemble des stations de développement. Sur cette boucle globale est aussi connecté un analyseur CAN.



Architecture logicielle

Tous les développement seront effectués sur la station de développement sur laquelle est installé un OS LINUX RTAI 4. La carte PC embarquée est gérée par un OS Linux RTAI 3.4. Elle ne dispose pas d'outils de compilation. Les compilations seront effectuées par le compilateur gcc qui permettra de compiler du code pour RTAI3.4 ou RTAI 4.
Le comportement de RTAI3.4 et RTAI 4 étant identiques, certains modules pourront être compilés et testés sur la station de travail. Après validation ils seront recompilés pour la carte PC embarqué sur laquelle ils seront chargés via Ethernet et executés.



Gestion d'interruptions sous RTAI

La gestion des interruptions sous RTAI se fait très simplement à l'aide de quelques fonctions.

void  mon_gestionnaire(void)
{
...
rt_ack_irq(num_irq);/* acquittement de l'interruption */
}
rt_global_cli(); /* desactivation des IT */
rt_request_global_irq(num_irq,mon_gestionnaire); /*installation du handler */
                                                 /* sur l'IT num_irq       */
rt_startup_irq(num_irq); /* activation de la ligne d'interruption */
rt_global_sti(); /* re-activation des IT */
rt_shutdown_irq(num_irq);/* désactivation de l'IT num_irq */
rt_free_global_irq(num_irq); /* désintallation du handler */

Si vous le désirez, vous trouverez des informations complémentaires dans la documentation RTAI, ou dans le Linux_Device_Driver.pdf

Gestion des E/S sous RTAI

Pour écrire et lire dans des zones mémoires allouées à des périphériques, il est nécessaire d'utiliser des fonctions spécifiques. Sous RTAI on pourra utiliser les fonctions suivantes :
Toutes ces fonctions sont documentées dans linux_device_driver.pdf

Copie de zone mémoire

Il est parfois utile de copier une zone mémoire dans une autre zone mémoire. Sous Linux il existe pour réaliser cette opération la fonction memcpy(&dest,&source,taille) :  dest est l'adresse de la zone destination, source l'adresse de la zone source, et taille le nombre d'octets à transférer.

Gestion de la carte CAN ADLINK 7841 PCI sous RTAI

 
 

Fichiers Fournis

L'archive tpcan.tgz contient tous les fichiers utiles pour réaliser ce TP . Sur ce 1er TP les développements se feront fait sur le PC sous RTAI 4 avec la carte CAN 7841 sur la "boucle CAN globale" afin de permettre une validation avec l'analyseur logique. Ainsi seuls les fichiers du répertoire PC seront utilies pour ce TP.




BON COURAGE !!