如果要用PIO实现USB,这是一个非常有趣的想法,当然USB协议足够复杂,所以我也是用开源的项目.
项目地址:https://github.com/sekigon-gonnoc/Pico-PIO-USB
但是如果不用RTOS,有些功能并不好实现,但是用RTOS,却会打断PIO的操作,所以我们不能用SMP,应用AMP.
在FreeRTOSConfig.h中设置成非多核.

然后第一个核心跑FreeRTOS,第二个核心专门跑PIO.
void core1_main() {
pio_usb_configuration_t pio_cfg = PIO_USB_DEFAULT_CONFIG;
tuh_configure(1, TUH_CFGID_RPI_PIO_USB_CONFIGURATION, &pio_cfg);
tuh_init(1);
while (true) {
tuh_task();
}
}
void app_main(__unused void *params) {
while(true) {
vTaskDelay(1000);
}
}
int main(void) {
set_sys_clock_khz(120000, true);
multicore_reset_core1();
multicore_launch_core1(core1_main);
xTaskCreate(app_main, "MainThread", (1 * 1024), NULL, tskIDLE_PRIORITY , NULL);
vTaskStartScheduler();
while (true) {
}
}
RP2350的IO比较多,有大封装的情况下,不可以使用GPIO32以上的引脚.
RP2350 Datasheet 11.1.1


PIO必须确保主频在12MHz倍数(这样可以运行在USB LS模式),如果要在FS模式,就得在96MHz的倍数,超频还非常不稳定.