阅读:1356回复:10
55分求助D12通信问题
看这副图片,我的usb在数据传送中会进入挂起态,最后的哪几个错误代表什么意思啊?进入挂起态,听说:
1。如果suspend一直都接低,就不会进入挂起 2。如果进入挂起,保持suspend脚10ms,并发送0xf6可唤醒usb,但是我这样做无效,不知道是不是真的。 另外我想提个简单问题: 我如何知道我从端口1发送的数据包是否发送成功了? [编辑 - 2/16/04 by zkking] [编辑 - 2/21/04 by zkking] |
|
沙发#
发布于:2004-02-16 17:14
再线等待。
对于包是否发送出去,我可不可以这样处理: {.... FLAG=0; WriteEp(); while(FLAG==0); ...} 中断程序{ .... FLAH=1; .... } 这样做可以吗? |
|
板凳#
发布于:2004-02-17 09:11
DX们帮帮忙吧,应该很简单的问题吧
|
|
地板#
发布于:2004-02-17 09:31
再线等待。 俺使用轮询检查的,至于传输中挂起,没碰到过,帮你顶下。 |
|
地下室#
发布于:2004-02-17 10:10
非常感谢clementzhao的帮忙,您帮了我很多次了,谢谢
能不能把您说的轮询的程序结构给小弟看看,我对这方面比较模糊 |
|
5楼#
发布于:2004-02-17 10:20
非常感谢clementzhao的帮忙,您帮了我很多次了,谢谢 do { SelectEndPoint(3); }while(EP_Status&1 == 1) |
|
6楼#
发布于:2004-02-17 10:40
如果我有一堆数据要发,和上位机有协议,先发一个包,确定这个包发出去了,再发剩下的包。用您说的轮询的方式应该怎么写了?您的这种方法是不是不停的选各个端点,看他们是否发送成功?
我用的是d12,因为d12的发送中断的产生实在数据发送之后,能否直接靠某个端点(比如端点1)的发送中断来判断了? |
|
7楼#
发布于:2004-02-18 17:20
看你的Bushound,似乎是最后一个IN数据包(该包在Bushound中无法看到了)的长度与driver中的Read长度不一致,有可能是Device上传的超长,导致overrun-缓冲溢出。
检查一下发送长度是否有问题。 |
|
|
8楼#
发布于:2004-02-18 17:29
如果我有一堆数据要发,和上位机有协议,先发一个包,确定这个包发出去了,再发剩下的包。用您说的轮询的方式应该怎么写了?您的这种方法是不是不停的选各个端点,看他们是否发送成功? 按中断来判断也可以阿,但是我做的项目关系,要是用这种办法。 |
|
9楼#
发布于:2004-02-21 16:03
我这个usb是要和外界设备相连的,如果不连外界的设备,什么都是好的,一连上去,几次后就会发生这样的问题,不太稳,那么还有可能是缓冲区溢出吗?
|
|
10楼#
发布于:2004-02-21 16:19
我现在把suspend直接接到gnd上,没有出现overrun的情况了,但是现在的情况是no respond,如图,读状态寄存器是在挂起态,这个时候我的usb好像死了,我想把他复位或者唤醒,该怎么做了,直接写resume指令无效。难道要我用io口来控制usb的reset了?
[编辑 - 2/21/04 by zkking] |
|