Reading the Corsa D CAN Bus

I’ve recently been developing a bluetooth to aux board for my car, as part of this I wanted to hook into the CAN Bus and listen for steering wheel control buttons. I couldn’t find concrete information and code online, so I thought I’d release this and some notes.

You’ll need an Arduino, almost any variant will do, I used a Nano. You’ll also need an MCP2515 module. I was only successful in using one with a 16mhz crystal. The 8mhz crystal did not allow me to read the CAN bus, I’m assuming due to poor timings.

On the Vauxhaull/Opel Corsa D, there’s 3 CAN Buses.

Can Bus Speed
High Speed 500kbps
Medium Speed 95kbps
Low Speed 33.3kbps

The one I’m interested in is Medium Speed CAN (containing the steering wheel controls messages). This can be access via the OBD II port or from the CAN H/CAN L behind the CD30 radio which can easily be spliced.

Connecting CAN H/L to the MCP2515 and then to the Arduino, you can then load the code I used here: ajwilson/corsa-d-swc. The pins for MCP2515 to Arduino can be found at the top of the .ino file.

You’ll have to install the latest mcp2515_can library from SeeedStudio

The demo is designed for reading out steering wheel control messages and specifies a filter to only look for those CAN IDs, but can be adapted if you know of messages you want to see on the CAN Bus. Other people have documented different CAN IDs on the network, but for the purpose of this exercise, I was only interested in SWC IDs.