PJRC.COM Offline Archive, February 07, 2004
Visit this page on the live site

skip navigational linksPJRC
Shopping Cart Checkout Shipping Cost Download Website
Home MP3 Player 8051 Tools All Projects PJRC Store Site Map
You are here: MP3 Player Firmware Download Search PJRC

PJRC Store
Main Board, $150
LCD & Pushbuttons, $42
LCD/Backlight/PB, $77
IDE Cable, $9
Complete Parts List
MP3 Player
Main Page
Detailed Info
User Photo Gallery
Connecting The Board
selected Firmware Download
Side Projects
Technical Docs
Freq. Asked Questions
FAQ #2
News And Updates

MP3 Player Firmware Download

The code for these firmware image files are licensed under the GNU General Public License (GPL). We believe in the philosophy of Free Software, often also called open source software. We would like to encourage you to read the source code and modify it as you like, within the terms and conditions of the GNU General Public License (GPL).

Development Code (Work In Progress)

Dave Gillham's automatically updated firmware page allows you to obtain a ready-to-use firmware image of the very latest developmental code. You may also obtain the very latest source code from our CVS server (see below).

Firmware Download

An "Image File" is a downloadable firmware image that is encoded in Intel-Hex (.HEX extension). See the firmware upgrade instructions. The source code is provided with a Makefile, that will build this Intel-Hex file.

Latest Stable Firmware is: 0.5.1

Rev Download Files Description
0.6.10 Image File:
mp3player0610.zip

Source Code:
mp3player0610.tar.gz

Improved FPGA timing is the main improvement in this rev, which should improve compatibility with more SIMMs. A minor bug was fixed in ID3 processing that would cause problems with certain ID3 tags aligned on cluster boundaries (special thanks to Robert Staph who sent a MP3 file with one of these ID3 tags). More information is displayed at startup on the LCD, to help users troubleshoot with an LCD but no PC attached to the serial port.
0.6.9 Image File:
mp3player069.zip

Source Code:
mp3player069.tar.gz

Fixed several bugs and improved simm detection. A small memory corruption bug while moving to a new file if the old one was still being read from the drive has been fixed (in 0.6.8 this would eventually result in a lot of IDE errors requiring a reboot). A small memory leak was also fixed. Improvements in the IDE drivers recovery from bad sectors or other errors are included. Tom fixed the defaults for tone controls. The simm detection code is redesigned to make fewer assumptions about simm types, which allows some previously unusable simms to work (at reduced capacity). Other incompatible simms are now correctly detected. The simm test command 'T' does more useful tests and usually prints more useful information.
0.6.8 Image File:
mp3player068.zip

Source Code:
mp3player068.tar.gz

FPGA rev 1.12, fixes long-standing problems with fan-out on some critical signals (that the Xilinx software reported were fine... shame on Xilinx). Also a few firmware bugs have been fixed, and a significant SDCC C compiler bug was recently fixed, and this is the first rev compiled with the updated SDCC C compiler.
0.6.7 Image File:
mp3player067.zip

Source Code:
mp3player067.tar.gz

FPGA rev 1.11, interface with 8051 redesigned with simpler address latch and new mini state machines to request and ack the read cycle. At least in initial testing, this appears to dramatically improve the player's stability.
0.6.6 Image File:
mp3player066.zip

Source Code:
mp3player066.tar.gz

More firmware bug fixes (mostly minor), and FPGA rev 1.10. Several people reported problems with FGPA ver 1.10, so this rev may or may not work well on your board.
0.6.5 Image File:
mp3player065.zip

Source Code:
mp3player065.tar.gz

Bug fixes from 0.6.4. The play mode is again correctly displayed, and several other minor related problems are fixed (a custom SDCC compiler peephole optimization was causing compiler errors). The tone frequency adjustments are now made in 1/3 octave steps. All tone parameters are checked for validity, so garbage in the non-volatile parameters will no longer cause the player to run without making any sound. If you suffered any of these bugs from 0.6.4, now's the time to upgrade!
0.6.4 Image File:
mp3player064.zip

Source Code:
mp3player064.tar.gz

It's been a long time in the making... many performance improvements and bugs fixes. This rev should be much more stable than all the previous 0.6.x's. Directory scanning code is faster. Many parts of the LCD navigation are improved (mostly thanks to Tom). Dave Johnson's dynamic TONE_ATTN idea is implemented, which allows full output voltage without losing the tone controls. Many new little features are also included, like random and sequential play over the entire drive, as well as individual directories.
Known bugs: TBD. Stability: TBD (your feedback is welcome)
0.6.3.3 Image File:
mp3player0633.zip

Source Code:
mp3player0633.tar.gz

