你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

USB批量传输设置两个端点为OUT、IN后异常

[复制链接]
吖06 提问时间:2018-12-6 00:07 /
各位大神,小弟现在正在用STM32f205+PHY做一个高速usb的Device设备,需要使用两个端点,分别设置:端点2为OUT、端点6为IN的BULK模式。
正常逻辑应该是:枚举过程成功后,收到主机发送的SetConfig命令,STM32开始配置两个BULK端点。STM32接收到OUT端点主机发送的数据并做处理后通过IN端点发送至主机。
但是实际测试现象是:枚举过程结束后,STM32收到主机发送的SetConfig命令,并成功配置端点。OUT端点收到主机发送的数据并做处理后将待发送数据缓存在buf,等待IN令牌包到来后发送,但是IN端点一直发送不出去。 通过USB分析仪抓取到的数据发现主机发送IN令牌包后,从机无响应

因为枚举过程数据正常,故怀疑是STM32配置BULK端点时出错,经过多次查找后发现,当配置端点2为OUT模式后,STM32寄存器会强制改写OTG_HS_DIEPCTL6、7寄存器的数值。配置端点的代码如下:
  /* Open EP2 OUT */
  USBD_LL_OpenEP(pdev,
                 EPIN2_OUT_ADDR,
                 USBD_EP_TYPE_BULK,
                 EPIN2_OUT_SIZE);
  pdev->ep_out[2].maxpacket = USB_HS_MAX_PACKET_SIZE;


  USBD_LL_PrepareReceive (pdev, EPIN2_OUT_ADDR, BulkRxBuf, USB_HS_MAX_PACKET_SIZE);



  USBD_LL_OpenEP(pdev,
               EPIN6_IN_ADDR,
               USBD_EP_TYPE_BULK,
               EPIN6_IN_SIZE);
  pdev->ep_in[6].maxpacket = USB_HS_MAX_PACKET_SIZE;

图片上寄存器值是在执行完 USBD_LL_OpenEP(pdev,EPIN2_OUT_ADDR,USBD_EP_TYPE_BULK,EPIN2_OUT_SIZE);尚未配置IN端点时就已经生成的。
很纳闷,为什么设置了端点2会改变端点6.7的DIEPCTL的数值。
如果两个openEP函数颠倒了顺序,则DIEPCTL6在执行完配置后仍然是0.
有没有哪位大哥做过相关的工作,能不能给小弟指点下迷津,谢谢。



doepctl2.png
Diepctl6.png
收藏 评论0 发布时间:2018-12-6 00:07

举报

0个回答
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版