1、根据Universal Serial BusMass Storage ClassBulk-Only Transport数据手册中可以得知usb大容量存储设备的传输过程如下如所示:

CBW(Command Block Wrapper)命令块包的格式如下:

typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
struct CBW
{DWORD dCBWSignature;//CBW的标识,固定值:43425355h (小端模式)。DWORD dCBWTag; //主机发送的一个命令块标识,设备需要原样作为dCSWTag(CSW中的一部分)再发送给Host;主要用于关联CSW到对应的CBW。DWORD dCBWDataTransferLength; //CBW命令要求在命令与回应之间传输的字节数。如果为0,则不传输数据。BYTE bmCBWFlags; //反映数据传输的方向,0x00 表示来自Host,0x80 表示发至Host。BYTE bCBWLUN; //对于有多个LUN逻辑单元的设备,用来选择具体目标。如果没有多个LUN,则写0。BYTE bCBWCBLength; // 命令的长度,范围在0~16。BYTE CBWCB[16]; //传输的具体命令
};

CSW(Command Status Wrapper)命令状态包的格式如下:

struct CSW
{DWORD dCSWSignature;// CSW的标识,固定值:53425355h (小端模式)DWORD dCSWTag;//主机发送的一个命令块标识,设备需要原样作为dCSWTag(CSW中的一部分)再发送给Host;主要用于关联CSW到对应的CBWDWORD dCSWDataResidue;//还需要传送的数据,此数据根据dCBWDataTransferLength-本次已经传送的数据得到 BYTE bCSWStatus; //指示命令的执行状态。如果命令正确执行,bCSWStatus 返回0
};

接下来,我们使用USB分析仪分析如下USB传输数据包:

1:OUTtxn 输出事务:输出 31 B 的 命令块包(CBW)
2: OUTtxn 输出事务:输出 dCBWDataTransferLength B 的 数据
3: INTxn 输入事务:输入 13 B 的 命令传输状态包(CSW)

4: OUTtxn 输出事务:输出 31 B 的 命令块包(CBW)
5: INtxn 输入事务:输入 dCBWDataTransferLength B 的 数据
6: INTxn 输入事务:输入 13 B 的 命令传输状态包(CSW)

2、其次我们还要了解USB传输中:每一个传输包含一笔或多笔事物,每一笔事务又包含一个、两个或三个信息包。
事 务:Setup(设置)事务、IN(输入)事务、OUT(输出)事务
信息包:令牌信息包、数据信息包、联络信息包

传输 |——>事务——>令牌信息包+数据信息包+联络信息包
|——>事务——>令牌信息包+数据信息包+联络信息包
|——>事务——>令牌信息包+数据信息包+联络信息包

于是我们将数据包展开如下图所示:

由上图可以看出,要想完成一个USB大容量存储设备的传输即输入或输出事务,
就必然伴随着
1:OUTtxn输出事务:CBW
2: 根据CBW中的 bmCBWFlags来确定数据传输的方向:OUTtxn/INtxn事务
3:INtxn输入事务:CSW

