So the main aim is to add in a custom aux input (or iphone input) into the headunit. Hoping for a clean/seamless integration with an android/iphone cable that automatically swaps input and begins playing music and displays info on the headunit screen.
There have been a couple that have successfully implemented this into there cars. This includes Vlad (currently selling commercially for $300+), and also Nem from carmodder who managed to get the radio to switch to a spare input and start playing music and also displaying song info on the lcd screen. Both of these great developers have left a trail of clues and hints to get the development on the way!
Now, Iv commited to this project, picked up a buspirate and dived head first in! So the TDA7348 audio input control has 3 stereo inputs and 1 mono (AM Radio) input that can be initiated. Only 2 of the stereo inputs are used leaving 1 spare input for us to attack!
TDA7348 communicates over the I2C (TWI) bus, this is easy to log communication using the bus pirate (I will post some content up on next post) and allows us to clearly see where the input is changed allowing for a software solution to switching to our unused input.
Next is controlling the LCD over the SPI bus. I found this a little more difficult as the buspirate has many different options to choose from which affects the end result. But once the correct settings were selected, my results matched up with Nems findings meaning we could decipher the LCD commands which are quite similar to how ALDL frames are constructed kinda.
eg [0x80(0x02)0x80(0x5A)0x80(0x7F)0x80(0x00)0x80(0xDB)0xAD(0x00)] (MOSI and MISO responses)
Where the lcd command is: 02 5A 7F 00 DB 00
02 = length of data (7F 00)
5A = Command
DB = 2's checksum
00 = End of frame
So now, that a very rudimentary understanding has been achieved, I am now trying to control the lcd using my arduino mega over SPI. The arduino is set as the master SPI device.. and as soon as the arduino connects to the motherboard, all communication between lcd and board stop and screen stops updating. At first I thought it was additional noise introduced but now I believe it is because there cannot be two master devices on one line as both will hold CS high causing no communication to ever occur!
I then thought of setting the arduino as a slave using a software implementation.. but again, even if I am to wait until CS is low, I would be communicating at the same time as another device causing issues again! I know that Vlad and Nem have managed to get past this, but I cant figure out how! Is there a way to disconnect/disable communication to one device? Hold a pin low/high to reset or something?
I *Attempted* to place the arduino between the lcd and motherboard, in the hope to produce a "midi" device that can hold comms from the motherboard when requested and directly communicate with the faceplate without an issue... but being lazy and too excited I didnt insulate the cut wires and managed let some of that magical smoke out that makes everything work... RIP radio number 1.
So...which that all said.. ideas!?!
Iv got radio number 2 up and running, Im thinking of trying to do the "midi" device again, and pass through all info between motherboard and LCD, then when requested, it will begin transmitting desired info to LCD and motherboard.
