I2S connection limitations

Hi,

I’m hoping to find out what the limitations of the I2S connection are:

  • Can native DSD be sent via I2S connection, or does Volumio always convert it to PCM (DoP)?
  • Can Volumio perform any kind of DAC configuration or management over the I2S interface? Or, is this achieved via other pins on the GPIO (e.g. IC2)?

I have a generic ES9038Q2M board connected to the RPi3B+ GPIO pins via the 3x I2S pins and Ground. It is not a HAT. I’m using Volumio v2.619.

The DAC only works if I use the “R-PI DAC” model in the Audio Output section of the settings. It works really well for PCM, playing 44.1/96/192KHz tracks without problem. However, Volumio seems to be converting DSD tracks to PCM.

How can I see and change the R-PI DAC profile (not just via the GUI)? I believe that it sends all data as 32bit packets, but where is this specified/configured?! The dacs.json file doesn’t control this.

In your configuration you cannot play DSD. You would need a special i2s driver, made on purpose for your DAC (ESS requires also a MCU to handle i2s communications, for various reasons). Also, volume and DAC configuration is done via I2C.
I tell you this because this is what we’ve made with Primo (ESS 9038Q2M connected via i2s to ASUS Tinkerboard S)

Thanks Michelangelo,

I would like to learn about the drivers, and the configuration and commands that can adjusted. Where do I start?!

How do I view the content of a driver?
Do the drivers simply configure the alsa settings?
Can the drivers allocate I2C GPIO pins and define the commands that can be sent to the DAC? (the DAC has an MCU and interface pins)

Any pointers would be much appreciated.

I’d like to follow up on this topic to understand better how Volumio works with pi audio hats for i2s and DSD out. I understand now that the easiest way to get DSD to an external DAC is thru USB.

Having read thru the threads that I can here and elsewhere, it appears that many ppl are trying to get some kind of audio hat, dac hat or transport hat to get DSD out. However, seeing some of the responses from the admins and developers here, it appears that it is not the case at all, as I have read several times that the limitation is in the GPIO.

So I guess my first question is, pardon my ignorance…Is that a limitation of the current Volumio implementation? I’ve also read that to use i2s thru HDMI for DSD will require a DDC…but elsewhere I’ve read that i2s audio isolation boards could work, but aren’t those for extract audio from a regular HDMI A/V signal?

Please point this newb to enlightenment.

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:

  1. Lack of proper kernel-level I²S DAC drivers that expose native DSD playback via ALSA.
  2. The use of generic overlays like hifiberry-dac, which only support PCM up to 32-bit.
  3. 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:

  1. The DAC supports native DSD over I²S (ES9038Q2M does).
  2. 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.
  3. 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.
  4. 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,

1 Like

So based on what you’re said, this is the on Pi HAT that works for DSD Native out thru i2s/LVDS, as it’s got a driver?

Hey @RedEyeNinja,

Without a datasheet, schematic, or detailed technical documentation for the specific HAT shown in your image, it is not possible to definitively determine its capabilities or limitations - particularly regarding native DSD playback, I²C control exposure, or how initialization (e.g., DSD mode switching) is handled.

The ES9038Q2M itself supports both PCM and DSD, including native DSD over I²S. However, actual support on any given board depends heavily on the implementation - especially:

  • Whether the DAC is configured to enter DSD mode via I²C or an onboard microcontroller.
  • Whether the I²S bus is exposed directly or passed through additional logic (e.g., format converters or MCUs).
  • Whether the board is using default or custom PLL, filter, or DPLL settings - often set via I²C or hardcoded logic.
  • Whether Volumio has an appropriate overlay or driver that fully exposes and initializes the hardware.

Unfortunately, many HATs on the market - particularly budget or clone variants - lack public documentation, making reverse engineering or compatibility evaluation a challenge. Visual inspection alone (e.g., from silkscreen, chip layout, or connector type) is not sufficient to determine the presence or absence of features such as native DSD capability or ALSA mixer exposure.

If further identification is needed, I recommend checking:

  • The exact product name and manufacturer (if available).
  • Whether the seller provides a schematic or register map.
  • Whether the board includes onboard EEPROM with HAT ID (for device-tree auto-selection).

Ultimately, without verifiable technical data, assumptions about the board’s function should be avoided.

Kind Regards,

1 Like

Specs off Ali:

DFRobot DAC Audio Decoder Board for Raspberry Pi 3B+/ 4B supports decoding of I2S and DSD digital audio signals output from the Raspberry Pi motherboard. This board also supports I2S/DSD/coaxial input, analog/coaxial/optical/I2S output, 384K/32Bit decoding function, and unique DSD clock de-jitter. The DAC audio decoder board can also decode external coaxial signals by setting the three buttons on the board. This decoder board is capable of independently turning ON or OFF the audio output signal of each interface through the button on the board. The DAC audio decoder board uses four professional chips and two groups of LDO to power analog and digital circuits separately. Solid capacitors with large capacity and tantalum capacitors are used for filtering and decoupling to ensure a stable and clean power supply and effectively improve the overall Signal to Noise Ratio (SNR).

