USB设备架构
USB设备,分为3层:1.底层为传送和接受数据的总线接口;2.中间层处理总线和不同端点的数据传输;3.最高层由串行总线设备提供。主要研究中间层。
USB设备状态,主要研究外部可见状态。
1,连接态-->USB设备可从Host上连接或者断开。
2,加电态-->设备对电源的支持能力是通过配置描述表来反映的。
3,缺省态-->加电后尚未复位之前不应对总线相应,在接收到复位信号后,设备在缺省地址处可寻址。
4,编址态-->设备由主机分配一个唯一的地址后,就保持这个地址。
5,配置态-->在使用设备之前,设备必须要先被配置好。从设备的角度说,配置包括用一个非零值进行SetConfiguration()要求。配置会使得与之有关的结点(endpoint)被设成缺省值。
6,挂起态-->设备在检测不到总线传输时候进入挂起状态,并保持内部状态不变,包括地址和配置。
==========================================================
总线标识 (Bus Enumeration)
当USB设备接上或从USB设备移开的时候,主机启动一个被称作总线标识的过程,来标识并管理设备状态的改变。
当一个USB设备连上一个带电端口时,系统将进行以下操作:
1,设备通过状态改变通道报告主机由USB设备连上。此时USB设备处于加电状态,它所连接的端口无效。
2,主机询问此次连接含义。
3,主机在知道新设备连接上后将等待100ms以使得插上操作完成和设备电源稳定,然后主机使能端口并复位端口。
4,当发出reset信号后,端口已经被使能。USB设备此时处于缺省态,并可从VBUS获得不多于100mA电流。所有寄存器和状态被重置并对默认地址响应。
5,主机给设备分配唯一地址并使得USB设备进入编址态。
6,在设备接收唯一地址之前,其默认控制管道仍然可用默认地址寻址。主机通过读取设备描述符来得到USB设备默认管道可以使用的最大数据负载。
7,主机从设备读取配置信息要从配置0读取到配置n-1,其中n为配置个数。
8,基于读取来的配置信息和USB设备如何被使用,主机给设备一个配置值。设备进入配置态,所有于此有关的端点得到预先描述特性。USB设备可以得到描述符中要求的电量,从设备角度看,其已经就位。
===========================================================
通用USB设备操作 (Generic USB Device Operation)
所有的USB设备都支持一系列操作,这部分描述这些操作。
1,动态连接和断开
2,地址分配
3,配置。USB设备必须在配置后才能使用。Host通过读取设备的配置信息来决定设备功能。
4,数据传送。数据可能以4种方式在USB设备端点和主机之间进行通信。同一端点可在不同配置下以不同方式来传送数据,但是一旦配置选定,传送方式就决定了。
5,电源管理。USB设备供电需求在1个单元(100mA)以下直到被配置。一旦被挂起,那么无论之前是否被配置,供电需求要被降低。在配置后,USB设备可以需求5个单元(500mA)。USB可以通过设备描述符来向主机汇报本身远程唤醒能力。
6,请求处理。
7,请求错误。
===========================================================
USB设备请求
所有的USB设备通过缺省控制管道对Host的请求做出响应。这些请求通过控制传输做到,响应和响应参数通过setup包设置,Host设置包内的每个域的数值。每个setup包有8个字节。
1, bmRequestType,1个字节。表明了第二阶段的控制传输方向,如果wLength被设置为0的,方向位被忽略。USB spec 定义了一系列USB设备必须支持的USB标准请求。设备商也可以定义设备支持的请求。请求可以被引导到设备上或设备接口上或者设备的一个端口上。当指定的是接口或者某个端口的时候,wIndex指出了是哪些接口或端口。
2,bRequest,1个字节。这个域表明了特别的请求。bmRequestType中的Type位修改此域的含义。只有当Type位为0的时候bRequest域的含义是标准设备请求。
3,wValue,2个字节。这个域的内容取决于request,以用来传递不同参数给设备。
4,wIndex,2个字节。这个域的内容取决于request,以用来传递不同参数给设备。这个域通常用来指明一个端口或接口。
当用来指明端口时:
D15---D14---D13---D12---D11---D10---D9---D8---D7-------D6---D5---D4---D3---D2---D1---D0
|-------------保留,设置为0---------------------------|direction|保留,设置为0|---endpoint number---|
其中方向位设置为0的时候表示OUT,设置为1的时候表示IN,并且需要表明endpoint number。在控制管道的情况下,request设置方向位0但设备可以接收任意方向位的值。
当用来指明接口时:
D15---D14---D13---D12---D11---D10---D9---D8---D7-------D6---D5---D4---D3---D2---D1---D0
|-------------保留,设置为0---------------------------|---------------interface number---------------|
5,wLength,2个字节。这个域指明控制传输第二阶段的数据长度。方向由方向位指定,并且如果方向位为0则没有数据要传输。在输入请求下,设备可以返回小于等于wLength中的数据。在输出请求下,wLength总是指明要确切传输的数据。如果主机发送超过wLength的数据,则设备行为无定义。
USB设备架构的更多相关文章
- usb设备驱动描述,王明学learn
		
