• 分享一个 用野火挑战者 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编译速度太慢了

     
  • 相关阅读:
    二叉树基本操作(二)
    二叉树基本操作(一)
    数组的方式实现--栈 数制转换
    数据的插入与删除
    链表 创建 插入 删除 查找 合并
    ACM3 求最值
    ACM2 斐波那契数列
    ACM_1 大数求和
    简单二维码生成及解码代码:
    ORM中去除反射,添加Expression
  • 原文地址:https://www.cnblogs.com/emlsyx/p/12404594.html
Copyright © 2020-2023  润新知