OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4555|回复: 4

悬赏最多100元人民币,解决使用rtthread系统自带USB HOST 设备使用问题

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-12-3
在线时间
16 小时
发表于 2020-5-19 20:30:03 | 显示全部楼层 |阅读模式
5金钱
你好,各位大佬, 现我使用 rt-thread-v4.0.2库, 使用BSP文件夹里的正点原子开发板stm32f407-atk-explorer例程,使用rtthread系统自带的USB HOST驱动U盘没问题, 但枚举鼠标,取全部设备描述符时不通过,出现错误,如谁能够帮我解决这个问题,即只要能通过读取设备描述符,取得正确的VID, PID,数据,本人给予一点辛苦费50元, 如能实现枚举成功后,提供源码可正常读取鼠标数据,给100元辛苦费,感谢,需使用rtthread自带的USB HOST 驱动。如能解决请联系本人邮箱 wxfjog@qq.com.或帖子解决法。

目前枚举鼠标到这里失败
打印出get full device descriptor failed

枚举鼠标这里代码失败

枚举鼠标这里代码失败

最佳答案

查看完整内容[请看2#楼]

大家好,通过调试打印输出已经找到问题的所在了,主要是在第一次读取端点0数据返回的wMaxPacketSize = 8, rtthread这个表达式, send_size = (remain_size > pipe->ep.wMaxPacketSize) ? pipe->ep.wMaxPacketSize : remain_size; 实际赋值 8 = (18 > 8)? 8:18 ,因此发送的只是请求返回前8个字节的设备描述符,使得出现返回的只有8个字节, 和读取18个字节 的设备描述符对不上,打印出get full device descriptor failed, 而U盘之 ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-12-3
在线时间
16 小时
 楼主| 发表于 2020-5-19 20:30:04 | 显示全部楼层
大家好,通过调试打印输出已经找到问题的所在了,主要是在第一次读取端点0数据返回的wMaxPacketSize = 8, rtthread这个表达式,    send_size = (remain_size > pipe->ep.wMaxPacketSize) ? pipe->ep.wMaxPacketSize : remain_size;
实际赋值 8 = (18 > 8)? 8:18  ,因此发送的只是请求返回前8个字节的设备描述符,使得出现返回的只有8个字节, 和读取18个字节
的设备描述符对不上,打印出get full device descriptor failed,
而U盘之所以能正常是因为第一次读取端点0数据返回wMaxPacketSize = 64,  实际赋值 18 = (18> 64)? 64:18,即send_size = 18,
因此能正常读回完整的设备描述符.  通过读读取全部设备描述符时增加测试debug_dat代码人为更改send_size = 18, 可以读取
全部设备描述符了.
if(debug_dat)
{
    send_size = 18;
}



int rt_usb_hcd_pipe_xfer(uhcd_t hcd, upipe_t pipe, void* buffer, int nbytes, int timeout)
{
    rt_size_t remain_size;
    rt_size_t send_size;
    remain_size = nbytes;
    rt_uint8_t * pbuffer = (rt_uint8_t *)buffer;
    do
    {
        RT_DEBUG_LOG(RT_DEBUG_USB,("pipe transform remain size,: %d\n", remain_size));
        send_size = (remain_size > pipe->ep.wMaxPacketSize) ? pipe->ep.wMaxPacketSize : remain_size;
        RT_DEBUG_LOG(RT_DEBUG_USB,("pipe->ep.wMaxPacketSize =  %d\r\n", pipe->ep.wMaxPacketSize));         
        RT_DEBUG_LOG(RT_DEBUG_USB,("send_size =  %d\r\n", send_size));
        if(debug_dat)
        {
          send_size = 18;
        }
        if(hcd->ops->pipe_xfer(pipe, USBH_PID_DATA, pbuffer, send_size, timeout) == send_size)
        {
            remain_size -= send_size;
            pbuffer += send_size;
        }
        else
        {
            return 0;
        }
    }while(remain_size > 0);
    return nbytes;
}



回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165353
金钱
165353
注册时间
2010-12-1
在线时间
2108 小时
发表于 2020-5-20 01:16:46 | 显示全部楼层
RT 自己的USB协议栈?
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-12-3
在线时间
16 小时
 楼主| 发表于 2020-5-20 07:46:00 来自手机 | 显示全部楼层
是用rt自带的设备与驱动代码,而其实rt是调用了ST的USB库源码的,目前使用cubex生成带USB库是没有问题的,而使用rtthread系统的驱动设备却不行,出现上面的这个问题,枚举不了鼠标,好像是USB1.1的都不行,USB2.0以上的如手机,u盘都可以识别。
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
43
金钱
43
注册时间
2019-12-3
在线时间
16 小时
 楼主| 发表于 2020-5-20 09:28:16 | 显示全部楼层
本帖最后由 wxfjog 于 2020-5-20 10:18 编辑

是使用rtthread的自带的设备驱动,其时rtthread也是调用了ST的USB库, 连接手机,U盘都正常, 就鼠标枚举不成功,好像是USB1.1的不行, USB2.0的基本没问题, 因手上只有鼠标是USB1.1, 没有其它设备是1.1,所以尚不知道是不是USB1.1的问题
目前不用rt系统,而使用ST USB库是没有这个问题的. 附上测试代码!

接收失败.png

stm32f407-atk-explorer_2.zip

16.68 MB, 下载次数: 74

测试代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 13:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表