博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
USB设备架构
阅读量:5925 次
发布时间:2019-06-19

本文共 2588 字,大约阅读时间需要 8 分钟。

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设备标准请求参见另外一篇博文。

转载于:https://www.cnblogs.com/artechliu/archive/2011/01/31/1946165.html

你可能感兴趣的文章
SQL Server:数据库角色
查看>>
分享8个超棒的基于HTML5和jQuery的开发教程
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
SpringMVC+Swagger详细整合
查看>>
计算机视觉领域最全汇总(第2部分)
查看>>
[译] 所有你需要知道的关于完全理解 Node.js 事件循环及其度量
查看>>
(六十九)复合语句
查看>>
我的友情链接
查看>>
Java Web中实现Servlet的方式
查看>>
第三方库之 - SVProgressHUD
查看>>
11个让你吃惊的 Linux 终端命令
查看>>
MySQL与MongoDB的操作对比
查看>>
# 180111php编译错误
查看>>
EIGRP 查看邻居命令详解
查看>>
js闭包
查看>>
度量时间差
查看>>
网络营销与电子商务
查看>>
可输入的模糊搜索ComBox控件
查看>>
MySQL 5.6为什么关闭元数据统计信息自动更新&统计信息收集源代码探索
查看>>
Linux 下mysql永久更改字符集
查看>>