Unstable. Zach added code that plays all the MP3 files on the hard drive, even if they're in subdirectories (up to 5 levels deep)!! There is some start-up delay as the code reads all the directories on the drive. Ian added adjustment of the bass and treble roll-off frequencies.
0.6.3.2 Image File:
mp3player0632.zip

Source Code:
mp3player0632.tar.gz

(Not Too) Unstable. Several people have reported that this rev is working well. This is the first rev developed entirely within CVS! Tom put in file_uncache, and Ian added the redisplay to deal with the beta test display problem that shifts everything a couple pixels. Zach sent some code that scans subdirectories (only prints their contents for testing and isn't called yet) and I fixed a few bugs. This rev also has a fix to the FPGA that might cure the problems that 0.6.2.G to 0.6.3.1 have on rev A boards.
0.6.3.1 Image File:
mp3player0631.zip

Source Code:
mp3player0631.tar.gz

Unstable, has problems on Rev A boards. A bug in the Makefile was fixed which would not completely rebuild the code with an updated DRAM controller. I changed the build process a bit to eliminate binary files, which is mostly to prepare for the transition to CVS. Developers should get this rev for the fixed Makefile. If you've installed 0.6.3.0 from the image file (not building from source), there's nothing new in this rev.
0.6.3.0 Image File:
mp3player0630.zip

Source Code:
mp3player0630.tar.gz

Unstable. Yet another firmware rev. We've had a lot of 0.6.2.x, so why not start calling it 0.6.3.x? I did even more work on the DRAM controller and this latest rev adds some extra circuits to ignore noise on the 8051's ALE signal. This seems to make the board much more stable, though still not perfect. There are several other minor improvements in there. This rev also includes Ian's latest work on the user interface. He's got some of the navigation with the arrow keys. You still can't navigate to the tone controls, but you can navigate to change between random and normal mode. Ian's making great progress on the user interface and if you're interested in where it's headed, you should certainly try out this rev.
0.6.2.G Image File:
mp3player062G.zip

Source Code:
mp3player062G.tar.gz

Unstable. Merged Ian's latest code. You can't adjust the treble and bass, as this rev moves towards the multi-screen approach, but it doens't have the navigation features via arrow keys. That's coming soon. This rev also fixes a problem where the DSEG area was getting very full. I did some fiddling with the DRAM controller and this rev might be more unstable that most. If you're a developer, you really need to grab this rev for the DSEG fix. Ian would like some feedback about the layout of the three screens (try to envision being able to navigate to the fields using the up/down/left/right buttons). Other than trying it out to see what the upcoming user interface may look like, normal users will probably want to stay with a previous rev for now. Developers must use this rev, as it is hard to add anything with the DSEG problem in 0.6.2.F.
0.6.2.F Image File:
mp3player062F.zip

Source Code:
mp3player062F.tar.gz

Still Unstable. The display now shows the bitrate, sample frequency and stereo/mono mode of each MP3 file as it plays. There is a status line on the top that shows if the player is playing or paused, and if it's in normal or random mode. I also re-arranged much of the display code to more-or-less do much of the display abstraction stuff that was discussed in the yahoo group a couple weeks ago. Also, the automatic fallback to 0.1.2 (if no SIMM is installed) is working again.
0.6.2.E Image File:
mp3player062E.zip

Source Code:
mp3player062E.tar.gz

Still Unstable. This rev contains a redesigned DRAM controller, which might help with some of the stability problems (hard to tell yet). Ian's most recent additions to the display code are included, and a patch from Andy was added to make the bit2mcs utility work in windows.
0.6.2.D Image File:
mp3player062D.zip

Source Code:
mp3player062D.tar.gz

Still Unstable. This rev includes Ian's recent display code that scrolls the filename and gives a cool "slider" bar for the volume. I added timers and low-level support for the tone controls. Nothing uses the timers just yet, but Ian has some cool plans for the display.
0.6.2.C Image File:
mp3player062C.zip

Source Code:
mp3player062C.tar.gz

Still Unstable ??. No new features since 0.6.2.A. More attempts to solve the remaining stability problems. I added a timeout check (and automatic recovery) in the serial port transmit routine. I also hacked on the DRAM controller and added a very paranoid circuit to monitor the 8051 bus and lock out DMA and DRAM refresh for 32 cycles following opcode (or operand) fetches of the six bytes that represent the MOVX instructions. This "circuit" is implemented in the soft-configured FPGA, so by installing this firmware, your board automatically gets the new circuit. No physical changes are needed.
0.6.2.B Image File:
mp3player062B.zip

Source Code:
mp3player062B.tar.gz

Still Unstable. No new features since 0.6.2.A. Many attempts to solve the remaining stability problems.... hard to tell if it's stable since the problems happen very infrequently. This rev includes some preliminary planning (not used in any way) for malloc and playlists. Developers interested in writing playlist support should look at this code.
0.6.2.A Image File:
mp3player062A.zip

Source Code:
mp3player062A.tar.gz

Still Unstable. The rev fixes more bugs and uses the non-volatile parms to store the volume and random play state. This is the first rev with a really working random mode, where you don't end up hearing the same "random" sequence every time. The previous button still doesn't back up to the file just played in random mode... that'll have to wait until playlists happen.
0.6.2.9 Image File:
mp3player0629.zip

Source Code:
mp3player0629.tar.gz

Unstable, but getting better. This rev fixes several bugs that were causing lock-ups or other crashes. All 6 pushbuttons on the board back. The simple (slow) previous file method used in earlier versions is back again, and random mode is implemented in the C code also. Volume adjustment works again, and the volume buttons now have auto-repeat.
0.6.2.8 Image File:
mp3player0628.zip

Source Code:
mp3player0628.tar.gz

Probably Unstable. Another developer release. Timer interrupt routine is working now, and it reads the pushbuttons on the board (though not all are properly supported by the C code yet). Several minor bug fixes, though there there still seems to be quite a bit of unstable behavior with play/pause.
0.6.2.7 Image File:
mp3player0627.zip

Source Code:
mp3player0627.tar.gz

Probably Unstable. Yet another developer release. The serial input parser is re-written and mostly converted to C (see parser.c). This rev supports three of the new display board's pushbuttons. The six on-board buttons aren't supported in this rev, because the new timer0 code isn't working yet. Part of Zach's mods to dir_read are included. The player still doesn't automatically start (I know, it'll be put back soon). This rev basically lays the groundwork to begin adding more support of the new pushbuttons.
0.6.2.6 Image File:
mp3player0626.zip

