I2S connection limitations


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.