打印
[STM32F1]

STM32F105的USB_Host模式下的多设备连接问题

[复制链接]
10073|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hjq451506709|  楼主 | 2014-6-29 22:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hjq451506709 于 2014-6-29 22:34 编辑

情况是这样的:
(1)单独使用STM32F105作为HOST,可以正常的驱动键盘或鼠标;
(2)单独使用STM32F105作为HOST,也可以正常U盘;
(3)单独使用STM32F105作为HOST,通过一个HUB连接U盘和键盘,发现两个设备都识别不了;

(U盘属于USB的Mass Storage类,键盘属于USB的MSC类);
(我是通过STM32F105的串口2,把设备的信息发送到电脑的串口调试助手作为调试方法);


问题在于上电初始化的时候,两个类都初始化好了,可是只能认得后面初始化的设备,难道就不能通过HUB拓展多个设备一起使用?

  /* Init Host Library */
  USBH_Init(&USB_OTG_Core, USB_OTG_FS_CORE_ID,&USB_Host, &USBH_MSC_cb,  &USR_cb);//红色表示U盘类
      
   /* Init Host Library */
  USBH_Init(&USB_OTG_Core_dev,  USB_OTG_FS_CORE_ID,   &USB_Host,  &HID_cb,   &USR_Callbacks);//红色表示鼠标和键盘类





沙发
STARM| | 2014-6-29 23:34 | 只看该作者
后面初始化的设备起作用后, 前面初始化的是否就无效呢 ?

使用特权

评论回复
板凳
hjq451506709|  楼主 | 2014-6-30 07:08 | 只看该作者
确实是这样的,反复测试过,在前面初始化的就会失效,串口可以打印出“Enumeration completed”,“Manufacturer :”,“Product :”,“USB device is successfully assigned the Address”等设备的信息,但是串口最后会输出"Device not supported",既然可以识别,却不可以执行对应的程序。

使用特权

评论回复
地板
hjq451506709|  楼主 | 2014-6-30 07:13 | 只看该作者
后面初始化的设备不能无法执行用户程序,比如说:键盘和鼠标类放在后面初始化,那么U盘的类就可以正常的运行,串口可以读取U盘里面的数据,但是键盘却无法通过串口输出按键值。(单独初始化键盘类设备的时候,会通过串口打印键值。)

使用特权

评论回复
5
yang4469| | 2014-7-1 14:52 | 只看该作者
本帖最后由 yang4469 于 2014-7-1 14:56 编辑

U盘用USB_OTG_FS_CORE_ID,USB_FS_Host,键盘用USB_OTG_HS_CORE_ID,USB_Host

使用特权

评论回复
6
freeman9507| | 2014-7-1 23:21 | 只看该作者
共同探讨一下,我在利用STM32F107做USB HUB 扩展,同样遇到问题,大家共同学习探讨一下!
初步原因你加USB hub后需要对USB HUB进行枚举

联系QQ:13188123

使用特权

评论回复
7
freeman9507| | 2014-7-1 23:25 | 只看该作者
5楼的完全错误,
105只支持FS,207才能够支持FS和HS

使用特权

评论回复
8
hjq451506709|  楼主 | 2014-7-2 00:01 | 只看该作者
7楼说的没错,F2和F4都支持FS和HS,所以官方只提供了STM32F2和STM32F4的DualCore例程,STM32F105/107没有提供,遗憾的是F2或F4价格比F105贵多了

使用特权

评论回复
9
hjq451506709|  楼主 | 2014-7-2 00:10 | 只看该作者
本帖最后由 hjq451506709 于 2014-7-2 00:11 编辑

查看\STM32_USB-Host-Device_Lib_V2.1.0\Project\USB_Host_Examples\DualCore例程,可以知道包含void OTG_HS_IRQHandler(void);和void OTG_FS_IRQHandler(void);两个中断。
HS和FS的初始化分别为:
/* Init HS Core */
  USBH_Init(&USB_OTG_Core,
            USB_OTG_HS_CORE_ID,
            &USB_Host,
            &USBH_MSC_cb,
            &USR_MSC_cb);
   LCD_UsrLog("USB Host High speed initialized.\n");
  /* Init FS Core */
  USBH_Init(&USB_OTG_FS_Core,
            USB_OTG_FS_CORE_ID,
            &USB_FS_Host,
            &HID_cb,
            &USR_HID_cb);  

