When you are trying to get a basic radio receiver to work on a microchip, the first hurdle is always getting the raw data moving reliably. Most beginners try to port a library meant for a full computer, but those libraries assume huge buffers and a stable operating system. That just fails when you run it on bare metal. The real trick is not writing the driver yourself, unless you are bored. You need to understand the USB Host stack intimately. For an SDR application, you are likely dealing with massive blocks of I quaternion data that are constantly streaming in. If your host driver is blocking or if you are polling too slowly, you will imediately start dropping samples.
I learned the hard way that you need asynchronous processing. Instead of a simple loop that reads data, set up an interrupt-driven mechanism that signals the DSP code immediately when a complete packet of samples is ready. This allows the high-speed data transfer to happen without bogging down the main application logic. Getting the timing right on those DMA transfers is where 90 percent of the frustration lies.