Gestion de bus CAN



Le projet

Introduction
Le protocole CAN
Les composants CAN
Cartes développées
Programmation PPC
Environnement JerryCAN



Divers

L'Equipe
Sources
FAQ
Rapport en PDF

Site Web de Vincent


Les composants CAN

2.1 Le P82C150.
2.1.1 Configuration du SLIO
2.1.1.1 Choix de l'ID
2.1.1.2 Calibration
2.1.2 Utilisation du 82C150
2.1.2.1 Format des trames
2.1.2.2 Les registres

2.2 Le PCA82C250
2.2.1 Codage physique des bits
2.2.2 Débit

2.3 Le SJA1000
2.3.1 Présentation
2.3.1.1 Caractéristiques
2.3.2 Le mode BasicCAN
2.3.3 Le mode PeliCAN
2.3.4 Les principaux registres
2.3.4.1 Le registre MODE
2.3.4.2 Le registre COMMAND
2.3.4.3 Le registre STATUS
2.3.4.4 Le registre INTERRUPT
2.3.4.5 Les registres BUS_TIMING0 et BUS_TIMING1
2.3.5 Le buffer de réception
2.3.6 Le buffer d'émission
2.3.7 Le filtre d'acceptation

2.1 Le P82C150

Le P82C150 est un CAN Serial Linked I/O (SLIO), un noeud CAN sans intelligence.

Ce périphérique inclut un contrôleur CAN et 16 pins d'entrées/sorties. Son contrôleur CAN respecte les spécifications 2.0A et 2.0B (en mode passif) du protocole CAN. Il inclut un oscillateur interne l'affranchissant d'une horloge externe.

Ses 16 pins d'E/S sont individuellement configurables en mode analogique ou digital. Il est ainsi possible d'avoir jusqu'à 16 entrées digitales, avec la possibilité d'une transmission automatique d'un message au changement d'une des entrées. Le 82C150 intègre un ADC sur 10 bits, qu'il est possible de multiplexer sur 6 entrées. On peut aussi configurer jusqu'à 16 sorties 3 états ou 2 sorties quasi-analogiques (DPM, Discrete Pulse Modulation) avec une précision de 10 bits.

L'oscillateur interne limite le débit entre 20kbits/s et 125kbits/s. Cet oscillateur interne, un RC, implique aussi une procédure complexe de calibration au RESET du SLIO et ensuite régulièrement à l'utilisation. Ces deux limitations peuvent être dépassées en utilisant un oscillateur externe.

L'absence d'intelligence du SLIO oblige à le mettre sur un bus où un noeud plus "intelligent", typiquement un microcontrôleur sera capable de le configurer et de le commander.

2.1.1 Configuration du SLIO

2.1.1.1 Choix de l'ID

L'ID du 82C150 se fixe de façon hard. En fait, seuls 4 bits (sur les 11) sont paramètrables. Ceci limite en pratique le nombre de SLIO sur un réseau à 16.

2.1.1.2 Calibration

Afin de minimiser l'encombrement des systèmes à base de 82C150, celui-ci ne nécessite pas d'horloge externe grâce à l'utilisation d'un circuit RC interne. Ce circuit se calibre grâce à certaines trames qu'il recoit.

Plus concrètement, l'utilisation du 82C150 implique de le calibrer lors de son reset grâce à des messages de calibration, puis de le maintenir calibré en lui envoyant régulièrement ce message de calibration (environ tous les dixièmes de secondes pour un débit de 50kbits/s).

Message de calibration.
Message de calibration.

Un message de calibration est un message avec un ID particulier (imposé) dont la trame (non imposée) a pour caractéristique de présenter un nombre important de transitions 1-0. Au reset, il faut envoyer ce message plusieurs fois au SLIO, qui, lorsqu'il sera correctement calibré, renverra un message d'identification, le sign on message. Celui-ci indique l'ID du 82C150 ainsi que l'état des 16 entrées digitales.

2.1.2 Utilisation du 82C150

A l'exception de l'ID, le pins du 82C150 se configurent et se commandent entièrement avec des trames de data.

Ces trames permettent d'écrire dans les registres du 82C150. Celui-ci envoie aussi des trames indiquant l'état de ses registres.

2.1.2.1 Format des trames

Les trames envoyées ou reçues par le SLIO ont toujours 3 octets (sauf les remote frame bien sûr). Le premier de ces bytes indiquent le numéro du registre du SLIO. Les registres étant de 16 bits, les 2 bytes suivant indiquent le contenu du registre spécifié par l'adresse.

2.1.2.2 Les registres

