This library allows to use the CAN bus(es) of dice devices which both provide the following features:
- CAN 2.0 B, high-speed and low-speed, data rates up to 1 Mbps
- Wakeup feature on both CAN buses on pattern according to ISO 11898-2
- Listen only mode
- DMA (direct memory access)
- Hardware based message ID filtering
- Standard and extended ID-, mask- and range-filters
- RX – call-backs
- CAN-FD ready*
To use this library
This library is included by the start-up code so that it is not necessary to include it in the application. The MCAN objects of the class SAMC21_CAN are also created at start-up so that the application can use them globally.:
MCAN0
MCAN1
MCAN1 is available for devices equipped with two CAN buses (e.g. dice-2CAN)
The first can-bus (MCAN0) is automatically initialized according to the bootloader-settings of the device. Both CAN-buses can subsequently also be (re-)initialised by the user application. Filters can be configured using init_FiltID() for single and mask filtering or init_FiltRang() for ID ranges. The default filter settings allow the reception of all messages (std. and extended).
Examples
void setup()
{
while(!Serial);
Serial.println("Simple example receiving and
sending CAN messages");
}
void loop()
{
// Receive CAN messages
if( MCAN0.checkReceive() )
{
CANMessage t_canMesgToRecv;
if(MCAN0.readMsgBuf(t_canMesgToRecv) == CAN_OK)
Serial.println(t_canMesgToRecv.toString());
}
if(Serial.peek() != -1) // if the user hits enter
{
CANMessage t_canMesgToSend;
t_canMesgToSend.id = 0x123;
t_canMesgToSend.ext = false;
t_canMesgToSend.len = 2;
t_canMesgToSend.data[0] = 0x01;
t_canMesgToSend.data[1] = 0x02;
MCAN0.sendMsgBuf(t_canMesgToSend);
while(Serial.peek() != -1) Serial.read();
}
}
Notes
There are two way to receive messages. One uses the approach above while a second option creates C++ objects (SAMC21_CAN_RECEIVER) that are able to receive messages which are distributed by the background process.
The hardware is *CAN-FD ready, software support is pending
Examples can be found in the Arduino IDE menu:
File -> Examples -> DICE -> CAN Bus ->
SAMC21_CAN library compatibility
Further reads
Find more details about the ‘bootloader settings‘ and the CAN bus of dice devices
CAN operation background
Filter message IDs
users manual
BOOTLOADER SETTINGS – Library
SAMC21_CAN class
- SAMC21_CAN()
- begin()
- setMode()
- transmitBufferFull()
- sendMsgBuf()
- checkReceive()
- readMsgBuf()
- init_FiltID()
- init_FiltRang()
- disableFilter()
- isFilterEnabled()
- getFilterType()
- add_IDtoFilt()
- isEnabled()
- reenable()
Properies:
CANMessage class
Properties: