bus driverhound为什么抓不到U盘枚举数据,插上U盘就是这样:

扫描下载MIUI论坛APP
经验3028 米
在线时间27 小时
版本6.7.14
积分 3125, 距离下一级还需 1875 积分
积分 3125, 距离下一级还需 1875 积分
机型小米手机5
签到次数126
MIUI版本6.7.14
我的M2用OTG连接插上U盘之后检测不到U盘和里面的文件,请高手机油帮忙解决,谢谢了!
分享到微信朋友圈
打开微信,点击底部的“发现”,使用 “扫一扫” 即可将网页分享到我的朋友圈。
经验6952 米
在线时间276 小时
版本V6.3.12.0.KHKCNBL
积分 7838, 距离下一级还需 12162 积分
积分 7838, 距离下一级还需 12162 积分
机型小米手机2/2S
签到次数122
MIUI版本V6.3.12.0.KHKCNBL
貌似只能识别FAT32格式的,对于NTFS格式的U盘和移动硬盘只能显示USB存储设备无文件
小米手机*#*#284#*#*就可以抓取log,文件保存在MIUI下
经验18188 米
威望243 米
在线时间1066 小时
版本6.10.9
机型小米手机5
签到次数176
MIUI版本6.10.9
通过手机发布
文件管理-sd卡旁边有个小三角^
经验3028 米
在线时间27 小时
版本6.7.14
积分 3125, 距离下一级还需 1875 积分
积分 3125, 距离下一级还需 1875 积分
机型小米手机5
签到次数126
MIUI版本6.7.14
现在接上了显示出来U盘里的东西了,但我拔了U盘再用数据线接电脑上面又显示不出手机的内存了,又是该怎么解决啊;
经验3028 米
在线时间27 小时
版本6.7.14
积分 3125, 距离下一级还需 1875 积分
积分 3125, 距离下一级还需 1875 积分
机型小米手机5
签到次数126
MIUI版本6.7.14
现在接上了显示出来U盘里的东西了,但我拔了U盘再用数据线接电脑上面又显示不出手机的内存了,又是该怎么解决啊;
经验18188 米
威望243 米
在线时间1066 小时
版本6.10.9
机型小米手机5
签到次数176
MIUI版本6.10.9
设置-开发者选项-usb调试,关了,再用数据线连接电脑,我的电脑-在u盘位置你就看见手机的内存了,这种适合大文件转存
如果要通过电脑安装软件(91,豌豆荚),必须把usb调试打开
MIUI 3000万
MIUI 3000万发烧友纪念勋章
MIUI 2000万
MIUI 2000万发烧友纪念勋章
1000万用户纪念勋章
MIUI1000万用户纪念勋章
已关注微信
关注腾讯微博
已关注腾讯微博
关注新浪微博
已关注新浪微博
MIUI三周年
MIUI三周年纪念勋章
MIUI 100周
100周发布纪念勋章
MIUI 300周
MIUI 300周更新纪念勋章
MIUI 7纪念勋章
MIUI五周年
MIUI五周年纪念勋章
小米平板首发纪念勋章
小米平板首发纪念勋章
已关注极客秀微信
MIUI年度优秀勋章
Copyright (C) 2016 MIUI
京ICP备号 | 京公网安备34号 | 京ICP证110507号小学四年级
之前没有用lib,写出的程序读个别U盘时失败。大部分U盘可以成功。
这次改成了使用官方的lib,也出现问题,还是上次那个出问题的U盘。
以扇区模式读取U盘时,成功2、3次后就停留在CH375ReadBlock()这个函数中不动了。
U盘插入后CH375DiskReady、CH375DiskSize等都是可以成功的。
用好U盘,读取一直是很顺利的。
请教,
1,使用库时,有没有办法加上超时机制,即如果有问题超时后出错,而不是一直停留不动。
2,遇到这样的U盘,是只能死心了,还是有办法调出来?
小学四年级
注,使用的是查询模式。
另外,一次读取1个扇区,连续读取几次后死机,如果一次读取多个扇区,第一个读取就会死机。
18612 积分
如果您那边调试的U盘无法成功的话,建议您可以把U盘发给我们来调试,看下低层USB传输出现什么错误导致传输失败,这样查出来帮您解决掉传输出错的问题。
或者这样,您可以在您计算机上面把HIGH-SPEED这部分驱动给停掉,然后在计算机上面传输这个U盘,使用BUSHOUND这个软件来抓取数据,看下计算机怎么处理的,然后我们按照计算机来处理就可以了。
小学四年级
你好,最新发现,死循环是停在这个函数里:
void xQueryInterrupt( void ) ,
因为这里面有一句:
while ( CH375_INT_WIRE );
/* 如果CH375的中断引脚输出高电平则等待 */
---------------------------------------------
之前官方的资料里有提到,U盘兼容的概率90%,而我之前不用库做出来的,在其他人手里不兼容的问题很普遍。(但是我们买了很多U盘,在我们自己手里出问题的只有1个)
我现在把CH375_INT_WIRE去掉,改用查询端口再试试。
邮寄U盘,当前这1个U盘即使解决了,也不知道其它不行的是否可以用。所以我想先多从程序着手。
17177 积分
有某些U盘确实很奇怪。特别是金士顿的假牌U盘。我们的库经过实际的测试过,大概测试了几百种U盘。没有发现有问题。当然我们也没有条件把所有的U盘全部测试,不能排除某些U盘操作很特殊,我们也确实碰到过类似的U盘。您把U盘寄过来,如果是程序问题我们找到原因后会及时更新的。
小学四年级
请教一下:
现在是一次读取8个扇区,读取几次后出错。(10次左右)
如果改成一次读取1个扇区,连续读8次,连第一个循环都过不去。 不知道连续读取时有什么地方要注意的?
另外,如果读取时出错,想重试,直接重新读取还是出错,想重新初始化U盘,但是发现使用库时CMD_DISK_INIT之类的指令库中都隐藏了,不知道有什么办法没有?
评分扣除自身相应积分,普通会员最高加分3分
你需要登录才可以发帖
江苏沁恒论坛bus hound数据分析?解决思路 - VC/MFC当前位置:& &&&bus hound数据分析?解决思路bus hound数据分析?解决思路&&网友分享于:&&浏览:203次bus hound数据分析??我用bus hound 来捕捉u盘与pc机通讯时候的协议,应该怎么做啊19.1
48 00 09 00
00 00 00 00
00 92 a9 89
22 00 00 00
0c bd af 89
03 00 00 00
00 00 00 00
70 f1 c9 89
BULK/INT XFER
我知道URB是usb请求模块,那里面的数据应该怎么看, BULK/INT XFER 是什么意思?求高手,刚接触这个 &
&------解决方案--------------------
bulk是批量的意思,一般大数据量的设备用bulk,比如光驱,扫描仪等等。INT可能是中断传输的意思。
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有君,已阅读到文档的结尾了呢~~
BusHound数据分析
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
BusHound数据分析
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口设备驱动(3)
Mass Storage设备,即大容量存储设备,最典型的莫过于U盘了,而U盘一般以Bulk Only传输方式实现。
1、USB Mass Storage设备的描述符及枚举过程
描述符就是对应标准请求的那些描述符,与HID设备不同,Mass Storage设备没有自己的类描述符。描述符在USB Mass Storage Class Bulk-Only Transport文档中有详细的一对一的描述。所以此处不再赘述,仅举一例:
(设备描述符略,通用定义,与设备类无关)
(配置描述符略,通用定义,与设备类无关)
_Interface_Descriptor:
&&&& .dw&& 0x09&&&&&&&&&&&&&&&&&& //bLength: 0x09 byte
&&&& .dw&& 0x04&&&&&&&&&&&&&&&&&& //bDescriptorType: INTERFACE
&&&& .dw&& 0x00&&&&&&&&&&&&&&&&&& //bInterfaceNumber: interface 0
&&&& .dw&& 0x00&&&&&&&&&&&&&&&&&& //bAlternateSetting: alternate setting 0
&&&& .dw&& 0x02&&&&&&&&&&&&&&&&&& //bNumEndpoints: 3 endpoints(EP0,EP1,EP2)
&&&& .dw&& 0x08&&&&&&&&&&&&&&&&&& //bInterfaceClass: Mass Storage Devices Class
&&&& .dw&& 0x06&&&&&&&&&&&&&&&&&& //bInterfaceSubClass:
&&&& .dw&& 0x50&&&&&&&&&&&&&&&&&& //bInterfaceProtocol
&&&& .dw&& 0x02&&&&&&&&&&&&&&&&&& //iInterface: index of string
_Interface_Descriptor_End:
_Endpoint1:
&&&& .dw&& 0x07&&&&&&&&&&&&&&&&&& //bLength: 0x07 byte
&&&& .dw&& 0x05&&&&&&&&&&&&&&&&&& //bDescriptorType: ENDPOINT
&&&& .dw&& 0x81&&&&&&&&&&&&&&&&&& //bEndpointAddress: IN endpoint 1
&&&& .dw&& 0x02&&&&&&&&&&&&&&&&&& //bmAttributes: Bulk
&&&& .dw&& 0x40, 0x00&&&&&&&&&&&& //wMaxPacketSize: 64 byte
&&&& .dw&& 0x00&&&&&&&&&&&&&&&&&& //bInterval: ignored
_Endpoint2:
&&&&&&& //Endpoint 2 (0x07 byte)
&&&& .dw&& 0x07&&&&&&&&&&&&&&&&&& //bLength: 0x07 byte
&&&& .dw&& 0x05&&&&&&&&&&&&&&&&&& //bDescriptorType: ENDPOINT
&&&& .dw&& 0x02&&&&&&&&&&&&&&&&&& //bEndpointAddress: OUT endpoint 2
&&&& .dw&& 0x02&&&&&&&&&&&&&&&&&& //bmAttributes: Bulk
&&&& .dw&& 0x40, 0x00&&&&&&&&&&&& //wMaxPacketSize: 64 byte
&&&& .dw&& 0x00&&&&&&&&&&&&&&&&&& //bInterval: ignored
关于请求:
第一,主机首先会发出一系列标准请求。
第二,在标准请求完成之后,会发出两个类请求:Bulk-Only Mass Storage Reset请求和Get Max LUN请求。这两个请求的格式可以在USB Mass Storage Class Bulk-Only Transport文档中查询。
Bulk-Only Mass Storage Reset没有数据阶段,只在状态阶段告诉主机设备的Reset过程完成与否。如果在状态阶段返回ACK,那么主机就认为设备已经Reset完毕并准备好接收CBW了。
Get Max LUN要求设备返回一个字节的数据给主机,以表明此USB设备有多少个逻辑设备。返回的这个数据就是最大的设备逻辑号(Logic Unit Number),范围是0到15。例如,如果返回2,那么代表有0、1、2三个逻辑设备。
2、USB Mass Storage设备的Bulk数据交换流程
通过bulk端点进行的数据传输,都遵循这样一个过程,即三个阶段:
CBW-&DATA-&CSW
CBW是一个数据块,携带主机发给设备的SCSI命令。接收了CBW后,设备就可以从中知道在接下来的DATA阶段中该干什么。
DATA阶段有三种情况:无数据需要传输,IN传输(设备到主机)或OUT传输(主机到设备)。
CSW阶段反馈这次传输的结果给主机。
其中值得注意的是:
- 在设备枚举完成之后,主机发出的第一个bulk OUT事务就是请求向设备发出CBW。所以设备可以通过这第一次的bulk OUT事务来判定第一次bulk数据传输的开始。此后的bulk数据传输就按照上述的三个阶段反复执行。也就是说,第一次传输CBW后,如果有数据要传输,那么就会经历DATA阶段,然后进入CSW阶段;如果没有数据要传输,则直接进入CSW阶段,就此一次传输结束。接下来,如果又有传输,那么再发出CBW。因此,设备可以认为CSW完成后收到的下一个bulk
OUT事务就是主机请求传输新的CBW。
- CBW[12](CBW数据块的第13个字节)指明了传输方向,CBW[8-11]指明了传输的数据长度。实际上,CBW中的SCSI命令就暗含了数据要传输的方向和数据长度,因为SCSI规范中已明确规定这个命令所对应的数据格式。(在完整的应用中,要将CBW中的传输方向、数据长度与SCSI命令所表明的传输方向和数据长度做比较,不对应就要进行错误处理(Mass Storage
Bulk-Only文档中有相关描述),不过正常情况下二者是匹配的,试验的时候可以暂时不理)。
- CSW[12](CSW数据块的第13个字节)这个字节很重要,它为0则表示此次传输成功,非0就是不成功。在DATA阶段的数据传完(或者无需数据传输)之后,主机会发出IN事务请求设备返回CSW。如果CSW传送的是不成功的信息,那么主机会接着发送另一个命令来获取失败的详细信息(即RequestSense命令)。
3、Mass Storage设备所使用的SCSI命令集
0x00 && TestUnitReady
0x03&&& RequestSense
0x12&&& Inquiry
0x1A&&& ModeSense6
0x1B&&& StartStop
0x1E&&& MediumRemoval
0x23&&& ReadFormatCapacity
0x25&&& ReadCapacity
0x28&&& Read(10)
0x2A&&& Write(10)
0x2F&&& Verify
0x5A&&& ModeSense10
- 主机首先发出Inquiry命令,响应了Inquiry之后就可以看到盘符.
- Inquiry之后会发出ReadFormatCapacity命令,这个命令在SCSI规范中是“厂家自定义命令”,可以参考UFI命令集文档(实际上,U盘所使用的所有SCSI命令集都可以参考UFI文档,它比SCSI标准文档更简洁明了)。注意这个命令在BusHound里是没有描述的,必须在“Device”选项页里勾选上这个U盘所对应的USB Mass Storage Device这个节点,才能看到这个命令的数据流。
- ReadFormatCapacity之后会发出ReadCapacity命令。
- U盘读数据(读扇区)时会发送Read(10)。ReadCapacity完成后就会发送Read(10)读取U盘的第一个扇区。
- U盘写数据时(写扇区)会发送Write(10)。
- TestUnitReady会在无其他数据传输时会定时发送,如果设备没有回应成功的CSW给主机,则主机认为设备已不存在。此时如果再双击磁盘图标,Windows会提示“请插入磁盘”。
- Verify在写数据时有用,表示核实数据,一般直接返回成功的CSW就可以了。一般来说,数据校验的工作在接收和向介质写数据时就已经顺带做了,如果发现错误,则直接告诉主机那次的数据传输有误,不会等到主机Verify时。当然,这不是一个必然的方案。
- RequestSense:如果CSW指示此次传输不成功,那么主机会发出此请求。
- StartStop暂时未发现大用处,一般直接返回成功的CSW。
- MediumRemoval在U盘被Eject的时候有用,处理不正确会Windows会弹出错误信息。
- ModeSense6/10这两个命令可以不支持(不支持不代表不反应,任何一个命令你都要做出反应,对于不支持的命令,可以通过STALL握手来向主机表明),暂时也未遇到过什么异常情况,而且我查看过一些U盘,有相当一部分就是随便回了几个数据给主机。这两个命令只会在U盘插入后发送一次,此后不再发送。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:676次
排名:千里之外

我要回帖

更多关于 android bus 的文章

 

随机推荐