USB大容量存储设备Bulk Only传输过程相关推荐

  1. USB大容量存储设备无法启动该怎么办?

    USB大容量存储设备(USB mass storage device class,也称为USB MSC或UMS)是一个协议,允许一个USB接口的设备与电脑相连接,以便在两者之间传输文件.对于电脑来说, ...

  2. linux内核不能识别u盘分区,一种在Linux内核中识别特定USB大容量存储设备的方法及系统与流程...

    本发明涉配usb设备识别技术领域,特别是涉及一种在linux内核中识别特定usb大容量存储设备的方法及系统. 背景技术: 在linux系统下对usb设备进行管控,一般而言有两种方法,一种是阻断新插入设 ...

  3. usb大容量存储设备驱动_usb无法识别怎么办 如何解决usb识别故障【详细步骤】...

    usb无法识别怎么办? 随着计算机硬件飞速发展,外围设备日益增多,键盘.鼠标等早已为人所共知,数码相机.MP3随身听接踵而至,这么多的设备,如何接入个人计算机?USB就是基于这个目的产生的.USB是一 ...

  4. linux 看usb 存储设备,找到哪个驱动器对应于Linux中的哪个USB大容量存储设备

    我有几个USB大容量存储闪存驱动器连接到Ubuntu Linux计算机(Ubuntu 10.04.1,内核2.6.32-25-386),我需要以编程方式区分它们(如果可能的话,从bash,但我不害怕编 ...

  5. USB大容量存储设备该设备无法启动(代码 10)

    在设备管理器中查看有感叹号,出现了"USB大容量存储设备该设备无法启动(代码 10)"的提示 解决方法如下: 1.按下"Win + R"组合键打开运行窗口,输入 ...

  6. 【完美解决】Windows下移动硬盘无法弹出 | 弹出USB大容量存储设备时出问题 | Windows无法停用设备 | \$Extend\$RmMetadata\$TxfLog\$TxfLog.blf

    前言 使用U盘或者移动硬盘弹总是会遇到无法弹出的情况.此时windows往往不会告诉你具体是什么设备占用,只会提示:弹出 USB 大容量存储设备 时出问题 或 Windows 无法停用"通用 ...

  7. 【USB】STM32F103C8单片机上完全用寄存器实现的USB大容量存储设备

    本程序的目的是为了演示STM32 USB寄存器的使用方法以及SCSI命令的处理流程,程序只实现了基本的磁盘读写功能. 该USB设备使用了3个端点:ENDP0(Control型端点),EP1_IN和EP ...

  8. usb大容量存储设备驱动_Win10默认已禁用USB驱动器缓存 1903版本起无需点击安全弹出...

    在从计算机上拔下 USB 闪存驱动器之前,许多人已经养成了手动点击任务栏上的"安全删除硬件"图标来"弹出"的习惯.然而从 Windows 10 1903 版本起 ...

  9. usb大容量存储设备驱动程序_20年历史了!为什么USB接口还存在?网友:原来如此...

    USB接口作为计算机领域应用最广泛的数据接口,已有20多年的历史. 和它的名字一样,USB(Universal Serial Bus)最初也是为统一的数据接口而设计的.你几乎可以用它来代替计算机的各种 ...

最新文章

  1. 分布式协议基础http协议
  2. postgres使用dblink
  3. python一加到二十_46 python学习笔记
  4. dmn是大脑中哪个区域_DMN中的函数式编程:感觉就像再次重读我的大学课程一样...
  5. 1、流程控制语句switch 2、数组 3、随机点名器案例
  6. 【割点】【割边】tarjan
  7. 华为业务流程管理体系
  8. iOS逆向工程开发技巧
  9. Oracle字符集及其查看和修改
  10. AS常用指令,常用功能,以及常见问题
  11. LA 3713 Astronauts
  12. 病毒分析与防护实验3—— 反汇编工具(Ollydbg)的使用
  13. python的for语句打印金字塔图形_python打印星号金字塔的方法
  14. MathType如何编辑商标标志
  15. java如何使截取字符串_java中如何截取字符串中的指定一部分
  16. A Game of Thrones(46)
  17. 获取gridview当前选中行的内容
  18. axis2 webService开发 附深入理解 Java 垃圾回收机制
  19. python二进制转中文_python3 二进制转中文
  20. ai技术与能源行业_最终AI能源效率的新方程式

热门文章

  1. jQuery筛选-文档处理
  2. 【计算机网络】彻底明白IP地址——计算相关地址
  3. 为方便大家,我分析导出了些高速下载器捆绑软件的反安装reg,需要的可自行选择
  4. 安装Deepin后,无法进入windows解决
  5. 程序员的四境界、七宗罪与七武器
  6. 操作系统概述及各类操作系统特点
  7. 可可西里-昨夜,真实让我感动!
  8. python电子签章_签名python的搜索结果-阿里云开发者社区
  9. 一次网站的性能优化之路 -- 天下武功,唯快不破
  10. 思维导图simplemind添加样式预设的方法