Hey everyone,
I have an RP2040 design that uses tinyusb in device mode with FreeRTOS and it works great. I'm now trying to do the same with an RP2350 and the best way I can describe the issue is that USB is "slow" -- after the board is booted it takes a good 15 seconds before the rpi cdc device shows up, and printf() works but it takes a solid half second to spit out 5 lines of text instead of the near-instantaneous output that I get with the same code and the RP2040.
I am using the Cortex M33s, not the RISC-V on the RP2350, and am using the latest FreeRTOS (and submodules which are needed for RP2350 support) from https://github.com/raspberrypi/FreeRTOS-Kernel.git.
I've tried both SMP and non-SMP (by adjusting configNUMBER_OF_CORES in FreeRTOSConfig.h), I've tried setting the USB task to run on the second core, the result is the same in all cases.
If I don't use FreeRTOS and instead just have a superloop calling tud_loop() every 1ms it operates exactly as I would expect (and the same as the code running on RP2040, with or without FreeRTOS). I'm suspecting that there is something not quite kosher with the RP2350 port but I can't see what it is and there's a lot of old/conflicting information out there.
Things I have checked:
* Making sure I'm running the cores at a multiple of 12MHz (120MHz both for RP2040 and RP2350)
* ensuring configSYSTICK_CLOCK_HZ is correct (120000000) - my led blinker blinks at the correct rate so I'm certain this is fine
* playing with one or two cores, adjusting which core the USB code is running on
I feel my code is correct since it runs correctly on the RP2040. I don't see anything obvious in the tinyusb documentation. I've pared the code down to two threads, one for USB and one for my main loop, and tried playing with thread priorities with no change in output.
Does anyone have FreeRTOS + tinyusb working on an RP2350?
I have an RP2040 design that uses tinyusb in device mode with FreeRTOS and it works great. I'm now trying to do the same with an RP2350 and the best way I can describe the issue is that USB is "slow" -- after the board is booted it takes a good 15 seconds before the rpi cdc device shows up, and printf() works but it takes a solid half second to spit out 5 lines of text instead of the near-instantaneous output that I get with the same code and the RP2040.
I am using the Cortex M33s, not the RISC-V on the RP2350, and am using the latest FreeRTOS (and submodules which are needed for RP2350 support) from https://github.com/raspberrypi/FreeRTOS-Kernel.git.
I've tried both SMP and non-SMP (by adjusting configNUMBER_OF_CORES in FreeRTOSConfig.h), I've tried setting the USB task to run on the second core, the result is the same in all cases.
If I don't use FreeRTOS and instead just have a superloop calling tud_loop() every 1ms it operates exactly as I would expect (and the same as the code running on RP2040, with or without FreeRTOS). I'm suspecting that there is something not quite kosher with the RP2350 port but I can't see what it is and there's a lot of old/conflicting information out there.
Things I have checked:
* Making sure I'm running the cores at a multiple of 12MHz (120MHz both for RP2040 and RP2350)
* ensuring configSYSTICK_CLOCK_HZ is correct (120000000) - my led blinker blinks at the correct rate so I'm certain this is fine
* playing with one or two cores, adjusting which core the USB code is running on
I feel my code is correct since it runs correctly on the RP2040. I don't see anything obvious in the tinyusb documentation. I've pared the code down to two threads, one for USB and one for my main loop, and tried playing with thread priorities with no change in output.
Does anyone have FreeRTOS + tinyusb working on an RP2350?
Statistics: Posted by anotherandrew — Thu Jan 15, 2026 8:40 pm