How to setup Roon bridge to perform Native DSD?

I’m using RoonBridge on 2 SBC: RPI3 and/or NanoPI, with DietPI (both of them with a 4.x.x Linux kernel, 4.10 or 4.13, don’t remember well).
The SBC are plugged in USB to a XMOS 208 USB to I2S (and coax SPDIF) board. More exactly a Armature Hecate board which is very similar to the Xsinger F1, if I’m not wrong.

I red that, the OS/Alsa has to be tuned may be but what is struggling me is that in the Roon settings for the device, the only choices for the DSD Strategy are PCM, DoP and DCs initialisation.
There’s no choice for “Native DSD” which is normaly supporter by the XMOS XCore 208 up to DSD265.

From now in DoP, without downsampling, I’m only able to listen DSD64, DSD128, and the DSD256 is indicated as playing by Roon (with DoP) but I get no sound for this last.
I’m pretty sure if RoonBridge would send native DSD instead of DoP to the XMOS 208 Hecate board, it would work.
Is there something to tune that will make the option “Native DSD” visible in the menu in Roon’s “Device setup” configuration ?

I think you may have to get this IsolatorPi HAT with native DSD option board:

You can order these here:

Steve N.

Steve as mentioned, I’ve already an isolator, the Armature Hecate board is exactly an isolator + signal reclocker with 2 very good oscillators and an XMOS XCore208 to manage the USB input.
I didn’t want to put the link to avoid any advertising but it seems this board is a bit unknown.
I’m really impressed by the sound quality compared to the direct USB output of the PI. The improvement is obvious. I connected the I2S output to an HDMI LVDS module and go then in HDMI LVDS to my DAC (PSAudio).
I got some documentation, and the fact is the Armature Hecate board can output an I2S native DSD256 signal only if it is feed (in USB) with a native DSD256 signal.
The Hecate scheme is as follow, USB Input => I2S Output:
DSD64 DoP or Native => DSD64 Native
DSD128 DoP or Native => DSD128 Native
DSD256 Native only => DSD256 Native
I guess, the USB bandwidth do not permit to manage correctly a DSD256 data flow in DoP. DoP wrap the native DSD signal with a lot of overhead.

So the only remaining question is “How to tell to RoonBridge to deliver to the Hecate board a native DSD (not DoP) data flow to the Hecate interface ?

The board I mention above has another board added that does the native DSD.

Steve N.

Not much Roon can do here: for native DSD with Linux, your kernel must have the correct patches applied for your device. Roon Bridge talks to your device via ALSA – without a device specific patch you’re limited to DoP, since that’s what ALSA reports.

Check the project page here for more info on currently supported devices (I see the Singxer F-1 is present):

@Steve, very nice project, well built and well documented. However, the transformation path would be less straightforward if I want to keep my Hecate board which already perform a DoP to I2S conversion. I do not see any advantage to place an I2S converter before the Hecate input…
The best would be to find a way to have Roon producing a native DSD format through the USB output. I’ll look at the Rene’s link, may be I’ll find the solution with an Alsa update and/or a specific patch…

I have many RPi/DietPi/Roon Bridge endpoints. They all do up to native DSD256. No HATS involved; output thru RPi USB port. They’d support DSD512, but my core machine can’t translate that.

As @RBM says, the problem would seem not to be the RPi endpoints, but the Linux OS you are running the core on.

@xxx Do you have any clue on how to setup the DietPI OS to make it native DSD256 compliant ?
I red the above link (lintweaker/xmos project) but it is built around Fedora and I did not see how to re-build the solution on a DietPI for example. Besides that, DietPI brings a more recent version of Alsa than the one mentionned by lintweaker, the same case with the linux Kernel, DietPI has now a 4.12 kernel version which is in advance compared to the patched version in linkweaker setup. It’s confusing for me.
I’d like to use my NanoPI Neo already installed with the latest version of DietPI (and Kernel 4.12, …) but I’ve also a RPI3 in case if necessary.

IIRC, I didn’t do anything other than specify that audio output should be through the USB port. IIRC, DIetPi willl load the correct drivers, but if it doesn’t there is an option to use ALSA driver. I never specified it, tho. I don’t believe it’s DietPi. It’s the Linux OS you are running the Roon core on.

If you only run Roon on the Linux machine, then discard the Linux fork you are using now and use ROCK.

Yes my Roon server is installed on an Ubuntu machine on the network, so separately from the end pint SBC with RoonBridge/DietPI. So It sounds to me surprising that the Roon server inspects its local capabilities to decides whether or not to send data on a specific format to the endpoint ^^
Does the Roon team confirm such behaviour ??

I think that there are some Linux forks that can’t run Roon successfully, Ubuntu should be alright.

The problem might be that DIetPi doesn’t have the patch necessary to communicate with the Hecate board.

It really doesn’t matter. DoP is just a way to transmit data. Native DSD or DoP, the end result is the same, sonically.

Actually, it matters while DSD256 is only supported by the Hecate board when transmitted in native DSD on its USB input, no DoP. The workaround for me is to downsample the DSD256 into DSD128 at the RoonServer level.
Another fact, I red on PSAudio forum, is that DoP can saturate the USB2 transmission capabilities. I don’t remember if this occurs at 256 or 512. In the other side, the native DSD format is not a problem on USB at least up to 512.

I stand corrected.

I am going to butt out now as I seem to just be confusing matters.

As to whether DietPi has the correct driver for Hecate, you can ask @Dan_Knight to throw his two cents in.

Apologies for the confusion.:sunglasses:

@xxx No worries Slim, thanks for your time trying to help on this not obvious problem :wink:

Some news after another try with a different OS on the RoonBridge end.
I’ve installed the latest version of Roopiee on a RPI3 connected in USB to the Armature Hecate Board (XMOS U208). I use the I2S output of the Hecate board connected to an LVDS module, then to my PSAudio DAC (DSD256 enabled on its I2S/LVDS input only in DSD Native, not DoP).

Now I can stream in Native format, since the Device Setup configuration presents me the Native option for the DSD Strategy. I can stream in Native DSD from end to end, up to DSD128. Good Point! :grinning:
But it continue to not work (no sound at all) un native DSD 256. The DAC seems to not recognize the signal while Roon controller displays the track playing normally. :sob:

You may have a bus timing issue. The timing for the PSAudio DAC is a bit critical. I have designed interfaces for the HDMI I2S for the PSAudio. Interfaces that work on other devices sometimes don’t work on the PSAudio because of timing constraints. PSAudio engineer helped me with the interface by providing timing specs.

Steve N.
Empirical Audio

@Steve_Nugent Thanks for the information Steve, did you tuned these timing parameters in your HDMI I2S interface or somewhere in the Alsa driver ? In the first case I don’t believe to find out any configuration/adjustement possible in Armature Hecacate board…

I’d like to apologize, it seems the problem is coming from my DAC (from me actually) which is not supporting DSD over DSD128, so a missunderstanding from mine, sorry.

The fact is, Ropieee (vers 76) is recognized by Roon Server as an end point supporting Native DSD with the Armature Hecate interface (USB to I2S or SPDIF).
Dietpi works well in DoP but I’m not able to achieve Native DSD at all, with the same hardware than the one running Ropieee.


This sounds as if DietPi may not yet have the necessary ALSA table entry for the Armature Hecate to do direct DSD. If @Dan_Knight is about, he may be able to pick it up from the Ropieee code.

It seems a very clumsy mechanism for each piece of gear to need a separate table entry, but that is where Linux is at.

1 Like