前面总结了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之旅的更多相关文章

  1. CentOS6.5菜鸟之旅:VirtualBox4.3识别USB设备

    一.前言 VirtualBox默认是不能识别USB设备的,但可以通过Oracle VM VirtualBox Extension Pack来增强VirtualBox的功能,增强的功能如下: 1. US ...

  2. usb mass storage之旅

    前面总结了usb hid keyboard,现在总结usb mass storage,在枚举阶段没什么好总结的,hid和mass storage差不多,都是同样的枚举过程,但是在他们的配置描述符.接口 ...

  3. Linux USB摄像头驱动【转】

    本文转载自:http://www.itdadao.com/articles/c15a509940p0.html 在 cortex-a8 中,可接入摄像头的接口通常可以分为两种, CAMERA 接口和 ...

  4. USB -- BULK_ONLY和UFI协议

    2 BULK_ONLY和UFI协议 Bulk—Only协议是USB组织针对大容量存储设备制定的一种块存储类协议,目前已经普遍应用于各种移动存储设备. USB设备分为5大类,即显示器.通信设备.音频设备 ...

  5. 电子工程师名片——UFI Command,USB盘符的显示

    USB Mass Storage类规范概述        USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.Bul ...

  6. USB系列之三:从你的U盘里读出更多的内容

    U盘是我们最常使用的一种USB设备,本文继续使用DOSUSB做驱动,试图以读取扇区的方式读取你的U盘.本文可能涉及的协议可能会比较多. 一.了解你的U盘    首先我们用上一篇文章介绍的程序usbvi ...

  7. USB Mass Storage学习笔记-STM32+FLASH实现U盘

    一.内容概述  采用STM32内部自带USB控制器外加大页NAND FLASH K9F1G08U0A实现一个128M的U盘. 1.STM32的USB控制器 STM32F103的MCU自带USB从控制器 ...

  8. usb开发笔记

    U盘应属于海量存储类. USB海量存储设备,又包括通用海量存储子类,CDROM,Tape等,U盘实际上属于海量存储类中通用海量存储子类.通用海量存储设备实现上是基于块/扇区存储的设备. USB组织定义 ...

  9. 嵌入式系统USB CDROM虚拟光驱驱动程序开发

    带U盘功能的的USB接口设备已经越来越常见了.如果能够把产品说明书或者产品设备驱动程序做成一个USB CDROM,那该多方便.假设:你已经有了USB mass storage驱动.你的任务是在此基础上 ...

随机推荐

  1. BZOJ 2521 最小生成树(最小割)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2521 题意:每次能增加一条边的权值1,求最小代价让一条边保证在最小生成树里 思路:如果两个点中有环, ...

  2. LeetCode_Triangle

    Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent n ...

  3. VS2012 快捷键 VS Resharper 设置

    原文 http://www.cnblogs.com/skyangell/archive/2013/03/24/2979835.html 一直用Resharper插件,最近发现Ctrl+E,C快捷见被R ...

  4. htpasswd.cgi 网页远程修改gerrit ht 认证的密码文件

    在搭建gerrit系统时,一般都会采用apache的.htacces 认证方法 但trac本身并不提供修改密码的功能,修改密码只能通过htpasswd/htpasswd2命令来进行,这的确是一件相当不 ...

  5. 【转】UltraISO制作U盘启动盘安装Win7/9/10系统攻略

    U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便,随时都可以制作系统启动盘. U盘建议选择8G及以上大小的. 下面一步一步讲解如果制作U盘安装盘: 1.首先 ...

  6. (转)linux下fork的运行机制

    转载http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html 给出如下C程序,在linux下使用g ...

  7. SQLServer 循环1百万插入测试数据

    1,首先创建student表 create table student ( sno int primary key , sname VARCHAR(200) ) 2,--向数据库中插入100万条随机姓 ...

  8. 值传递 & 引用传递

    以下程序的输出结果是? public class Example { String str = new String("good"); char[] ch = { 'a', 'b' ...

  9. Maven项目部署方案

    以xbank项目做为应用背景,简单说明一下Maven项目的部署方案: 1.项目说明 xbank基础服务端的11个子项目均采用Maven搭建: 其中各项目功能设计如下: froad-xbank-serv ...

  10. [POJ 3734] Blocks (矩阵高速幂、组合数学)

    Blocks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3997   Accepted: 1775 Descriptio ...