电子工程师名片——UFI Command,USB盘符的显示
USB Mass Storage类规范概述
USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备。协议使用的接口端点有BulkIn、BulkOut和Interrupt端点。该设备类又包含6个独立的子类以及3种传输协议。
Bulk- Only 传输规范仅仅使用Bulk 端点传送数据/命令/状态,CBI 传输规范则使用Control/Bulk/Interrupt 三种类型的端点进行数据/命令/状态传送。
我们手中的U盘就是遵循SCSI协议的。要知道U盘不仅仅是USB设备,它还是一种存储设备,类似硬盘,USB协议本身没有定义对存储设备操作的指令,所以需要通过SCSI来完成读写等操作。
Microsoft Windows 中提供对Mass Storage 协议的支持,因此USB 移动设备只需要遵循 Mass Storage 协议来组织数据和处理命令,即可实现与PC 机交换数据。而Flash 的存储单元组织形式采用FAT16 文件系统,这样,就可以直接在Windows的浏览器中通过可移动磁盘来交换数据了,Windows 负责对FAT16 文件系统的管理,USB 设备不需要干预FAT16 文件系统操作的具体细节。
USB成功枚举之后会在设备管理器上面显示USB MassStorage Device(且带有黄色感叹号),否则会显示unknow device,
而只有在进行UFI(具体是在inquiry命令之后)通讯之后主机才会显示盘符,且本来在设备管理器中USB MassStorage Device上的黄色的感叹号消失。
因为这个时候USB设备已经枚举成功(主机发送的GetDescriptor、SetAddress等之类的请求都回复成功才能正确的枚举),所以可以通过BusHound来查看在USB UFI Command的情况,USB设备的枚举都是通过端点0来实现,而USB UFI Command都是通过端点1来实现,所有的命令的数据流都在端点1。除了BusHound之外,还有很多查看USB总线数据的软件,例如USB View等,查看Flash数据的软件有winhex。
枚举过程CATC仪器抓取数据的文件:http://download.csdn.net/detail/luckywang1103/6315437 usbUFI.usb
1、GetMaxLun(0xFE)
1)Setup Stage
2)Data Stage
3)Status Stage
以上这个阶段对应的程序是
case GetMaxLun://实际上对U盘来说,忽略该步骤也没有影响//要求设备返回一个字节给主机,以表明USB设备有多少个//逻辑设备,返回的数据就是这个最大设备逻辑号(0到15)//如果返回2,代表有0、1、2三个逻辑设备SFR_Write(FIFO0,0x00);SFR_Write(E0CSR,0x0a);
break;
接下来开始在端点1进行UFI Command传输
UFI Command构成如下:CBW—>数据—>CSW,三个阶段
CBW:Command Block Wrapper 命令块数据包
CSW:Command Status Wrapper 命令执行状态
2、Inquiry Command(0x12)
1)CBW
主机在端点1所发出的UFI Command的DATA0数据可以对照图Table 5.1进行解析。
dCBWSignature:55 53 42 43 help identify this data packet as CBW
dCBWTag:90 C8 E8 88 Command Block Tag send by host
dCBWDataTransferLength:24 00 00 00 data numbers that host expect to transfer on the Bulk-In or Bulk-Out endpoint
剩余的12 Bytes就是CBWCB:12 00 00 00 24 00 00 00 00 00 00 00
CBWCB(CBW里面的command block)12个字节的解析参考《USB Mass Storage Class-UFI Command Specification》
12:Inquiry Command
24:Allocation Length specifies the maximum number of bytes of inquiry data to be returned,数据阶段最大传送36 Bytes
2)Data In
这36 Bytes是按照Inquiry data的格式要求返回的,具体协议数据的分析参考《USB Mass Storage Class-UFI Command Specification》
3)CSW
dCSWSignature:55 53 42 53 help identify this data packet as CSW
dCSWTag:90 C8 EB 88 CSW的这个字段同CBW的dCBWTag字段
3、Read_Format_Capacity(0x23)
1)CBW
2)Data
3)CSW
4、Read_Capacity(0x25)
1)CBW
2)Data
3)CSW
5、Read_10(0x28)
上面几个请求如果均正确返回,Host会发出Read读文件系统0簇0扇区的DBR数据,进入文件系统识别阶段。
1)CBW
2)Data
3)CSW
6、ModeSense6(0x1A)
1)CBW
2)Data
3)CSW
7、重复第6步,ModeSense6(0x1A)
8、重复第4步,Read_Capacity(0x25)
9、重复第4步,Read_Capacity(0x25)
10、重复第5步,Read_10(0x28)
11、重复第5步,Read_10(0x28)
12、重复第4步,Read_Capacity(0x25)
13、重复第4步,Read_Capacity(0x25)
14、重复第5步,Read_10(0x28)
15、Test Unity Ready(0x00)
1)CBW
3)CSW
16、重复第4步,Read_Capacity(0x25)
17、重复第4步,Read_Capacity(0x25)
18、重复第4步,Read_Capacity(0x25)
19、重复第5步,Read_10(0x28)
20、接下来一直会重复Test Unity Ready(0x00)
说明:
MASS Storage设备所使用的SCSI命令集
0x00: testUnityReady
0x03: Request Sense
0x12: Inquiry
0x1A: ModeSense6
0x1B: StartStop
0x1E: MediumRemoval
0x23: ReadFormatCapacity
0x25: ReadCapacity
0x28: Read10
0x2A: Write10
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盘插入后发送一次,此后不再发
送。
电子工程师名片——UFI Command,USB盘符的显示相关推荐
- 电子工程师名片——FAT16文件系统(转)
源:电子工程师名片--FAT16文件系统 从8月8号开始,连续一个月利用每天下班时间和周末的时间终于初步完成了一个电子工程师的电路板名片,就像U盘一样,不过这个FLASH只有64KB的大小,用的单片机 ...
- 计算机u盘 硬盘无法读取,U盘、移动硬盘盘符不显示及无法识别解决方法
U盘.移动硬盘盘符不显示及无法识别解决方法 发布时间:2012-12-21 17:36:04 作者:佚名 我要评论 我们使用的绝大多数移动硬盘和U盘都是使用USB接口,属于即插即用类型.我们经 ...
- win7打开计算机没盘符,计算机U盘盘符不显示怎么办?Win7系统U盘不显解决办法...
虽说win7系统相对于XP系统来说是一大进步,但它也有一些不良的地方.有时候,当你的U盘插入到电脑里面,却显示不出U盘的盘符,u盘盘符不显示怎么办.一般来说,电脑不显U盘盘符有两种情况,一种就是电脑本 ...
- u盘盘符不显示 win10_Win10不显示U盘的盘符怎么办
使用win7系统的用户就试过U盘盘符不显示的问题,想不到现在在win10系统,还是会遇到同样的问题,U盘插入电脑不显示盘符,将电脑重启.U盘重新插入都不能解决问题,网上介绍了那么多方法,到底哪个是有效 ...
- java显示本地磁盘所有盘符,显示桌面路径
import java.io.File; import javax.swing.filechooser.FileSystemView;/** 显示本地磁盘根盘符,显示桌面路径 */ public cl ...
- 计算机上是如何注明固态硬盘的,笔记本固态硬盘不见了怎么回事_笔记本电脑固态硬盘盘符不显示如何解决-win7之家...
许多用户在使用电脑的时候,发现电脑速度比较慢又卡,所以就会加装固态硬盘来提升性能,我们在装上固态硬盘之后,就会在计算机中看到固态硬盘显示的盘符,可是有笔记本电脑用户却遇到固态硬盘不见了的情况,这是怎么 ...
- win10计算机光驱启动怎么办,在win10中,光驱盘符不显示怎么办?
在电脑上发现光驱盘符不显示了,这个时候该怎么办呢?接下来小编就从主要症状.可能原因以及解决方法来为大家介绍下在win10中,光驱盘符不显示怎么办. 主要症状 打开"我的电脑"不显示 ...
- 电子工程师名片——FAT16文件系统
从8月8号开始,连续一个月利用每天下班时间和周末的时间终于初步完成了一个电子工程师的电路板名片,就像U盘一样,不过这个FLASH只有64KB的大小,用的单片机是C8051F320,是一个USB型的单片 ...
- u盘盘符不显示 win10_荣耀16.1锐龙版 linux装win10教程
上篇简单体验了一下荣耀16.1的深度系统,本篇来详细写一下装win10系统以及流程 硬件: 一台电脑 制作pe 需要一个u盘 8g以上把,现在一个32g的随便买也就30元左右 ,推荐买东芝 闪迪 三星 ...
最新文章
- php JSON数据格式化输出方法
- Linux 守护进程的原理与实现
- 非对称性密钥加密 java 实例_JAVA实现非对称加密
- 從三種方式看SQL的使用程度
- aws lambda_如何为AWS Lambda实施日志聚合
- ThreadLocal实现线程范围内的共享变量
- windows 防火墙疑难解答程序_Win8系统设置允许程序通过防火墙的方法
- MySQL MHA切换失败一例
- CompletableFuture异步任务的简单使用
- java 工作一年的简历
- 【HTML5入门指北】第二篇 网页相关的标签
- Buoyant的Conduit服务网格正式成为Linkerd 2
- 关于深度学习神经网络模型训练,参数过大,导致显卡内存溢出问题的总结
- Rabbitmq 基础
- flutter中的路由表和路由管理
- 半岛铁盒平板测评--真的很垃圾的平板-怎么修改CPU型号
- iOS开发脚踏实地学习day14-绘图
- 动画 (Animation) 资源类型详述 (1)
- Nginx+Tomcat服务器负载均衡实践方案
- Vijos - 佳佳的魔法药水(最短路)
热门文章
- 1793D Moscow Gorillas
- 由PVID引起的故障现象
- zookeeper控制台
- 视频网站的植入性广告
- 【FPGA】时序逻辑电路——基于计数器实现一个以1秒频率闪烁的LED灯
- fastica和pca区别_浅谈ICA算法的概念、本质和流程
- 华数tv直播android,华数tv电视版apk下载-华数TV电视版下载v5.0.0.55 官方最新版__西西安卓tv下载...
- 关于Vmware-Tools的安装问题:Please re-run this program as the super user. Execution abor
- 现在最流行的Java开发技术是什么?
- 初学者学习web前端用什么软件