Source Code:
mp3player0626.tar.gz

Probably Unstable. Added support for the display board's pushbuttons, including programmable auto-repeat. The player now (finally) has interrupt driven serial I/O. Fixed several bugs, and many other minor changes here and there.
0.6.2.5 Image File:
mp3player0625.zip

Source Code:
mp3player0625.tar.gz

Probably Unstable. This is the first C-based version that actually runs reasonably well. The pushbuttons still aren't implemented in this rev, but it will respond to commands from the serial port. There is a tiny bit of code to send messages to the LCD display board, which basically displays the long filename on the display when the file starts playing. Inside this rev you'll also find the code that runs on the JW-002 display board. Unlike the player, the JW-002 isn't flash upgradable, so you'll need an EPROM programmer (and blank chips) if you want to hack on the JW-002's code.
0.6.2.4

Source Code:
mp3player0624.tar.gz

Highly Unstable! More bugs fixed in the conversion to C. This rev will actually play the first file. Because only the first file plays, it's still only useful for developers who want to peek at the code, so no image file. The very latest sdcc from CVS is needed to successfully build the code.
0.6.2.3

Source Code:
mp3player0623.tar.gz

Highly Unstable! Main program is converted to the SDCC C compiler!! It starts up and can more-or-less access the drive correctly. There are still many bugs to fix in the interface between the new C application and the AS31-based drivers. This rev won't even run correctly, so I'm not posting a ready-to-use image file. If you're interested in hacking on the code (in C, not ASM), download this and take a peek at "main.c". While it doesn't actually work, it's very close...
0.6.2.1 Image File:
mp3player0621.zip

Source Code:
mp3player0621.tar.gz

This rev adds non-volatile storage of the volume setting.
0.6.2 Image File:
mp3player062.zip

Source Code:
mp3player062.tar.gz

0.6.1.E has turned out to be pretty darn stable. This rev is very similar, but it fixes a bug in the STA013 test, where the test would fail if no simm is installed. Instead, it correctly runs 0.1.2, which is 0.1.1 with all of the recent additions and bug fixes that are don't need a SIMM. 0.1.2 is updated to use the new STA013 init that fixes the no-sound bug that occurs on some boards.
0.6.1.E Image File:
mp3player061E.zip

Source Code:
mp3player061E.tar.gz

Beta Test. Fixes the no-sound bug and many other bugs from 0.6.1. Still has an out-of-memory bug, where sooner or later (sometimes over 24 hours) something goes wrong with the memory manager. Keep an eye on those messages about how much memory is free between playing each file. There has been a feature freeze for weeks now, so this beta version works pretty well.
0.6.1 Image File:
mp3player061.zip

Source Code:
mp3player061.tar.gz