usb设备驱动 本章主要内容包含以下:USB总线介绍,USB协议分析,USB系统架构 一.USB总线介绍 1.1USB发展史 USB(Universal Serial Bus)通用串行总线,是一种外部 ...
 - USB设备的基本概念
		
在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的.一个USB设备由3个功能模块组成:USB总线接口.USB逻辑设 ...
 - 【转】USB协议架构及驱动架构
		
1. USB协议 1.1 USB主机系统 在USB主机系统中,通过根集线器与外部USB从机设备相连的处理芯片,称为USB主机控制器.USB主机控制器包含硬件.软件和固件一部分. 1.2 USB设备系统 ...
 - 浅谈USB驱动架构 转载
		
去年,老师让我分析基于HD3系统芯片的WindowsCE USB驱动的可行性.USB驱动非常庞大,多个软件层次相互交错,以及各种协议,USB系统对于一般人很难理解,我对其也只是理解一个大概,下面,我对 ...
 - RockBrain USB Server- 云计算虚拟化USB设备集中管理、远程共享解决方案(涉及银企直联)
		
RockBrain USB Server- 云计算虚拟化USB设备集中管理.远程共享解决方案(涉及银企直联) 技术需求: 1.企业员工的大量USB Key,需要将key接入USB Server虚拟池, ...
 - Linux下的硬件驱动——USB设备(转载)
		
usb_bulk_msg函数 当对usb设备进行一次读或者写时,usb_bulk_msg 函数是非常有用的; 然而, 当你需要连续地对设备进行读/写时,建议你建立一个自己的urbs,同时将urbs 提 ...
 - vmware 桌面虚拟化 horizon view 介绍(使用微软的RDP协议或vmware 专有的PCoIP协议,连接到虚拟桌面,并且可以使用本地的USB设备、本地存储)
		
虚拟化(一):虚拟化及vmware产品介绍 虚拟化(二):虚拟化及vmware workstation产品使用 虚拟化(三):vsphere套件的安装注意及使用 虚拟化(四):vsphere高可用功能 ...
 - Linux自动共享USB设备:udev+Samba
		
一.概述 公司最近要我实现USB设备插入Ubuntu后,自动共享到网络上,能像Windows共享一样(如\\192.168.1.10)访问里面的内容,不需要写入权限.当时听完这需求,我这新人表示惊呆了 ...
 - USB设备(移动硬盘、鼠标)掉电掉驱动的两种解决方案
		
症状: 当你发现"移动硬盘图标"经常无故消失,又自己出现时. 你可以把这个现象称之为"掉电" or "掉驱动". 遇到这种情况,相当不爽. ...
 
随机推荐
- 数据转换错误,java.lang.NumberFormatException: null
			
今天写项目时报了一个数组转换错误的异常,让我找了半天5555 -_- . 一般出现这种错误呢,情况都是parseInt转换所触发的,像下面这行代码 int factorOneInt = Integer ...
 - 通过安全策略限制局域网部分IP访问我的电脑
			
一旦电脑连上局域网,那么别人就容易进入自己的电脑,造成隐私被泄漏,这是我们最不愿发生的情况.因此,如果你的电脑并不需要向局域网其他用户共享资料,那么就建议采用策略,禁止局域网电脑访问自己的电脑,以保证 ...
 - 如何删除Windows服务
			
删除的办法有两个: 办法一: 用sc.exe这个Windows命令 开始——运行——cmd.exe,然后输入sc就可以看到了.使用办法很简单: sc delete &q ...
 - DeviceToken 获取失败,原因:Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串"...
			
apns -> 注册推送功能时发生错误, 错误信息: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environme ...
 - Java前端Rsa公钥加密,后端Rsa私钥解密(目前还不支持中文加密解密,其他都行)
			
Base64工具类,可以让rsa编码的乱码变成一串字符序列 package com.utils; import java.io.ByteArrayInputStream; import java.io ...
 - box flex 弹性盒模型(转载)
			
css3引入了新的盒模型——弹性盒模型,该模型决定一个盒子在其他盒子中的分布方式以及如何处理可用的空间.这与XUL(火狐使用的用户交互语言)相似,其它语言也使用相同的盒模型,如XAML .GladeX ...
 - css图片磨砂化
			
Css代码: .blur { filter: url(blur.svg#blur); /* FireFox, Chrome, Opera */ -webkit-filter: blur(10px); ...
 - php 被抛弃使用的函数
			
call_user_method()(使用 call_user_func() 替代) call_user_method_array() (使用 call_user_func_array() 替 ...
 - 查看文件系统类型的Linux命令
			
不需挂载就能查看的命令: 1. file [root@localhost dev]# file -s /dev/sda1 /dev/sda1: Linux rev 1.0 ext4 filesy ...
 - laravel和dingoapi的结合使用
			
dingoapi是一个laravel的开源插件,可以在github上搜索到,现在在做一个项目,项目中总是会有后端跟前端的json数据交互,而这个dingoapi为json交互提供了很大的便利. 先安装 ...