21ic电子技术开发论坛 单片机与嵌入式系统 ST MCU 请高手帮忙,我的ENDP1为什么只回一次数据就没反应了?
发新帖我要提问
返回列表
打印

请高手帮忙,我的ENDP1为什么只回一次数据就没反应了?

[复制链接]
2170|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lmp|  楼主 | 2009-10-30 15:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
se, TE, ADDR, DDR, AD
大家好!
        因STM32的USB端点只提供8个,除了端点0,只有7个供用户使,大多数情况下都是Bulk-IN和Bulk-OUT各占一个端点,但我的设备要用到4个Bulk-IN和4个Bulk-OUT,所以就有Bulk-IN和Bulk-OUT共用一个端点的情况,我现在分别用两个端点(1,2)对应Bulk-IN和Bulk-OUT传数据正常,但将Bulk-IN和Bulk-OUT合到端点1上,设备只能向主机传一次数据,以后主机再发数据我的设备连ACK都不回了,请高手指点一下,我一直没找到原因,谢谢!

#define BTABLE_ADDRESS      (0x00)
/* EP0  */
/* rx/tx buffer base address */
#define ENDP0_RXADDR        (0x40)
#define ENDP0_TXADDR        (0x80)

#define ENDP1_TXADDR        (0xC0)

#define ENDP1_RXADDR        (0x100)

#define ENDP2_TXADDR        (0x140)


SetBTABLE(BTABLE_ADDRESS);
  /* Initialize Endpoint 0 */
  SetEPType(ENDP0, EP_CONTROL);
  SetEPTxStatus(ENDP0, EP_TX_NAK);
  SetEPRxAddr(ENDP0, ENDP0_RXADDR);
  SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
  SetEPTxAddr(ENDP0, ENDP0_TXADDR);
  Clear_Status_Out(ENDP0);
  SetEPRxValid(ENDP0);

  /* Initialize Endpoint 1 */
  SetEPType(ENDP1, EP_BULK);
  SetEPTxAddr(ENDP1, ENDP1_TXADDR);
  SetEPTxStatus(ENDP1, EP_TX_NAK);
  SetEPRxStatus(ENDP1, EP_RX_DIS);

  /* Initialize Endpoint 1 */
  SetEPType(ENDP1, EP_BULK);
  SetEPRxAddr(ENDP1, ENDP1_RXADDR);
  SetEPRxCount(ENDP1, Device_Property.MaxPacketSize);
  SetEPRxStatus(ENDP1, EP_RX_VALID);
  SetEPTxStatus(ENDP1, EP_TX_DIS);

  SetEPType(ENDP2, EP_INTERRUPT);
  SetEPTxAddr(ENDP2, ENDP2_TXADDR);
  SetEPTxCount(ENDP2, 4);
  SetEPRxStatus(ENDP2, EP_RX_DIS);
  SetEPTxStatus(ENDP2, EP_TX_NAK);

中断正常,第二条命令62 00 00 00 00 00 02 00 00 设备连ACK都没有回,不知是哪里设置的不对,请高手指点.谢谢!

62无应答.JPG (105.22 KB )

62无应答.JPG
沙发
香水城| | 2009-10-30 15:43 | 只看该作者
收到第1个OUT包之后,是否清除了状态位?把EP便回EP_RX_VALID状态?

使用特权

评论回复
板凳
lmp|  楼主 | 2009-10-30 16:39 | 只看该作者
谢谢!!!

使用特权

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

本版积分规则

lmp

11

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部