zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1356回复:10

55分求助D12通信问题

楼主#
更多 发布于:2004-02-16 16:20
看这副图片,我的usb在数据传送中会进入挂起态,最后的哪几个错误代表什么意思啊?进入挂起态,听说:
1。如果suspend一直都接低,就不会进入挂起
2。如果进入挂起,保持suspend脚10ms,并发送0xf6可唤醒usb,但是我这样做无效,不知道是不是真的。

另外我想提个简单问题:

我如何知道我从端口1发送的数据包是否发送成功了?

[编辑 -  2/16/04 by  zkking]

[编辑 -  2/21/04 by  zkking]
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-16 17:14
再线等待。
对于包是否发送出去,我可不可以这样处理:
{....
FLAG=0;
WriteEp();
while(FLAG==0);
...}


中断程序{
....
FLAH=1;
....
}

这样做可以吗?
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-17 09:11
DX们帮帮忙吧,应该很简单的问题吧
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-17 09:31
再线等待。
对于包是否发送出去,我可不可以这样处理:
{....
FLAG=0;
WriteEp();
while(FLAG==0);
...}


中断程序{
....
FLAH=1;
....
}

这样做可以吗?

俺使用轮询检查的,至于传输中挂起,没碰到过,帮你顶下。
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-17 10:10
非常感谢clementzhao的帮忙,您帮了我很多次了,谢谢

能不能把您说的轮询的程序结构给小弟看看,我对这方面比较模糊
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-17 10:20
非常感谢clementzhao的帮忙,您帮了我很多次了,谢谢

能不能把您说的轮询的程序结构给小弟看看,我对这方面比较模糊
 

do
{
SelectEndPoint(3);
}while(EP_Status&1 == 1)
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-17 10:40
如果我有一堆数据要发,和上位机有协议,先发一个包,确定这个包发出去了,再发剩下的包。用您说的轮询的方式应该怎么写了?您的这种方法是不是不停的选各个端点,看他们是否发送成功?


我用的是d12,因为d12的发送中断的产生实在数据发送之后,能否直接靠某个端点(比如端点1)的发送中断来判断了?
zmwk
驱动中牛
驱动中牛
  • 注册日期2001-05-15
  • 最后登录2009-04-05
  • 粉丝0
  • 关注0
  • 积分59分
  • 威望51点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-02-18 17:20
看你的Bushound,似乎是最后一个IN数据包(该包在Bushound中无法看到了)的长度与driver中的Read长度不一致,有可能是Device上传的超长,导致overrun-缓冲溢出。
检查一下发送长度是否有问题。
A strong man can save himself. A great man can save another.
clementzhao
驱动大牛
驱动大牛
  • 注册日期2003-05-08
  • 最后登录2009-02-20
  • 粉丝0
  • 关注0
  • 积分28分
  • 威望63点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-02-18 17:29
如果我有一堆数据要发,和上位机有协议,先发一个包,确定这个包发出去了,再发剩下的包。用您说的轮询的方式应该怎么写了?您的这种方法是不是不停的选各个端点,看他们是否发送成功?
我用的是d12,因为d12的发送中断的产生实在数据发送之后,能否直接靠某个端点(比如端点1)的发送中断来判断了?

按中断来判断也可以阿,但是我做的项目关系,要是用这种办法。
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-02-21 16:03
我这个usb是要和外界设备相连的,如果不连外界的设备,什么都是好的,一连上去,几次后就会发生这样的问题,不太稳,那么还有可能是缓冲区溢出吗?
zkking
驱动牛犊
驱动牛犊
  • 注册日期2003-11-14
  • 最后登录2008-10-14
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望5点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-02-21 16:19
我现在把suspend直接接到gnd上,没有出现overrun的情况了,但是现在的情况是no respond,如图,读状态寄存器是在挂起态,这个时候我的usb好像死了,我想把他复位或者唤醒,该怎么做了,直接写resume指令无效。难道要我用io口来控制usb的reset了?

[编辑 -  2/21/04 by  zkking]
游客

返回顶部