Saturday, September 6, 2014

Hacked up USB for a Phillips HDD1420 GoGear

MP3 players... getting shoved aside by smartphones. A hand me down that spent too much time at the back of a cupboard. Empty battery, no charger, no connector, no memory. How I brought the Phillips HDD1420 back to life!

The first attempt was to power the device via the battery conector only to be greeted with an error message insisting to conect the player to a computer... Tracing the connector I found some suspicous looking traces and soldered a USB cable to it. GND, D+ and D-. Nope... not working, checked the cable and it was defective, swap it for a better one and still nothing...

Looking at the information the USB pins I used are correct... maybe it needs the 5V from the USB? Need to probe the board to find a place to solder the 5V to... Bingo! We have communication! Mass storage device detected in Windows... but that's it. No disk drive shows up... Time to go to Phillips' website and find out what is going on. Fortunatly they have the "Phillips Device Manager" software that will reset you device to a working state!

Oh, I't doens't work on Windows 7? Ok, I'll try on an old Notebook running Windows XP...

Oh, I't can't find any devices to fix? If it's mass storage I'll just connect the 4GB Hard Drive Disk to the computer with a card reader (not all card readers support Microdrives, so keep that in mind)...

Oh, I't won't open the drive? I'll try another Microdrive... Yup it works fine...

Turns out the original Hard Drive is dead... Crack on the bottom of the player + non functional hard drive = Previous owner dropped it. OK! Let's replace the Hard Drive with an 8GB Microdrive...

Now windows shows a drive and lets me open it... but still no boot and a nice error message still telling me to connect it to a PC. Oh, and the "Device Manager" still doesn't find a GoGear Player.

Format drive, copy the official firmware to the drive in the correct directory but still not working...

After finding and reading the service manual it states that the technician must replace system files, so it sounds like there is more than just the firmware file...

Time to check if the awesome project RockBox supports the Phillips devices as the last time I checked there was not much support for various players. Of course they had it! Good ol' RockBox!

I used the RockBox installer and the player was booting up fine! Tried the Oficial Firmware and it booted great aswell.

This is where I could remove RockBox from the player and keep the original firmware, but I wanted to use RockBox. The problem was with charging. The GoGear HDD1*** Series come with an external power adapter for charging and the player can also charge over USB at either 100mA or 500mA.
The GoGear has a hardware IC that handles charging and power selection of either External Adapter (AC) or USB power. The IC is the BQ24032 from Texas Instruments. The OF handles the USB charging at either 100mA or 500mA via the control pins on the charger IC. However in the RockBox firmware this is not implemented as it is assumed that you have the external AC adapter.

Now, thanks again to RockBox for providing the schematics of the GoGear player I found a suitable test point for the external power input, a decoupling capacitor very close to the BQ24032 charge IC! Let the software hacking begin!

Now, the GoGear HDD1*** Series are powered by a PP5022B-TFF, This Portal Player System on a Chip (SoC) houses two 32-bit ARM7TDMI processors. It has many more features and is a 261 pin BGA IC. That is a lot of pins, and best of all there is no available documentation for it! To get RockBock running on this platform LOTS of work went into it. Fortunatly with some patience and looking at the source code for RockBox you can get a rought idea of what pin does what... except for the ones that are not used, like the USB charge current select of either 100mA or 500mA...

After much digging around the source code I found out how bits were SET or CLEARED in a pretty safe manner.
Do not change an INPUT to an OUTPUT unless you are sure of what you are doing. You could damage the PortalPlayer IC or the GoGear.
First decide witch GPIO port you want to modify, you can choose from A to L (8bit wide?) or the 32bit wide GPO.
    GPIO*_OUTPUT_VAL |= 0xh;
    GPIO*_OUTPUT_EN  |= 0xh;
    GPIOB_OUTPUT_VAL &=~0xh;
    GPIOB_OUTPUT_EN  |= 0xh;
Replace * with a letter from A to L
Replace h with a hex value of the pins you want to change.

