FUNcube Dongle Pro+ and Raspberry Pi


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

This entry was posted in Uncategorized. Bookmark the permalink.

7 Responses to FUNcube Dongle Pro+ and Raspberry Pi

  1. Hi Howard,
    This is fantastic! Is there any chance you could also provide 48kHz firmware for the
    original FCD Pro? Our project uses several hundred FCDs, mostly Pro+, for wildlife
    telemetry, and it would be very helpful to have them all sampling at 48 kHz.

    Thanks very much,

    John B.

    • admin says:

      Hello John

      The original FCD is from quite a time ago. I did originally code the firmware up for both 48kHz and 96kHz, but that confused things in Windows, so I felt that leaving it set at 96kHz was the best compromise, and if you need a lower sampling rate you can do that in software. Since then, of course, many people have been using FCDs in Linux-based resource limited devices. So I did provide versions of firmware options for the FCD+ to address this, put not the original FCD.

      Many thanks, Howard

  2. Chuck Ritola says:

    A 192khz 8-bit mode would be appreciated.

    • admin says:

      Hello Chuck.

      Regrettably the only versions I coded up into the firmware were 48kHz (16 or 32 bit), 96kHz (16 or 32 bit) and 192kHz (16 bit only).

      I fear that at 192kHz sample rate the dynamic range will be compromised significantly for practical use.

      Many thanks, Howard

  3. So do you leave the ADC running at 192kHz and downsample in software with software low pass filtering or are you able to adjust the 200kHz LPF when you adjust the sampling rate?

  4. admin says:

    Hello Brian,

    The ADC runs at 192kHz, and you downsample in software.

    Many thanks, Howard