3 minute read

After reeding up on various sites regarding the inner workings of the Vovo’s MELBUS protocol, it was still a mistery how to send text to the display. However anybody who had the knowledige didn’t speak of it :(.

So I desided to buy an Aftermaked 2nd hand unit to see how they solved the issue, this as unfortunatly anyone in my ‘inner-cirlcle’ owns a Volvo with the sattelite receiver.


Some tools used to decode the data

  • Means to tab into the bus
  • Logic analyser (I Use the awesome https://www.saleae.com/ )
  • Microcontroller to replay bitbang (I used a arduino)

Wireing things up.

As I had already an arduino coupled to the melbus to listend for basic steeringwheel commands and controlling an bluethooth module, i had the basic infrastructure to tab into the communication between the aftermarket device and the HU-850 radio.

Looking at the timing:

By looking at the bittiming:

Bit timing

We see that we have a rather ‘fast’ bus, e.g. ~10mhz, so this is something to keep into account when using slow processors like the Arduino’s. Hence you’ll see that we disable the interrupts for the millis(); as it shrews up the bitbanging

Master Mode

Copying time

After decoding the data, which turns out to be a kind-of half-duplic SPI signal, (either we are master and generate a clock, or one is given), we end up with a lot of initialisation, after which, we can pull the line to respond to the master, and start pushing data to the radio, which might look like:

0.114271791666667,SPI,MOSI: '0' (0x00)
0.114989458333333,SPI,MOSI: '30' (0x1E)
0.115862791666667,SPI,MOSI: '236' (0xEC)
0.116790208333333,SPI,MOSI: '143' (0x8F)
0.117556875000000,SPI,MOSI: '255' (0xFF)
0.118364625000000,SPI,MOSI: '199' (0xC7)
0.119142250000000,SPI,MOSI: '199' (0xC7)
0.120068750000000,SPI,MOSI: '249' (0xF9)
0.120971250000000,SPI,MOSI: '194' (0xC2)
0.121874000000000,SPI,MOSI: s (0x73)
0.122776541666667,SPI,MOSI: '1' (0x01)
0.123679458333333,SPI,MOSI: '129' (0x81)
0.124582291666667,SPI,MOSI: 0 (0x30)
0.125485083333333,SPI,MOSI: 1 (0x31)
0.126387833333333,SPI,MOSI: ' ' (0x20)
0.127290791666667,SPI,MOSI: - (0x2D)
0.128193458333333,SPI,MOSI: ' ' (0x20)
0.129096375000000,SPI,MOSI: t (0x74)
0.129999041666667,SPI,MOSI: e (0x65)
0.130901708333333,SPI,MOSI: s (0x73)

0.140562375000000,SPI,MOSI: '0' (0x00)
0.141263791666667,SPI,MOSI: '30' (0x1E)
0.142083500000000,SPI,MOSI: '236' (0xEC)
0.142844541666667,SPI,MOSI: '143' (0x8F)
0.143629125000000,SPI,MOSI: '255' (0xFF)
0.144511125000000,SPI,MOSI: '199' (0xC7)
0.145290041666667,SPI,MOSI: '199' (0xC7)
0.146216541666667,SPI,MOSI: '250' (0xFA)
0.147118916666667,SPI,MOSI: '194' (0xC2)
0.148021666666667,SPI,MOSI: s (0x73)
0.148924208333333,SPI,MOSI: '1' (0x01)
0.149827166666667,SPI,MOSI: " (0x22)
0.150730000000000,SPI,MOSI: 0 (0x30)
0.151632875000000,SPI,MOSI: 1 (0x31)
0.152535708333333,SPI,MOSI: ' ' (0x20)
0.153438666666667,SPI,MOSI: - (0x2D)
0.154341291666667,SPI,MOSI: ' ' (0x20)
0.155244250000000,SPI,MOSI: t (0x74)
0.156146916666667,SPI,MOSI: e (0x65)
0.157049541666667,SPI,MOSI: s (0x73)
0.157952125000000,SPI,MOSI: t (0x74)
0.158854750000000,SPI,MOSI: ' ' (0x20)
0.159757708333333,SPI,MOSI: ' ' (0x20)
0.160660666666667,SPI,MOSI: ' ' (0x20)
0.161563583333333,SPI,MOSI: ' ' (0x20)
0.162466541666667,SPI,MOSI: ' ' (0x20)
0.163369500000000,SPI,MOSI: ' ' (0x20)
0.164272416666667,SPI,MOSI: ' ' (0x20)

The colaboration

After getting the data, I looked for an ‘alive’ github project and copied that, also notifying the author (Visual APproach) regarding my plans, and if he’d like to get this functionality into this codebase, he did.

So we had breed contact via Github and proceeded with per e-mail for speed. Resulting in open-source implementation of sending text to the radio.


By sniffing the communication I had now the exchange between radio and volvo’s sattelite unit. Using this knowledige and colaborating with another excited indivisual, we know have melbus-text-do-display functionality for the 850.