MP3 Player with Hard Drive


MP3 player front view
MP3 player with hard disk

These pages introduce the MP3 player with hard drive that I built from scratch in the years 2002 to 2004. The player is based on the 80C188 processor from Intel, and the VS1001K MP3 decoder from VLSI Solution Oy.

The player has a USB interface and supports the USB mass storage protocol (UMASS) to download files to its hard disk. Further, you can control it using a remote control, you can create playlists and save them, and you can play pacman.

Note that these pages are still under construction.

The remainder of this page talks about the history of the project.

Further information can be found here:


The First Version

Some time in the year 2002 I decided to do what every good CS/EE student does at least once in a lifetime. I decided to build yet another microprecessor board – in my case it was one to experiment with an 80C188 processor. The main board had 512 KB Flash memory, 512 KB SRAM, two serial connectors, and a connector for a proprietary bus, realized as a 50-wire ribbon cable.

To be useful for anything I soon started to build an add-on board to interface keys and an LCD, but up to that time I had no idea what the whole system was going to be. Well, at that time I also started to pile up a huge collection of MP3s and I didn't want to have my computer running all the time when I was listening to music. So I decided to build a stand-alone MP3 player with a hard drive.

More add-on boards followed: One to interface an IDE drive and another one with an MP3 decoder. I started to write code to access the hard drive, and to read the FAT32 filesystem. Unfortunately, from today's point of view, I started to code in assembler, and I never cared to switch to an alternative, like C. I pretty much enjoyed it and saw it as some kind of mental training.

Early in the year 2003 the first version of my MP3 player was ready and playing (see picture gallery). I put it into the casing of an old VCR, and I was happy for I while.

Well, I was not not completely happy, but mostly. In order to copy songs to the MP3 player's hard disk, I had to remove it and plug it into a computer. For that reason, the hard disk was in one of those removable racks, and the MP3 player's software supported hot-plugging of IDE drives (at least most of the time). Unfortunately the computer's operating system did not really care about hot-plugging and the whole procedure to copy MP3s was pretty cumbersome. That was what led me to the development of the second version.

For completeness only, here are the schematics of the first version of the MP3 player:

The Second and Final Version

There were a couple of things I did not like about my MP3 player so far:

To make it smaller, I decided to redesign the complete hardware and pack the whole circuit onto one single board with the size of 160x100 mm (6.3x3.9 inch). To fit all that interface logic for the hard disk, the LCD, and so on, I took one of Xilinx' CPLDs and translated the circuits to VHDL code.

To make it easier to copy files to the MP3 player, I added a USB interface, based on the USBN9603 USB node controller from National Semiconductor. Still having the full source code in assembler, I coded the USB driver and the mass storage driver in assembler too...

I also designed and added the circuit to interface an infrared detector and amplifier. Now I can use any remote control with the player – to program the player, I only have to press a button on the player, and then the corresponding button on the remote control, while the player is in learning mode.

I extended the software so that I can play pacman now, even with the remote control, and it is possible to playback songs in the playlist in a random order.

Follow one of the links on top of this page to get more information about the hardware and software of my MP3 player.

© 2002-2007, Michael Wurm. – Read about my other projects.