RT-Thread论坛
直播中

张莉

8年用户 1339经验值
私信 关注
[问答]

Vision Board的USB是如何配置的?

查看OpenMv示例工程时,发现文件中有USB的相关配置,打开FSP查看USB是如何配置的,但在FSP中没有找到相关设置,请问这个USB的配置是如何生成的???




回帖(1)

陈霞

2025-9-19 17:41:33

在Renesas RA系列微控制器(如Vision Board使用的RA6M5)中,USB的配置通常涉及FSP配置器生成底层驱动代码用户工程中的USB协议栈代码两部分。以下是具体原因和配置流程:




为什么在FSP中看不到USB配置?




  1. FSP的USB模块分工



    • FSP主要处理硬件抽象层(HAL)配置(如时钟、引脚复用、中断)。

    • USB的协议栈(如CDC/ACM虚拟串口)需要用户通过代码实现,或依赖额外的中间件(如USBX、TinyUSB)。




  2. OpenMV示例工程的特殊性



    • OpenMV通常使用自定义USB协议栈(非FSP自带),例如修改过的TinyUSB或专用库。

    • 这些代码直接集成在工程中(如usb_*.c/h文件),因此FSP仅配置底层硬件。






USB配置生成步骤


1. FSP硬件层配置



  • 启用USB外设

    • 在FSP Configurator的 "Stacks" 选项卡添加USB模块(如USB Peripheral (r_usb_basic))。

    • 设置USB ModePeripheral(设备模式)。


  • 时钟配置

    • "Clocks" 选项卡确保USB时钟源(通常为PLL)输出 48MHz


  • 引脚复用

    • "Pins" 选项卡分配USB_VBUSUSB_OVERCURUSB_D-USB_D+引脚。


  • 中断配置

    • "Interrupts" 中启用USB中断(如USBI0)。



2. 用户工程中的协议栈代码



  • USB协议栈通常位于以下位置:

    • src/usb/descriptors.c:定义设备描述符、配置描述符等。

    • src/usb/usb_init.c:初始化USB核心、注册回调函数。

    • src/usb/usb_cdc_acm.c:实现CDC/ACM类(虚拟串口)。



  • 关键初始化流程(示例):


     void usb_init(void) {
         // 初始化FSP生成的USB驱动
         R_USB_Open(&g_usb_cfg, &usb_ctrl);

         // 注册回调:连接事件、端点数据传输等
         R_USB_EventSet(&usb_ctrl, USB_STATUS_CONFIGURED, usb_configured_callback);

         // 配置端点(CDC需BULK IN/OUT + INTERRUPT IN)
         R_USB_ConfigureEp(&usb_ctrl, EP_ADDR_CDC_BULK_IN, USB_EP_BULK, 64);
         // ...其他端点
    }



3. 描述符配置(关键)



  • USB设备的行为由描述符定义,需在代码中硬编码,例如:
     const uint8_t g_usb_device_descriptor[] = {
         0x12, // bLength
         USB_DT_DEVICE, // bDescriptorType
         0x0200, // bcdUSB (USB 2.0)
         0xEF, // bDeviceClass (Misc)
         // ...其他字段
    };




验证配置位置




  1. FSP生成代码



    • 检查ra_gen目录下的文件:

      • hal_data.c: 包含usb_cfg_t结构体(引脚、中断配置)。

      • r_usb_basic_cfg.h: USB模块的参数(如缓冲区大小)。





  2. 用户代码



    • 搜索工程中的USB关键字:

      • usb_init(), tud_init()(TinyUSB函数)。

      • g_usb_descriptor, USBD_AddInterface()(协议栈接口)。







解决方案




  1. 补全FSP配置



    • 确保FSP中已正确添加USB外设堆栈(步骤见上文)。




  2. 检查协议栈完整性



    • OpenMV示例可能依赖libtf/tensorflow/lite/micro/tools/make/targets/renesas中的定制代码,需确认是否包含USB实现。




  3. 参考官方示例



    • 用Renesas的 USB CDC示例工程 对比:

      • 导入FSP示例:File > Import > Renesas Example > USB_Device_CDC





  4. 手动添加缺失组件



    • 若协议栈缺失,可集成TinyUSB:

      • 复制src/tinyusb到工程。

      • hal_entry.c调用tusb_init()并实现tud_cdc_rx_cb()等回调。







通过以上步骤,USB配置是由FSP硬件配置 + 用户协议栈代码共同完成的。若仍有问题,请检查工程中是否包含完整的USB中间件实现。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分