Volumio 2 RPI3 & generic I2S setting with Audiogd dac NOK

Hello,
I used to have a RPI 2 B+ connected to my AudioGD dac NFB28 through I2S and this worked perfectly with Volumio 1.51.
I decided to move to RPI 3 to benefits of performances and embeded Wifi and migrate to Volumio 2.0

I installed Volumio 2.0 from scratch, NAS settings etc … setup completed and sounds can be listened from Audio jack but impossible to set the connection to my DAC through I2S link working.

Electrical link between DAC and RPI through I2S uses RPI GPIO 18 to 21 (Data, BCLK, LRCK, GND), cable re-use from my earlier RPI2 setup, I have no doubts it is ok since RPI2 and RPI3 have same connector and pin out.

From Volumio 2.0 MPD setting, I selected I2S DAC = ON and DAC = Generic I2S DAC than after reboot: MPD music play gives an horrible distorded sound on Right channel only.

I remenber having experienced same troubles when setting my Volumio 1.51. After look at electrical signals, this was due to I2S signals generated by RPI under 16bits frames while AudioGD uses ES9018 DAC which expects 32bits frames.

I’m beginner in Linux but with luck found suggestion in the web and I succeded to workround by applying below /etc/modules setting and at the end MPD recognized the DAC as snd_rpi_rpi_dac.

                    #snd-bcm2835
                    snd_soc_core
                    snd_soc_bcm2708_i2s
                    bcm2708_dmaengine
                    snd_soc_pcm1794a
                    snd_soc_rpi_dac

I tried to apply same workaround on RPI3 with Volumio 2.0, but I got no longer I2S signals generated and not even noise while playing record on MPD.

I must admit, my knowledge in Raspbian administration is NULL and after few forum reserach I understood admpinistration of the device in Volumio 2.0 has changed (Device tree … overlay …)

Would someone have some idea on how to apply setting to get I2S output streams GENERIC under 32bit frames ? Thanks in advance for your support.

PS: If is not clear for you what I mean by 16bits and 32bits frame, I can supply addtionnal details.

All,
This is just to confirm I also tried to setup I2S Hifiberry DAC instead of generic I2S in the setting and I have the same issue, I’m still stuck

Any 16 bits source generates horible noise (this is because ES9018 expects Frames of 32 bits)
Any 24 bits or webradio source is played perfectly

Would someone know how to setup the RPI to force the FORMAT of I2S frames to be 32 bits long left justified as expected by ES9018 DAC ?

Here below is my actual aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: sndrpihifiberry [snd_rpi_hifiberry_dac], device 0: HifiBerry DAC HiFi pcm5102a-hifi-0 []
Subdevices: 0/1
Subdevice #0: subdevice #0

And here is my boot/config.txt
initramfs volumio.initrd
gpu_mem=16
force_turbo=1
max_usb_current=1
disable_splash=1
dtparam=audio=on
dtparam=i2c_arm=on
dtoverlay=hifiberry-dac

To solve this we should add resampling to volumio, in order to convert to 24bit (no quality loss).
A bit of patience and I’ll implement it!!

Furthermore, we could try compile this :
github.com/luoyi/Rpi-ES9018K2M-DAC

Thanks for your feedback.
Beginner in Rpi, I don’t have autonomy to recompile a volumio distribution by myself, but I’m ready to learn if you accept to drive me through.

Otherwise I will be very please by waiting for a “with resampling” volumio update.

Would you have any idea how long this could take you to release something ? just to manage my patience :wink:

Hi, I currently have an Audio-GD DAC as well (NFB11 using an ESS9018 chip as well) without an I2S interface on it. But my supplier confirmed I can ‘upgrade’ my DAC to have a direct I2S interface as well (http://www.audio-gd.com/Pro/diy/I2Skits/I2SEN.htm) by replacing the USB interface. As the RPi is very bad in providing any good USB signal, I will give that a try.

What I am still wondering about is how to easily connect the RPi I2S to the DAC. Do you have a schematic on how you connected it? You use 4 pins but the DAC I2S has 5 pins. I guess that you do not use the MCLK on the DAC? Or is that grounded?

And what about the jitter on the RPi’s I2S signal? Is there a benefit in providing the DAC with a better I2S signal by placing something like the Kali or maybe a HFB Digi+ Pro in between?

Thx for the info.

I would say that (if your DAC is a slave DAC) for such level you WANT to have a Kali in the middle.

Hi PatrickB,

I haven’t used any KALI adapter between RPI and the Audio GD Dac, What do you think are KALI benefits are ?

I may be wrong but the I2S bus is much less sensitive to jitter effect than the USB bus, (Data shift is made on BitCLK rising edge while DATA is updated on BitCLK falling edge so half a period of Bit Clock margin) and my RPI is supplied through a floating linear supply to avoid ground loops.

I however reduced to minimum length (0.3m) the RPI connector to I2S DAC input using twisted pair cables for each of the below link.

RPI GPIO 21 J8-40 to I2S DATA on the DAC RJ45
RPI Ground J8-39 to I2S GND on the DAC RJ45
RPI GPIO 19 J8-35 to I2S LRCK on the DAC RJ45
RPI Ground J8-34 to I2S GND on the DAC RJ45
RPI GPIO 18 J8-12 to I2S BCLK on the DAC RJ45
RPI Ground J8-14 to I2S GND on the DAC RJ45
MCLK DAC RJ45 to GND DAC RJ45

I cannot remember what are SIGNAL name and Pin number allocation on DAC RJ45 end, (was given to me by Audio GD) If this is missing to you, I’ll try to find it back or do reverse enginering of the cable I made more than a year ago.

One more last Hint for you. On NFB28 there is a 3 pin connector DSD-CTS. To get the I2S Input working, it is mandatory to have a Loop connector pluged in DSD-CTS socket. This loop connector was supplied to me with the DAC with no details. I lost a lot of time trying to make working the I2S link before pluggin this loop-connector.

Hope this helps