Page 1 of 1

VS1010 Ultra low cost LCD FM radio + USB DAC + SD/USB MP3 Player demo board

Posted: Mon 2021-03-08 7:13
by Panu
Dear VS1010 users,

Here's an ultra optimized VS1010 based demo board for applications such as Car Stereos, FM Radios, MP3 Players, Clock Radios, Audio Guided Tours or Audio Books. It's a solution almost completely based on using just the VS1010, almost zero external ICs are absolutely required to implement this design, so it's very low cost. But still, great quality, great functionality. And it can be used as a basis for developing new VS1010 products, just leave out the bits you don't require and take what you need. This board does:

- MP3 playback from SD card with incredibly fast indexing (indexes 20,000 mp3 files in about 6 seconds)
- MP3 playback from USB flash, implements USB host.
- USB DAC and USB mass storage modes.
- FM Radio input using low cost FM module.
- 2 stereo line inputs using VS1010 built-in ADC.
- Custom LCD, driven with GPIO pins, no LCD controller needed.
- Real time clock

Watch demo on Youtube:
vs1010-lcd-mp3-radio-youtube-demo.jpg (85.04 KiB) Viewed 443 times

IC:s in this design:

- VS1010 (Required)
- SPI Flash (could be left out if firmware is stored in the SD card).
- 2 dual operational amplifiers (optional, improves sound quality).
- TEA5767 FM radio module (required for FM radio).
- D class amplifier (not required if no speaker drive needed).

IC:s NOT NEEDED in this design:

- No external RAM, VS1010 has enough ;)
- No AD converter, VS1010 internal ADC is used.
- No DAC, VS1010's award winning crystal locked Hi-Res DAC is used.
- No LCD controller, custom LCD is driven with VS1010 GPIO pins.
- No USB or USB host controller, everything is handled by VS1010.
- No microcontroller, VS1010 runs all binaries.
- No headphone amplifier, VS1010 internal headphone amplifier can be used
- No RTC chip, VS1010 internal real time clock is used (battery required)

The application consists of several executables that are switched as needed. This way each different major mode can use all the memory of the VS1010. Here are brief descrioptions for each executable.

startfm.dlx - the loader
Starts the application. Extends program memory by combining the normal code area with FC extended code area. Loads USB Host (usb flash stick) driver (usbhost4). Runs each executable as indicated by app.mode. Takes over TIMER2 and scans for POWER button. Long press of power button resets the system to runlevel 17 : fmsetup mode.

fmsetup.dlx - initializer, time setting, crash recovery
This checks that the application settings struct is sane. Allows user to set the RTC time. Long press of B4 goes to runlevel 4 : USB SPI flash writer. Long press of B5 goes to runlevel 2 : USB SD card writer.

fmradio.dlx - FM radio and line inputs
Configures the FM102 radio receiver module (TEA5767) . Uses extended magic to get remarkably good quality stereo sound from VS1010 SAR inputs. Can handle the FM radio and two stereo line inputs.

lcdmp3.dlx - SD card and USB flash MP3 player
Checks app.mode to see if it plays from SD card or USB flash. Extremely fast indexing of MP3 files - Can index 20,000 MP3 songs in about 6 seconds. Saves current song and position.

usbhost4.dlx - the USB host mass storage driver
Enables reading files from USB flash memory. Automatic restart and error recovery from most error conditions.

lcdmsc.dlx - LCD enabled USB mass storage
Can be used to write MP3 files to SD card from PC using USB. Up to 1.5 megabytes/sec transfer speed - focus on reliablity, not speed. Button 6 exits to FM radio mode.

lcduac.dlx - LCD enabled USB DAC
Robust and reliable USB DAC. Uses the simplest USB audio class 1 descriptors possible. It should be compatible with just about anything. Single sample rate; 48 kHz, 16 bits. Uses USB 1.1 fast speed (12 MHz). The descriptor does not publish a mixer interface, but the code can handle it.

savesettings.dlx - saves application settings to SPI flash
The ROM console area (x:111-x:134) is used for persistent storage of application settings across different executables. Saves settings to the last SPI flash block before the S: FAT system disk so there's virtually no chance of it corrupting the SPI flash during write.

loadsettings.dlx - loads application settings from SPI flash
The ROM console area (x:111-x:134) is used for persistent storage of application settings across different executables. Loads settings from the last SPI flash block before the S: FAT system disk.

power.dlx - power saving functionality
Used to switch the power off. Implements VS1010 power saving options using command line parameters. Can be further used to optimize power consumption.

The attachments below contain the full set of source codes and executable binaries for the VS1010. Schematics coming soon. Please write to if you would like to purchase the board or samples of the LCD displays.

Updates for version 1.1 PCB

Posted: Mon 2021-03-08 14:33
by Panu
These executables have been changed to support additional features in PCB version 1.1

lcdmp3.dlx: controls USB A connector power using pin GPIO2.15.
startfm.dlx: sets backlight LED pin at PWM pin to a low level.


Re: VS1010 Ultra low cost LCD FM radio + USB DAC + SD/USB MP3 Player demo board

Posted: Wed 2021-03-17 4:39
by Henrik

The project package contains a directory called additions-to-libvs1010/ and a file called They contain include files not available in VSIDE releases up to v2.47.

However, the contents of these two packages are now included in the new VSIDE v2.48 which we released here:

We strongly recommend, if you want to edit the projects, that instead of copying the files on top of your old VSIDE installation, you install the new VSIDE v2.48 (or newer, if you are reading this in the future).

Kind regards,
- Henrik