[应用相关] 关于 USB 中增加 端点的问题

[复制链接]
4059|13
 楼主| wangwenjia 发表于 2008-10-16 11:16 | 显示全部楼层 |阅读模式
要在 Mass Storage 例子的基础上增加一个 IN 类型 的端点 ENP3
修改并编译通过后 ,调试软件中已经能查看到新加的端点。
可在 上位机监听的时候确收不到其反送的数据

于是仿真
发现在上位机监听次端口的时候,根本就不会进入中断函数 CTR_LP()

请问这是为什么 ?   哪里还能设置好么 ?
 楼主| wangwenjia 发表于 2008-10-16 11:18 | 显示全部楼层

其它端点都能正常工作

闷了很长时间也没能找到问题所在
故  请教 坛 里的 高人
 楼主| wangwenjia 发表于 2008-10-17 08:15 | 显示全部楼层

来人帮帮忙啊

实在是找不到哪里还不对
香水城 发表于 2008-10-17 10:29 | 显示全部楼层

USB传输是主从方式,只有在主机发送IN Token后设备才能发送数

请问你的主机端是否发出了IN Token?
 楼主| wangwenjia 发表于 2008-10-17 13:33 | 显示全部楼层

关于主机

调试是用 windriver 调试的
比如我对 0x81 监听,windriver 就会一直向端点0发送IN Token,并能够正确的接收的 ST MCU 上传来的数据
可对 0x83 监听则没有反应,仿真时看到根本就不会进入中断函数 CTR_LP()
<其它端点正常>
好像端点3在STMCU端没有被启用一样
香水城 发表于 2008-10-18 15:28 | 显示全部楼层

初始化时不要设置EP_TX_VALID

初始化时应该设置EP_TX_NAK:
  SetEPType(ENDP3, EP_BULK);  
  SetEPTxAddr(ENDP3, ENDP3_TXADDR);
  SetEPTxStatus(ENDP3, EP_TX_NAK);

要发送时再置EP_TX_VALID:
  UserToPMABufferCopy(&Mybuffer, ENDP3_TXADDR, size);
  SetEPTxCount(ENDP3, size); //设置发送缓冲区大小为 size
  SetEPTxValid(ENDP3); 或 SetEPTxStatus(ENDP3, EP_TX_VALID);

注意回调函数EP3_IN_Callback(void)是在发送结束后才被调用,进入这个函数表示上次发送成功,所以应该在主程序中拷贝要发送的数据并SetEPTxValid(ENDP3)。
cpufan 发表于 2008-10-20 16:39 | 显示全部楼层

我也遇到过楼主同样的问题

项目要求做一个复合设备。
我发现使用3以上的endpoint都不行。
驱动需要4个endpoint,
后来使用了81,01,82,02这四个endpoint完事。
至于为什么不能用83,03 ....这些端点,也不知道答案
香水城 发表于 2008-10-20 17:54 | 显示全部楼层

8楼是怎么做的?

cpufan 发表于 2008-10-21 11:22 | 显示全部楼层

re

我就是在工程文件中把ENDP1_TXADDR,ENDP1改成:
ENDP3_TXADDR,ENDP3
对应的ENDP2_TXADDR,ENDP2改成ENDP4_TXADDR,ENDP4
不行。

不是不buffer的地址也要改啊。应该不影响啊
香水城 发表于 2008-10-21 18:34 | 显示全部楼层

你的描述符改了吗?

cpufan 发表于 2008-10-22 09:32 | 显示全部楼层

描述符改了

 楼主| wangwenjia 发表于 2008-11-1 16:03 | 显示全部楼层

至今未有解决。。。

香水城 发表于 2008-11-1 17:36 | 显示全部楼层

是否按照7楼的设置改了?

 楼主| wangwenjia 发表于 2008-11-1 22:24 | 显示全部楼层

已经按照您的方法试过了

因为加端点1是可以的
但增加端点3,也就是增加到断点数量为5个的时候就不行了
不会应答主机
(上个礼拜忙别的事情,就没折腾这个usb)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

16

主题

79

帖子

0

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