阅读:1242回复:10
又发现有的u盘居然不支持setInterface(),这不都是标准规定了的吗?
呵呵,不解?
|
|
|
沙发#
发布于:2004-05-26 18:54
呵呵,不解? 俺见了很多都不支持的,还有一个不支持ReadCapacity的呢:) |
|
|
板凳#
发布于:2004-05-26 21:02
你给我的email已回了,没征求你的意见就贴出来了,不会怪我吧?
兼容性方面可以如下考虑: 根据所得到的接口描述符,倒数第2个数就表示U盘传输遵循的协议,其值为:01、02或50其中50是最常见的。兼容性好首先要支持他们。其实这3种在实际传输中基本上差不多 对于set config、set interface、还有获得字符串描述符等信息都有可能会出现stall、timeout等情况。在windows下也可以看到这一点,尤其是字符串描述符的获得,可能因为U盘本身没有做好导致timeout的现象比比皆是。 对于UFI命令集对于U盘来说它也是不可能全部都支持的,所以它选择它必须得完成的,如read10、write10等。 对于出现了stall或timeout问题的处理,比较复杂,可以参考协议和Linux下的代码。并且对于不同的通道的处理都应该是不同的。比如说:在setup包建立的过程中出现了stall,而stall的出现在token、 data in、data out等条件下均应该处理,处理有重发、多次重发后如果仍然这样就查看状态,如果状态良好就可能要略过往下继续,或者换其它方式;如果状态有问题,可能就要clearfeature了。再比如:在mass storage枚举的时候,你要先发一些你需要的命令,如读命令就有好几个,U盘可能就实际支持一个,但你host就不能,必须全部支持,一个接一个的测试,发现可以的就记录下来,以后就用它来做读了。 至于mode sense/select都有很多U盘不支持,不做也没什么关系。 另外协议是死的,做出来东东才是关键,其实主要是选你要实现的几个关键命令就好了。 关于这方面的资料我没有,都是自己琢磨。如果你有的话,记得发给我一份,谢谢。 个人我认为如果是做产品的话,做OTG可能已经慢了,其实你只要能支持市面上95%的u盘就够了。 以后再聊吧。 >Subject: 我是驱动开发网网友,想和你交流一下 >Date: Wed, 26 May 2004 20:25:23 +0800 (CST) > > 你好,十分高兴你回复我的帖子. > 我正在做u盘兼容性方面的工作,发现了很多问题,有的u盘不支持 >setInterface,有的u盘不支持getCapacity,还有的u盘居然不支持clear_feature().那样的话,端点如果STALL的话,我怎么办? > 你有这方面的资料吗? > > >发件人: jerry_yang |
|
|
地板#
发布于:2004-05-27 08:54
十分感谢!
祝你早日成功! |
|
|
地下室#
发布于:2004-05-27 09:30
真是好帖子,。。。
|
|
5楼#
发布于:2004-05-27 09:34
问一个问题:
setup阶段的data out(状态阶段),大家是怎么处理的啊? 需要软件干预么? |
|
6楼#
发布于:2004-05-27 13:28
是的,需要你发一个空包
|
|
|
7楼#
发布于:2004-05-27 16:03
一般需要处理,data 阶段就是发数据或者读数据
问一个问题: |
|
|
8楼#
发布于:2004-05-27 16:03
问一个问题: |
|
|
9楼#
发布于:2004-05-27 19:08
疑惑啊,例如说响应get descriptor命令,发完描述府后,应该由主机往slave发状态包啊。状态阶段的方向应该和数据阶段相反。协议上是这么说得啊。
|
|
10楼#
发布于:2004-05-27 19:19
对,协议上有这么说。但是目前市面上的USB芯片已经由硬件完全实现了USB协议层,而不需要你固件的参与。
在发完数据之后,你只需检测寄存器的状态来判断你的传输是否正常 疑惑啊,例如说响应get descriptor命令,发完描述府后,应该由主机往slave发状态包啊。状态阶段的方向应该和数据阶段相反。协议上是这么说得啊。 |
|
|