Apa itu MCP2515?
MCP2515 adalah kontroler protokol Controller Area Network (CAN) yang berdiri sendiri (standalone) dari Microchip. Chip ini sepenuhnya mengimplementasikan spesifikasi CAN 2.0B, menyediakan solusi komunikasi CAN bus yang andal, fleksibel, dan hemat biaya untuk sistem embedded melalui antarmuka SPI berkecepatan tinggi.
Spesifikasi Teknis Inti MCP2515
- Protokol CAN: sesuai CAN 2.0B
- Bitrate maksimum: 1 Mbps
- Antarmuka ke MCU: SPI (hingga 10 MHz)
- Tegangan: 2,7V - 5,5V
- Arus tipikal: 5 mA (aktif), 1 µA (standby)
- Buffer penerima: 2
- Buffer pengirim: 3
- Filter / Mask: 6 / 2
- Suhu operasi: -40°C hingga +125°C
Diagram Arsitektur Interaktif
Arahkan kursor ke modul untuk melihat detail
Fisik dan Pinout MCP2515
Foto chip dan diagram konfigurasi pinnya.
IC MCP2515 | Foto oleh Microchip

Diagram Pin MCP2515 Standalone CAN Controller
Cara kerja internal
MCP2515 menyederhanakan komunikasi CAN untuk mikrokontroler yang tidak memiliki modul CAN bawaan. Chip ini bertindak sebagai perantara yang menangani tugas-tugas kompleks protokol CAN sehingga MCU hanya perlu mengirim dan menerima data melalui SPI. Clock internal MCP2515 tersinkron dengan bus, dan hardware khusus menangani bit timing, pemeriksaan error, serta buffering pesan, sehingga beban pemrosesan MCU berkurang secara signifikan.
Panduan untuk pemula dan hobiis
Bagian ini memandu Anda melalui koneksi hardware dasar dan pemrograman untuk menggunakan MCP2515 dengan Arduino atau ESP32.
Koneksi hardware dan wiring
Berikut adalah diagram wiring tipikal untuk menghubungkan modul MCP2515 ke Arduino Uno. Ingat bahwa dibutuhkan dua resistor terminasi 120Ω pada masing-masing ujung fisik CAN bus.

