精华内容
下载资源
问答
  • Mass Storage

    2016-05-24 22:41:14
    1.1 Mass Storage 1.1.1 请求过程(setup端点) 1)主机发送标准请求 2)发出两个类请求:Bulk-Only Mass Storage Reset请求、GetMaxLUN请求。   Bulk-Only Mass Storage Reset没有数据阶段,只在状态阶段告诉...

    1.1        Mass Storage

    1.1.1       请求过程setup端点)

    1)主机发送标准请求

    2)发出两个类请求:Bulk-Only Mass Storage Reset请求、GetMaxLUN请求。

     

    Bulk-Only Mass Storage Reset没有数据阶段,只在状态阶段告诉主机设备的Reset过程完成与否。如果在状态阶段返回ACK,那么主机就认为设备已经Reset完毕并准备好接收CBW了。

    Get Max LUN要求设备返回一个字节的数据给主机,以表明此USB设备有多少个逻辑设备。返回的这个数据就是最大的设备逻辑号(Logic Unit Number),范围是0到15。例如,如果返回2,那么代表有0、1、2三个逻辑设备。

    1.1.2       数据交换过程bulk端点)

    通过bulk端点进行的数据传输,都遵循这样一个过程,即三个阶段:
    CBW->DATA->CSW
        CBW是一个数据块,携带主机发给设备的SCSI命令。接收了CBW后,设备就可以从中知道在接下来的DATA阶段中该干什么。
        DATA阶段有三种情况:无数据需要传输,IN传输(设备到主机)或OUT传输(主机到设备)。
        CSW阶段反馈这次传输的结果给主机。

    其中值得注意的是:
        在设备枚举完成之后,主机发出的第一个bulkOUT事务就是请求向设备发出CBW。所以设备可以通过这第一次的bulkOUT事务来判定第一次bulk数据传输的开始。此后的bulk数据传输就按照上述的三个阶段反复执行。也就是说,第一次传输CBW后,如果有数据要传输,那么就会经历DATA阶段,然后进入CSW阶段;如果没有数据要传输,则直接进入CSW阶段,就此一次传输结束。接下来,如果又有传输,那么再发出CBW。因此,设备可以认为CSW完成后收到的下一个bulk OUT事务就是主机请求传输新的CBW。
        CBW[12](CBW数据块的第13个字节)指明了传输方向CBW[8-11]指明了传输的数据长度。实际上,CBW中的SCSI命令就暗含了数据要传输的方向和数据长度,因为SCSI规范中已明确规定这个命令所对应的数据格式。(在完整的应用中,要将CBW中的传输方向、数据长度与SCSI命令所表明的传输方向和数据长度做比较,不对应就要进行错误处理(Mass Storage Bulk-Only文档中有相关描述),不过正常情况下二者是匹配的,试验的时候可以暂时不理)。
        CSW[12](CSW数据块的第13个字节)这个字节很重要,它为0则表示此次传输成功,非0就是不成功。在DATA阶段的数据传完(或者无需数据传输)之后,主机会发出IN事务请求设备返回CSW。如果CSW传送的是不成功的信息,那么主机会接着发送另一个命令来获取失败的详细信息(即RequestSense命令)。

     

    CBW指令格式

    CBW(Command Block Wrapper)的长度为31个字节,具体定义如下图:


    dCBWSignature: CBW的标识,固定值:43425355h(little endian)。

    dCBWTag: 主机发送的一个命令块标识,设备需要原样作为dCSWTag(CSW中的一部分)再发送给Host;主要用于关联CSW到对应的CBW。 

    dCBWDataTransferLength: 本次CBW命令要求在命令与回应之间传输的字节数。如果为0,则不传输数据。

    bmCBWFlags: 反映数据传输的方向,0x00 表示来自Host,0x80 表示发至Host; 

    bCBWLUN: 对于有多个LUN逻辑单元的设备,用来选择具体目标。如果没有多个LUN,则写0。

    bCBWCBLength: 命令的长度,范围在0~16。

    CBWCB: 传输的具体命令,符合bInterfaceSubClass.中定义的命令规范,此处是SCSI指令集。

     

    CSW(Command StatusWrapper)状态格式


     CSW的长度为13个字节,是对应CBW指令的状态返回,它指示了上一条指令执行是否成功,具体定义如下:

    dCSWSignature: CSW的标识,固定值:53425355h(little endian)。

    dCSWTag: 设置这个标识和CBW中的dCBWTag一致,参照上面关于dCBWTag的解释。

    dCSWDataResidue: 还需要传送的数据,此数据根据dCBWDataTransferLength-本次已经传送的数据得到。

    bCSWStatus: 指示命令的执行状态。如果命令正确执行,bCSWStatus返回0 ,不正确返回1,phase错返回2(当HOST收到此错误时需要对Device复位)。

     

    U盘不仅仅是USB设备,它还是一种存储设备,类似硬盘,USB协议本身没有定义对存储设备操作的指令,所以需要通过SCSI来完成读写等操作。注意在interface描述符中:

    bInterfaceClass= 0x08

    bInterfaceSubClass= 0x06

    bInterfaceProtocol= 0x50

    展开全文
  • Mass change bill的问题

    2008-06-26 22:22:50
    在BOM下做Mass change的时候,输入NUMBER后无法选择TYPE,请教是什么原因,要如何解决,谢谢mass change.jpg ...
    在BOM下做Mass change的时候,输入NUMBER后无法选择TYPE,请教是什么原因,要如何解决,谢谢
    20080626_6477960a7292954e81a9WJapjEqZBwkA.jpg
    mass change.jpg

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/2830/viewspace-479897/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/2830/viewspace-479897/

    展开全文
  • usb massStorage

    2011-10-28 15:26:48
    利用51的一个u盘 ,非常实用代码,具体实现了usb mass storage 具体与pc机通信的协议
  • mass storage

    千次阅读 2012-07-09 21:15:25
    最近在查找数据拷贝的过程中断线的原因,原因还没怎么找到,但是想写一点东西来记录最近的工作情况也顺便梳理下思路,给接下来的工作个好的tag。  在android的USB驱动相关的部分中,目前接触最多的是android.c...

         最近在查找数据拷贝的过程中断线的原因,原因还没怎么找到,但是想写一点东西来记录最近的工作情况也顺便梳理下思路,给接下来的工作做个好的tag。

         在android的USB驱动相关的部分中,目前接触最多的是android.c文件,因为这个文件和f_mass_storage.c以及f_adb.c共同构成了g_android.ko。

         讲到这里不得不提的两个英文简称是FSG和LUNs。FSG:File-backed Storage Gadget。LUNs:Logic UNits。FSG提供了对USB Mass Storage的支持。他能够作为主机支持最多8个SCSI磁盘设备,成为LUNs。

          我们这里从android.c文件开始讲述,在android.c文件中我们首先要找的是module——init这个宏,这个宏定义指定了模块的入口为init函数。主要划分为四个部分:1class创建,2functions的支持3,支持的指针函数4,probe函数。下面我们将分步骤进行详细的分析:


    展开全文
  •  为避免在pc上编写usb设备驱动的麻烦,可以将设备mass storage 类的设备,使用通用的驱动.  在通讯之前设备端需要先两件事:  1,实现mass storage 类的描述符和类请求.  2,实现必要的SCSI命令,让PC认为该...

      当需要使用usb bulk传输,想让设备像串口通讯那样和PC主机通信, 通常需要自己做一个PC端的驱动,比较麻烦.

      为避免在pc上编写usb设备驱动的麻烦,可以将设备做成mass storage 类的设备,使用通用的驱动.

      在通讯之前设备端需要先做两件事:

      1,实现mass storage 类的描述符和类请求.

      2,实现必要的SCSI命令,让PC认为该设备已正常运作.

     

    我利用修改linux中的gadget zero设备做了一个简单的设备. 如果是在裸机程序下面做,应该也差不多,直接拿芯片厂商BSP中的USB样例程序修改即可.

      

      

      

    1实现mass storage 类的描述符和类请求.

    mass storage

    在linux中对应代码:

    1)设备描述符

    static struct usb_device_descriptor device_desc = {
    	.bLength =		sizeof device_desc,
    	.bDescriptorType =	USB_DT_DEVICE,
    
    	.bcdUSB =		cpu_to_le16(0x0200),
    //	.bDeviceClass =		USB_CLASS_VENDOR_SPEC,
    	.bDeviceClass =		USB_CLASS_PER_INTERFACE,
    
    	.idVendor =		cpu_to_le16(DRIVER_VENDOR_NUM),
    	.idProduct =		cpu_to_le16(DRIVER_PRODUCT_NUM),
    	.bNumConfigurations =	1,
    };
    

     设备描述符没什么特殊的,因为PC端usb驱动是与设备的接口对应的,与mass storage class对应的是接口描述符

    2)接口描述符

    /* SCSI device types */
    #define TYPE_DISK	0x00
    #define TYPE_CDROM	0x05
    
    /* USB protocol value = the transport method */
    #define USB_PR_CBI	0x00		/* Control/Bulk/Interrupt */
    #define USB_PR_CB	0x01		/* Control/Bulk w/o interrupt */
    #define USB_PR_BULK	0x50		/* Bulk-only */
    
    /* USB subclass value = the protocol encapsulation */
    #define USB_SC_RBC	0x01		/* Reduced Block Commands (flash) */
    #define USB_SC_8020	0x02		/* SFF-8020i, MMC-2, ATAPI (CD-ROM) */
    #define USB_SC_QIC	0x03		/* QIC-157 (tape) */
    #define USB_SC_UFI	0x04		/* UFI (floppy) */
    #define USB_SC_8070	0x05		/* SFF-8070i (removable) */
    #define USB_SC_SCSI	0x06		/* Transparent SCSI */
    
    /* Bulk-only class specific requests */
    #define USB_BULK_RESET_REQUEST		0xff
    #define USB_BULK_GET_MAX_LUN_REQUEST	0xfe
    
    static struct usb_interface_descriptor source_sink_intf = {
    	.bLength =		sizeof source_sink_intf,
    	.bDescriptorType =	USB_DT_INTERFACE,
    
    	.bNumEndpoints =	2,
    //	.bInterfaceClass =	USB_CLASS_VENDOR_SPEC,
    	.bInterfaceClass =	USB_CLASS_MASS_STORAGE,
    	.bInterfaceSubClass =	USB_SC_SCSI,	
    	.bInterfaceProtocol =	USB_PR_BULK,	
    	/* .iInterface = DYNAMIC */
    };
    

     符合usb mass storage 类规范。对应下表

        

    使用SCSI命令集,协议实现是Bulk-Only 传输。

    3)实现一个mass storage 类的请求

    	case USB_BULK_GET_MAX_LUN_REQUEST:
    		printk("USB_BULK_GET_MAX_LUN_REQUEST\n");
    		if (ctrl->bRequestType !=
    		    (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE))
    			break;
    		*(u8 *) req->buf = 0;
    
    		/* Respond with data/status */
    		req->length = min((u16)1, w_length);
    		value = usb_ep_queue(f->config->cdev->gadget->ep0, req, GFP_ATOMIC);
    		if (value < 0)
    			ERROR(f->config->cdev, "source/sinkc response, err %d\n",
    					value);
    		return(value);
    

     简单返回了一个0。

    在linux中,linux把一些诸如获取描述符之类的请求集中在了一起放在了composite.c 中,不同设备类请求放在各自个f_xxx.c中各自的接口的xxx_setup函数中。

     

    当实现了以上描述符和类请求之后,把嵌入式设备接上电脑,windows就会在设备管理器中列出usb mass storage设备。不过有一个黄色感叹号。

    根据usb抓包情况来看是,电脑上面驱动发送SCSI命令数次不成功之后,会重新枚举过程,数次不正常之后就会认为该设备不正常。

     

    2)必要的SCSI命令

    大概要处理mass storage pc端驱动发过来的一下命令

    #define SC_INQUIRY   0x12

    #define SC_TEST_UNIT_READY  0x00

    #define SC_READ_CAPACITY  0x25
    #define SC_READ_FORMAT_CAPACITIES 0x23

    前两条应该是必须的,后两条我也给加上了,去掉行不行,没有测试。

    这些命令即可以放到linux gadget driver中也可以放到应用层程序中处理. 我是放到了应用层.

    处理的流程基本是:

    接收SCSI命令----->处理SCSI命令----->返回状态

    基本是按照SCSI协议进行

    CBW:Command Block Wrapper   命令块数据包

    CSW:Command Status Wrapper  命令执行状态

    按照CBW和CSW格式定义结构体:

    struct ms_cbw_struct{
    	u32 dCBWSignature;
    	u32 dCBWTag;
    	u32 dCBWDataTransferLength;
    	u8 bmCBWFlags;
    	u8 bCBWLUN;
    	u8 bCBWCBLength;
    	u8 CBWCB[SCSI_CMD_MAX_LEN];
    };
    
    struct ms_csw_struct{
    	u32 dCSWSignature;
    	u32 dCSWTag;
    	u32 dCSWDataResidue;
    	u8 bCSWStatus;
    };
    

     

    以SC_INQUIRY   命令为例

    当我程序收到 0x12 命令,我就要按照scsi协议中该命令的规范来处理,我需要返回下面表格格式的数据给主机

     

    .

    第一个字节后5位决定了主机识别成一个cdrom或是可移动盘或其他类型的设备.

     RMB表示是否是一个可以移除设备.

    Additional length (n-4)  需要填写.

    其他的可根据需要填写.

     

    之后返回状态CSW:

    dCSWSignature固定为0x53425355,

    dCSWTag 与CBW发过来的相同,

    dCSWDataResidue等于CBW中要得长度和实际长度的差值.

    bCSWStatus 表示命令成功或失败, 0表示成功,其他值表示失败.

     

    另外这条命令

    #define SC_TEST_UNIT_READY  0x00

    是主机会在空闲时间不停发送的. 并且一开始连上主机,如果这条命令返回的CSW 成功,那么主机会使用READ_FORMAT_CAPACITIES 命令查询格式化的容量,read(10)读文件系统的信息. 如果得不到正确信息windows就会跳出对话框问你要不要格式化等等.

    由于现在我并非真的需要做一个U盘之类的设备,所以0x00 命令,我CSW直接返回1. 这样当你点击该设备的盘符,就会提示说没有设备插入. 这对我没有影响,我只是用mass storage这个壳来进行通信的. 只是骗过mass storage的标准驱动而已. 

     

    现在我就可以通过自定义的SCSI命令或者改写标准的命令来进行通信了.

     

     

     

     

     

     

      

    转载于:https://www.cnblogs.com/fengeryi/p/3905324.html

    展开全文
  • usb cdrom mass storage app

    2017-04-04 09:51:12
    usb cdrom mass storage sda application code reference.
  • NetSuite mass update脚本

    2018-09-18 12:26:37
    刚开始ns开发,这个算是我写的第一个脚本。希望看到的大佬给予指正。 需求是: Accounts下已经导入了几千条数据,这些数据中的summary和inactive时没有勾选的。现在需要批量处理将这两个字段勾选上。 ...
  • Android平台mass storage相关代码

    千次阅读 2014-10-09 23:25:28
    USB mass storage
  • 预防 Youtube Mass Ban

    2013-09-07 21:20:13
    bhw看到一篇老外讲如何预防youtube mass ban的文章,内容是讲自己mass uploading账号被ban的几种情况,以及如何预防的一些总结,这里只把要点梳理一下。 youtube ban acc 分2种,第一种对我来说没什么意义,...
  • linux usb mass storage class

    千次阅读 2014-05-07 10:17:26
    Mass Storage主机驱动程序 2.1 Mass Storage规范介绍 2.2 Bulk-Only传输协议介绍 2.3 SCSI命令描述块结构 2.4 Mass Storage设备对象结构 2.5 Mass Storage设备初始化 2.6 探测函数storage_p
  • 精要分別說明 USB, SD, NAND, FAT的實戰要點, 讓大家能真的一個USB Mass Storage出來
  • mass-ban-源码

    2021-03-19 21:58:38
    的NodeJS - VOCE颇得baixar PELO PROPRIO网站节点 安装NPM Depois de baixarésóabrir oexecutávele seguir todos os passosatéo o fim Abra algum终端,pod ser o cmd。 Navegueatéo arquivo com“ cd ...
  • mass Framework 设计蓝图

    2012-01-14 23:06:00
    新的一年,mass Framework将从dom Framework中脱胎出来,不单单是改个名字这么简单。 前端部分 命名空间则更名为$。$是个非常有魅力的变量名,十大javascript框架中,就有三个用它命名空间:Prototype,...
  • solve mass matrix in matlab

    千次阅读 2016-06-06 23:32:31
    note: this passage serves for the analysis of Alec Jacobson’s ... what’s mass matrixAccording to (2.50), mass matrix is given by: Mij=∫ΩϕiϕjdAM_{ij}=\int_\Omega\phi_i\phi_jdA2. matlab code analys
  • usb mass storage

    2012-07-24 09:21:09
    我改写一个usb设备的固件,把它描述成usb mass storage设备,能在电脑上枚举成功,也能响应各种请求命令,但就是在我的电脑里的盘符出现不了,我该些什么啊,怎样去修改呢?给指点下吧
  • Mass assignemet是个Rails专属,因为太方便而造成的安全性议题。ActiveRecord物件在新建或修改时,可以直接传入一个Hash来设定属性(这功能叫做Mass assignment),所以我们可以直接将网页表单上的参数直接丢进放进去...
  • An organic compound is any member of a large ... The molar mass of an organic compound is the mass of one mole of the organic compound. The molar mass of an organic compound can be computed from the s
  • 由于产品需要,需将设备枚举为CDC + MASS STORAGE 或 +ETHER ...好在linux已经提供了一些常用的复合设备驱动,例如cdc + mass storage + ether,但是如何使用,并未详细的说明,会出现加载驱动识别的情况,failed to.
  • THE ORDER OF MASS

    千次阅读 2009-09-21 15:48:00
    THE ORDER OF MASS(弥撒程序)一、INTRODUCYORY RITES(进堂式)ENTRANCE SONG(进堂咏)GREETING(致候辞)Presider:In the name of the Father, and of the Son, and of the Holy Spirit.因父及子及圣神之名。 All: A
  • uvaoj 1586-molar mass

    2014-12-03 22:02:04
    /* An organic compound is any member of a large class of chemical compounds whose molecules contain carbon. The molar mass of an organic compound is the mass of one mole of the organic compound. The m
  • 在区块共识过程中节点只需对初始化空间访问查询并不会对初始化空间进行数据操作,因此相同的容量空间可为多个区块共识实例提供容量证明,采用 MASS 容量证明协议的节点可以同时并行支持多条区块链实例。...
  • 使用configfs配置usb mass storage设备

    千次阅读 2019-09-18 19:02:02
    这里使用configfs配置一个 mass storage设备 1. 准备文件系统, 可以使用实际的本地磁盘分区, 如/dev/mmcblk0p1, 也可以使用自己制作的loop回环块设备。 前提是有过格式化, 且文件系统主机端能识别。 比如fat...
  • USB mass storage framework

    千次阅读 2014-06-02 21:02:22
    USB Mass Storage Class Universal Floppy Interface (UFI) Command Specification ④ USB Mass Storage Class Bootability Specification ⑤ USB Mass Storage Class Compliance Test Specification ⑥ ...
  • UVA 580 Critical Mass

    千次阅读 2013-03-11 19:38:07
    题目大意:U代表危险物品铀,L... (题意很麻烦,谁让是人家外国的,唉~~~) 解题策略:网上有DP解的动态递推公式,还有一个策略是逆向考虑,通过解出安全的情况数,总情况数-安全情况数=危险情况数。  总情况
  • 语言:English 完整的Twitter自动化工具 大众关注是在Twitter上增加关注者的最佳工具。...我们修复了所有其他竞争对手所的错误,并创造了一些真正有价值和有用的东西。 完全可定制,自动化,安全并且非常易于使用。
  • USB Mass Storage学习笔记

    千次阅读 2011-08-18 09:02:44
    USB Mass Storage学习笔记-STM32+FLASH实现U盘   一、 内容概述 采用STM32内部自带USB控制器外加大页NAND FLASH K9F1G08U0A实现一个128M的U盘。    1、STM32的USB控制器
  • LPC1788 Usb Host Massstorage驱动

    热门讨论 2012-05-02 16:31:28
    这个是从官网上下的LPC17xxUsb Host lite例程修改来的,USB主机用的是USB2接口...但是那部分代码不方便给出,我只是保证,这个初始化代码是可用的,不需要进行任何修改(从hostinit到ms_init(),fat有问题,不讨论)。
  • mass-texting-backend-源码

    2021-05-29 09:40:14
    不需要数据库,但也许我们这样是因为在其中放置和保存电话号码 完成 我们需要登录 要发送文本,只需 npm start,然后邮递员到 localhost:4444/sendSms { "message":"这是第三次测试", "toPhoneNumber": ...
  • 距离上篇文章又一个月了。。。时光飞逝。。。再次立下一周一篇的flag最近读了一篇专栏文章BERT时代与后时代的NLP,收获颇丰。算是作者的同行,最近也在类似的东西,但是...1. MASS模型MASS的主要贡献是提出一种...
  • MASS: 一统GPT和BERT的Seq to Seq框架

    千次阅读 2019-05-20 07:06:09
    MASS: 一统GPT和BERT的Seq to Seq框架MASS功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,022
精华内容 5,608
关键字:

做mass