RP2350 PIO USB + FreeRTOS 的几个踩坑记录

/ 0评 / 0

如果要用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的倍数,超频还非常不稳定.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注