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

[复制链接]
5608|20
 楼主| kingyou 发表于 2009-3-29 22:38 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;看书上说,设备如果返回NAK,那么bus&nbsp;driver会再一次发送读写请求,那如果我没又设置timeout,是不是bus&nbsp;driver会一直发送读写请求?<br />&nbsp;&nbsp;&nbsp;&nbsp;我现在在驱动里读D12里的数据,不设置timeout,如果fireware一直不往D12的输入缓冲区填充数据,D12就会发送NAK,如果按书上的说法,bus&nbsp;driver会再一次发送读请求,并且一直等待设备发送数据。但是出现了个问题,几秒或者十几秒过后我的urb的回调函数就给调用了,并且urb-&gtstatus返回了-84(-EILSEQ),我查了下错误说明,又下面三种可能:a)&nbsp;CRC&nbsp;mismatch;b)&nbsp;no&nbsp;response&nbsp;packet&nbsp;received&nbsp;within&nbsp;the&nbsp;prescribed&nbsp;bus&nbsp;turn-around&nbsp;time;c)&nbsp;unknown&nbsp;USB&nbsp;error;这是什么原因呢?<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;补充一下:我在fireware是这样做的,D12&nbsp;bulk&nbsp;in端点收到了驱动读数据中断后什么也不做,只是读最后处理状态降中断标志清除掉了。<br />&nbsp;&nbsp;&nbsp;&nbsp;刚才我对D12的这个端点的中断次数计了下数,发现中断的次数都不一定,又时候几千上万次,又时候又几百次,(我觉得这就是驱动收到了NAK后又发送了读数据请求的次数)大侠给我解释下我哪里有问题了,万分感谢了。。。。。。<br />
computer00 发表于 2009-3-29 22:57 | 显示全部楼层

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

  
 楼主| kingyou 发表于 2009-3-29 23:02 | 显示全部楼层

bulk端点

我用的是D12的bulk端点,端点索引是5
 楼主| kingyou 发表于 2009-3-29 23:03 | 显示全部楼层

谢谢了

圈圈每次回答问题都好及时啊,感动中。。。
computer00 发表于 2009-3-29 23:15 | 显示全部楼层

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

  
 楼主| kingyou 发表于 2009-3-29 23:21 | 显示全部楼层

是自己开发的啊

&nbsp;&nbsp;&nbsp;&nbsp;就是最近闲着,就想在自己闲着的那块ARM板上用上面的D12和RTL8019弄个USB的网卡,现在就卡在这里了。。。
 楼主| kingyou 发表于 2009-3-29 23:24 | 显示全部楼层

补充下

&nbsp;&nbsp;&nbsp;&nbsp;还有个现象就是当urb-&gtstatus返回-84后,在一次运行我的应用程序读d12,d12端什么反映也没了,好像D12死了一样,中断什么都进不了,不过8019还能收到数据,我想可能是驱动端有什么问题导致第二次驱动的读请求都没发下来,所以d12什么反应都没。。。
computer00 发表于 2009-3-30 09:56 | 显示全部楼层

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

  
 楼主| kingyou 发表于 2009-3-30 15:05 | 显示全部楼层

郁闷啊。..

这问题不解决就不好弄了.<br />D12刚开始都还能正常返回NAK,什么情况会导致D12死掉了呢?<br />难道驱动端读数据太快,D12跟不上了。..
computer00 发表于 2009-3-30 15:34 | 显示全部楼层

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

  
 楼主| kingyou 发表于 2009-3-30 16:58 | 显示全部楼层

回复

下位机程序应该是没跑飞的,因为我板上的网卡都还能收到数据,并且通过串口发送到电脑上来。。
 楼主| kingyou 发表于 2009-3-30 17:06 | 显示全部楼层

回复

可能我板子是直接放机箱上的,晚上回去拿离机箱远点再试下。。。<br />有没有点办法能通过D12的PLL降低点D12的运行速率呢?
computer00 发表于 2009-3-30 18:49 | 显示全部楼层

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

  
 楼主| kingyou 发表于 2009-3-30 22:26 | 显示全部楼层

回复

哎,比较郁闷,我吧我的板子拿来离电脑远远的,还是不得行呢。。。<br />不要是我的USB线又问题哦
computer00 发表于 2009-3-31 10:21 | 显示全部楼层

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

  
 楼主| kingyou 发表于 2009-3-31 10:29 | 显示全部楼层

回复

&nbsp;&nbsp;&nbsp;&nbsp;我现在都把驱动简化得够简单的了,创建了一个全局的urb,执行read的时候填充urb为bulk形式的,然后submit之后等待回调函数的执行...哎,明明D12没返回数据,回调函数还执行...<br />&nbsp;&nbsp;&nbsp;&nbsp;之前还以为是虚拟机装的linux不行,然后在电脑里重新装了个还是这情况...
computer00 发表于 2009-3-31 15:41 | 显示全部楼层

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

  
 楼主| kingyou 发表于 2009-3-31 20:21 | 显示全部楼层

回复

是在linux下的,慢慢调了<br />
 楼主| kingyou 发表于 2009-3-31 20:22 | 显示全部楼层

回复

对了,圈圈,你书上好像没降USB-&gt网口的东东的哈?
computer00 发表于 2009-3-31 20:27 | 显示全部楼层

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

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

33

帖子

0

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