Playing with BMW Motorrad CAN Bus system

Introduction

There is initially two goals to this starting investigation : one is to extract data from the system just because I can, and the other, much more concrete is that, after my bike fall the very first day I had it, the button to turn the 4 blink light stop working. It’s not a button that you need a lot but when you need it, you really do, and so I thought if I could reproduce what this button do programmatically, I would not have to replace a 300€ commodo and rely on my phone instead…. Let’s see if that is even possible.

So far, my understanding is that ODB2 is a standard way (a protocole) to establish dialog with various MCU’s and devices within a vehicule. It defines how to « talk » with the different MCU in the vehicule and define standard way to report problems depending on it source, nature and criticality. It also include the definition of a connector, defining its shape and to what are all its pin connected

CAN is a low level communication protocol that defines low level details as how many wires do you need, what are the different voltages used on those wires, how is a bit transported on this wires, how those bits finally make a byte or more, how are collision detected and resolved (when two devices want to talk at the same time), …

ODB2 protocole can be « transported » in different ways, CAN Bus being one of them.

Let’s dig a little…

Starting point

  1. Learn about CAN-BUS, ODB2
  2. See how I can connect to the CAN Bus of my motorbike (BMW R 1250 GS/A)
  3. Figure out how to signal a press on the button so that the central unit respond by turning the lights on.
  4. Defien what’s next :)