使用特权

评论回复
10
freeman9507| | 2014-7-2 23:10 | 只看该作者
其实在107中应该是可以通过HUB来扩展USB接口的,看OTG标准库中,中断服务程序
/**
* @brief  HOST_Handle_ISR
*         This function handles all USB Host Interrupts
* @param  pdev: Selected device
* @retval status
*/

uint32_t USBH_OTG_ISR_Handler (USB_OTG_CORE_HANDLE *pdev)

USB_OTG_CORE_HANDLE *pdev---代表可以选择不同的USB设备

使用特权

评论回复
11
freeman9507| | 2014-7-2 23:12 | 只看该作者
现在的关键就是如何将USB hub收到下行端口的状态变化传递关联到对应设备的中断服务程序去了

使用特权

评论回复
12
香水城| | 2014-7-3 11:08 | 只看该作者
hjq451506709 发表于 2014-6-30 07:08
确实是这样的,反复测试过,在前面初始化的就会失效,串口可以打印出“Enumeration completed”,“Manufac ...

LZ,都有这么重要的错误信息输出了“Device not supported”,很容易定位哪里出了问题啊。

全项目搜索,只有两个地方会调用这个回调函数:

USBH_Status USBH_MSC_InterfaceInit()中的
if((pphost->device_prop.Itf_Desc[0].bInterfaceClass == MSC_CLASS) && \
     (pphost->device_prop.Itf_Desc[0].bInterfaceProtocol == MSC_PROTOCOL))不满足;

USBH_Status USBH_MSC_Handle()中的
if((MSC_Machine.maxLun > 0) && (maxLunExceed == FALSE)) 不满足。

使用特权

评论回复
13
香水城| | 2014-7-3 11:14 | 只看该作者
hjq451506709 发表于 2014-7-2 00:01
7楼说的没错,F2和F4都支持FS和HS,所以官方只提供了STM32F2和STM32F4的DualCore例程,STM32F105/107没有提 ...

F207和F407都有两个OTG IP,一个FS一个HS。因此有个所谓的Dual Core的demo,就是把两个主机端口都用上,一个接MSC类设备,一个接HID类设备。

而F107只有一个OTG IP,要接多个设备,需要通过Hub来扩展。

STM32F107/207/407如何和Hub通信,目前ST没有demo,但是坛子里有同学是做出来的。

使用特权

评论回复
14
jackcattree| | 2014-10-25 17:46 | 只看该作者
楼主,请问你的工程还在吗?可以发给我吗?谢谢!邮箱:825980830@qq.com

使用特权

评论回复
15
never_give_up| | 2014-10-26 00:54 | 只看该作者
请问你 以前 用stm32  接 hub  的驱动还在吗?现在我遇到了接多个设备的问题,但苦于 hub 怎么驱动。能发我一份吗?我QQ:1269345428@qq.com

使用特权

评论回复
16
jackcattree| | 2014-10-26 15:56 | 只看该作者
never_give_up 发表于 2014-10-26 00:54
请问你 以前 用stm32  接 hub  的驱动还在吗?现在我遇到了接多个设备的问题,但苦于 hub 怎么驱动。能发我 ...

你好, 请问你有STM32 HOST 键盘驱动吗?

使用特权

评论回复
17
yushan210| | 2016-2-16 14:31 | 只看该作者
如果定时初始化呢

使用特权

评论回复
18
ldk060| | 2016-6-12 17:07 | 只看该作者
楼主你好,可以参考一下你的USB HOST驱动键盘的吗?USB HOST使键盘的大小写切换指示灯的那段程序怎么写 啊?

使用特权

评论回复
19
ldk060| | 2016-6-12 17:08 | 只看该作者
香水城 发表于 2014-7-3 11:08
LZ,都有这么重要的错误信息输出了“Device not supported”,很容易定位哪里出了问题啊。

全项目搜索, ...

你好,么通过STM32F107的USB HOST向USB键盘发送SET REPORT和OUT数据。我发的这个帖子链接:https://bbs.21ic.com/icview-1603128-1-1.html

使用特权

评论回复
20
YYaiPAOFU| | 2017-9-26 17:48 | 只看该作者
楼主还有stm32 usb host 接hub的驱动吗  可以借鉴参考下吗  最近在搞这个host 外接一个键盘一个鼠标 搞了好久了 没做好

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:hjq

8

主题

132

帖子

3

粉丝