Folks,

I’ve been working on some firmware for the FCD Pro+ to work around the USB stack limitations of the Raspberry Pi.

The workaround reduces the bandwidth of the FCD to work within those conditions: there is one version for 48kHz bandwidth and the other for 96kHz.

The documentation for updating your firmware is here, and the firmware bootloader/upgrade program is here.

The firmware for 48kHz is here, 96kHz is here, and the original 192kHz firmware is here.

Take care when using this new firmware! Due to the way Windows works, it doesn’t fully re-enumerate the USB port when you re-insert your device, so you’ll find that your Windows software might get a little confused. In short, the way to resolve this is to shut down any programs using the FCD Pro+ first, uninstall the FUNcube sound device from the Device Manager control panel applet (run devmgmt.msc), unplug the FCD Pro+, re-insert it a few seconds later, and let it re-enumerate (may take a minute or so depending on your system). Once this is done you can restart your programs. Of course, if you have installed a restricted bandwidth version of the firmware, this will be restricted in Windows too. You can always install the original firmware using the same steps.

Why are there two versions? It’s because there are two “features” of the Raspberry Pi stack. Warning: this will get a bit nerdy.

The first problem is that the USB stack has a problem with USB full speed isochronous streams of more than about 750 bytes per 1ms frame. The USB specification allows for up to 1023 bytes per frame, and the FCD Pro+, with the default firmware, uses 768 bytes per frame. So while the FCD Pro+ is within the USB specification, it’s just beyond the Pi’s capabilities.

The second feature of the Pi’s USB stack is that there is only a single transaction translator (TT) for USB full speed devices (such as the FCD), so all full speed devices have to share this TT. Having a single TT unfortunately is not a unique scenario on USB 2.0 hosts and hubs, we sometimes see it on PCs too. Obscurely, this can be circumvented by putting the FCD Pro+ on an external USB 2.0 hub, because the hub will have its own TT.

There’s a whole treatise about this here.

So, in short, the 48kHz version is designed to work on the Pi without an external USB 2.0 hub, allowing for the USB full speed devices to share the single available TT. The 96kHz version _might_ work on your Pi, depending on what other full speed devices are connected, and should work if the FCD Pro+ is placed on an external USB 2.0 hub, either on its own as the only full speed device on that hub if the hub only has one TT, or with other full speed devices if the hub is a multi TT hub.

Many thanks, Howard