https://github.com/elehobica/pico_tinygo_vs1053
Raspberry Pi Pico TinyGo + VS1053
https://github.com/elehobica/pico_tinygo_vs1053
raspberry-pi-pico tinygo vs1053
Last synced: 3 months ago
JSON representation
Raspberry Pi Pico TinyGo + VS1053
- Host: GitHub
- URL: https://github.com/elehobica/pico_tinygo_vs1053
- Owner: elehobica
- License: bsd-2-clause
- Created: 2022-05-07T00:21:32.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2023-11-03T13:37:02.000Z (over 2 years ago)
- Last Synced: 2024-06-19T19:41:03.121Z (almost 2 years ago)
- Topics: raspberry-pi-pico, tinygo, vs1053
- Language: C
- Homepage:
- Size: 1.45 MB
- Stars: 6
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: Readme.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Raspberry Pi Pico TinyGo VS1053
## Overview
This project is an example of VS1053 on Raspberry Pi Pico by TinyGo.
* confirmed with TinyGo 0.27.0
This project features:
* VS1053 MP3 playback
* read MP3 bitstream by goroutine with Mutex for SPI, which allows to share single SPI for both VS1053 and SD card
* Filesystem by FatFs R0.13c ([http://elm-chan.org/fsw/ff/](http://elm-chan.org/fsw/ff/))
(SD card supports SD, SDHC, SDXC cards and FAT16, FAT32, exFAT formats)
* machine optimization by CGO to improve SPI access performance
## Supported Board
* Raspberry Pi Pico
* VS1053 Board (confirmed with LC Technology board)
## Circuit Diagram

## Pin Assignment
### Serial (CP2102 module)
| Pico Pin # | Pin Name | Function | CP2102 module |
----|----|----|----
| 1 | GP0 | UART0_TX | RXD |
| 2 | GP1 | UART0_RX | TXD |
| 3 | GND | GND | GND |
### VS1053 board
| Pico Pin # | Pin Name | Function | VS1053 board |
----|----|----|----
| 4 | GP2 | SPI0_SCK | SCK |
| 5 | GP3 | SPI0_TX | MOSI |
| 6 | GP4 | SPI0_RX | MISO |
| 8 | GND | GND | DGND |
| 9 | GP6 | GPIO Output | XCS |
| 10 | GP7 | GPIO Output | XRST |
| 21 | GP16 | GPIO Input | DREQ |
| 22 | GP17 | GPIO Output | XDCS |
| 40 | VBUS | 5V | 5V |
### microSD card
| Pico Pin # | Pin Name | Function | microSD connector | microSD SPI board |
----|----|----|----|----
| 4 | GP2 | SPI0_SCK | CLK (5) | CLK |
| 5 | GP3 | SPI0_TX | CMD (3) | MOSI |
| 6 | GP4 | SPI0_RX | DAT0 (7) | MISO |
| 7 | GP5 | SPI0_CSn | CD/DAT3 (2) | CS |
| 8 | GND | GND | VSS (6) | GND |
| 36 | 3V3(OUT) | 3.3V | VDD (4) | 3V3 |
#### Caution
* SPI0_TX and SPI0_RX needs to be pull-ed up with 10Kohm.
* Wire length between Pico and SD card is very sensitive. Short wiring as possible is desired, otherwise errors such as Mount error, Preallocation error and Write fail will occur.
* SPI interface can be shared or serarated with VS1053
## How to build
* Build is confirmed only in TinyGo Docker environment with Windows WSL2 integration
* Before starting docker, clone repository to your local enviroment (by GitBash etc.)
```
> cd /d/somewhere/share
> git clone -b main https://github.com/elehobica/pico_tinygo_vs1053.git
```
* Docker
```
> wsl
(in WSL2 shell)
$ docker pull tinygo/tinygo:0.27.0
$ docker images
$ docker run -it -v /mnt/d/somewhere/share:/share tinygo/tinygo:0.27.0 /bin/bash
(in docker container)
# cd /share
(copy repository for docker native directory for best performance of WSL2, otherwise stay /share)
(# cp -r /share/pico_tinygo_vs1053 ~/ && cd ~ )
# cd pico_tinygo_vs1053
```
* Go Module Configuration
```
# go mod init github.com/elehobica/pico_tinygo_vs1053
# go mod tidy
```
* TinyGo Build
```
# tinygo build -target=pico --serial uart -o pico_tinygo_vs1053.uf2
(copy UF2 back to Windows local if working on docker native directory)
(# cp pico_tinygo_vs1053.uf2 /share/pico_tinygo_vs1053/ )
```
* Put UF2
Then, go back to Windows environment and put "pico_tinygo_vs1053.uf2" on RPI-RP2 drive
## Playback function
* put "track001.mp3" and "track002.mp3" on root directory of SD card
* no operability while playing "track001.mp3" because of blocking playback
* while playing "track002.mp3", following commands through Serial are available
| Key | Function |
----|----
| p | Pause / Play |
| +, = | Volume Up |
| - | Volume Down |
If SD card read error occurs (panic: runtime error, etc), try [pico_tinygo_fatfs_test](https://github.com/elehobica/pico_tinygo_fatfs_test) at first.