Blog
Recent Posts
Getting Started with CAN Bus Development Using Arduino
Posted by
onThe Controller Area Network (CAN Bus) has become a cornerstone of modern embedded systems, especially in automotive, industrial, and marine applications. For hobbyists, students, and professionals alike, the Arduino ecosystem offers an affordable and accessible entry point into CAN Bus development. Whether you're building a prototype for automotive diagnostics, simulating vehicle networks, or creating an NMEA 2000 marine project, Arduino provides a wide range of tools to support your journey.
CAN Bus with Arduino: A Quick Overview
While most Arduino boards (like the Uno, Nano, or Mega) do not include built-in CAN controllers, the community has long embraced external CAN shields and modules—primarily those using the Microchip MCP2515 CAN controller with a TJA1050 CAN transceiver.
However, some Arduino boards such as the Arduino Due stand out. The Due is equipped with two integrated CAN controllers (CAN0 and CAN1) built directly into its SAM3X8E ARM Cortex-M3 processor. With the right transceivers and libraries, the Due can be a powerful native CAN interface without relying on an external controller.
Copperhill Technologies, for example, offers a robust Dual-CAN Bus Interface Shield for the Arduino Due, which connects both CAN channels (CAN0 and CAN1) to external transceivers. This shield is ideal for applications requiring simultaneous communication on two CAN networks and supports a wide input voltage range for industrial environments.
Popular CAN Bus Shields and Modules for Arduino
✅ MCP2515 CAN Bus Shield
The MCP2515 is a widely used SPI-based CAN controller that supports Classical CAN 2.0A/B at speeds up to 1 Mbps. When paired with a TJA1050 transceiver, it can interface with standard CAN networks. It’s commonly available in both shield and breakout board formats.
-
Compatible with Arduino Uno, Mega, Nano, and others
-
Requires the MCP_CAN library by Cory J. Fowler
-
Well-supported across the community
-
Suitable for diagnostics, message logging, and basic CAN communication
✅ Arduino Due with CAN Transceiver
While the Arduino Due has onboard CAN controllers, it lacks physical transceivers. A simple external SN65HVD230 or MCP2551 transceiver module enables CAN communication.
-
Dual CAN channels (CAN0 and CAN1)
-
Higher performance for more complex applications
-
Compatible with Arduino-CAN and Due_CAN libraries
-
Ideal for more advanced uses like J1939 simulation or CAN sniffing
-
Use with a dedicated Dual-CAN Shield for easy prototyping and robust hardware design
What About CAN FD?
CAN FD (Flexible Data Rate) is the modern evolution of Classical CAN, allowing higher data throughput (up to 64 bytes per frame and faster data phase speeds). Unfortunately, the MCP2515 does not support CAN FD.
To work with CAN FD on Arduino:
✅ MCP2518FD CAN FD Controller
-
SPI-based CAN FD controller from Microchip
-
Drop-in replacement in many MCP2515 use cases (but not pin-compatible)
-
Requires newer Arduino libraries
-
Needs a CAN FD-compatible transceiver like MCP2562FD
While MCP2518FD modules are becoming more available, their support on 8-bit Arduinos (like Uno or Nano) is limited due to speed and memory constraints. Boards like the Arduino Due, Teensy 4.0, or ESP32 are more suitable for CAN FD due to their increased performance and memory.
Copperhill Technologies offers a line of Teensy-based devices supporting Classical CAN and CAN FD.
CAN Protocol Support: J1939 and NMEA 2000
For specific CAN-based protocols like SAE J1939 (used in commercial vehicles) and NMEA 2000 (used in marine systems), you’ll find both Arduino libraries and hardware solutions tailored to these standards.
✅ SAE J1939 on Arduino
-
Copperhill Technologies offers a robust SAE J1939 Protocol Stack for Arduino boards.
-
Compatible with MCP2515 and Arduino Due (with external transceiver)
-
Enables address claim, PGN filtering, multi-packet transport, and more
-
Full-featured solutions with simulation tools and diagnostics
✅ NMEA 2000 on Arduino
-
Supports Arduino Due, Teensy, and ESP32 boards
-
Requires MCP2515 or CAN-enabled boards with NMEA 2000-compatible transceivers
-
Includes examples for environmental data, device announcement, and PGN handling
-
Great for DIY marine electronics (wind, GPS, engine monitoring, etc.)
Final Thoughts
Whether you're building a CAN-enabled IoT device, experimenting with automotive protocols, or developing a marine monitoring system, Arduino offers a modular, open-source-friendly foundation for CAN Bus development.
-
Classical CAN: Start with MCP2515 or the Due
-
CAN FD: Use MCP2518FD with more capable MCUs
-
J1939/NMEA 2000: Leverage specialized libraries and shields from vendors like Copperhill or Seeed Studio
As the demand for robust communication in embedded systems grows, the Arduino ecosystem continues to evolve—making CAN Bus development more approachable and affordable than ever before.
A Comprehensible Guide to Controller Area Network by Wilfried Voss stands out as the most thoroughly researched and complete resource on CAN Bus technology currently available. Originally developed for the automotive industry—particularly European vehicles—Controller Area Network (CAN) has since evolved into a widely adopted communication protocol across various sectors, including industrial automation and embedded systems.
Designed to facilitate fast, reliable communication between microcontrollers, CAN Bus meets the demands of real-time data exchange without the complexity or cost of dual-ported RAM solutions. This makes it ideal for embedded applications where efficiency and reliability are critical.
The book offers an in-depth exploration of all aspects of CAN Bus, from fundamental principles to advanced features, while maintaining a high degree of readability. It is a definitive reference for engineers, developers, and students seeking both comprehensive technical detail and practical guidance. More information...