skip navigational linksPJRC
Shopping Cart Download Website
Home Products Teensy Blog Forum
You are here: MP3 Player News And Updates Recent News

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
Firmware Download
Side Projects
Technical Docs
Freq. Asked Questions
FAQ #2
News And Updates
selected Recent News
Project History

Recent News

April 30, 2003: I finally added that Side Projects Page that I've been talking about for the last few weeks. It still needs quite a bit of work, and I'm going through the responses I've received lately, creating anti-spam GIF files for email addresses of everyone who gave permission to show their contact info. But at least it's finally up and you can see the lengthy list of these many impressive things many people have done or are working on. I personally find it pretty inspiring.

April 22, 2003: Tom might be making the first attempt at an ethernet add-on board. Here's a recent message and a circuit board preview. Don't get too excited yet. It will be a very long time, if ever, until this ethernet add-on works. It still requires significant work in the FPGA (which is very difficult), and a huge amount of coding. Even then, it may only ever be able to do streaming and send control messages.... actually downloading to the hard drive is only a distant dream at this point. Still, it's pretty interesting to see, and we're trying to keep all the discussion and development in the publically readable yahoo developer group, so you can follow it if you want. Only the major highlights get mentioned on this news page.

April 19, 2003: Fixed the last (known) bugs in the play modes, which caused the All Rand mode to crash after playing for a very long time. I also made some changes in the FPGA that make it more compatible with most simms... the recent FPGA change that fixed the small memory corruption bug also made the timings not compatible with some people's simms. Now that appears to be fixed, or at least as good as 0.6.10.

April 15, 2003: Tonight I fixed bugs. The audio glitch bug appears to be fixed by some improvements in the STA013 interrupt/DMA driver. This bug caused a little bit of the previous song often times blips at the beginning of the next one.

Also fixed are several small bugs involving switching play modes and using the next/previous directory and file buttons. Many known bugs are fixed, but this still needs testing... so anyone willing to compile the CVS code or try the latest build could really help by beta testing. All play modes are supposed to work with all combinations of button presses on the 4 navigation buttons, and those 4 buttons are supposed to do something sensible in all mode and all transitions from one mode to another mode.

April 14, 2003: A lot has happened in the last week. You can read the messages in the developer group for a lot of details. Here's some of the highlights.

The biggest news is that I finally found and fixed a long-standing bug in the FPGA which caused tiny bits of memory corruption. This bug is likely the thing that causes the player to eventually crash within several hours or days. It's such a reielf to finally figure this out and fix it. Here is a detailed explaination of the problem. Tom Parker also contributed, by connecting his logic analyzer to a player to get some nice plots of what was really going on.

I also rewrote most of the display code. The LCD should look and function similar to how it used to, except for a new "balloon" description of the play mode. Here is rougly what it looks like:

Playing  PLST RAND  3:11
+-------/         \----+
| Each list played in  |
| sequence, choosing   |
| new lists randomly   |
128 kbps  44 kHz  Stereo
Vol: -14 dB

This balloon only appears when the play mode is selected, and the description changes to match the mode as you press the INC/DEC buttons. Tom suspect some people might find the balloon annoying because it covers the file, dir and id3 info until the play mode is deselected, and he might add a setting (on the params edit screen) to disable it.

Also, some other minor things have happened in display.c. A requested feature was added, to show "no ID3 tag" when id3.c doesn't find any tag. Recently, I've been working on fixing the little problems that have caused the display to get messed up after a long time playing many songs. I'm not sure if these are all fixed yet, but most of it is and I'm determined to get the display solid no matter how many songs have played.

The new display.c code had a lot of internal improvements, which should make it a lot easier to add more features to the display or make customized displays. The new code works from a configuration table (stored in flash rom... so you still have to edit the code). But it is easier to change where things appear on the LCD, which items appear, and so on. For example, if you wanted to build a firmware with the balance slider on the main screen instead of 2 lines from the id3 tag, you'd just remove those two lines from the table, and add the balance slider line. Well, there are also a bunch of columns in the table to control which things get selected by the up/down/left/right keys, but the idea is to make it easy to configure what appears, and to isolate the code for each on-screen item to a small redraw routine that uses the config table rather than having lots of screen and x,y position specific code embedded in it.