Le 82C150 possède 9 registres. En voici le détail :

  • Le Data Input Register contient l'état des 16 pins en entrées. L'état de ce registre sera transmis soit après réception d'un remote frame ou d'un data frame de premier octet le numéro de ce registre, soit au changement d'état de l'une des entrées si le 82C150 est configuré ainsi.
  • Les registres Positive Edge Register et Negative Edge Register permettent de configurer, pour chaque bits, à quel moment doit être envoyé la data frame contenant l'état des pins. Autrement dit, si par exemple le bit 10 du Positive Edge Register est à 1, une data frame sera automatiquement envoyé lorsque l'entrée 10 passe à 1, pour peu qu'elle soit configurée en entrée digitale.
  • Le Data Output Register permet d'indiquer l'état des pins configurés en sortie.
  • Le Output Enable Register permet de configurer les pins en sorties digitales.
  • L'Analog Configuration Register configure l'ADC.
  • Les registres DPM1 et DPM2 configurent les sorties quasi-analogiques. Celles-ci sont sur les pins 10 (DPM1) et 4 (DPM2).
  • L'ADC Register contient le résultat d'une conversion analogique--digitale. Une lecture de ce registre lance une conversion.

Il est important de noter que toute écriture dans l'un de ces registres provoque l'envoi d'une data frame avec la valeur du registre modifié.

2.2 Le PCA82C250

Le protocole CAN ne spécifie pas la couche physique, c'est pourquoi la plupart des contrôleurs CAN ne possèdent pas de circuits permettant de les connecter à un bus, qu'il soit filaire, à fibre optique ou tout autre mode de transmission possible.
Un transceiver, tel que le 82C250 de Philips, permet de faire l'interface entre le contrôleur CAN et le bus physique.

2.2.1 Codage physique des bits

La seule contrainte pour une couche physique, est l'implémentation d'un ET cablé: si un seul noeud transmet un bit DOMINANT, l'état du bus est DOMINANT, et si tous les noeuds transmettent un état RECESSIF, l'état du bus est RECESSIF.

Le transceiver 82C250 code les bits DOMINANT et récessifs de la manière suivante :

  • Etat DOMINANT (TX=0) CANH - CANL = 2V
  • Etat RECESSIF (TX=1) CANH - CANL = 0V

Remarque : Lors de la transmission d'un bit RECESSIF, le 82C250 pilote la paire différentielle avec une forte impédance, laissant ainsi la possibilité à tout autre noeud d'imposer une tension différentielle de 2V, correspondant à un état dominant.

Couche Physique du CAN.
Couche Physique du CAN.

2.2.2 Débit

Le débit maximal d'un noeud utilisant un du 82C250 est de 1Mbit/s, soit la limite théorique de débit d'un bus CAN. En cas d'utilisation du 82C2500 à débit réduit pour environnements critiques, il est possible de régler le slew-rate des transitions DOMINANT-RECESSIF, afin de limiter les RFI.

2.3 Le SJA1000

2.3.1 Présentation

Le SJA1000 est un contrôleur CAN ne nécessitant qu'un microcontrôleur externe. Il a été développé par Philips en 1997 comme un successeur (compatible) du 82C200.

2.3.1.1 Caractéristiques

  • Buffer de réception de 64 octets
  • Supporte le CAN 2.0A et 2.0B
  • Débit jusqu'à 1Mbit/s (En fait environ 600Kbit/s de données utiles)
  • Compteurs d'erreur avec accès lecture/écriture
  • Interruptions pour chaque type d'erreur sur le bus
  • Capture de la dernière erreur disponible
  • Détails sur le bit d'ID ayant causé une perte d'arbitration
  • Mode "Listen Only" (aucune action sur le bus)

2.3.2 Le mode BasicCAN

Ce mode est un mode simplifié dont la principale utilité est la compatibilité totale avec le 82C200 (prédecesseur du SJA1000)

2.3.3 Le mode PeliCAN

