![]() |
|
Introduction
|
|
|
|
2.1 Le P82C150.
2.2 Le PCA82C250
2.3 Le SJA1000
| |
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.
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.
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).
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.
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.
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.
Le 82C150 possède 9 registres. En voici le détail :
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.
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 :
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.
2.2.2 DébitLe 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ésentationLe 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.2 Le mode BasicCANCe mode est un mode simplifié dont la principale utilité est la compatibilité totale avec
le 82C200 (prédecesseur du SJA1000)
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...).
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 :
Le registre MODE permet également de régler différents modes de
fonctionnement du filtre d'acceptation (voir plus bas).
Comme son nom l'indique, le registre COMMAND est utilisé pour commmander le contrôleur CAN. Ces commandes peuvent-être:
2.3.4.3 Le registre STATUS
2.3.4.4 Le registre INTERRUPTCe registre permet d'autoriser la génération d'interruption sur la broche INT pour les évènements suivants:
2.3.4.5 Les registres BUS_TIMING0 et BUS_TIMING1Ces 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.
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é.
2.3.6 Le buffer d'émissionLe 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.
2.3.7 Le filtre d'acceptationLe 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. | |