A lot of people have been dabbling in Can Bus integration in cars for a while now, myself included. I was fed up with my aging touchscreen in my Jaguar XF, so I set about creating an electron app which tapped into the Can Bus and allowed the same functionality. This went pretty well, most of what I wanted I achieved, being able to control various functions, display a bunch of data. However the remaining controls (audio, speaker levels, etc etc) were controlled via MOST bus. There were just a handful of projects online that had touched this, and zero hardware available!

MOST bus can handle a load more data than Can Bus, however it is a pretty closed network.  There are a few Standards that are documented at the MOST cooperation website, however when it comes to hardware and general resources online there's pretty much nothing.

As said in the description for this project, the Canbus application had hit a brick wall. I'd implemented as much as I could, but then it came to functions such as heated seats which were just not do-able.  I'll do my best to explain why not as I think a lot of these projects hit this brickwall. Canbus is a fault tolerant system, it's designed to handle problems and carry on churning away. When it comes to your engine control, this is exactly what you want. One way it manages this is by the frequency it sends messages. Let's take the heated seats as an example.  Using the touchscreen you set the heated seats to on, you may think that just sends an "on" message and that's that, but it doesn't.  The module responsible for the heated seats is sending this message out constantly at a rate of around every 50ms. So you want to now control the heated seats from your own application, you sniff out the message, figure out what you need to send to turn it off, and you send this message. Nothing happens. This is because the actual module responsible for the seats is also sending on at a super fast repeating interval, so your message gets instantly over written.

What can you do? There's a few options, you could try your luck at sending your message at a faster rate than the module, sounds horrible? It is! Second option is to proxy the module, take it off the can network, put it into a device that has two channels, on this device relay every message from the cars network to the module, messages from the module you can then overwrite with your own data and then relay back to the car network. It's definitely a feasible option, but doesn't feel clean.

In my case the module responsible for the seats is the touchscreen, the touch screen has no Canbus connection, however it does have Most bus. On the Most bus ring there is a gateway which relays messages from Most to Can and vice versa. If I could control the messages on Most before they go to Can, then the gateway will just relay my messages.

This is where my obsession with Most bus came from. 3 years since i started my Canbus project, and I finally have something to share, this is how it happened.

I began researching, found a few projects that touched on it, sourced some datasheets for chips and then began experimenting. First version was this abomination

It worked....to some degree. I'd managed to read a register or two from the chip, but the fibre network was unstable and didn't have much use. So I ploughed my efforts into learning some PCB design, huge thanks to Phils Lab for this, without resources such as this I would have never made it further than this poor effort. This gave birth to version 0.1 of the PiMost.

Not a huge amount better than the first abomination. The chip and transceiver were stolen from cheap Ebay modules, but it worked. I could gain a solid fibre network, and read/write all the registers needed. 

In our household, we have a Jaguar XF and also a Freelander 2. They pretty much share the exact same infotainment system, just the Freelander is much more basic. So I created a test bench set up for this and began to play. Next came months upon months of reading datasheets, reading specifications, swearing, vaping, reading more. But eventually I got to this point.

I was controlling the cd player over Most, changing disc, skipping songs, pulling track information, it was a real pivotal moment in the project where I'd shown it was possible. Fed up with stuff falling off the work top I created a proper test bench. It includes both the Jaguar screen and cd player, and also the Freelander 2 one.  it made life much much easier, and also sounds pretty phenomenal, probably the cheapest 12 speaker capable sound system you can buy!

With this in place it was back to the PCB design. I'd come a long way in knowledge, researching impedance matching, best practices, a huge amount on buck converters (never knew these were so complex).  So I spent a long while improving the PCB design, it now supports i2s to allow audio to be sent direct from the Pi to the PiMost, then onto the fibre network, it has a Canbus channel, it also has graceful shutdown based upon MOST network activity!

This is the final version, no buck converter here (that one is still in testing on my cars) but has a USB-C supply to the device.

The last few weeks have now been spent tidying up the drivers, the repo can be found Here.  A full video on the install, a brief overview of MOST data, and also a snippet of the latest app I am working on are in the video below (skip to the end if you only want to see the app)

More details (and much more to come, I need to write down everything I have learned about MOST so far) can be found at ModernDayMods. I also have a forum running on there for people to get involved, not only in MOST but in all car hacking activities. 

You can purchase one of the first batches of the PiMost Here but if you are interested, please make sure you are fully aware of the current state of the project, and the super limited resources online - at this moment in time, it's not for the faint hearted!