The current SNODE library implementation uses the Microchip MCP2515 CAN controller as the CAN bus controller.
MCP2515 is a stand-alone CAN controller that implements the CAN specification, Version 2.0B. It is capable of transmitting and receiving both standard and extended data and remote frames. The MCP2515 has two acceptance masks and six acceptance filters that are used to filter out unwanted messages, thereby reducing the host MCU’s overhead. The MCP2515 interfaces with microcontrollers (MCUs) via an industry standard Serial Peripheral Interface (SPI).
The CAN network is based on a half-duplex differential signal. CANH is the HIGH-level CAN bus line which is a differential signal. CANL is the LOW-level CAN bus line which is a differential signal. There are two logical states: dominant and recessive. The figure below shows the general concept.
Figure 2 – Differential Signals
The CAN transceiver is needed to convert the digital signals generated by a CAN controller to signals suitable for transmission over the bus cabling (differential output). It also provides a buffer between the CAN controller and the high-voltage spikes that can be generated on the CAN bus by outside sources (EMI, ESD, electrical transients, etc.).
Figure 3 – Typical Interconnect
The Receive (Rx) signal of CAN is the signal receiving the data. The Transmit (Tx) signal of CAN is the signal transmitting the data. These signals are connected to the CAN transceiver (PHY) which performs the CAN encoding and decoding. The CAN bus must be terminated with termination resistors at both ends to avoid electrical signal reflections. Typically, R is 120R. Twisted pair wires in a shielded cable should be used to minimize emissions and reduce interference.
MCP2551 or TJA1055 can be used as the CAN transceiver controller. The typical interconnect schematic diagram of the CAN controller (MCP2515) and the CAN transceiver (MCP2551) is shown below.
Figure 4 – Typical Interconnect Schematic Diagram
The MCU is used to perform the SNODE logic, the CAN and sensors configuration, receive and transmit data, etc. (Figure 1). The Arduino board is used as the MCU of the SNODE implementation.
The following figures are the pin connections of Arduino boards and the popular MCP2512 CAN bus shield.

Figure 4 – Arduino Nano and the MCP2515 CAN bus shield

Figure 5 – Arduino Micro and the MCP2515 CAN Bus shield
The table below shows the pin to pin connection.
Arduino Nano | Arduino Micro | The MCP2515 CAN Bus Shield |
---|---|---|
5 V | 5 V | VCC |
GND | GND | GND |
D10 | SS | CS |
D12 | MISO | SO |
D11 | MOSI | SI |
D13 | SCK | SCK |
Table 1 – Pin to pin connection
As the node sensors, there can be any module (OLED, button, buzzer, etc.) connected to the MCU (Arduino) via one of interfaces (SPI, I2C, GPIO, etc.).
Figure 6 – The connection of node sensors