Vous êtes sur la page 1sur 4

MCESY Série 3, CAN Page 1

Exercice 3: CAN

But
Les étudiants sont en mesure de :
 D’implémenter un nœud CAN sur le LM3S9B92 (slave).

Ce code peut être utilisé par la suite pour le projet pour implémenter l’interface CAN.

Définition de l’exercice
Un système communication maître/esclave doit être réalisé avec le bus CAN. Dans cet exercice, le
moniteur CAN sur le PC prend en charge la fonctionnalité maîtresse. Votre tâche consiste à
programmer un nœud esclave avec le LM3S9B92, qui puisse traiter les objets de communications
du maître. Le maître doit pouvoir demander l’état de chaque esclave et fixer l’état de ses LED.

Les objets de communications


La communication entre le maître et l’esclave doit être réalisé selon le standard CAN 2.0a avec 11
bits d’indentification. La fréquence de transmission doit être fixée à 250 Baud (k bit/s) (Baud). Il
faut également définir un simple protocole de communication propriétaire avec les objets de
suivants :

Status Request Master  Slave Demande du statut de l'esclave par le maître. Cette
 demande est confirmée par l'esclave avec une réponse
concernant son d'état.

Status Response Slave  Master La réponse de l’esclave concernant son statut :


1 octet contenant l’état des LED (0x00 … 0xFF)

Command Master  Slave Commande qui allume ou éteint les LED d’un esclave.
Cette commande doit être confirmée par l’esclave avec
un signal d’acquittement (Command Acknowledge).
1 octet contenant l’état actuel des LED :
(0x00 … 0xFF)

Command Slave  Master Confirmation de la réception de commande par


Acknowledge l’esclave. Pas de paramètres.

Du fait que plusieurs groupes d'étudiants vont devoir tester leur code simultanément sur le même
bus CAN, il est nécessaire d'utiliser des identificateurs (ID) différents pour envoyer les objets de
communication. Par conséquent, chaque groupe reçoit une plage d'ID. Ce qui permet de tester les
esclaves de façon indépendante sur le même bus CAN.

L'identificateur de chaque objet de communication doit donc se composer du numéro du groupe (ci-
après G) et un ID selon la nature de l'objet :
 Status Request: 0x1G0
 Status Response: 0x1G1
 Command: 0x1G2

2012, Laboratoire d’informatique technique, E. Firouzi


MCESY Série 3, CAN Page 2

 Command Acknowledge: 0x1G3

Par exemple le groupe 1 aura les identificateurs CAN suivants : 0x110 jusqu’à 0x113.

Recommandation pour la procédure de réalisation

Etape 1 : Initialisez le contrôleur CAN sur le LM3S9B92. Cette partie comprend les pins
d’entrée et de sortie GPIO, la fréquence de transmission et l’initialisation des 4
objets de communication.

Etape 2 : Implémentez une fonction d’envoie, qui permet d’envoyer des messages CAN. Le
moniteur CAN du PC permet ici de tester si les messages CAN sont envoyés
correctement.

Etape 3 : Implémentez un traiteur d’interruption, qui est en mesure de recevoir des messages
CAN. Le moniteur CAN peut également être utilisé ici pour envoyer des messages
CAN à votre nœud.

Etape 4 : Complétez les fonctionnalités de votre nœud afin de l’adapter aux protocoles de
communication CAN définis ci-dessus. Vous serrez ainsi en mesure de commander
les LED de votre nœud avec le moniteur CAN.

 Aide CAN

Initialisation
La procédure d’initialisation des contrôleurs CAN est décrite dans les chapitres 18.3.1, 18.3.4 et
18.3.10 de la documentation du LM3S9B92. Les principaux registres d’initialisation sont résumés
dans les tableaux suivants:

Nom des registres (software) Remarques


Initialisierung des CAN
Controllers:
SYSCTL_RCGC0_R Activation de l’horloge pour le module CAN0.
SYSCTL_RCGC2_R Activation de l’horloge du Ports B, qui met les pins CAN0Rx et
CAN0Tx à disposition.
GPIO_PORTx_AFSEL_R Les fonctionnalités alternatives des pins CAN0Rx et CAN0Tx.
GPIO_PORTx_PCTL_R Définition des fonctionnalités alternatives des pins CAN0Rx et
CAN0Tx.
GPIO_PORTx_DEN_R Fixation du mode digital pour les pins CAN0Rx et CAN0Tx
CAN0_CTL_R Activation le bit INIT et CCE
CAN0_BIT_R Spécification de la fréquence de transmission à 250 Baud
(k octets/s). La valeur doit correspondre à 0x67C3 avec une
fréquence d’horloge système de 16 Mhz (Exercice). Toutefois,
cette dernière doit correspondre à 0x67D3 avec une fréquence
d’horloge système de 80 Mhz (projet).
CAN0_CTL_R Effacer à nouveau le bit CCE

2012, Laboratoire d’informatique technique, E. Firouzi


