Qu'est-ce que le MCP2515 ?
Le MCP2515 est un contrôleur de protocole CAN (Controller Area Network) autonome développé par Microchip. Il implémente entièrement la spécification CAN 2.0B, offrant une solution de communication par bus CAN fiable, flexible et économique pour les systèmes embarqués via une interface SPI haute vitesse.
Spécifications techniques du MCP2515
- Protocole CAN : Conforme CAN 2.0B
- Débit max : 1 Mbps
- Interface MCU : SPI (jusqu'à 10 MHz)
- Tension : 2,7V - 5,5V
- Courant typique : 5 mA (actif), 1 µA (veille)
- Tampons de réception : 2
- Tampons de transmission : 3
- Filtres / Masques : 6 / 2
- Température de fonctionnement : -40°C à +125°C
Diagramme d'architecture interactif
Survolez un module pour voir les détails
Aspect physique et brochage
Une photo de la puce physique et un schéma de sa configuration de broches.
Puce MCP2515 | Photo par Microchip

Diagramme de brochage du contrôleur CAN autonome MCP2515
Fonctionnement interne
Le MCP2515 simplifie la communication CAN pour les microcontrôleurs dépourvus de module CAN natif. Il agit comme intermédiaire, gérant les tâches complexes du protocole CAN pour que le MCU n'ait qu'à envoyer et recevoir des données via l'interface SPI. L'horloge interne du MCP2515 se synchronise avec le bus, et son matériel dédié gère le timing des bits, la vérification des erreurs et la mise en mémoire tampon des messages, réduisant ainsi considérablement la charge de traitement du MCU.
Guide pour débutants et passionnés
Cette section vous guide à travers les connexions matérielles de base et la programmation pour utiliser le MCP2515 avec Arduino ou ESP32.
Connexion matérielle et câblage
Voici un schéma de câblage typique pour connecter un module MCP2515 à un Arduino Uno. N'oubliez pas que deux résistances de terminaison de 120Ω sont nécessaires à chaque extrémité physique du bus CAN.

Schéma de câblage montrant comment connecter un Arduino Uno à un module bus CAN MCP2515
Brochage du module MCP2515 :
- VCC : Alimentation (5V)
- GND : Masse
- CS : Chip Select pour SPI (ex: Arduino D10)
- SO : Sortie de données SPI (MISO, ex: Arduino D12)
- SI : Entrée de données SPI (MOSI, ex: Arduino D11)
- SCK : Horloge SPI (ex: Arduino D13)
- INT : Interruption (optionnel, ex: Arduino D2)
- CAN_H / CAN_L : Lignes haute/basse du bus CAN
Logiciel : Envoi et Réception
Les extraits de code suivants montrent comment envoyer et recevoir un message simple en utilisant la bibliothèque `mcp2515`.
Initialisation et Envoi
#include <mcp2515.h>
#include <SPI.h>
#define CAN_INT 2
#define CS_PIN 10
MCP2515 mcp2515(CS_PIN);
void setup() {
Serial.begin(115200);
SPI.begin();
if (mcp2515.reset() != MCP2515::ERROR_OK) {
Serial.println("Erreur d'initialisation du MCP2515");
while(1);
}
if (mcp2515.setBitrate(CAN_125KBPS) != MCP2515::ERROR_OK) {
Serial.println("Erreur de réglage du débit (bitrate)");
while(1);
}
}
void loop() {
CanMessage msg;
msg.id = 0x123;
msg.data[0] = 0xAA;
msg.data_length_code = 1;
mcp2515.sendMessage(&msg);
Serial.println("Message envoyé !");
delay(1000);
}Réception d'un message
#include <mcp2515.h>
#include <SPI.h>
#define CS_PIN 10
MCP2515 mcp2515(CS_PIN);
void setup() {
// ... (identique à ci-dessus)
}
void loop() {
CanMessage msg;
if (mcp2515.readMessage(&msg) == MCP2515::ERROR_OK) {
Serial.print("Message reçu ID: 0x");
Serial.print(msg.id, HEX);
Serial.print(", Donnée: ");
Serial.println(msg.data[0], HEX);
}
delay(10);
}Explications des fonctions
mcp2515.reset() : Initialise la puce dans un état connu. C'est essentiel pour s'assurer que le MCP2515 est prêt à être configuré, comme un redémarrage logiciel de la puce.
mcp2515.setBitrate() : Configure la vitesse du bus CAN. Elle utilise des constantes comme `CAN_125KBPS` pour calculer les registres de timing (CNF1, CNF2, CNF3) en fonction de l'oscillateur.
Sondage (Polling) vs. Interruptions
Le code de réception utilise le sondage (polling) en appelant continuellement `readMessage()`. C'est simple mais peu efficace car le MCU perd du temps à vérifier. Une méthode plus efficace est l'approche par interruptions : en reliant la broche INT du MCP2515 à une broche d'interruption du MCU, ce dernier n'est averti que lorsqu'un message arrive.
Pour les ingénieurs professionnels
Approfondissement de l'intégration du MCP2515 dans des projets professionnels, comparaisons de performance et calculs de paramètres clés.
MCP2515 vs. Contrôleur CAN natif
Comparaison du MCP2515 avec les contrôleurs CAN intégrés (ex: STM32) pour aider au choix technologique.
Calculateur de Timing de Bit
Un timing précis est crucial pour la stabilité du réseau CAN. Cet outil vous aide à calculer les valeurs des registres CNF1/2/3.
Résultats du calcul :
Applications concrètes et Dépannage
Découvrez des études de cas réels et apprenez à diagnostiquer les problèmes courants du MCP2515.
Études de cas
Automatisation Industrielle
Communication CAN en temps réel entre plusieurs capteurs et un contrôleur central dans une usine intelligente. Le MCP2515 a été couplé à un STM32 pour répondre aux exigences de vitesse et de fiabilité. Problèmes de bruit d'alimentation résolus.
Diagnostic Automobile (ECU)
Développement d'un outil de diagnostic personnalisé pour le bus CAN d'un véhicule. Utilisation du MCP2515 pour lire/envoyer des messages aux calculateurs (Moteur, ABS). Gestion des trames standard et étendues ainsi que des priorités.
Agriculture Intelligente
Réseau distribué de capteurs d'humidité et de température sur une grande exploitation. La faible consommation du MCP2515 a été critique pour ces nœuds fonctionnant sur batterie et communiquant sur de longues distances.
Guide de dépannage interactif
Causes possibles :
- Bruit sur l'alimentation électrique.
- Absence de résistances de terminaison de 120Ω.
- Incohérence du baud rate entre les nœuds.
Solutions :
- Ajouter des condensateurs de découplage près des broches VCC/GND.
- Vérifier la présence des résistances de 120Ω aux extrémités.
- Unifier la configuration du débit sur tout le réseau.
Causes possibles :
- Filtres ou masques mal configurés (bloquent tout).
- Le MCP2515 est en état "Bus-Off" (trop d'erreurs).
- Câblage SPI incorrect (lignes MISO/MOSI).
Solutions :
- Désactiver temporairement les filtres pour tester.
- Vérifier les registres d'erreur et effectuer un reset.
- Vérifier minutieusement les connexions du bus SPI.
Causes possibles :
- Broche CS (Chip Select) mal configurée.
- Vitesse SPI trop élevée (max 10MHz).
- Tension d'alimentation instable.
Solutions :
- Vérifier que la broche CS dans le code correspond au matériel.
- Baisser la fréquence d'horloge SPI du MCU.
- Assurer une alimentation propre et stable.