FEATURES

Support I2S/DSD/coaxial input

Analog/coaxial/optical/I2S output

384K/32Bit decoding function

Unique DSD clock de-jitter

SPECIFICATIONS

Analog audio:

32K to 384K/32Bit RCA/headphone jack

20Hz to 20KHz frequency response bandwidth

2Vrms output level

120dB Signal to Noise Ratio (SNR)

Coaxial:

PCM 32K to 192K/24Bit and DOP DOP64

Optical Fiber:

PCM 32K to 192K/24Bit and DOP DOP64

I2S:

PCM 32K - 384K/32Bit, DOP DOP64/DOP128, and DSD DSD64/DSD128

Rated voltage:

5V (can be powered by the Raspberry Pi motherboard or from the DC socket on the DAC board)

300mA rated current

56mm x 65mm (2.20" x 2.56") board dimension

Support Raspberry Pi Model: Raspberry Pi 3B+/4B

Support players:

Volumio, Moode, piCorePlayer, and RuneAudi

Here’s another interesting one…also from Ali:

This coaxial output board is specially designed to be used with various digital turntables such as Philips 310 board, CDM3/4/9, CDM12, CDpro2, etc.
There are three main functions
The IIS signal is converted into a coaxial SPDIF signal, driven by 2 channels of DS8921, and then output to RCAVBNC/fiber/AES through a digital isolation transformer DA101C (can be upgraded to SC947-02LF), which supports MONO mode.
The IIS signal is driven through the LVDS chip and output to the HDMI-IIS interface (A/B mode can be set through the 10-bit dial switch), which can be compatible with most decoders currently connected with the HDMI-IS input interface. (The data format of the CDpro2lS interface, most decoders cannot be directly decoded at present)

At the same time, two clock signals are output, and there is a clock input port on the board. 10MHzOCXO or rubidium clock signal input can be upgraded to replace the standard VCXO crystal oscillator.

I understand this second one is meant for other devices, but it also appears that I can get an i2s signal in as well.

Hey @RedEyeNinja,

DFRobot DAC Board

The first device, identified through the AliExpress specifications, appears to be a DFRobot DAC Audio Decoder Board, intended for Raspberry Pi 3B+/4B, with broad input and output capabilities. Key points derived from the vendor’s listing:

  • Supported Inputs:

    • I²S
    • DSD
    • Coaxial (SPDIF)
  • Supported Outputs:

    • Analog (RCA/headphone)
    • Coaxial (SPDIF)
    • Optical (TOSLINK)
    • I²S
  • Audio Capabilities:

    • PCM 32kHz–384kHz, 32-bit
    • DSD64 and DSD128 supported (via DOP and native DSD for I²S)
  • Powering Options:

    • 5V from Raspberry Pi or external DC socket
    • 300mA rated current
  • Claimed Features:

    • “DSD clock de-jitter” (marketing term, likely minor PLL or FIFO buffering)

Technical Evaluation

While the marketing claims are promising, a few technical clarifications must be made:

  • DSD Native vs DoP:

    • The spec sheet mentions DSD64 and DSD128 over I²S and DoP modes for SPDIF/Optical.
    • Native DSD over I²S may be available, but this requires correct format negotiation and initialization, typically through ALSA drivers.
    • Volumio would need to detect and configure the board appropriately - otherwise, DSD may fallback to DoP (DSD encapsulated in PCM frames) or PCM conversion.
  • Board-Level Controls:

    • Buttons are provided for manually switching input/output sources.
    • Critical: Manual control implies no dynamic auto-switching by Volumio at runtime unless additional integration (driver or user-space service) is written.
  • Support in Volumio:

    • While the board lists “Volumio support”, this almost certainly refers to basic PCM playback using generic rpi-dac or hifiberry-dac overlays.
    • No evidence of an official Volumio driver or DAC-specific overlay is provided.
  • Conclusion:
    Without a publicly available datasheet, schematic, or confirmation of ALSA-level support for DSD-native output, it remains speculative whether true native DSD playback over I²S can be achieved automatically through Volumio. Expect default operation to be PCM or DoP unless customized integration work is performed.


I²S-to-Coaxial/HDMI Adapter

The second device is not a DAC but a signal conversion board, designed for:

  • Taking I²S input from CD transport mechanisms (e.g., CDM3, CDM4, CDpro2).

  • Outputting:

    • SPDIF (via transformer-isolated coaxial, optical fiber, AES)
    • HDMI-I²S (differential I²S over HDMI cabling)
  • Also includes:

    • Clock input (10MHz OCXO/Rubidium support).
    • Clock output (for syncing external devices).