Unstable. Update: three people have reported problems... looks like 0.6.1 isn't as stable as we had hoped. The SIMM is now used to cache MP3 data, and the IDE reading speed is reasonably fast (will get 2-3 times faster in future revs), so this is the first rev that can run from NiCd batteries. The pushbuttons all work again (thanks to Tom Parker), and the code displays long filenames (again, thanks to Tom). Memory leaks are fixed. The code should work with fragmented FAT32 volumes, so it's no longer necessary to run defrag after you copy the files. There are few known bugs: files larger than the SIMM are only played for the portion that fits in the SIMM. A tiny part of the last file is sometimes played at the beginning of the next file. In some rare cases, a DMA error occurs and results in a audio glitch (you'll see a message about it if connected to the serial port).
0.6.0 Image File:
mp3player060.zip

Source Code:
mp3player060.tar.gz

Unstable. This is the first release with the completely rewritten FAT32 and IDE and memory manager code that supports caching with all of the SIMM. The pushbuttons don't work, typing "QUIT" crashes (to get back to the monitor, you must press 'S' during startup). Reading from the drive is slow, partly because the IDE driver is still polled (interrupts will be used in a future rev), and partly because there are lots of verbose debug messages. It should work with fragmented FAT32 filesystems (untested). There is no attempt in this rev to read the next file while the current one is still playing, so you'll get (very) long pauses between songs. This release is primarily intended for developers to be able to hack on the code, and to give you a look at the new caching in action.
0.5.1 Image File:
mp3player051.zip

Source Code:
mp3player051.tar.gz

Stable. This version adds the volume buttons and the random mode. It also adds a patch from Dave Johnson to fix the bugs with the play/pause button. IDE slave mode is now supported, the start up will autodetect how the drive is configured. A copy of 0.1.1 is included, if the SIMM isn't installed, it will automatically run 0.1.1 instead of giving up. This version doesn't do much buffering and still requires the drive to be defragmented.
0.5.0 Image File:
mp3player050.zip

Source Code:
mp3player050.tar.gz

DRAM Test Version, works exactly like 0.1.1 (at least is supposed to) but uses a tiny part of the SIMM instead of a fifo in the FPGA. No new functionality is added... this is a test release only. Please give it a try with your board, SIMM and hard drive. I am particularly interested to hear about success or problems when used with laptop drives.
0.1.3 See 0.6.4 This version is embedded in 0.6.4, and it gets run automatically if no SIMM is installed. Improved IDE initialization code from 0.6.x revs is back-ported to this rev, so that it will work with IDE drives as either master or slave setting. 0.1.3 will also work with older buggy drives that require CHS init to make LBA mode work. 0.1.3 does not require a SIMM (but will work if one is installed). Only files in the drive's root directory are played, and the drive must have a fully defragmented FAT32 filesystem.
0.1.2 See 0.6.2 This version is embedded in 0.6.2, and it gets run automatically if no SIMM is installed. All six pushbuttons are implemented. Dave's play/pause fix is included, and it uses the new STA013 init code that fixes the no-sound problems on some boards. 0.1.2 requires a fully defragmented FAT32 filesystem.
0.1.1 Image File:
mp3player011.zip

Source Code:
mp3player011.tar.gz

No SIMM Required. (versions since 0.5.1 also include a copy of 0.1.1 and run if the SIMM isn't detected). Minor improvements since 0.1: "Previous" button now implemented. Partition type 0B or 0C are allowed (version 0.1 rejected type 0B). Serial port accepts words "PLAY", "NEXT", and "PREVIOUS", and "QUIT", to allow remote control. This version still requires the drive to be defragmented.
0.1 Image File:
mp3player01.zip

Source Code:
mp3player01.tar.gz

Initial Release. Does not use DRAM. Reads standard FAT32 partition. The filesystem must be defragmented. All MP3 files must be in the root directory. Only "Next" and "Play/Pause" push-buttons are implemented. Plays files in the order they appear in the directory, looping back to the first file after finishing the last one.

CVS Access For The Very Latest Development Source Code

If you've already checked out the source, just cd into that directory and type:
cvs update
To check out the source for the first time, you'll need to type these commands:
cvs -d :pserver:anonymous@pjrc.com:/usr/local/cvs login
       just press enter at the password prompt for anonymous access
cvs -z5 -d :pserver:anonymous@pjrc.com:/usr/local/cvs checkout mp3

Plans For Future Revs

Feature requests are now tracked in the Bugzilla bug tracking database.
MP3 Player, Firmware Download, Paul Stoffregen.
http://www.pjrc.com/tech/mp3/firmware.html
Last updated: November 28, 2003
Questions, Comments?? <paul@pjrc.com>