Le mode Pelican est le mode dans lequel il faut utiliser le SJA1000 pour avoir accès à toutes ses fonctionalités (CAN 2.0B, registres d'erreur, informations sur arbitration perdue...).

2.3.4 Les principaux registres

2.3.4.1 Le registre MODE

Ce registre contrôle le mode de fonctionnement du SJA1000. Il précise en particulier si le SJA1000 est en mode normal ou en mode de réinitialisation ("Reset Mode"). Outre le mode normal, le SJA1000 peut fonctionnner dans les modes :

Listen Only
Aucune action sur le bus.
Self test mode
Acquittement par un autre noeud non-nécessaire pour une bonne transmission.
Sleep mode
Déconnexion du bus tant qu'il n'existe aucune activité sur celui-ci.

Le registre MODE permet également de régler différents modes de fonctionnement du filtre d'acceptation (voir plus bas).

2.3.4.2 Le registre COMMAND

Comme son nom l'indique, le registre COMMAND est utilisé pour commmander le contrôleur CAN. Ces commandes peuvent-être:

Transmit Request (bit 0)
Demande la transmission des données présentes dans le buffer de transmission.
Abort Transmission (bit 1)
Annule une demande de transmission faite (et qui n'a pas encore commencé). Si elle a déja commencé, elle se termine.
Release Receive Buffer (bit 2)
Libère la place du dernier message reçu dans le buffer de reception.
Clear Data Overrun (bit 3)
Ré-initialise l'indicateur de surcharge.
Go To sleep (bit 4)
Ordonne au SJA1000 de passer en Sleep mode.

2.3.4.3 Le registre STATUS

Receive Buffer Status (bit 0)
vaut 1 si un message est présent dans le buffer de réception.
Data Overrun Status (bit 1)
vaut 1 si un message a été perdu à cause d'une saturation du buffer de reception.
Transmit Buffer Status (bit 2)
vaut 1 si le buffer de transmission est prêt à recevoir des donnée.
Transmission Complete (bit 3)
vaut 1 si la dernière transmission demandée a été correctement transmise et acquittée.
Receiving Status (bit 4)
vaut 1 si un message est en cours de réception.
Transmit Status (bit 5)
vaut 1 si un message est en cours de transmission.
Error Status (bit 6)
vaut 1 si le compteur d'erreur de transmission ou celui de réception a atteint la limite d'alerte (96 par défaut).
Bus Status (bit 7)
vaut 1 si le noeud est connecté au bus (ni en Sleep Mode ni Bus-Off pour cause d'erreurs à répétitions).

2.3.4.4 Le registre INTERRUPT

Ce registre permet d'autoriser la génération d'interruption sur la broche INT pour les évènements suivants:

  • Réception d'un message (bit 0)
  • Transmission d'un message compléte
  • Changement des STATUS d'erreurs (Error Status et Bus Status)
  • Changement du STATUS de saturation (Data Overrun STATUS)
  • Wake-up interrupt (reveil du noeud pour cause d'activité sur le bus)
  • Passage du mode "error-active" au mode "error-passive" ou vice-versa (seuil de 127 des compteurs d'erreurs)
  • Perte d'une arbitration
  • Détection d'une erreur sur le bus

2.3.4.5 Les registres BUS_TIMING0 et BUS_TIMING1

Ces registres permettent de régler la durée d'un bit. Bien évidemment, le bit-timing doit être le même pour chaque noeud présent sur le bus.

2.3.5 Le buffer de réception

Le buffer de réception est implémente sous la forme d'une FIFO de 64 octets. Le SJA1000 donne accès a une "fenêtre" qui permet à l'utilisateur de lire le dernier message reçu. Une fois cette lecture faite, l'utilisateur peut ordonner au SJA1000 de libérer la place correspondante dans le buffer. Ceci aura pour conséquence de déplacer la fenêtre vers le message suivant. La figure ci-dessous permet de visualiser le fonctionnement du buffer.

En plus de la fenêtre de réception, l'utilisateur peut également accéder directement aux 64 octets du Buffer. On dispose pour cela d'un registre précisant la position du dernier message reçu (RX_BUFFER_START_ADDRESS) et d'un registre précisant le nombre de messages présents dans le buffer (RX_MESSAGE_COUNTER).

Lorsqu'un message arrive alors que le buffer de réception est plein, le message arrivant est perdu (par ce noeud), et l'indicateur de saturation ("Data Overrun Satus") est positionné.

Buffer de réception.
Buffer de réception.

2.3.6 Le buffer d'émission

Le buffer de transmission est un simple buffer de 12 octets (jusqu'à 4 octets d'ID pour le CAN 2.0B et 8 octets de données).

Une fois que l'utilisateur a rempli ce buffer, il peut faire une demande de transmission.

Buffer de transmission.
Buffer de transmission.

2.3.7 Le filtre d'acceptation

Le filtre d'acceptation (Acceptance Filter) a pour rôle de contrôler les identificateurs (identifiers) des messages présents sur le bus avant de les laisser entrer dans le buffer de réception. Une bonne utilisation de ce filtre permet d'éviter une saturation du buffer de réception.

Le filtre d'acceptation est constitué des Acceptance Code Registers et Acceptance Mask Register.

Les Acceptance Code Registers contiennent l'ID "optimal" attendu par le SJA1000 (c'est-à-dire celui que devra avoir un message pour pouvoir entrer dans le buffer de réception, si les Acceptance masks sont tous à 0).

Les Acceptance Mask Registers précisent les bits de l'ID qu'il faut tester (0 si un bit doit être contrôlé et 1 s'il n'a pas d'importance).


Si ce qui refusait de marcher depuis des semaines marche soudainement, c'est que quelque chose d'autre ne va plus fonctionner.

Loi de de la Mécanique en Robotique de Corwin.

Précédent : Le protocole CAN

Suivant : Cartes développées


TOP