An IRC user by the nick pamaury suggested PortB and we determined that PortB.5 is the external power detect pin and PortB.2 is USB power detect. Pamaury also suggested PortB.1 based on his dissasembly of the OF as the current control pin ISET2 on the BQ24032 charge IC.

I decided to place the code in the bootloader to start the fast charging as soon as it boots.
Did I mention Rockbox has a Development Ubuntu image for VM's? Download, run, follow instructions!

Open up a terminal and...
-Get rockbox source code;
"git clone git:// ./Desktop/rockbox"
-Go to the rockbox directory;
"cd ./Desktop/rockbox"
-Make a new folder inside the rockbox folder;
"mkdir build"
-Go to the build directory;
"cd build"
-Setup the enviroment;
-enter "101" for Phillips GoGear HDD1630
-enter "N" for Compiling the firmware or "B" for compiling the bootloader.
-Make the RockBox Firmware/Bootloader;
"make" or use "make -j 4" if you have a 4 core processor
-Make a zip if you want to move all of the files easily to the player;
"make zip"
-Extract the zip file to the device, safely extract the device and reboot it!

Now I also did some other tweaks here and there, so lots of transfering the firmware to the player was going on... switching back to windows to copy the files and extract the device was a pain. A little bit of glue and the proces was a simple as running a script!

To share a folder between the virtual machine and windows you will need to instal the Guest Additions CD image from the VM Device menu. Find a tutorial on how to get it running properly. I updated the Ubuntu OS.
Also I used RemoveDrive to set up a BATCH scrip that copied the files to the player and safely removed it from the PC;
copy %~dp0sharedfldr\build\rockbox.mi4 H:\.rockbox /Y
copy %~dp0sharedfldr\bootloader_build\FWImage.ebn H:\System /Y
"%~dp0RemoveDrive.exe" "GoGear"
This BATCH file gets launched from withing the virtual machine via a program called winexe thanks to the following line;
winexe -U user_name%password // "C:\Users\OiD-W\Desktop\Ubuntu\copy.bat"
So about 40 lines of code later and I have a little menu that can handle my lazy needs:

After digging around the code I have found the following interesting bits;
The header file for the main processor, pp5020.h, that contains lots of information about the chip.
Some examples of bit/port manipulation in button-hdd1630.c and lcd-hdd1630.c.
Power control code for handling charging is placed in the power-hdd.c file.
And of course the main thread in main.c as a starting point of the program.

For the bootloader there is main-pp.c and that is where I have placed my code for the high speed charging.

I'd like to make a menu option for enabling the charging and some other minor changes here and there. See if I can have a look at a few bugs and generaly mess around with the device. Then see if I can upload the code to the GitHub.

Once the USB pins were found a more robust solution was needed. I placed a mini USB conector from another media player and soldered it the original conector and a large ground pad where one of the screws went. I also used enammeled copper wire for the data signals. Looking back twisting them together wouldn't be a bad idea. The 5V orange wire is multicore and it should handle the 500mA without a problem. Not seen in the photo is a small wire from the GND pin of the USB connector to the chassis GND. This is important because cheap USB cables don't use the connector chassis for GND.

A small notch needed to be cutout from the rubber hard drive support.

And part of the metal chassis also needed to be cut out.

I had choosen to place the USB in its current position because one of the plastic clips that held the player together was broken. Turns out it was no the best of ideas... There is a small gap but that could be fixed by gluing the parts togther. I'll try to find a less permanent solution.
Also to note is the cut bezel of the original conector, a method of securing it is also needed.

Thanks for reading! Happy hacking!


serkeros said...

Molt bona feina! Aquests reproductors d'MP3 ja són obsolets, però sempre és bona idea donar-los una segona oportunitat... Molt millor que llençar-los!

He trobat el teu blog a Hackaday, felicitats! Quan trobo un "hacker" català sempre deixo un comentari, estic content de saber que tinc gent de la meva espècie a prop.

A seguir així!

OiD said...

Bones Serkeros, un plaer llegir les teves paraules!
Que n'has trobat gaires de hackers catalans? Be, jo soc angles pero visc aqui hahaha