打印

STMUSB的端点5设成既是输入端点又是输出端点的问题

[复制链接]
2865|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ece123|  楼主 | 2011-4-4 22:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM, USB, TE, AD, se
RT,在usb_proc.c里初始化端点5  

/* Initialize Endpoint 5 */  
  SetEPType(ENDP5, EP_BULK);  
  SetEPTxAddr(ENDP5, ENDP5_TXADDR);  
  SetEPRxAddr(ENDP5, ENDP5_RXADDR);  
  SetEPTxCount(ENDP5, BULK_MAX_PACKET_SIZE);  
  SetEPRxCount(ENDP5, BULK_MAX_PACKET_SIZE);  
  SetEPRxStatus(ENDP5, EP_RX_VALID);  
  SetEPTxStatus(ENDP5, EP_TX_NAK);   


/* EP5  */ 0x20字节  
/* rx/tx buffer base address */  
#define ENDP5_TXADDR        (0x120)  
#define ENDP5_RXADDR        (0x140)  


usb_endp.c  
定义下面函数  
void EP5_OUT_Callback(void)  
{   
//接收数据  
Data_Len = USB_SIL_Read(/*ENDP5*/EP5_OUT, Bulk_Data_Buff);  
}  

void EP5_IN_Callback(void)  
{  
}  

当STM32接收到HOST的数据“63 00 00 00 00 00 01 00 00 00”后再将“81 00 00 00 00 00 01 00 00 00”数据返回给HOST
  UserToPMABufferCopy(Transi_Buffer, ENDP5_TXADDR, 0x0a  
  SetEPTxValid(ENDP5);         /* enable endpointx for transmission */  


通过USB Monitor观察HOST没收到数据,  

   001722: Bulk or Interrupt Transfer (DOWN), 01.04.2011 13:50:30.218 +0.156  
   Pipe Handle: 0x872bf7f4 (Endpoint Address: 0x5)  
   Send 0xa bytes to the device  
   63 00 00 00 00 00 01 00 00 00                     c.........  
   001725: Bulk or Interrupt Transfer (UP), 01.04.2011 13:50:30.406 +0.187. Status: 0xc000000c  
   Pipe Handle: 0x872bf7d4 (Endpoint Address: 0x85)  
   Get 0x0 bytes from the device                      HOST没接收到数据  


如果STM32不运行这两句程序的话
     UserToPMABufferCopy(Transi_Buffer, ENDP5_TXADDR, 0x0a  
     SetEPTxValid(ENDP5);         /* enable endpointx for transmission */  
通过USB Monitor观察不到下面这句的反应。   
   001725: Bulk or Interrupt Transfer (UP), 01.04.2011 13:50:30.406 +0.187. Status: 0xc000000c  
   Pipe Handle: 0x872bf7d4 (Endpoint Address: 0x85)  
   Get 0x0 bytes from the device                      HOST没接收到数据  

请问有人清楚这种只能接收数据不能发送数据的情况问题是出在哪吗?
沙发
adams.gh| | 2011-4-5 08:05 | 只看该作者
本帖最后由 adams.gh 于 2011-4-5 08:07 编辑

void Transfer_Data_Request(u8*,u16);
看看这个函数吧

使用特权

评论回复
板凳
ece123|  楼主 | 2011-4-5 22:07 | 只看该作者
我的这段程序
     UserToPMABufferCopy(Transi_Buffer, ENDP5_TXADDR, 0x0a  
     SetEPTxValid(ENDP5);         /* enable endpointx for transmission */  
已经实现了void Transfer_Data_Request(u8*,u16);函数里的发送数据的功能。

使用特权

评论回复
地板
adams.gh| | 2011-4-6 09:06 | 只看该作者
它做的比你多,不是吗?

使用特权

评论回复
5
vigia| | 2011-4-6 10:54 | 只看该作者
LZ你看一下我的这个贴子:
https://bbs.21ic.com/viewthread.p ... ;highlight=%2Bvigia

你使用了端点5,就需要为端点5配置端点寄存器和收发缓冲

1, 要修改这个DEFINE,为你的端点配置端点寄存器,其中的X应该是6
usb_conf.h
#define EP_NUM (x)

2, 要重新分配PACKET BUFFER,因为你用了端点5,就要为前5个端点的地址和长度寄存器分配位置,下面这个DEFINE要往后移
#define ENDP0_RXADDR  (0x18)

使用特权

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

本版积分规则

5

主题

12

帖子

0

粉丝