Tom Parker added a new play mode. It was named "Key Rand" and "RandomSelect" (we're still searching for better names). This new mode plays files in sequeunce, but when you press the Next buttons, it jumps to a random song. Tom's idea is to enable getting to "new" areas in a huge collection of mp3 files, but to play them in order.

Earlier in the week, I redesigned the serial input parser. There are comments in parse.c that explain how it works. On my (long) to-do list is added a web page to document the serial port commands.

Matthew Williams contributed some work towards a new serial port command to jump to a particular file. This was committed to CVS tonight. Briefly, the command is "PLAY_FILE XXXXXXXX" where the X's are hexidecimal digits. The first 4 are the offset of the directory, and the last 4 are the offset of the file. These match the play state numbers printed to the serial port. Eventually, there will be serial port commands to obtain lists of the files and directories and their offset numbers. These serial port commands have been desired by a number of people wanting to control the player remotely... and Matt is working on a PocketPC control app. If that interests you, contact Matt in the user group.

Laine has been making some improvements in the file chooser (treedir.c). There is still much work to be done there, but it's really come a long way recently.

April 6, 2003: Tonight I added save/restore of the currently playing song, so if you turn the player off and back on again, it should start up again on the song you were listening to when it went off. This new firmware is in CVS now, and it should appear on Dave's automatic build site very soon.

Actually, in "Dir Rand" mode, it will start up again in that directory but pick a new file randomly, and in "All Rand" mode the player always starts up at a random song located anywhere on the whole drive. The "Plst Rand" mode (which really should be renamed if anyone can think of a good name that fits) which plays directories in sequence but picks each new directory randomly, will start up at the beginning of a new random directory. So the saved state really only applies to the sequential modes and random within one directory mode.

Also, Keith has been working on some small clean-ups on what shows on the LCD, and Laine has made some improvements in the (experimental) treedir list to select and play files.

Len (Techknowman) put up a web page with images and a short video clip of the brief TechTV appearance a few days ago.

April 3, 2003: Looks like TechTV mentioned us on their website and very briefly in a show last night. Fortunately they were using the 12 volt input, which has an overvoltage protection circuit that (probably) prevented the player from being damaged by 37 volts.... but the inverter for Techknowman's backlight doesn't have any such protection :( Well, it looks like they'll get the inverter replaced and maybe try again.

A number of other interesting things have happened lately, despite my neglecting to keep this news page updated. Here's some of the recent events.

Two new developers, Laine and Keith, joined the project in March. You can read discussions of the developer chatter in the developer group.

Tom converted the FPGA design to VHDL code. It's finally far enough along to make the player run, but it's still not as stable as the original schematics. If you want to experiment with it (requires replacing a file and recompiling the firmware), you can get this experimental VHDL code from Tom's website. In the long run, we're hoping that the VHDL version will be more flexible and Tom is planning to use it to add special I/O ports and DMA channels to (maybe) someday support ethernet. Tom also archived many of my emails explaining how parts of the FPGA design work, so if you've struggled to understand all those FPGA schematics, maybe that will help.

After many months of inactivity, work is happening again in the firmware. If you're still using 0.6.10, you might give the CVS code or nightly build firmware a try. It's running really stable lately. There have been many small improvements recently, though the greatly improved "random" modes are probably the most visible change.

Also, the SDCC C compiler project has become very active in the last few months. Johan, Bernhard, Borut, Frieder and other SDCC developers have made a lot of important improvements in the C compiler recently. This is great news for us, since we depend heavily on the compiler.

Some time ago, Len (techknowman) started providing PJRC with LCDs that have the backlight installed. This way, it's finally possible to buy a LCD with backlight that's "plug and play"... which isn't as much fun as disassembling your LCD, scraping the film from the glass, etc, but it's a lot easier.

Photos added, from Stephen Hill and Pariac. I've had emails from many others who are planning to someday send photos.... it really is quite interesting to see, so please send 'em.

For a few months, I've been planning to update the website and reorganize a few pages (mostly the technical docs section). Maybe the looming possibility of TechTV showing the board very soon will inspire me to finally do this. First on the list are some pages to recognize the many developers who've contributed over the last couple years, and some updated pages about how to hack on the firmware's application section (all in C, no assembly language). Maybe some more "new user, non-developer" pages would also be good? It's hard to know what sorts of things brand new users find confusing or unclear about the project... so if you have any ideas about what I should add for them, feel free to email me (yes, believe it or not, I'm actually fairly caught up on emails for once!)

October 8, 2002: Cheuk Poon sent more photos and technical details about his USB Interface to the player.

October 8, 2002: Soon PJRC will have a feature that many people have requested... the ability to download a big ZIP file archive of the entire site. Over the weekend I wrote a big perl script that creates the archive. It's not as simple as it seems, because nearly every link needs to be altered so the html will work properly installed anywhere on your hard drive. Some links (like purchasing and shipping cost) need to point back into the live website. The script also puts a small colored bar on the top of every page to indicate it's an archive, with the date it was extracted from the real site.

The ZIP file is over 40 megabytes (approx 50 megs when uncompressed). We're also going to add a $5 cdrom to the store, for people who don't have high speed internet connections or would rather not go to the trouble to download it.

October 3, 2002: Added photos (that had been sitting in my inbox for many weeks) to the photo gallery. Simon Bateman's custom car install featuring a smaller in-dask LCD and Cheuk Poon's successful addition of USB. Yes, he added USB... a feature I know many people have wanted. He's interested in sharing how to do this, so hopefully we'll get some good dialog going soon and others can try it.

Recently, I've been doing some much needed overhaul on the html for the website. Last week I changed the top nav bar and moved those old lists of links into the left-side nav bar you see now. The really big news is that these new nav bars are automatically added to the html by a script. The web server still serves up static .html files, but when I run the script it automatically re-writes (almost) all the html on the whole website! This is a really big deal for me, because the older lists were getting to be too much manual editing for me to maintain, and that was becoming an obstacle to improving the site. It feel great to finally have the nav bars under control!

Also recently changed are the site map page (which is also automatically rebuilt by the script) and a new site search which is on the home page directly and linked from almost every page on the site. The search still needs some tweaking (it's powered by ht://Dig), and many of the page titles need to be more descriptive to make the results more useful. If you try the search and find cases where it doesn't rank the result well, let me know. I'm still learning how to optimize the search... ranking the results and displaying a useful list is the tough part.

In the previous few weeks, Robin and I put quite a bit of work into a "direct mail campaign" (funny how that's what you call it when you're the one paying to send it, when you'd otherwise just call it "junk mail"). The mailer was a pitch to universities to use the 8051 development board for their classes as a textbook (every student buys their own and gets to keep it instead of sharing a limited number of boards in a lab). It's amazing how much work that was, not only to get the thing designed and printed, but also visiting 240 university web sites and trying to figure out the names/addresses of the profs who teach the microcontroller design classes. It's kinda strange how working on PJRC full time has gone... at first it seemed like I'd have a lot more time to work on the firmware and writing web pages (that time may still be coming, maybe) but so far it's been a lot of work on some promotion as we need to try and increase the sales to the point where it can at least pay the bills (before I run out of savings, but it's looking like that's at least a year or two away at the current rate). I know at least a few people have been wondering what happened and why I've been so silent lately despite supposedly working on the site full-time. I could go on writing for hours about our recent adventures behind-the-scenes... but I at least wanted to share a bit of what's been going on for those of you who've been following this project and the site. We already have some interest from a few universities, and they are our best chance to estabish slow but steadily increasing sales that can support us and allow the us to grow the rest of the site over the long term. But the real moral of the story is that it turned out to be lot of work to get our first promotional mailing out.

Right after we got the mailing out, Robin and I took a much needed 4-day weekend vacation (again, to Robin's favorite place, Disneyland... It was her Birthday :)

It's been a couple months since I've worked on the firmware for the mp3 player... and it'll probably be about one more month until I get back into it. I'm really excited about the recent improvements to the html, and I'm planning to spend the next few weeks writing new pages and making improvements to existing ones. Probably about 1/3 of that effort will be in improving some things in the business side of the site (order status, easy and secure way to fix typos in credit card numbers after the order is placed, ability to add groups of items to the shopping cart instead of manually going back and doing them one at a time, fixing some small bugs in the shipping cost calculation, and some more automation of the tasks Robin and I do to process orders). The other 2/3 is planned for writing new web pages and updating existing ones. I'll spend a chunk of that on the 8051 section of the site, but also here in the mp3 part I'm planning to fill out the "detailed info" section to actually have lots of screenshots of the LCD and info about the features in 0.6.10 (the site really doesn't tell what 0.6.10 does... mostly because much of the html was written back in the 0.1.0 days). If you have any ideas of things that new users would want to know, please email me.

July 29, 2002: I finally finished up with Veris a couple weeks ago, and now I can work on PJRC full time. During those last several weeks at Veris (June to mid-July), I neglected quite a number of things while putting in overtime to finish up my last project there. The good news is that I'm finally (well, mostly) caught up on emails and important non-tech tasks.

In the last few days, I've been finishing up the new play mode code that I started several weeks ago. See the May 31 entry below. Now all five modes are working, and many bugs have been fixed. Some problems still remain. So far, two people have tried the new code at various stages and sent feedback about what was and wasn't working. This sort of feedback really helps.

The new "random" modes are designed so that they play every file once before repeating any of them.

The next to-do item is to finally make the player save and restore the current file & directory and start back up playing where it had left off. Of course, in the "random" modes, a new sequence is created each time the player enters that mode, so this restore will only apply to the non-random position.

I know this is a lot of new code, and it'll take some testing to flush out all the little bugs. Right away, the "random" modes should be much better, and soon the sequential modes will save the current position. Improving the playback modes is only half of the goal... this new code builds infrastructure in the project that will be needed for the planned changes in caching (reading parts up coming files so they'll be ready without delay as the drive spins up).

June 11, 2002: My first attempts at the new "randomize" code didn't work out, and at first it seemed to be memory corruption problems with the SIMM and FPGA. Well, after much investigation, it turned out to be a silly bug in my code (and SDCC pre-computing addresses in a multiple assignment and changing my memory configuration, instead of evaluating the two assignments strictly from right to left).

I committed code for the first of the random modes, "Dir Rand" (files selected randomly within a single directory). I wrote the code to select new directories randomly, while playing the files in each in sequence, but this new code doesn't work yet.

Matthew has recently been doing work on M3U parsing. His new code is in CVS, but it's currently disabled by default. If you have the compiler installed, you might give Matthew's new M3U code a try and send him some feedback and thanks.

At this point, I'm still working on PJRC only part time. I am planning to finish up with Veris in early/mid July and begin doing PJRC full time.

May 31, 2002: I'm finally back to working on the mp3 player firmware again! Today (and part of yesterday), I re-wrote much of the code that selects what song will play next. So far, all this does is break the "random" modes, but it lays the infrastructure that will be needed to eventually support caching multiple files in the SIMM.

My next step is to re-write all of the "random" playback code. The old code would generate a pseudo-random number and "skip" forward that many files in the master list. Of course, the pseudo-random numbers are really a predictable sequence created by a linear feedback shift register, and the net result for many people (including me) was that a subset of all the possible songs would seem to play more frequently and some would almost never get played.

The new random modes will actually resort the lists of files when you active the random mode. This means that each time you enter the random mode, the order the songs are played will change... but it will always play all of the songs in a list before repeating any of them. In a truely random selection, every song within a group would be equally likely. This new scheme is more like pulling a card from a deck of playing cards (where you don't place it back in the deck until they've all been chosen). I think this new "random" behavior will make everyone happier (I hope).

I must confess that the 5 playback modes that exist today were added by Chris, Matthew and others (I originally had only 2 in the days before subdirectory support); and I've never really even figured out exactly what each mode does... until now. Here's the list:

  • Seqntial - Play all files (from all dirs) sequentially
  • Dir Only - Play files sequentially within one directory
  • Plst Rand - Choose directories randomly, but play each dir's files sequentially
  • Dir Rand - Play files randomly within one directory
  • All Rand - Play all files randomly
These names aren't great. The "Dir Rand" and "Plst Rand" are especially confusing. I'd really like to rename these to something more intuitive. If you have any ideas for better names, please email me or post to the yahoo group. Keep in mind that there are 8 characters allocated on the LCD to display the playback mode, and we can "cheat" and use 9 characters if really necessary.

A few days ago I received new photos from Allan Tarantino, Guy Ubaghs and Bernie Pallek, and they are now in the user photo gallery. These guys have all put quite a bit of work into making very interesting custom cases.

May 16, 2002: I'm working on this much needed troubleshooting page. As you can see, it still needs a lot of writing and editing, but at least it's off to a good start. If you've followed the yahoo group and there's any other common questions that I missed, please let me know. I really want to get that page done and do some updates to the rest of the pages before getting back into the firmware and writing 0.7.x.

May 15, 2002: This new fast flash download page gives detailed information and instructions for the new fast download. We're still hopeful that someone will find a way to do it in windows. I added a section with details of the protocol and the end-of-transfer sequence (switching back to 19200 gracefully) which should help expert windows users play with it.

May 11, 2002: The fast flash download is working and it's been committed to CVS. All boards we ship, starting on Monday, will have this new code in their 87C52 chip. Boards with the new fast download will print this message at startup (and when you use the 'M' command at the monitor prompt):

  Program Name                     Location      Type
    Memory Editor (VT100)            1000      External command       
    Fast Flash Download              1500      External command

The fast download code is in 3 files. The firmware for the 87C52 chip is in "pm2_mp3.hex". A perl script, named "hex2fdl" turns the intel hex file (mp3player.hex) into the binary data stream that the new fast flash download accepts. You can send this binary data directly to the board (after pressing '~' tilde) to start the transfer. You can also use the third piece of code if you have a rev C board and Linux on your PC. That code is "xmit115200", and it transmits the binary data at 115200 baud, instead of 19200.

The "xmit115200" utility only works on linux, so I'm hoping that some windows developers will find a way to do the equivilant thing on windows. It might involve macro features of some terminal emulator, since windows does not allow two processes to access the same port.

The bad news is that the transistor-based circuit on the rev A and rev B boards can not receive data at 115200 baud. It does work fine at 19200, and using the binary format at 19200 is considerably faster than using intel-hex.

May 8, 2002: I'm working on a faster firmware download (bug #4). The new download code will be inside the non-upgradable 87C52 chip, so to use the new download (when it's finished) a chip swap will be needed. Of course, we'll start using the new code on boards as soon as it's tested. The original intel-hex download will remain, so either way will work on the new chips.

This new download uses a binary data format, where only about 10 specific bytes are sent as 2-byte escape sequences, to allow special commands (addr, checksum, eof, etc) to be embedded in the stream. All other data bytes are sent as just one byte, and the embedded commands are optimized to have minimal overhead. There is also a tiny bit of compression for groups of 0xFF, which occur frequently in the FPGA data section. A perl script reads the intel-hex file and outputs the binary stream that needs to be downloaded. The binary format is nearly 1/3rd the size of the intel-hex file, so it gives approx a 3X speedup.

I'm also working on an optional feature in the new download to temporarily switch the baud rate to 115200 bps, which will give another 6X speed increase. This part is optional, because it won't be easy to use (for everybody). It will require switching your serial port setting to 115200 during the transfer, and then back to 19200 right after it's finished. Not easy with a very unsophisticated program like Hyperterminal. I'm planning to write a little linux-based utility to automate this process. Maybe someone will make a similar windows-based utility (if it is even possible in windows).

There is still some work to be done, like the checksums and baud rate switching, but this initial test code does work on the 8051 development board. It still needs some more work before it appears in the official image for the 87C52 chip on the mp3 player, but it's far enough along that it can successfully receive code.

April 30, 2002: Looks like I've really fallen behind in updating this news page. Here's what's going on:

Firmware rev 0.6.10 is on the firmware download page. 0.6.10 includes timing improvements in the FPGA to make it more compatible with some problematic SIMMs. There's also a small bug fix and improved messages on the LCD during startup (for users troubleshooting without a serial cable to a PC).

Rev 0.6.10 is the last planned rev in the 0.6.x series, except perhaps updates with improvements in the FPGA. Soon I'll begin work on the next state machine code, which controls how the player operates (actually, it's already stated and ifdef'd out in the current code). The new state machine will separate the playback steps from the disk reading steps and ultimately allow playing files larger than the SIMM size. It will also allow smarter caching strategy, where some of the memory is used to read the first part of several upcoming files to allow for rapid response to pushbuttons (instead of having to wait for the drive to spin up). Of course, this is vapor right now, but now that the stability of the firwmare is considerably improved I'm ready to go back to making major changes to add new features.

A couple days ago, we shipped the last of the unassembled kits. There are still plenty of assembled boards left. We have a small number of bare boards and most of the parts to build up a few more kits, so we'll probably be able to make just a few more of the unassembled kits. Once those are gone, we probably won't have kits until late Summer or sometime in the Fall.

If you've been following this project, you probably know that this project and PJRC.COM are a part-time effort for both me and Robin. In the last year, as PJRC as grown, it's really like working two jobs. One of those jobs is fun and exciting, and the other one actually pays a salary! (PJRC has consistantly made a tiny profit, but we've always had to put all of the available funds into buying more parts). Well, I'm getting ready to take a giant "leap of faith" and leave Veris to work on PJRC and its projects full-time. It's a big risk and in a year or two from now we may be joining the ranks of failed dot-coms, but it's looking like I can hold out for about 18 months buring through savings. Hopefully I can imrpove the site and add 3-4 more projects and author a couple more articles in Poptronics (really helps promote the site and projects, and also forces me to put the finishing touches on the documentation). It's a big risk, but it's also exciting and with a lot of work and luck we might be able to grow the site enough to be sustainable as a full-time effort.

If you've visted the About Us page, you may have noticed that Robin works for Arthur Andersen... the accounting firm that's in trouble over the Enron scandal. Of course, Robin has never worked on any Enron-related audits or consulting. It turns out that the Northwest offices are being sold to KPMG, and Robin accepted an offer yesterday and will soon officially work for KPMG.

As always, I'm behind in answering emails, though I did a bunch of them last night. I have a couple tenative plans for how to improve my responsiveness to email questions. The first step will be a different address for tech support for people who paid for a board or parts. Initially this will just flag the messages as a high priority, but in the longer term I'm planning to install a request tracking system. The other half of my plan involves changing all of the email links to link to a central contact info page with guidelines for writing useful questions, and maybe there'll be a short FAQ on that page. The majority of questions I get are incomplete and unanswerable without more info. My hope is to encourage these people to put just a bit more effort into writing better questions and including the info that's needed to compose a meaningful answer.

Well, that's the news for now.

March 10, 2002: I put version 0.6.9 onto the firmware page. This rev has a number of bug fixes from the last couple weeks, including the fix for memory corruption when a button was pressed to go to another file while the current file was still being transfered from the drive.

I also rewrote the simm detection code. For some background, read the Jun 26, 2001 update on the history page. The new code tests each 1 megabyte section of the simm to see if it works, and then is scans all previously good 1 meg sections to see if they got corrupted during that test. This allows a number of previously incompatible simms to work. Still, some simms have other problems (see bug 27 for details). These simms would cause the STA013 test to fail, usually with "t=3E" or "t=27". I added some code to check for this, and if it is detected the firmware concludes that all of the memory is unusable and it will run the 0.1.3 (no simm) firmware instead of continuing to run with an obviously unusable memory.

For the last couple months the firmware development has been in sort of a "feature freeze", where all of the effort has been to fix bugs. These recent revs are looking really good, so hopefully soon we can get back to the fun stuff :). I'm going to start yet another "how stable is it on your board" poll in the yahoo group, so if you give 0.6.9 a try, please take a moment to vote on the poll so I can tell if we're ready to move on to new feautures.

February 27, 2002: I am finally making some progress on my email inbox. It's now under 100 messages, which really feels great. Most of what's left unanswered is messages from January. Now that the firmware is running much more stable, I want to get caught up on those emails before the weekend, and then maybe I'll be able to fix the memory leak (bug 22) and release 0.6.9. Also on my must-fix list for 0.6.9 is properly handling the case where there really is a bad sector on the drive (bug 31). It looks like the Feb 24 fix takes care of 99% of the cases were people were seeing IDE errors due to the drive getting passed illegal sector numbers.

Also helping a bit on the email front is SpamAssassin, which I installed just a couple days ago. It took a bit of work to get it using Vipul's Razor (version 1.20 doesn't work with SpamAssassin) and SpamCop's blacklist, and a bit of tweaking on the points assigned for each and the total threshold to filter out spams.... but it's really worth it. If you get a lot of spam, the effort to set these filters up is really worth it. Unlike extreemist services (MAPS RBL), SpamAssassin takes a nicely balanced approach, and you can tweak the scores for each test and the total threshold so that it extreemly unlikely to ever filter a legitimate email. I set the threshold to 9 (nearly double the default of 5), but with Razor and SpamCop added in, all the spams in the last couple days have scrored between 12 to 35. Still, I'm not actually deleting the spams, just sorting them into a folder. I'll check it every now and then to make sure any real emails didn't mistakenly get filtered.

February 26, 2002: On Sunday (Feb 24), I fixed another bug in the firmware after an all-day session to isolate the cause of IDE errors where the bad sector was a large address far outside the drive's range. It turned out that some other code in the memory manager would corrupt 3 bytes of memory within the in-memory file list when the buttons were pressed to go the next/prev file before the code was done reading the data from the drive.

This fix appears to really improve the stability and people who've had crashing are starting to report that they've not been able to reproduce any crashes. This fix is in the CVS server, on the versions that print "February 24" in the startup messages. I have just a couple more bugs to fix (including a small memory leak) before this is released as version 0.6.9.

February 21, 2002: Released firmware version 0.6.8. This version has FPGA rev 1.12, which fixed some long-standing problems due to fan-out. The xilinx software appears to have bugs when analyzing these nets, and adding buffers with attributes to keep the xilinx software from "optimizing" them out has dramatically improved the FPGA's performance on many boards. Some very aggressive and slightly problematic debug code was removed, and a couple memory management bugs were fixed. A significant bug in SDCC was discovered and the SDCC guys (Johan and Sandeep) fixed it. 0.6.8 is the first rev compiled with the fixed SDCC C compiler.

Several days ago I fixed the email problem with Bugzilla, so if you use Bugzilla you should now get emails to notify you about the status of any bugs you have reports or you are watching (unless of course you set your prefs to not receive those emails).

February 10, 2002: I added two new revs to the firmware page. Actually, 0.6.6 has been in the download directory for about 1 week but I forgot to update the web page. 0.6.6 and 0.6.7 have new FPGA revs (1.10 and 1.11), which are aimed at improving the stability on all boards.

There is still a problem where the player does not handle errors from the IDE drive well. Until 0.6.6, the firmware would just ignore any errors from the drive, and read whatever the drive had in its buffer (which could cause a chirp or "scratch" if the error was in MP3 data, or a lot of confusing bits of sound mixed toget if the error was in reading FAT sectors of the FAT32 filesystem).

On Feb 3, I added code in the IDE driver to check the error flag from the drive and retry the read operation. However, there is no retry count, so if the drive keeps returning errors, the firmware will get stuck and spew an endless stream of IDE error messages to the serial port. My Hitachi drive does this occasionally (but it is quite likely that parts of my Hitachi drive really are bad as I have abused it so very badly over the last year of this project... I'm constantly amazed is still works at all!) Soon I'll add a retry counter, but it will be quite a bit of work to pass the error back up to the application code, and then make the application do something sensible (like jump to the next file). One of the first steps will be to print quite a bit more info about the error. When that's in place, it would help to see what errors (if any) you might have with your particular IDE drive.

As always, I'm behind on emails again (but I did spend most of the weekend hacking on the FPGA). If yours is one of the many emails setting in my inbox, I'm sorry I haven't been so responsive. I'll try to get them all answered soon.

I moved all the 2001 news to the history archive page. Once again this news page is a reasonable (fast downloading) size.

February 6, 2002: The complete Xilinx XCS10XL Schematics are now available under the GPL license. You must have the Xilinx software with Aldec schematic (not the free version) to edit these schematics and compile the chip. I am creating GIF images for the schematics, so you can at least view them if you do not have the Xilinx software.

January 8, 2002: I just posted firmware rev 0.6.5. This rev fixes a few bugs that appeared in 0.6.4. See the description on the firmware page for details.

We've been sending out the free display upgrade chips over the last couple days. Approximately 75% of the beta testers have responded and we've sent them chips. If you have a beta test display (shipped in or before October, 2001) and you did not get the email, please contact Robin with your current postal mail address so we can get you a chip to upgrade your display.

January 5, 2002: A full schematic for the new rev C board is finally available. As you can see, the power supply is the only part with major changes. The RS-232 interface was changed to a MAX232 chip, and the chip select for the flash rom was connected to group. Other than the power supply and these minor changes, everything is the same as rev A.

The LCD beta test is officially over! Well, I still need to update some pages. On August 8, 2001 all significant bugs were fixed. In September, Tom Parker added the performance enchancing features the reduce the serial port bandwidth used and eliminate flickering. The last bug was fixed on October 7, 2001. No changes have been made to the display since October. All displays shipped since the last week of October have the final version 1.0 code.

For everyone who purchased a display in or before October 2001, we will be offering a free upgrade chip (and free shipping by postal mail). We are planning to compile a list of everyone who purchased a display in or before October and we'll be sending out emails to everyone on the list within the next few days (primarily to verify shipping addresses). If you have an older display and your email address has changed, or you don't receive the email, please contact us within the next few weeks.

You may have noticed some small changes on other parts of the site over the last few days. Most of it is just cosmetic changes, but there is a new shipping cost estimator (this has been one of the most frequent questions appearing in my inbox... and finally there is a good answer!). I have been working on some code that will automatically update the navigation links at the top of each page. Editing the html by hand has become quite a chore (there are currently 81 html files in the mp3 player part of the site). I'll be making some minor changes in the arrangement of these pages. Overall it should be easier to find information and see how the hierarchy is arranged.

Older News is archived at this page

PJRC MP3 Player Recent News, Paul Stoffregen.
Last updated: February 23, 2005
Status: More info to come... just a couple photos for now.
Questions, Comments?? <>