USB大容量存储设备Bulk Only传输过程
来源:互联网 发布:西安高新区软件新城 编辑:程序博客网 时间:2024/05/16 15:31
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到对应的CBW DWORD 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传输过程
- USB 大容量存储设备的开发
- STM32 USB HID 自定义设备 bulk 传输
- usb开发笔记1-Bulk-Only传输协议
- usb的bulk传输
- 如何实现自定义 USB Bulk 批量传输设备
- win10突然不能使用usb大容量存储设备(移动硬盘)的解决方法
- android usb大容量存储时sd卡状态监听
- android usb大容量存储时sd卡状态监听
- USB Mass Storage大容量存储的基本知识
- USB Mass Storage大容量存储的基本知识
- USB Mass Storage大容量存储的基本知识
- BULK INSER(大容量文本导入)
- 大容量导入语句BULK INSERT INTO
- 使用 BULK INSERT 或 OPENROWSET(BULK...) 导入大容量数据
- blackberry bold 不提示"大容量存储设备" 的解决方法
- Mac开发之如何移除大容量存储设备
- USB设备的Bulk模式驱动程序设计
- Twisted学习记录
- Android两级导航菜单栏的实现--FragmentTabHost+自定义二级导航菜单栏
- 移动端开发工具整理
- C#从字符串获取文件路径
- 认真画线2
- USB大容量存储设备Bulk Only传输过程
- Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置
- Java 多线程同步--synchronized
- FragmentPagerAdapter与FragmentStatePagerAdapter区别
- HDU2063 过山车(二分图匹配-匈牙利算法模版题)
- QML 自定义button样式1
- Java中,*=和+=的执行流程
- 【Struts2】文件的上传与上传权限的控制
- 使用IntelliLock加密授权.Net程序