Diagram wiring Arduino Uno ke modul CAN MCP2515
Pinout Modul MCP2515:
- VCC: catu daya (5V)
- GND: ground
- CS: Chip Select SPI (mis. Arduino D10)
- SO: SPI Data Out (MISO, mis. Arduino D12)
- SI: SPI Data In (MOSI, mis. Arduino D11)
- SCK: SPI Clock (mis. Arduino D13)
- INT: interrupt (opsional, mis. Arduino D2)
- CAN_H / CAN_L: jalur CAN high/low
Software: kirim dan terima
Cuplikan kode berikut menunjukkan cara mengirim dan menerima pesan sederhana menggunakan library mcp2515.
Inisialisasi dan pengiriman
#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("Gagal menginisialisasi MCP2515");
while(1);
}
if (mcp2515.setBitrate(CAN_125KBPS) != MCP2515::ERROR_OK) {
Serial.println("Gagal mengatur bitrate");
while(1);
}
}
void loop() {
CanMessage msg;
msg.id = 0x123;
msg.data[0] = 0xAA;
msg.data_length_code = 1;
mcp2515.sendMessage(&msg);
Serial.println("Pesan terkirim!");
delay(1000);
}Menerima pesan
#include <mcp2515.h>
#include <SPI.h>
#define CS_PIN 10
MCP2515 mcp2515(CS_PIN);
void setup() {
// ... (sama seperti di atas)
}
void loop() {
CanMessage msg;
if (mcp2515.readMessage(&msg) == MCP2515::ERROR_OK) {
Serial.print("ID pesan diterima: 0x");
Serial.print(msg.id, HEX);
Serial.print(", Data: ");
Serial.println(msg.data[0], HEX);
}
delay(10);
}Penjelasan fungsi
mcp2515.reset(): menginisialisasi chip ke kondisi yang diketahui. Penting untuk memastikan MCP2515 siap dikonfigurasi; seperti reboot via software untuk logika internal. Ini sebaiknya dipanggil pertama setelah konstruktor.
mcp2515.setBitrate(): mengonfigurasi kecepatan CAN bus. Fungsi ini menerima konstanta seperti CAN_125KBPS atau CAN_500KBPS dan menghitung nilai register bit timing (CNF1, CNF2, CNF3) yang sesuai dengan bitrate target dan frekuensi osilator, agar semua node dapat berkomunikasi dengan andal.
Polling vs. interrupt
Fungsi loop() pada contoh penerimaan menggunakan polling dengan memanggil mcp2515.readMessage() berulang kali. Ini sederhana namun kurang efisien karena MCU terus mengecek pesan baru walau tidak ada. Cara yang lebih efisien adalah pendekatan berbasis interrupt. Dengan menghubungkan pin INT MCP2515 ke pin interrupt MCU, chip dapat memberi sinyal hanya saat ada pesan baru, sehingga MCU dapat mengerjakan tugas lain sambil menunggu.
Untuk insinyur profesional
Pembahasan lebih dalam tentang integrasi MCP2515 dalam proyek profesional, perbandingan performa, dan perhitungan parameter penting.
MCP2515 vs. kontroler CAN native
Bandingkan MCP2515 dengan kontroler CAN on-chip (mis. pada STM32) untuk membantu pemilihan teknologi.
Kalkulator bit timing
Bit timing yang akurat sangat penting untuk jaringan CAN yang stabil. Alat ini membantu Anda menghitung nilai register CNF1/2/3 untuk setup Anda.
Hasil perhitungan:
Aplikasi praktis dan troubleshooting
Jelajahi studi kasus nyata dan pelajari cara mendiagnosis serta mengatasi masalah umum pada MCP2515.
Studi kasus
Proyek otomasi industri
Komunikasi CAN real-time antara beberapa node sensor dan kontroler pusat untuk mengirim data lingkungan di pabrik pintar. MCP2515 dipasangkan dengan mikrokontroler STM32 untuk memenuhi kebutuhan kecepatan dan keandalan. Masalah noise catu daya dan konfigurasi filter yang salah berhasil diatasi.
Komunikasi ECU otomotif
Pengembangan alat diagnostik kustom untuk CAN bus kendaraan. Alat ini menggunakan MCP2515 untuk membaca dan mengirim pesan diagnostik ke berbagai ECU (Engine Control Unit, ABS). Proyek ini membutuhkan dukungan frame CAN standar dan extended, serta pengelolaan prioritas pesan untuk data logging real-time.
Jaringan sensor pertanian cerdas
Jaringan terdistribusi sensor kelembapan tanah, suhu, dan cahaya pada area pertanian yang luas. Setiap node menggunakan MCP2515 untuk berkomunikasi dengan gateway pusat. Konsumsi daya rendah dan komunikasi yang robust dari MCP2515 sangat penting untuk node bertenaga baterai dan komunikasi jarak jauh.
Panduan troubleshooting interaktif
Kemungkinan penyebab:
- Gangguan noise pada catu daya.
- Tidak ada resistor terminasi 120Ω di ujung-ujung bus.
- Perbedaan baud rate antar node jaringan.
Solusi:
- Tambahkan kapasitor decoupling lebih banyak dekat pin VCC dan GND.
- Pastikan resistor 120Ω terpasang di setiap ujung fisik bus.
- Periksa dan samakan konfigurasi baud rate di semua node.
Kemungkinan penyebab:
- Filter atau mask penerimaan salah konfigurasi sehingga semua pesan terfilter.
- MCP2515 masuk status "Bus-Off" karena terlalu banyak error.
- Kabel/wiring salah, terutama jalur MISO/MOSI.
Solusi:
- Nonaktifkan filter sementara untuk menguji konektivitas.
- Periksa register penghitung error dan lakukan reset software/hardware bila perlu.
- Verifikasi koneksi pin SPI dengan teliti.
Kemungkinan penyebab:
- Pin CS SPI salah konfigurasi atau tidak dikendalikan dengan benar.
- Kecepatan clock SPI melebihi spesifikasi MCP2515 (10MHz).
- Tegangan catu daya tidak stabil atau tidak cukup.
Solusi:
- Pastikan pin CS di kode sesuai hardware dan periksa level logika dengan osiloskop.
- Turunkan frekuensi clock SPI dari MCU.
- Pastikan catu daya MCP2515 stabil dan bersih.




