I was tired connecting my cellphone with an old cassette adapter to my VW Golf with an Beta 5 in it. I needed something new, something cool. And here it is, a fully functional interface between the Beta 5 and any device you want to play the music with.
This project raised out of an ebay search: I just wanted to know if there is a solution to get an AUX input on the car radio. Yes there is, even complete mp3 players are available. But that's not what I wanted - at first!
Then I started digging the web for more info about the protocol the radio talks to cd changers.
The idea was to build a tiny thingy that fakes a cd changer and simply enables the AUX input (as it is available in several online stores). But during the development my ambition became greater and I wanted to read the keys pressed on the radio to remote control my RPi.
1. Understanding the Protocol
First of all this is the pinout of the radio: rkieslinger.de/steckerbelegungen/vag-stecker.htm
The interesting cell is no. 3, the blue one.
DATA IN simply is MOSI of an 8bit SPI interface with special timings between the bytes
CLOCK is SCK of the SPI
DATA OUT is the key code of the pressed key on the radio itself
The radio needs a sequence of bytes to enable the AUX input and display CD# and TR#. It looks likes this:
frame cd# tr# time time mode frame frame 0x34, 0xBE, 0xFF, 0xFF, 0xFF, 0xFF, 0xCF, 0x3C
cd# and tr# are sent inverted. So this sequence will display: CD1 TR00
mode sets the playmode (PLAY|SHFFL|SCAN)
It's been one year since I published a compiled kernel for our devices. Now I decided to build a new one and share it!
Some facts about it:
- As all of my other kernels this one uses heartbeat during boot.
- It supports the dockstar, goflex net and home.
- Some of you asked for I2C support, it's now working on the dockstar and goflex net. i2cdetect -l has the desired output!
If you encounter any missing modules for certain devices, try to compile them yourself with the given headers and give me a hint so I can include them in feature releases.
In order to install the kernel properly, you need to have initramfs-tools installed. Otherwise your device won't be able to boot! Thanks to chessplayer for sharing this info!
apt-get install initramfs-tools
Make sure you have the latest uboot installed. See 1. in Dockstar: new Kernel 3.3.3 ready to use.
In my current project I want to interface the FT220x over 1-bit SPI with an TI piccolo TMS320F28027.
After some trouble and various cups of coffee I managed the whole thing by implementing the SPI in pure software.
I wasn't able to get it working with the built in tri-wire hardware SPI as the FT uses MIOSIO and MISO to send/receive data and status respectively.
Because there is no sample code available on the web concerning this problem I decided to publish my library here. Take a look into the datasheet for further information!
Sending data over SPI to the FT1248/FT220x is quite easy: Just send a WRITE_REQ (0x00) followed by the payload on MIOSIO.
Reading is a bit more complicated: We need to know how many chars to read. Well, send a READ_REQ (0x02), evaluate MISO and read data on MIOSIO if the FIFO is not empty.
Did you want to reboot your Dockstar or Golfex with multiple drives attached? Well, that's not the problem if uboot lists the devices in the correct order.
But what if your Golfex has SATA drives attached and you want to boot from an usb-drive?
The answer my Goflex gives me all the time: Loading kernel from usb works. Starting the kernel also works. But mounting the filesystem fails, because the device names are remapped when the SATA drives are initialized. The usb-drive ain't /dev/sda anymore...
I (have) had one rule since I had to drive more than 100 kilometers to fix that: never reboot remotely with SATA attached.
The solution is quite simple:
We have to tell the kernel properly where to get the rootfs from to mount it. To be versatile, uboot is configured to boot the kernel with device names as parameter, such as /dev/sda1. But I know what I am doing and want to boot from one single device, no matter if other drives are attached or not, which could mess the device names. So the disk LABEL or the Universally Unique Identifier (UUID) is what we need.
You might say: Ha! I adapt fstab. But this doesn't do the trick.
We need to alter the uboot bootargs. You have to decide which method is more suitable for your environment.
Finally my RPi has been delivered! After unboxing it I really couldn't image that is was that tiny. First thing I did, was grabbing my 8GB SanDisk SD-Card and copying the rootfs debian6-19-04-2012 onto it.
After plugging the sd card in the RPi and connecting power supply the problems came up...
This article is not a detailed guide how to set up your RPi. It just describes my second afford to get the RPi booting flawlessly in a few words I can refer to in the future.
Problems I had
- device didn't boot at all
- no serial output on the GPIOs
- login failures with definitely correct password
- mouse/keyboard stopped working after startx
As you may have noticed, we were discussing things about newer kernels and drivers in the comments of Dockstar/Goflex: new Kernel 3.1.10 ready to use. With that in mind I started up my VM and looked at what I've got there in /usr/src - there was a compiled 3.2.1 that initially wouldn't boot. But following davy's guide to upgrade U-Boot makes that one boot.
Taking a look at kernel.org made me jealous... Here it is - a fully working 3.3.3:
It's now been a while since I installed the 3.1.0-1 kernel from sid and made some testing. But I don't like the LED beeing solid green during boot, I want to see whats going on. Thats why I decided to compile 3.1.10 with heartbeat from this erlier article: Dockstar: new Kernel 2.6.38 ready to use. The config is based on sid's 3.1.0-1, if you want to take a look at it, you will find it here: config-3.1.10-dockstar-shyd_1.2
It supports several devices like wifi, webcam, audio or dvb.
Some of you might ask why I didn't build 3.2.1. I did, but it wouldn't boot.