USB-CSW之旅
前面总结了usb mass storage的枚举过程,如果所有枚举正常,那么会进入bulkonly协议定义的数据交流,在这个数据包里面还包含了SCSI的协议。
Bulkonly协议usbmassbulk_10.pdf,网上搜搜就可以找到了,里面其实就是讲了标准的命令等东西,在这个文件里最需要关注的是CBW和CSW.
CBW:Command Block Wrapper,协议里面的文字描述就不多讲了,自己看看。

dCBWSignature:Signature that helps identify this data packet as a CBW. The signature field shall contain the value 43425355h (little endian), indicating a CBW.说白了这里就是一个标志,标志这是一个CBW包。
dCBWTag:A Command Block Tag sent by the host. The device shall echo the contents of this field back to the host in the dCSWTagfield of the associated CSW. The dCSWTagpositively associates a CSW with the corresponding CBW.上面说的很清楚,这个是host发出的一个Tag,这个Tag在slave向host发送数据时也是这个Tag,不用变化的,host给了什么,咱们就会给他什么。
dCBWDataTransferLength:不在复制英文了,太多了,这个讲的是host期望收到的数据或者发出的数据,但是作为slave我们不一定host需要多少就发回去多少。
bmCBWFlags: 这些位如下定义:
Bit 7定义方向–如果dCBWDataTransferLength是0,那么设备忽略这个位,否则:
0 = Data-Out from host to the device,
1 = Data-In from the device to the host.
Bit 6 Obsolete. The host shall set this bit to zero.
Bits 5..0 Reserved - the host shall set these bits to zero.
bCBWLUN:Logical Unit Number (LUN),咱们在前面提到过,fudan_abc里面也讲过,一个u盘只有一个LUN,当然一般而言。
bCBWCBLength:This defines the valid length of the command block. The only legal values are 1 through 16 (01h through 10h). 这里就是command block,并且有效的是1-16。这个东东是什么?下面就是SCSI命令就登场了,这里面就是SCSI命令,slave就是按照这些命令来回答host。这里就是说了这个SCSI的命令有多长。
CBWCB:SCSI的命令块,bCBWCBLength说明了这个命令有多长。
举一个例子来讲,看对不对。
2e USBCp...$.......
...$...........
6f .... ...eCos
4d 6f Mass Storage
2e
2e USBSp........
知道这个数据包是bus hound抓的包吧,现在来看看。
这里25.3表示25是第25号设备,3是表示这里是通过3端点进入的数据,前面确实定义了3端点为bulk out,LEN长度0x1f,意思是host给slave发送了31个字节。
2e USBCp...$.......
...$...........
25.3就不讲了,从端点3发送了31个字节给slave,DO:data out,余下的就是数据了,
55 53 42 43看看CBWSignature是不是很像,只不过一个是little endian,一个是big endian,大小端这就不讲了。
70 2e 96 88看看dCBWTag,前面协议说了这个是host生成的,这个没必要关注。但是在CSW里面需要回填这个字段。
24 00 00 00这个就是dCBWDataTransferLength,表示接下来host想slave回发36个数据。SCSI协议的第一个命令是Inquiry,里面一个36个字节,正好合适是不。
80 00 06 12里面就包含的东西多了,首先是bmCBWFlags,其值是0x80,这里第7位是1表示Data-in,host是希望数据发入。bCBWLUN其值是0x00,这里只有一个Lun,当然就是0了哦。bCBWCBLength其值是0x06,也就是说这里接下来是6个数据,既将有SCSI命令过来,这个命令长度为6。其实这个命令就是Inquiry。这6的数据是12 00 00 00 24 00,第一个是0x12就是SCSI协议里面定义的Inquiry命令。

好了CBW终于说完了,也引入了SCSI协议了。
至于CSW,还是总结了吧。

dCSWSignature:第一个数据还是一个标志,主要用来向大家表明自己的身份。53425355h (little endian)。
dCSWTag:这个Tag就是前面CBW来的Tag,把前面那个直接写在这里就好了。
dCSWDataResidue:这个字段是告诉host还有多少数据还没发完。有时间数据量很大,所以需要分批次来发送。
bCSWStatus:这个字段是告诉host是否发送正确,正确与否查表就好,下图表明0x00成功。

