12040|5

87

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何处理usb的STALL PID [复制链接]

三星44B0X+SL811HST,无操作系统,可以正确识别到1.1的U盘,但因为现在大多是2.0的U盘,发现有的2.0的U盘在做完
GetMaxLUN后,如果做Inquiry,也可以成功,但接下来做ReadFormatCapacity时,BulkIn会产生STALL,也就是读不到
FormatCapacity的内容,用BusHound查看同一个U盘在PC上的处理,同样产生了stall pid,内容如下:
Device  Phase  Data                                                Description     
------  -----  --------------------------------------------------  ----------------
  31.0  CTL    a1 fe 00 00  00 00 01 00                            GET MAX LUN     
  31.0  IN     00                                                  .               
  31.2  OUT    55 53 42 43  60 4c 9a 0a  24 00 00 00  80 00 06 12  USBC`L..$.......
               00 00 00 24  00 00 00 00  00 00 00 00  00 00 00     ...$...........
  31.1  IN     00 80 00 01  1f 00 00 00  20 20 20 20  20 20 20 20  ........        
               55 53 42 20  44 49 53 4b  20 32 2e 30  20 20 20 20  USB DISK 2.0   
               50 4d 41 50                                         PMAP            
  31.1  IN     55 53 42 53  60 4c 9a 0a  00 00 00 00  00           USBS`L.......   
  31.2  OUT    55 53 42 43  30 3b ce 07  24 00 00 00  80 00 06 12  USBC0;..$.......
               00 00 00 24  00 00 00 00  00 00 00 00  00 00 00     ...$...........
  31.1  IN     00 80 00 01  1f 00 00 00  20 20 20 20  20 20 20 20  ........        
               55 53 42 20  44 49 53 4b  20 32 2e 30  20 20 20 20  USB DISK 2.0   
               50 4d 41 50                                         PMAP            
  31.1  IN     55 53 42 53  30 3b ce 07  00 00 00 00  00           USBS0;.......   
  31.2  OUT    55 53 42 43  30 3b ce 07  fc 00 00 00  80 00 0a 23  USBC0;.........#
               00 00 00 00  00 00 00 fc  00 00 00 00  00 00 00     ...............
  31.1  USTS   c0000004                                            stall pid      
  31.1  RESET                                                                     
  18.0  CTL    a3 00 00 00  03 00 04 00                            GET STATUS      
  18.0  IN     03 05 00 00                                         ....            
  31.1  IN     55 53 42 53  30 3b ce 07  fc 00 00 00  01           USBS0;.......   
  31.2  OUT    55 53 42 43  30 3b ce 07  12 00 00 00  80 00 0c 03  USBC0;..........
               00 00 00 12  00 00 00 00  00 00 00 00  00 00 00     ...............
  31.1  IN     70 00 06 00  00 00 00 0a  00 00 00 00  28 00 00 00  p...........(...
               00 00                                               ..              
  31.1  IN     55 53 42 53  30 3b ce 07  00 00 00 00  00           USBS0;.......   

由此知道,windows驱动做了RESET的操作,可是我不清楚这个RESET到底做了些什么。
我做了如下几项测试,但都没达到效果:
1. 在STALL之后,做ClearFeature的操作去清除STALL,但重发任何命令,都还是产生STALL;
2. 在STALL之后,做usb mass storage reset的操作,做完之后再clear stall bulkin和bulkout两个端点,然
   后再发任何命令,还是返回stall
3. 在STALL之后,做mass storage reset,然后重新从分配usb地址之后的地方做USB设备枚举,比如GetDescriptor
   结果连这个也失败。

问题:1. STALL之后应该如何处理才能让操作继续下去,就像windows那样
      2. mass storage reset应该怎么做,我怀疑我的reset做的不正确,比如向设备发出reset后,如何判断reset
         已结束,我现在是用调试方式,延迟了很久,至少几秒钟,才继续执行下一条语句

最新回复

一般发生了stall,只要clear feature即可  详情 回复 发表于 2010-3-4 00:15
点赞 关注

回复
举报

62

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
有的命令返回stall不会有问题的,最好完全参考PC的做法
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
我也是碰到完全相同的问题,shark_gao@sohu.com
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

4
 
帮忙顶
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

5
 
我刚好也碰到这个问题了. 此时clear stall bulkin即可. 不要另外2个步骤.
我也实验了N种方法,后来仔细看了usbmassbulk_10.pdf后面的错误处理流量,才明白BusHound的RSET不是总线复位的意义, 而是复位pipe.
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
一般发生了stall,只要clear feature即可
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表