Parts and Materials
Here are some pictures of the finished design. The pictures clearly show the design methodolgy I used, which was to use ribbon connectors where possible, and adapter boards for smaller sized packages. Overall it turned out pretty well.
The Front, daighterboards removed
The Back, daughterboards removed
At the moment, the code is very incomplete. It does not play an mp3 file yet. It CAN exercise the ATA interface and access files using the FAT. It can display the MP3 TAG information out to the LCD. It can also access the PCF8574 and MAS3587F through the I2C bus. What is not yet implemented is the transfer of the MP3 stream from the AVR to the MAS. I hope to have this done shortly.
Unfortunately a lot of my hardware didn't come in until late November, most notably the PCB for the MAS. As a result, I did not have the hardware design complete until December. As a result, I have had very little time to work with interfacing with the MAS. At the moment, I have successfully read and written the control and status registers and memory locations within the MAS.
Regardless of my shortcomings, I have learned a great deal by doing this project. I have a very good understanding of ATA, I2C, FAT, and MP3 files.
Here are a few interesting lessons I have learned:
Cables can be unreliable: I spent a day troubleshooting a problem with the LCD, which ended up being a cable where adjacent pins had shorted together.
Soldering is hard: I easily spend over 16 hours in the soldering process overall. I am not very skilled. By the way, if a nice guy in the Czech Republic offers to solder the chip onto the PCB for you for a nominal fee, don't hesitate to let him do it! Soldering a PQFP64 can be a hugh nightmare, and I ended up stripping PCB traces off the board when I made a few mistakes. I had to correct my errors by soldering tiny jumper wires on the board. (You might be able to see this on the picture from the back.)
FAT16 is POORLY DOCUMENTED. Most people will refer you to the Microsoft specification, which can hardly be called a specification, since it really is written in such a manner that it expects you to already know FAT. I spent a long time realizing the tiny quirks and differences between FAT16 and FAT32 that can ruin your life. For example, I didn't realize until the very end that the location of the root directory is NOT stored in the data portion pointed to by the FAT table. No, The root directory comes directly AFTER the FAT, but BEFORE the data segment. Because I assumed that the root directory was simply another file in the data segment (as it is in FAT32), none of my calculation for finding the starting location of files would work.
Connectors!!!!! I used the wrong type of DB-9 connector (male instead of female). It was too late to unsolder at that point (or too difficult), so I made one cable that was female on both ends, and I bought a gender changer for the other serial port. Not a terribly bad thing, but it was a drag at first. Also, I did the LCD pinout before putting the LCD on the board. Once I did I realized the LCD was upside-down! Instead of spending the time to correct this, I made a longer cable for the LCD and had it twist around.