Technical Evaluation

  • Purpose:
    This board is clearly intended for professional or DIY audiophile applications where raw I²S needs to be translated into SPDIF or HDMI-I²S for compatibility with external DACs.

  • Compatibility with Raspberry Pi / Volumio:

    • Technically, the Raspberry Pi’s native I²S output could feed this board.
    • However, Volumio would still think it is talking to a standard I²S DAC - it would have no awareness that the signal is being converted to SPDIF or HDMI-I²S externally.
    • Caveats:
      • Timing and clocking must be carefully managed. Pi’s I²S is not a perfect master clock source - without proper clock discipline, jitter could degrade SPDIF output quality.
      • No guarantee that all sampling rates would propagate cleanly without buffer or PLL errors.
  • Conclusion:
    It is possible to use this board with a Raspberry Pi/Volumio system if the output format is acceptable and external DACs are designed to accept HDMI-I²S or SPDIF at the expected sampling rates.
    However, it is not a DAC - it only repackages the I²S signals for transport. Actual digital-to-analog conversion would need a downstream device.

Consideration

Given the above:

  • For the first DFRobot DAC board, treat it as a PCM/DoP capable DAC by default. Without official kernel driver support or DAC-specific overlay, assume DSD native functionality is possible but not guaranteed under Volumio.

  • For the second signal adapter board, understand it is not a DAC. It can be used to bridge an I²S output to SPDIF or HDMI-I²S inputs on other DACs, but Volumio will not manage it as an intelligent endpoint.

  • Technical Note:

    • I²S interfaces are extremely implementation-specific. Without schematics, firmware descriptions, or verified driver support, making categorical statements about device behavior is not appropriate.
    • Assume compatibility only after careful test validation, not on the basis of general advertising claims.

Further context

Building on the earlier points, and referring specifically to the boards you posted:

The DFRobot DAC board you linked advertises support for I²S, DSD, and multiple output formats, but the presence of these features in a marketing description does not guarantee they will be automatically or fully usable under Volumio. The practical reality depends on several technical aspects:

  1. Native DSD Mode Enablement
    Even though the ES9038Q2M chip supports native DSD, actual activation typically requires explicit configuration, often through I²C communication or preprogrammed firmware. The DFRobot board mentions manual button control for input selection, suggesting that there is no automatic handshake or dynamic switching handled by the Pi or Volumio. Therefore, even if DSD signals are accepted via I²S, whether the DAC actually switches into native DSD processing mode is uncertain without testing or vendor confirmation.

  2. Use of Generic Device Tree Overlays
    Volumio’s default behavior for Raspberry Pi HATs uses overlays such as hifiberry-dac or similar. These overlays enable basic I²S PCM output but do not declare DSD-native format capabilities to the kernel. Without a custom overlay that specifies DSD formats like DSD_U8 or DSD_RAW, Volumio will treat the board as a standard PCM-only DAC. As a result, DSD files would either be transcoded to PCM or transmitted using DoP (DSD encapsulated in PCM frames), not native DSD.

  3. Button-Controlled Operation
    The DFRobot board specifies that outputs can be independently turned on or off via hardware buttons. Volumio does not have any direct method to control these buttons electronically. This introduces a potential risk where output selection or input mode may not match Volumio’s expectations during playback unless manually set correctly beforehand.

  4. Power and Clock Discipline
    The board’s use of separate LDO regulators for analog and digital domains, and marketing claims such as “DSD clock de-jitter,” indicate attention to electrical quality. However, the system-level quality of DSD or high-rate PCM playback still depends on the Raspberry Pi’s ability to provide low-jitter I²S clocking. Raspberry Pi is not a reference-grade clock source, so external signal conditioning may not fully compensate for source-side jitter issues at high sample rates.

  5. Application of the I²S to SPDIF/HDMI Adapter
    The second board you posted is not an audio DAC. It repackages I²S into other transmission formats for use with external DACs that expect SPDIF or HDMI-I²S. Using such a board with Volumio is technically feasible, but it introduces further variables. For example, transmission over HDMI-I²S or SPDIF typically limits DSD handling to DoP64 unless the receiving DAC specifically supports native DSD via these inputs.

In practical terms for both boards:

  • Expect PCM playback at up to 384kHz/32bit as the baseline.
  • Do not assume native DSD functionality is enabled or usable without manual confirmation.
  • Manual switching of inputs and outputs may be required for stable operation.
  • Full automation or direct Volumio integration cannot be presumed.

Summary relative to your posted material:
Even with the additional vendor specs, without a full technical sheet or kernel-level driver support, it remains technically uncertain whether the DFRobot board will support true native DSD playback in Volumio. The second board does not affect Volumio’s DAC handling, as it is purely a format converter.

Testing and validation remain the only reliable methods to confirm the exact behavior.


Call for action:

If anyone decides to test this DFRobot DAC board or similar devices with Volumio, particularly regarding native DSD playback over I²S, it would be highly valuable for the community if you could share your findings. Practical confirmation of whether DSD native works, whether manual switching is required during playback, and how stable the board behaves with different sample rates would help others considering similar setups.

At the moment, I am fully engaged with Volumio’s Debian Bookworm Alpha release tasks, so I am unable to personally conduct additional hardware validation outside the current scope. However, I will be following any reports closely, and I encourage anyone who experiments with these boards to document their results for the benefit of the broader Volumio community.

Kind Regards,

1 Like