10176|1

252

帖子

0

TA的资源

纯净的硅(初级)

楼主
 

应用STM32F205 USB host 遇到的疑问(大神请进) [复制链接]


请大神们点化!!!

本人自定义一个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.为什么又会偶尔成功呢?  

主要是第一个问题,请大神帮忙解释下,不胜感激!!!!!!!!!!!!!
此帖出自stm32/stm8论坛

最新回复

为题比较复杂,很难回答你的问题。但是可以确定的是ST提供的库确实的可以正常工作的,好好检查你的代码和硬件的对应关系。。。。  详情 回复 发表于 2014-10-29 09:52
点赞 关注
 

回复
举报

4996

帖子

19

TA的资源

裸片初长成(初级)

沙发
 
为题比较复杂,很难回答你的问题。但是可以确定的是ST提供的库确实的可以正常工作的,好好检查你的代码和硬件的对应关系。。。。
此帖出自stm32/stm8论坛
 
个人签名我的博客
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表