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

Schéma de brochage du contrôleur CAN autonome MCP2515
Fonctionnement interne
Le MCP2515 simplifie la communication CAN pour les microcontrôleurs ne disposant pas d’un module CAN natif. Il agit comme intermédiaire en prenant en charge les tâches complexes du protocole CAN, de sorte que la MCU n’ait qu’à envoyer et recevoir des données via l’interface SPI. Son horloge interne se synchronise avec le bus, et un matériel dédié gère le bit timing, la détection d’erreurs et la mise en tampon des messages, ce qui réduit fortement la charge processeur de la MCU.
Guide pour débutants et hobbyistes
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 aux deux extrémités physiques du bus CAN.

Schéma de câblage : Arduino Uno vers module CAN MCP2515
Brochage du module MCP2515 :
- VCC : Alimentation (5V)
- GND : Masse
- CS : Chip Select 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 haut/bas du bus CAN
Logiciel : envoyer et recevoir
Les extraits suivants montrent comment envoyer et recevoir un message simple avec 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 configuration du débit");
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("ID reçu : 0x");
Serial.print(msg.id, HEX);
Serial.print(", Données : ");
Serial.println(msg.data[0], HEX);
}
delay(10);
}Explications des fonctions
mcp2515.reset() : Initialise le composant dans un état connu. C’est indispensable pour s’assurer que le MCP2515 est prêt à être configuré ; cela agit comme un redémarrage logiciel de la logique interne. À appeler en premier après le constructeur.
mcp2515.setBitrate() : Configure la vitesse du bus CAN. La fonction prend une constante prédéfinie telle que CAN_125KBPS ou CAN_500KBPS et calcule les valeurs des registres de temporisation (CNF1, CNF2, CNF3) correspondant au débit cible et à la fréquence de l’oscillateur, afin d’assurer une communication fiable entre tous les nœuds.
Scrutation (polling) vs interruptions
La fonction loop() dans le code de réception utilise la scrutation en appelant répétitivement mcp2515.readMessage(). C’est simple mais peut être inefficace, car la MCU passe du temps à vérifier s’il y a de nouveaux messages même lorsqu’il n’y en a pas. Une méthode plus efficace est l’approche pilotée par interruptions. En connectant la broche INT du MCP2515 à une broche d’interruption de la MCU, le composant peut signaler l’arrivée d’un nouveau message, laissant la MCU exécuter d’autres tâches en attendant.
Pour les ingénieurs professionnels
Analyse approfondie de l’intégration du MCP2515 dans des projets professionnels, comparaisons de performances et calculs de paramètres clés.
MCP2515 vs contrôleur CAN natif
Comparaison du MCP2515 avec des contrôleurs CAN intégrés (ex. sur STM32) pour aider au choix technologique.
Calculateur de bit timing
Un bit timing précis est crucial pour un réseau CAN stable. Cet outil vous aide à calculer rapidement les valeurs des registres CNF1/2/3 pour votre configuration.
Résultats du calcul :
Applications pratiques et dépannage
Explorez des cas d’usage réels et apprenez à diagnostiquer et résoudre les problèmes courants avec le MCP2515.
Études de cas
Projet d’automatisation industrielle
Communication CAN en temps réel entre plusieurs nœuds capteurs et un contrôleur central pour transmettre des données environnementales dans une usine intelligente. Le MCP2515 a été associé à un microcontrôleur STM32 pour répondre à des exigences élevées de vitesse et de fiabilité. Résolution de problèmes de bruit d’alimentation et de mauvaise configuration des filtres.
Communication ECU automobile
Développement d’un outil de diagnostic personnalisé pour le bus CAN d’un véhicule. L’outil utilise le MCP2515 pour lire et envoyer des messages de diagnostic à différents calculateurs (ECU moteur, ABS). Le projet nécessitait la gestion de trames CAN standard et étendues, ainsi que des priorités de messages pour un enregistrement des données en temps réel.
Réseau de capteurs pour agriculture intelligente
Réseau distribué de capteurs d’humidité du sol, de température et de luminosité déployés sur une grande exploitation. Chaque nœud utilise un MCP2515 pour communiquer avec une passerelle centrale. La faible consommation et la robustesse du MCP2515 ont été essentielles pour des nœuds sur batterie et une communication longue distance.
Guide interactif de dépannage
Causes possibles :
- Interférences dues au bruit d’alimentation.
- Absence de résistances de terminaison 120Ω aux extrémités du bus.
- Débit (baud rate) non cohérent entre les nœuds.
Solutions :
- Ajouter davantage de condensateurs de découplage près des broches VCC et GND.
- Vérifier qu’une résistance de 120Ω est présente à chaque extrémité physique du bus.
- Contrôler et harmoniser la configuration du débit sur tous les nœuds.
Causes possibles :
- Filtre ou masque de réception mal configuré, filtrant tous les messages.
- Le MCP2515 est passé en état « Bus-Off » à cause d’un trop grand nombre d’erreurs.
- Câblage incorrect, notamment les lignes MISO/MOSI.
Solutions :
- Désactiver temporairement les filtres pour tester la connectivité.
- Vérifier les registres de compteurs d’erreurs et effectuer un reset logiciel/matériel si nécessaire.
- Vérifier soigneusement les connexions SPI.
Causes possibles :
- Broche CS SPI mal configurée ou pas correctement pilotée.
- Fréquence d’horloge SPI supérieure à la spécification du MCP2515 (10 MHz).
- Tension d’alimentation instable ou insuffisante.
Solutions :
- Confirmer que la broche CS définie dans le code correspond au câblage ; vérifier les niveaux logiques à l’oscilloscope.
- Réduire la fréquence SPI de la MCU.
- Assurer une alimentation stable et propre pour le MCP2515.