好了CSW也总结完了,咋发现总结出来还没怎么涉及SCSI协议,下次接着总结SCSI。
USB-CSW之旅的更多相关文章
- CentOS6.5菜鸟之旅:VirtualBox4.3识别USB设备
一.前言 VirtualBox默认是不能识别USB设备的,但可以通过Oracle VM VirtualBox Extension Pack来增强VirtualBox的功能,增强的功能如下: 1. US ...
- usb mass storage之旅
前面总结了usb hid keyboard,现在总结usb mass storage,在枚举阶段没什么好总结的,hid和mass storage差不多,都是同样的枚举过程,但是在他们的配置描述符.接口 ...
- Linux USB摄像头驱动【转】
本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...
- USB -- BULK_ONLY和UFI协议
2 BULK_ONLY和UFI协议 Bulk—Only协议是USB组织针对大容量存储设备制定的一种块存储类协议,目前已经普遍应用于各种移动存储设备. USB设备分为5大类,即显示器.通信设备.音频设备 ...
- 电子工程师名片——UFI Command,USB盘符的显示
USB Mass Storage类规范概述 USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.Bul ...
- USB系列之三:从你的U盘里读出更多的内容
U盘是我们最常使用的一种USB设备,本文继续使用DOSUSB做驱动,试图以读取扇区的方式读取你的U盘.本文可能涉及的协议可能会比较多. 一.了解你的U盘 首先我们用上一篇文章介绍的程序usbvi ...
- USB Mass Storage学习笔记-STM32+FLASH实现U盘
一.内容概述 采用STM32内部自带USB控制器外加大页NAND FLASH K9F1G08U0A实现一个128M的U盘. 1.STM32的USB控制器 STM32F103的MCU自带USB从控制器 ...
- usb开发笔记
U盘应属于海量存储类. USB海量存储设备,又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类.通用海量存储设备实现上是基于块/扇区存储的设备. USB组织定义 ...
- 嵌入式系统USB CDROM虚拟光驱驱动程序开发
带U盘功能的的USB接口设备已经越来越常见了.如果能够把产品说明书或者产品设备驱动程序做成一个USB CDROM,那该多方便.假设:你已经有了USB mass storage驱动.你的任务是在此基础上 ...
随机推荐
- LeetCode_Insert Interval
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
- 【给你几个使用Xamarin的理由】
写在开篇前 这种代理操作,绑定影射的机制,有些极端的开发者确实难以接受.追求完美,总感觉原生的各种优点. 如果你非得较这个真,那您还是感觉补习下 Java Eclipse ,买一台Mac 恶补Obj ...
- JavaEE连接池泄漏问题检测Oracle数据库
1.项目环境 项目是典型的轻量级JavaEE项目,使用SSH框架构建,数据源使用DBCP管理,和Spring进行了整合. 项目数据库使用Oracle数据库. 项目DBCP配置内容如下 ###### D ...
- WEB打印插件jatoolsPrinter
为什么选择 jatoolsPrinter 免费版? 支持无预览直接打印 真正免费,不加水印,没有ip或域名限制,不限时间,兼容ie6+ 无须注册,下载即用 提供经过微软数字签名的cab自动安装包,安装 ...
- java与.net比较学习系列(7) 属性
文章摘自:http://www.cnblogs.com/mcgrady/p/3411405.html 说起属性,实际上java中没有属性这个概念,只有字段和方法,但是可以通过私有字段和声明get,se ...
- Java 5 的新标准语法和用法详解集锦
Java 5 的新标准语法和用法详解集锦 Java 5 的新标准语法和用法详解集锦 (需要在首选项-java-complier-compiler compliance level中设置为java5.0 ...
- 30款基本UX工具 - 思维流程工具 & 原型工具
来源:GBin1.com 现在的开发人员在建造网站时,注重的是布局和技术特性,但是往往忽略了更重要的一点,那就是用户体验. 如 果用户在使用的时候,不能简单清楚的知道该要如何操作,那么他们一定会选择另 ...
- Android系统进程Zygote启动过程的源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6768304 在Android系统中,所有的应用 ...
- CI框架源代码阅读笔记3 全局函数Common.php
从本篇開始.将深入CI框架的内部.一步步去探索这个框架的实现.结构和设计. Common.php文件定义了一系列的全局函数(一般来说.全局函数具有最高的载入优先权.因此大多数的框架中BootStrap ...
- 33c3-pwn350-tea
TEA 感觉这个题目出得很不错.先运行程序了解基本功能,程序可以读取对系统上存在的文件的内容,如果文件不存在的话,直接退出. 使用IDA打开后,发现父进程通过clone api克隆出一个子进程,主要的 ...