MCESY Série 3, CAN Page 3

Initialisation des objets Doit être réalisé avec tous les objets messages CAN
messages
CAN0_IF1CMSK_R Définition des valeurs qui doivent être réactualisées dans les
objets messages CAN. Pour la phase d’initialisation, cella
concerne tous les valeurs. Toutefois, les données ne doivent pas
être transmises durant cette phase (0xFB).
CAN0_IF1MSK2_R Définition du masque pour le filtre de réception. Le masque
MSK2 est uniquement nécessaire pour une identification 11 bits.
MSK1 ne doit donc pas être considéré dans cet exercice.
CAN0_IF1ARB2_R Définition de l’identité des différents objets. Ici, il faut
absolument mettre également le bit MSGVAL à 1. Par contre, ce
bit peut être effacé dans les messages CAN, qui ne seront pas
utilisés.
Tous les autres registres ne doivent pas être initialisés.
Il faut également définit le bit de direction DIR (objet à
transmettre ou à recevoir).
CAN0_IF1MCTL_R Définition des bits UMASK et EOB (sans FIFO) ainsi que le
DLC. Activation des interruptions réception pour les objets
messages destinés pour la réception.
CAN0_IF1DA1_R, Effacer les données des objets messages CAN (8 octets).
DA2, DB1 und DB2
 CAN0_IF1CRQ_R Le contrôleur CAN soutient les objets messages de 32 bits.
Chaque objet message contient son propre numéro de message
(MNUM), qui doit être défini ici. Ce numéro spécifie la
communication entre l’interface CAN et l’objet message.
CAN0_IF1MCTL_R Le bit TXRQST doit être mis à 1, afin de pouvoir démarrer les
transferts entre l’interface CAN et les objets messages.

Interruption pour activer la


réception des objets messages
CAN0_CTL_R Activez les interruptions CAN avec le bit IE au niveau du
module.
NVIC_EN1_R Activez les interruptions CAN (# 39 pour CAN0) au niveau du
système.
Définissez également le traiteur d’interruption CAN (exemple :
CAN0_ISR) et insérez ce dernier dans le tableau des vecteurs
d’interruption (dans le fichier: startup_css.c).
CAN0_CTL_R Effacez le Bit INIT.

Transmission des messages CAN


Si vous avez initialisé les objets messages CAN selon la description précédente, vous êtes en
mesure d’envoyer des données. La procédure d’envoi de message CAM est décrite dans la section
18.3.5 de la documentation pour l'LM3S9B92. Cette procédure est résumée dans le tableau suivant :

2012, Laboratoire d’informatique technique, E. Firouzi


MCESY Série 3, CAN Page 4

Nom des registres (software) Remarques


CAN0_IF1CMSK_R Mettet les bits WRNRD, NEWDAT, DATA_A et
éventuellement DATA_B à 1. Cette procédure informe
l’interface CAN, que seuls les octets de données seront sur
écrites dans les objets message.
CAN0_IF1DA1_R, Les nouvelles données à transmettre. Il ne faut que copier le
CAN0_IF1DA2_R, nombre d’octet, qui a été défini dans l’objet message (DLC).
CAN0_IF1DB1_R,
CAN0_IF1DB2_R
GCAN0_IF1CRQ-R Définition des MNUM pour les différents objets message. Ces
numéros doivent correspondre à ceux des objets message, qui ont
été fixés durant l’initialisation avec les ID respectives.
CAN0_IF1MCTL_R Mettre les bits TXRQST et NEWDAT à 1. Ce qui permet de
transmettre les données de l’interface CAN dans l’objet message
et d’envoyer les données à travers le bus CAN.

Réception des messages CAN


Vous avez du définir également durant la phase d’initialisation des objets messages pour la
réception de données CAN. Afin de pouvoir lire un objet reçu, il faut transférer ses données dans
l’interface CAN. Cette procédure de transfert est décrite dans la section 18.3.11 de la
documentation pour le l'LM3S9B92. Le tableau suivant fournit un résumé pour cette dernière :

 Nom des registres (software) Remarques


CAN0_INT_R Ce registre informe sur la source de l’interruption CAN0.
Les valeurs entre 0x01 et 0x20 spécifie un objet message
(correspond au MNUM de l‘initialisation).
CAN0_IF1CMSK_R Devrait avoir la valeur 0x7F. Ce qui transfert toutes les données
des objets messages dans l’interface CAN et désactive le signal
d’interruption.
CAN0_IF1CRQ_R Spécification du MNUM de l’objet message à lire. Attention:
avant de lire les nouvelles données reçues, il faudrait attendre un
instant pour que ces dernières puissent être transférées de l’objet
message vers l’interface CAN.
CAN0_IF1DA1_R, Lecture des donnés.
CAN0_IF1DA2_R,
CAN0_IF1DB1_R,
CAN0_IF1DB2_R

2012, Laboratoire d’informatique technique, E. Firouzi

Vous aimerez peut-être aussi