I²S and DSD Support in Volumio 3
Native DSD over I²S: Not supported without a custom driver
In Volumio 3, native DSD over I²S remains unsupported by default. This is not due to a hardware limitation of the GPIO/I²S bus itself, but rather:
- Lack of proper kernel-level I²S DAC drivers that expose native DSD playback via ALSA.
- The use of generic overlays like
hifiberry-dac
, which only support PCM up to 32-bit.
- Absence of MCU-driven DAC initialization logic, which is often required to switch the ESS DAC into native DSD mode.
By default, Volumio 3 uses DoP (DSD over PCM) or converts DSD to PCM on the fly when playing through I²S. Native DSD playback typically requires either:
- A USB DAC with UAC2 and DSD descriptors.
- A DAC board with a supported I²S driver that exposes
DSD_UXX_BE
or DSD_RAW
in aplay -Dhw:X,X -v
.
I²S is not a control interface
No DAC configuration is possible over I²S
I²S is a unidirectional audio data bus. It does not support:
- Volume control
- Filter selection
- Input switching
- Register configuration
All of the above are handled via:
- I²C (most common)
- SPI (in some designs)
- Or an onboard MCU that listens for these commands and programs the DAC accordingly.
Volumio 3 does not natively control DACs over I²C unless:
- A plugin exists for that DAC
- You implement a custom ALSA control layer, or userland I²C command handler
If your ES9038Q2M board includes a microcontroller (e.g., STM32 or PIC) that is pre-configured to handle DSD/PCM switching and filter control, then it’s possible to achieve limited functionality using just I²S, but Volumio will have no visibility or control over it.
Understanding Volumio 3’s Audio Output and Driver Model
“R-PI DAC” overlay
When you select “R-PI DAC” in the GUI, Volumio applies the hifiberry-dac
device tree overlay:
dtoverlay=hifiberry-dac
This overlay:
- Enables the I²S peripheral
- Registers a simple soundcard interface (no mixer)
- Supports PCM up to 32-bit, 192kHz
- Does not support native DSD or expose advanced ALSA controls
There is no DSD capability in the ALSA hw_params of this device:
cat /proc/asound/card0/pcm0p/sub0/hw_params
Only PCM formats will be listed.
Enabling Native DSD via I²S in Volumio 3
This is possible only if:
- The DAC supports native DSD over I²S (ES9038Q2M does).
- The DAC board either:
- Has an MCU to switch modes based on signal type, or
- Is controlled by I²C/SPI and has a compatible Volumio plugin or driver.
- You write a custom device tree overlay that:
- Registers a soundcard with DSD formats exposed via ALSA.
- Optionally configures I²C GPIO pins for control.
- The kernel ALSA subsystem advertises
DSD_U16_LE
, DSD_U32_BE
, or DSD_RAW
as valid formats.
In such a case, a modified or entirely new overlay might include:
sound-dai = <&i2s>;
format = "dsd";
bitclock-master;
frame-master;
...
And a compatible codec driver that registers these formats.
Tools and Validation Methods
Validate current I²S output capabilities
aplay -l
aplay -Dhw:0 -v <path_to_pcm_file>
cat /proc/asound/card0/pcm0p/sub0/hw_params
If DSD_UXX_XX
is not listed in FORMAT:
, the device does not support native DSD over I²S.
Dump audio interfaces and format negotiation
cat /proc/asound/cards
cat /proc/asound/devices
Check dmesg
for overlay or driver load messages:
dmesg | grep -i snd
Summary of Limitations in Volumio 3 for I²S and DSD
Capability |
Volumio 3 + RPi I²S |
PCM playback over I²S |
Yes |
Native DSD over I²S |
No (needs driver) |
DoP over I²S |
Sometimes possible |
DAC configuration via I²S |
Not possible |
DAC config via I²C |
Possible if supported manually |
Volume control via I²S |
No |
Volume control via I²C |
Only with support |
Kind Regards,