打印

请教如果设备返回NAK,主机该怎么办,万分感谢。。。。。

[复制链接]
4187|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kingyou|  楼主 | 2009-3-29 22:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    看书上说,设备如果返回NAK,那么bus driver会再一次发送读写请求,那如果我没又设置timeout,是不是bus driver会一直发送读写请求?
    我现在在驱动里读D12里的数据,不设置timeout,如果fireware一直不往D12的输入缓冲区填充数据,D12就会发送NAK,如果按书上的说法,bus driver会再一次发送读请求,并且一直等待设备发送数据。但是出现了个问题,几秒或者十几秒过后我的urb的回调函数就给调用了,并且urb->status返回了-84(-EILSEQ),我查了下错误说明,又下面三种可能:a) CRC mismatch;b) no response packet received within the prescribed bus turn-around time;c) unknown USB error;这是什么原因呢?


    补充一下:我在fireware是这样做的,D12 bulk in端点收到了驱动读数据中断后什么也不做,只是读最后处理状态降中断标志清除掉了。
    刚才我对D12的这个端点的中断次数计了下数,发现中断的次数都不一定,又时候几千上万次,又时候又几百次,(我觉得这就是驱动收到了NAK后又发送了读数据请求的次数)大侠给我解释下我哪里有问题了,万分感谢了。。。。。。

相关帖子

沙发
computer00| | 2009-3-29 22:57 | 只看该作者

你是什么端点?控制端点是有时间限制的。

使用特权

评论回复
板凳
kingyou|  楼主 | 2009-3-29 23:02 | 只看该作者

bulk端点

我用的是D12的bulk端点,端点索引是5

使用特权

评论回复
地板
kingyou|  楼主 | 2009-3-29 23:03 | 只看该作者

谢谢了

圈圈每次回答问题都好及时啊,感动中。。。

使用特权

评论回复
5
computer00| | 2009-3-29 23:15 | 只看该作者

你的驱动是你自己开发的吗?

使用特权

评论回复
6
kingyou|  楼主 | 2009-3-29 23:21 | 只看该作者

是自己开发的啊

    就是最近闲着,就想在自己闲着的那块ARM板上用上面的D12和RTL8019弄个USB的网卡,现在就卡在这里了。。。

使用特权

评论回复
7
kingyou|  楼主 | 2009-3-29 23:24 | 只看该作者

补充下

    还有个现象就是当urb->status返回-84后,在一次运行我的应用程序读d12,d12端什么反映也没了,好像D12死了一样,中断什么都进不了,不过8019还能收到数据,我想可能是驱动端有什么问题导致第二次驱动的读请求都没发下来,所以d12什么反应都没。。。

使用特权

评论回复
8
computer00| | 2009-3-30 09:56 | 只看该作者

可能是你的D12芯片死掉了吧。导致芯片连NAK也没得返回

使用特权

评论回复
9
kingyou|  楼主 | 2009-3-30 15:05 | 只看该作者

郁闷啊。..

这问题不解决就不好弄了.
D12刚开始都还能正常返回NAK,什么情况会导致D12死掉了呢?
难道驱动端读数据太快,D12跟不上了。..

使用特权

评论回复
10
computer00| | 2009-3-30 15:34 | 只看该作者

这个不可能。有可能是你的下位机程序跑飞了?或者环境干

使用特权

评论回复
11
kingyou|  楼主 | 2009-3-30 16:58 | 只看该作者

回复

下位机程序应该是没跑飞的,因为我板上的网卡都还能收到数据,并且通过串口发送到电脑上来。。

使用特权

评论回复
12
kingyou|  楼主 | 2009-3-30 17:06 | 只看该作者

回复

可能我板子是直接放机箱上的,晚上回去拿离机箱远点再试下。。。
有没有点办法能通过D12的PLL降低点D12的运行速率呢?

使用特权

评论回复
13
computer00| | 2009-3-30 18:49 | 只看该作者

不能。D12必须运行在48MHz,USB的全速设备采样时钟就是这个要

使用特权

评论回复
14
kingyou|  楼主 | 2009-3-30 22:26 | 只看该作者

回复

哎,比较郁闷,我吧我的板子拿来离电脑远远的,还是不得行呢。。。
不要是我的USB线又问题哦

使用特权

评论回复
15
computer00| | 2009-3-31 10:21 | 只看该作者

那就不清楚咯……用D12,一天不返回数据都没问题啊

使用特权

评论回复
16
kingyou|  楼主 | 2009-3-31 10:29 | 只看该作者

回复

    我现在都把驱动简化得够简单的了,创建了一个全局的urb,执行read的时候填充urb为bulk形式的,然后submit之后等待回调函数的执行...哎,明明D12没返回数据,回调函数还执行...
    之前还以为是虚拟机装的linux不行,然后在电脑里重新装了个还是这情况...

使用特权

评论回复
17
computer00| | 2009-3-31 15:41 | 只看该作者

你的驱动是在linux下的?linux下的机制俺就不清楚了,没搞过

使用特权

评论回复
18
kingyou|  楼主 | 2009-3-31 20:21 | 只看该作者

回复

是在linux下的,慢慢调了

使用特权

评论回复
19
kingyou|  楼主 | 2009-3-31 20:22 | 只看该作者

回复

对了,圈圈,你书上好像没降USB->网口的东东的哈?

使用特权

评论回复
20
computer00| | 2009-3-31 20:27 | 只看该作者

没有哦……俺还没研究过网卡呢……

使用特权

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

本版积分规则

11

主题

33

帖子

0

粉丝