请大神们点化!!! 本人自定义一个HID从设备(端点描述符中指出:中断传输查询间隔为1ms,IN端点最大包大小为0x40,此设备既不是鼠标键盘也不是摇杆,是自定义的),此从设备插上PC后,bushound能够抓到PC每1ms读一次,并能正确读到HID从设备回的数据。 现在我不用PC与此HID从设备相连,想用STM32F205中的OTG_HS中的HOST与之相连,STM32F205配置以及与从设备的连接结果如下: 配置: 1.STM32F205固件采用ST官网上的“STM32_USB-Host-Device_Lib_V2.1.0”固件库,选取其中的USB_Host_Examples中的HID工程。 2.宏定义了USE_USB_OTG_HS与USE_EMBEDDED_PHY,即采用支持高速的OTG core以及内部的PHY。 3.内部DMA使能,配置如库函数配置一样。 4.OTG_HS设置为强制HOST模式,OTG_HS_DP与OTG_HS_DM复用给OTG_HS用,而OTG_HS_ID与OTG_HS_VBUS作为GPIO。 结果: 1.枚举过程全部完成。 2.HID类请求过程完成,即库中USBH_HID_ClassRequest函数所举出的状态机处理完成(这里的HID_REQ_SET_IDLE与HID_REQ_SET_IDLE状态处理过程被我屏蔽,这里的两个状态过程屏蔽与否对本次测试结果没有影响)。 3.处理类数据传输,即处理USBH_HID_Handle函数时出现问题,在执行USBH_InterruptReceiveData函数后,HOST一次都没有读到数据。 4.仿真分析,USBH_InterruptReceiveData函数->HCD_SubmitRequest函数->USB_OTG_HC_StartXfer函数中的如下语句 hcchar.d32 = USB_OTG_READ_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR); hcchar.b.oddfrm = USB_OTG_IsEvenFrame(pdev); /* Set host channel enable */ hcchar.b.chen = 1; hcchar.b.chdis = 0; USB_OTG_WRITE_REG32(&pdev->regs.HC_REGS[hc_num]->HCCHAR, hcchar.d32);(这些语句本应该是使能主机通道,开始IN token的) A: 在执行上面代码之前OTG_HS_HCCHAR2=0x204c8840(打开通道时设置的), OTG_HS_HCTSIZ2=0x00080040, OTG_HS_HCDMA2=0x200008cc (为我定义的用于存储接受数据的指针),这里定义的是主机通道2用于接受HID从设备数据。 B: 单步执行上面代码之后,OTG_HS_HCCHAR2=0xe04c8840, OTG_HS_HCTSIZ2=0x80080040, OTG_HS_HCDMA2=0x200008cc,由此可见 OTG_HS_HCCHAR2中的CHDIS也是为1的(应该由硬件 强制置1的,因为后面任何时候我通过调试窗口来让此位清0,都是无效的),之后继续走, 这三个寄存器的值一直不变。 C:在控制通道中,在设置OTG_HS_HCCHAR中CHENA位时,CHDIS位并没有置1(由硬件),所以枚举过程能顺利完成。 D:用逻辑分析仪抓DP与DM上的波形,发现再执行完上面语句后,HOST并没有发IN token(一次都没发),而只是在发SOF包(通过分析抓捕数据得 知)。 5.断电再上电,多次重复后,有时能正确接HID从设备数据,几率大概1/20。 根据上面的结果,本人有如下疑问: 1.为什么本实例中应用IN端点的主机通道,在置OTG_HS_HCCHAR中CHENA位时,会导致硬件置CHDIS位?所以HOST不发IN token。 2.为什么又会偶尔成功呢? 主要是第一个问题,请大神帮忙解释下,不胜感激!!!!!!!!!!!!! |
STM32F407 USB的IN端点只能是0x81么?
求技术解答,STM32H723的USB模拟U盘应用过程遇到了问题。
请问一下,我的nucleo板子连接usb线,找不到target,一直无法下载程序怎么回事呢?
请问一下,stm32WB有可以驱动声卡的驱动程序吗(声卡是PCM2704)?
STM32F407 USB怎么测试接口的极限速度
我的电脑识别不到STM32的ST-LINK驱动(特指针对芯片stm32wle5ccu6)
请问各位大佬,STM32F4怎么利用Typec口OTG,硬件电路怎么实现
stm32 usb复合设备支持键盘鼠标和hid串口通信可以实现吗
stm32f407 开启两路(FS和HS) Custom HID,与上位机通信偶尔中断
stm32f746g-disco开发板的串口通讯连接方式