During the past two days, I’ve had just enough free time that I’ve been able to test out some CAN bus, GMLAN sniffing, and experimentation – I’ve also discovered how interesting and how much fun this whole thing can be! CAN bus (Controller Area Network) works by sending data through an interconnected network of systems and devices. In a single payload, the most important things to look at are the header, and of course, the data packets. The header consists of up to four bytes containing three types of data: priority, arbitration ID (receiver), and the ECU ID (sender). When communication is needed, a message is sent with the proper header, and all the other devices on the network listen to see if the data contains its particular ID code. If it matches, the device accepts it, and the system moves on to the data packet.

This data packet can contain up to eight bytes and carries various pieces of data in multiple formats depending on manufacture and, or application. These packets can control many different things; for example, the instrument lighting in my car: the control dial changes a value in the BCM (Body Control Module) and then sends data about how bright the lighting on all the interfaces should be. More specifically, for my vehicle, the BCM sends the header 0x10644040, followed by how many bytes of data – in this case, three – and finally sends the actual data. I haven’t fully decoded this particular example yet, as right now, I am basing everything on educated guesses as well as trial and error. For the instrument brightness, it sends a 0x02 (not sure what this does yet), then a value between 0 and 255 which corresponds to how bright the accent lighting should be, and finally a third byte containing another value between 0 and 255 corresponding to how bright the radio’s screen should be. I was surprised how much brighter the screen can get by sending my own data as the built-in system seems to limit it from reaching its brightest – I figure that this is probably for reducing wear and tear on the components.

So far, with my very little time spent testing this out, I have figured out the data packets to a few various things. Things like basic media controls, cruise control, lighting and indicators, and sounds (mostly). The capability and flexibility to access and change this data has given me an idea to improve and develop a possible second version lighting controller. Until then, I’ll be having fun figuring out how the whole system works together with each individual device.

Leave a Reply