完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本人自定义一个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.为什么又会偶尔成功呢? 主要是第一个问题,请大神帮忙解释下,不胜感激!!!!!!!!!!!!! |
|
相关推荐
1个回答
|
|
根据您的描述,您已经成功地使用PC与自定义的HID从设备进行通信,并且现在想要使用STM32F205的OTG_HS作为HOST与该从设备相连。您已经采用了ST官方的固件库,并进行了一些配置。接下来,我将为您提供一些建议和可能的解决方案。
1. 确保STM32F205的OTG_HS引脚与HID从设备的引脚正确连接。通常,OTG_HS需要与从设备的D+和D-引脚相连。 2. 在STM32F205的固件中,您需要配置USB主机模式。这包括设置USB主机的时钟、初始化USB主机堆栈以及配置USB主机管道。 3. 由于您的HID从设备是自定义的,您可能需要修改固件库中的HID示例工程以适应您的设备。这可能包括修改HID报告描述符、处理HID报告数据以及调整端点描述符。 4. 在STM32F205的固件中,您需要实现USB主机的枚举过程。这包括获取从设备的设备描述符、配置描述符和HID类描述符。在枚举过程中,您需要根据从设备的端点描述符来配置USB主机管道。 5. 根据您的描述,从设备的查询间隔为1ms,这意味着您需要在STM32F205的固件中实现一个定时器来控制数据传输的速率。您可以使用STM32的定时器中断来实现这个功能。 6. 在STM32F205的固件中,您需要实现USB主机的数据传输过程。这包括发送IN和OUT令牌,并处理数据传输过程中的错误。 7. 为了确保数据传输的可靠性,您可能需要实现一些错误处理和重试机制。这包括处理USB主机管道的错误、从设备的错误以及数据包丢失的情况。 8. 在调试过程中,您可以使用ST-LINK或其他调试工具来监视STM32F205的USB主机通信。这将有助于您识别和解决潜在的问题。 9. 如果您在实现过程中遇到问题,可以参考ST官方的固件库文档以及STM32F205的数据手册。这些文档将为您提供关于USB主机配置和通信的详细信息。 10. 最后,确保您的STM32F205固件与HID从设备兼容。这可能需要您在固件中实现一些特定的功能,以适应从设备的需求。 通过遵循上述步骤,您应该能够实现STM32F205的OTG_HS作为HOST与自定义HID从设备进行通信。如果在实现过程中遇到任何问题,请随时提问,我会尽力帮助您解决。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1621 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1546 浏览 1 评论
980 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
686 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1599 浏览 2 评论
1865浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
647浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
517浏览 3评论
534浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 09:51 , Processed in 0.957163 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号