I would like to report a reproducible issue that I have encountered while testing a VS1053B audio decoder on a FEZ Feather (two FEZ Feather with identical behaviour) Performance running TinyCLR.
Environment
- FEZ Feather Performance
- TinyCLR Firmware 3.0.2.1000
- VS1053B audio decoder
- Custom TinyCLR driver
- USB flash drive used as media source
Summary
The same VS1053B device behaves differently depending on which SPI controller is used on the FEZ Feather Performance:
- SPI6: Communication and audio playback operate correctly.
- SPI4: Communication errors appear at the VS1053 register level before audio playback even begins.
The identical VS1053B module was previously tested on a FEZ Duino and operates correctly on multiple SPI controllers there.
Test Setup
The test application allows switching between SPI controllers via compile-time constants:
C#
#define FEATHER
#define FEATHER_SPI4
or
C#
#define FEATHER
#define FEATHER_SPI6
No other code changes are required.
Diagnostics
The driver includes:
- Extensive debug logging via
Debug.WriteLineIf - A VS1053 health-check subsystem
- Register verification tests
- Patch loading diagnostics
- Format-specific playback tests
The abnormal behavior appears before decoder initialization completes and before any actual audio streaming takes place. This suggests that the issue may be related to SPI4 communication itself rather than media decoding, file I/O, or streaming logic.
Additional Notes
Initially, debugging was complicated by several faulty VS1053B modules from various suppliers. Those issues have since been isolated.
The observations described in this report are based entirely on two fully functional VS1053B module that:
- Operates correctly on a FEZ Duino.
- Operates correctly on SPI6 of the FEZ Feather Performance.
- Exhibits communication failures when connected to SPI4 on the FEZ Feather Performance.
Because the hardware, firmware, driver, and media files remain unchanged except for the selected SPI controller, I suspect there may be a difference in SPI4 behavior that warrants investigation.
Reproduction Project
The complete driver project is publicly available:
GitHub Repository:
Implicate-X/ImplicateX.TinyCLR.Drivers.Decoder.Vs1053
The repository includes an App directory containing a TinyCLR console application specifically intended for integration testing and hardware validation. Switching between SPI4 and SPI6 can be done through compile-time constants, making the behavior easy to reproduce.
Please let me know if additional logs, diagnostics output, or Logic Analyzer captures would be useful.