分享一个 用野火挑战者 USB Host 读写 U 盘的调试过程

硬件:野火挑战者stm32f429开发版
rt-thread版本:4.0.3 build Mar  2 2020
参考示例https://www.rt-thread.org/document/site/application-note/driver/usb/an0046-rtthread-driver-usbh/

ENV的基本配置步骤就是按照参考示例里边的教程做的,做的过程中遇到了一下几个问题:

1. 野火 F429 bsp 工程中 board 的 Kconfig 没有 BSP_USING_USBH 配置选项,从其他bsp中抄一下

menuconfig BSP_USING_USBH
    bool "Enable USB Host"
    select RT_USING_USB_HOST
    default n

    if BSP_USING_USBH
        menuconfig RT_USBH_MSTORAGE
            bool "Enable Udisk Drivers"
            default n
            if RT_USBH_MSTORAGE
                config UDISK_MOUNTPOINT
                string "Udisk mount dir"
                default "/"
            endif
    endif
endmenu

2. 野火F429 开发版的硬件连接为“USB_OTG_HS” 驱动中对应的方式为 “USB_OTG_FS” 更改CubeMx 配置,打开相应引脚,野火开发版对应如下:

   PB12 -> USB_OTG_HS_ID  (不知道作用)     
        PB14 -> USB_OTG_HS_DM  (usb D- 信号)
        PB15 -> USB_OTG_HS_DP  (usb D+ 信号)

  由于引脚不同,需要更改STM32 USB的外设驱动,在原来的驱动上做了如下更改:添加HS的中断回调函数,原来只有FS的中断回调函数

void OTG_HS_IRQHandler(void) /* 添加中断函数*/
{
    rt_interrupt_enter();
    HAL_HCD_IRQHandler(&stm32_hhcd_fs);
    rt_interrupt_leave();
}

static rt_err_t stm32_hcd_init(rt_device_t device)
{
HCD_HandleTypeDef *hhcd = (HCD_HandleTypeDef *)device->user_data;
// hhcd->Instance = USB_OTG_FS;
// hhcd->Init.Host_channels = 8;
// hhcd->Init.speed = HCD_SPEED_FULL;
hhcd->Init.dma_enable = DISABLE;
// hhcd->Init.phy_itface = HCD_PHY_EMBEDDED;
hhcd->Init.Sof_enable = DISABLE;

hhcd->Instance = USB_OTG_HS;
hhcd->Init.Host_channels = 12;
hhcd->Init.speed = HCD_SPEED_FULL;
hhcd->Init.phy_itface = USB_OTG_EMBEDDED_PHY;
hhcd->Init.low_power_enable = DISABLE;
hhcd->Init.vbus_sensing_enable = DISABLE;
hhcd->Init.use_external_vbus = DISABLE;

RT_ASSERT(HAL_HCD_Init(hhcd) == HAL_OK);
HAL_HCD_Start(hhcd);
#ifdef USBH_USING_CONTROLLABLE_POWER
rt_pin_mode(USBH_POWER_PIN, PIN_MODE_OUTPUT);
rt_pin_write(USBH_POWER_PIN, PIN_LOW);
#endif
return RT_EOK;
}

3.  比较坑的一点,由于是在自己做着玩,就把板子上的SD卡,W25Q128Flash 这俩都挂上文件系统了,当u盘插上之后能识别出来,也能打印出参考示例里边的种提示“found part[0], begin: 393216, size: 3.827GB”,但是用ls查看就是读取不了目录;

  • 刚开始以为是挂载目录的问题,因为我是在w25q128文件系统下创建了一个目录挂载的,折腾了一会挂载目录,发现不是这里问题
  • 紧接着怀疑是 “DFS_FILESYSTEMS_MAX ” 这个宏配置的问题,折腾了一下发现也不是这里问题
  • 最后跟踪代码发现是由于 “RT_DFS_ELM_DRIVES” 这个宏导致的,这个值默认是2,我挂载了SD卡,挂载了W25Q128之后在挂载别的就不行了,然后把这个值改大点就可以了

,说折腾是因为调试这些都是需要全部编译代码,mdk编译速度太慢了

 

猜你喜欢

转载自www.cnblogs.com/emlsyx/p/12404594.html
今日推荐