Go Down

Topic: Building a CAN API for Arduino DUE (Read 155991 times) previous topic - next topic


Hello roundhouselabs and welcome to the forum. Thank you for the information. So far, my Arduino Due can transmit/receive CAN 2.0A messages within the Arduino API. I used an Atmel sample code for the SAM3X series. Right now, I am organizing the library and replacing missing functions presents in Atmel but in the Arduino API and hope to release them with a couple of sample sketches in github in the coming days for revision and comments. As you may have noticed, a CAN shield has been required. Regards!


Here a picture of my Arduino Due CAN shield (prototype) during loop tests. I will mount the resistors in the shield (less power of course!)


I'm excited to see work with CAN on the Arduino Due - I'm one of the developers of the OpenXC platform that roundhouselabs mentioned (openxcplatform.com) and while we started prototyping with the Arduino at Ford, we had to move to the chipKIT to get a little bit more performance and CAN controllers on the MCU. I'd love to get the OpenXC translator working with the Due; all we really need is the library API - I read through this thread but I can't quite tell if there is progress happening somewhere else on the software side.

If there's a work-in-progress repository somewhere, I'd love to help out. Looking for examples of simple CAN APIs that would exist at about the same level of abstraction as the other core Arduino libraries, the one provided by the mbed library may be a good start: http://mbed.org/handbook/CAN


In my CAN Shield - Due electrical schematic (see Reply #28), I reversed CANTX1, CANRX1 pins.
Here the corrected schematic. Please, ignore the previous one. Sorry for any inconvenience.

Question for moderator: Should I delete or update wrong schematic? Thanks


Arduino Due and CAN shield with termination resistors (120 ohm) mounted. The jumpers are selecting high-speed (0V-black) and disabling low-power (3V3-red) modes in the SN65HVD234 transceivers. The CANH (orange) and CANL (purple) bus terminals hooked for a loop test.


I was able to order a DUE today, so I'll join the ranks soon :)

I really appreciate it, that you use both CAN-Transceivers! This will be great for using it as a Gateway!


I have my Due and now it's time to order the transceivers.  I'm going to get both the 234 and 235's.  Which ever ones I don't use in the car I'll use on the work bench.  Thanks for tackling this.


Great for you keija and that_kid. Do as I did: Request a couple of samples of each transceiver to Atmel. I have some sample sketches running OK on my Due, using a combination of Atmel and Arduino library files. The goal is to occupy as much as Arduino files and as less as Atmel files as possible. I also hope to run my first real test these next days interfacing Due with a battery manager system (with XC167CI - by Infineon and AT91SAM7).


I wanted to share another of the tests I am working now with Arduino Due using the CAN shield. The test consists of making Due read CAN data from a commercial OBD II code reader. This will prepare the ground for more tests like convert Due as a OBD2 simulator system generating some DTC codes to be read by the code reader and finally to make Arduino Due read some real DTC codes from my car (Honda-Oddysey 2002) or any other car under OBD2.

As some of you know, ODB II stands for On Board Diagnostics, level 2. OBD II is a federally mandated engine & emissions management standard for all passenger cars sold in 1996 and beyond. ODB II uses CAN bus Dual Wire like Arduino Due (ISO 11898-1/SAE J2284).

For my first test I used an Actron CP9125 pocket scanner (with a 89C71CC01CA microcontroller and TJA1050 CAN transceiver).

Here a the schematic of interconnection between the code reader and Arduino Due and a picture of both systems. So far, Due can read from the reader ID 0x07DF the following data: 02 01 00 99 99 99 99 99 which is a request data to start reading DTC codes. I am very excited exploring CAN protocol in Arduino Due and OBD2 systems. I'd recommend to get ready if you want to embark on this journey.


Excellent news, I'm just waiting on my parts to arrive from mouser.com  I was going to order the engineering samples but I needed some parts so I just went ahead and get it all.  Next stop is to see if my local radio shack has the shield that you are using. 

Hey guys. I'm interested in getting on board with the CAN protocol as well. I've done a lot of low level CAN drivers on the pic24, dspic, and pic32 along with the MCP2551 transceiver at work. I have a DUE coming in next week and just put in my order for TI samples of the two transceivers mentioned earlier in this thread (234 and 235).
What is the scope of this CAN library? I'd be more than willing to work the low level driver stuff and different implementations of it (interrupt based, polling based, different modes).


Hello downtown_sausage and welcome aboard! We are going to need your CAN skills soon. So far I have Due running CAN 2.0A but with a mixed Arduino-Atmel library. I hope to release a couple of simple sample sketches and a tentative CAN library in github very soon. I am following guidelines/advices from the Arduino team and Atmel but everybody is welcome here. The scope: once released the CAN library, we'll need as much people as possible to be involved and contribute with ideas, applications, improvements, fixing bugs, etc... remember, this is the first Arduino board with embedded CAN controllers: just transceivers between the board and real CAN device, so, a new Arduino Art is oncoming and a lot of work to do. Thanks!


Palliser, you might consider doing your development in the open on GitHub, even before you think it's at a good draft stage. No reason we can't start helping you out already!


Thank you peplin again for your interest in help with the CAN API development. Please, have just a little bit of patience. I hope to upload the CAN library and sample sketches on the next days. I am waiting on answers/revisions by Atmel/Arduino. And as I have said, try to build or have ready you own CAN transceivers shield; otherwise, it would be virtually impossible and even dangerous to try any communication test without it.

Like you and other Arduino users, I am more than willing to see a CAN API ready and all the discussion to come.

Palliser, are you developing the base CAN drivers based on Atmel example code at the moment? My plan was to write the CAN drivers from scratch, with different configurations options. After that is up and working, integrate that code into an Arduino library.

Go Up

Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

via Egeo 16
Torino, 10131