The OggBox is a simple, hackable open hardware music player. It's a pocket sized device, about the size of a smart phone which can play or record open formats to or from an SD card. It will support Ogg Vorbis, FLAC and WAV files, but has only been tested on Ogg so far. The hardware was designed in KiCAD and all the files are available to download and use (CC-BY-SA).
The basic architecture of the machine is a dual processor setup, the general purpose controller is an ARM Cortex M3 (STM32F103RBT6) with 128KB of flash and 20KB RAM running at 72MHz. The second processor is either the VS1053b or VS8053 DSP and audio output stage chip, the only difference between these two is that the VS1053b has hardware support for proprietary codecs (WMA, AAC and MP3) which are not supported in my firmware. Both audio chips support Ogg Vorbis and WAV and FLAC with a software plugin, and contain input and output processing for the audio signals. There's an SD card socket on its own SPI bus, a micro-usb charging point and built-in LiPo charging and protection circuits. The unit has 8 buttons and a slide switch for user input and a 128x64 black and white LCD with green backlight.
With a second generation iPod replacement battery I picked up from the bargain bin at Maplin (2200mAh 3.7V LiPo) I've calculated that the run time playing audio should be well over 10 hours with the screen and backlight on. Obviously current consumption should go down when it is doing less work. I've not been able to test this yet as I have a hardware fault in the first prototype which is causing an extra 150mA power consumption above what should be drawn. Lots of testing has gone into this power problem and the only reasonable cause suspected is static damage as I took no precautions at all when assembling it.
The revision A board is currently being tested and can play files and has basic hardware drivers for all the features of the board. I've started implementing a basic database with tiny memory (~4KB) requirements to allow a media library to be built and searched on the device. There's some of the meta-data handling code in place but it is currently held up by an incomplete set of syscalls. I'll post some details on the implementation later but basically the minimal libc "newlib" has a number of basic system calls, since I have no operating system these are each implemented as a C function. These C functions implement access to a minimal FAT file system. I implemented most of this a year or two ago on the first prototype of the board but left a couple of critical functions (including seek) unimplemented.
I'll be posting blog articles about specific parts of the project here in the future. General information and links to the source can be found on the project's own micro-site: oggbox.nathandumont.com there's also a wiki on there which will have more general info.