请教一个USB问题
(一)有时候,我们向U盘写数据,OUT-DATA,U盘回NYET,这时候由于某些原因, 我们的host没有收到这个nyet,会因为 timeout发起重传,但是这时候我们ping U 盘的时候,无论如何他那边都是会NAK,重传无法进行下去。只有reset才能够重传。
这个问题改如何解?
(二)由于上面的原因或者一些其它的原因,我们可能会reset U盘,这时候U盘会 在多次reset之后在也没有反馈,有时候反馈的 description和之前的还不一致, 设备有原来的/dev/sda变成了/dev/sdb。
不知道大家有没有遇到过类似的现象?
谢谢。
上协议分析仪,找Host没收到NYET的原因,host没收到NYET,后面的现象是正常的。
谢谢你。
HOST由于干扰,收错的包,报了error。
所以希望发起重传,但是device不理会。
device 回NYET,也就意味着它不能再继续收数据了。按一般的规则,host应该做ping传输,如果device可以继续接受数据的时候,就回ACK,然后host可以继续收数据。现在是host继续发bulk out传输,device当然不会理会了。
你要解决的问题就是要把host收错包的原因找出来。
host收错包是不可避免的。
如果host能够收对这个NYET包当然就啥事都没有了。
host给device发送DATA,device回NYET,host由于自身原因没有能够收对这个NYET。
host在一定时间之后认为传输失败,发起重传,这个也是USB协议允许的做法。
我想请教的是,在host收到NYET认错的情况下,device在host无论怎么ping的情况下都不回ACK,有没有什么好的办法来处理这个问题。
常规做法就是host对device做reset
是的,我们也是做的。
但是就会出现我一开始帖子说的第二个问题。
RESET的次数多了,到了最后,会出现reset之后读不出description的问题。
不知道这个问题大侠有没有什么好的建议。
感觉U盘被host reset烦了,再也不理host了。
这事真是让人发愁啊。
你做再多次 device也不会烦的……
肯定是出现新的问题了,还是需要在bus上看到底是啥问题。
恩,谢谢你的中肯建议。
在reset之后,到device不再有反应,这个现象比较难出现。
不过还是要用协议分析仪把这个错揪出来。
btw:我在看网上一个文档的时候,提到有port reset/bulk-only mass storage reset,同时还提到一个叫command block reset的说法。请问您知道command block reset是指什么吗?
谢谢。
我说的文档是百度文库里面《单片机读写U盘FAT32或FAT16文件系统》的第23页。
其实我想问的是,在出现什么非常操作的情况下,我reset一个usb device,他不给我会description?
用协议分析仪,设定trigger条件,肯定可以抓到的。
那个mass storage的spec我没有研读过,你可以找来看看。
我说的是附件中这个文档。
真心希望版上多一点这样的技术讨论文章
最好以USB官方spec为准。
你们芯片有问题,测的u盘也有问题。
我们也一直也是以spec作为参照。
有时候也会到网上搜索一些文章看看能不能有什么线索。
看看别人有没有遇到同样的问题。
想的是多管齐下,早点找到bug把问题解决。
谢谢你。
呵呵,您说得对。
芯片总归会有些小毛病,我们也是希望能够找出来,看看能不能通过什么方法让它不影响使用;
要说U盘有问题,嗨,USB好多时候不就是兼容性问题嘛,
不管有没有问题,我们都得解决问题是不是?
2.0 host?
就现象1来看,device有问题,试试减小host ping的频率。改为50us试下,说不定device就能正常工作了
现象2不太好说,按道理bus reset 后device应该能正常工作的。还是抓下出错时trace看看是host工作不正常还是device。
有些垃圾device很难兼容的
谢谢你!是2.0 host.
关于第一个,我尝试一下调整ping的间隔;
关于第二个,我也再多做尝试,有结果报告大家。