目前了解了usb通信层面的一些基础知识如下。如果有空还要再了解hid报告描述符及协议的数据包波形。
一,USB的一些基本概念
1. 管道(Pipe) 是主机和设备端点之间数据传输的模型,共有两种类型的管道:无格式的
流管道(Stream Pipe)和有格式的信息管道(Message Pipe)。任何USB 设备一旦上电就存在
一个信息管道,即默认的控制管道,USB 主机通过该管道来获取设备的描述、配置、状态,并
对设备进行配置。
2. 端点(Endpoint)是USB 设备中的可以进行数据收发的最小单元,支持单向或者双向的数据传
输。设备支持端点的数量是有限制的,除默认端点外低速设备最多支持2 组端点(2 个输入,2
个输出),高速和全速设备最多支持15 组端点。
3. 接口(Interface) 。应用软件通过和设备之间的数据交换来完成设备的控制和数据传输。通常
需要多个管道来完成数据交换,因为同一管道只支持一种类型的数据传输。用在一起来对设备进
行控制的若干管道称为设备的接口。
4. 设备和端点之间关系: 一个USB 设备可以包括若干个端点,不同的端点以端点编号和方向区分。
不同端点可以支持不同的传输类型、访问间隔以及最大数据包大小。除端点0 外,所有的端点只支
持一个方向的数据传输。端点0 是一个特殊的端点,它支持双向的控制传输。管道和端点关联,和
关联的端点有相同的属性,如支持的传输类型、最大包长度、传输方向等。
5. 描述符(Descriptor) 描述设备的属性(Attributes)。 它本身是一个数据结构, 第一个字节表示
描述符的大小(字节数), 第二个字节表示描述符的类型(Type)。 描述符的种类有:
1) 设备描述符(Device), 描述一个设备的一般信息。
2) 设备修饰描述符(Device_Qualifier), 描述一个高速设备在其它速度下该如何变化的信息。
3) 配置描述符(Configuration), 描述一个特定的设备配置, 如接口的数目等。 一个USB设备有
一个或多个配置描述符。 每个配置有一个或多个接口并且每个接口有0个或多个端点。
4) 其它速度配置描述符(Other_speed_configuration), 描述高速设备在其它可能的速度下的
一个配置。
5) 接口描述符(Interface), 描述一种配置中的一个特定的接口。
6) 端点描述符(Endpoint), 描述主机需要的去决定端点所需带宽的信息。 这个描述符只能附加
在GetDescriptor()或GetDescriptor()请求中传送, 不能单独传送。 端点0没有此描述符。
7) 字符串描述符(String), 第0个字符串描述符指定设备支持的语言, 其它的描述符则各包含
一个UNICODE字符串。 设备描述符, 配置描述符 和 接口描述符可能会包含字符串描述符。
6. USB设备请求(USB Device Request) 请求是从主机通过控制管道发送到设备。
标准的设备请求有:
1) Clear Feature
2) Get Configuration
3) Get Descriptor
4) Get Interface
5) Get Status
6) Set Address
7) Set Configuration
8) Set Descriptor
9) Set Feature
10) Set Interface
11) Synch Frame
二,协议层
从字段(Field)和包(Packet)的定义开始,从底向上地展示USB(Univeral Serial Bus)协议。有:同步字段,包字段格式,包标识符字段,地址字段,端口字段,数据字段等等。
三,包字段格式
描述标记,数据和握手包的字段格式。包中位的定义是以未编码的数据格式给出。为了清楚起见,在此不考虑NRZI编码和位填充(Bit Stuffing)的影响。所有的包都分别有包开始(Start-of-Packet)和包结束(End-of-Packet)分隔符。包开始(SOP)分隔符是同步字段的一部分,而包结束(EOP)分隔符在第7章有所描述。
四,usb协议的大致过程如下:
当USB设备接上或从USB设备移开的时候,主机启动一个被称作总线标识(bus enumeration)的进程,来标识并管理设备状态的改变,当USB设备接上一个加电端口时,系统当采取以下操作:
1.USB设备所连的集线器通过其通向主机的状态改变通道向主机,汇报本USB设备已连接上。(参照11.13.3节)。此时,USB设备处于加电状态,它所连接的端口是无效的。
2.主机通过寻问集线器决定此次状态改变的确切含义。
3.主机一旦得知新设备已连上以后,它至少等待100ms以使得插入操作的完成以及设备电源稳定工作。然后主机发出端口使能及复位命令给那个端口。具体这些事件发生的顺序及时间判定请参看7.1.7.1节及图7-19。
4.集线器将发向端口的复位信号持续10ms(见11.5.15节)。当复位信号撤消后,端口已经有效了。这时USB设备处于缺省状态,并且可从VBUS汲取小于100mA的电能,所有设备寄存器及状态已经被复位,设备可对缺省地址产生响应。
5.主机给设备分配一个唯一的地址,设备转向编址状态。(Address state)。
6.在USB设备接受设备地址之前,它的缺省控制通道(Default Control Pipe)在缺省地址处自然是可寻址的,主机通过读取设备描述表,判决设备缺省通道的实际净数据负载。
7.主机从设备读取配置信息要从配置0读到配置n-1,其中n为配置个数,此操作须花费几个毫秒。
8.基于从设备取来的配置信息及设备如何被使用的信息,主机给设备一个配置值,此刻,设备就处于配置状态(Configured state)并此配置有关的所有端节点,都按照配置各就各位,USB设备现在可以从VBUS得到描述中所要求的电量了。从设备的角度来讲,它已经准备就绪了。
当UBS设备被取走时,集线器同样会通知主机,断开一个设备连接会使得设备所连接的端口无效,一收到断开通知后,主机就会更新的拓扑信息。
评论
查看更多