3.架构总览 3.1 介绍
图表3-1显示了USB4部分主要关注区域。它们分别是应用软件/USB驱动,主机控制器驱动(HCD),主机控制器(HC),和USB设备。应用软件/USB驱动和主机控制器驱动(HCD)由软件方式实现。主机控制器和USB设备由硬件实现。OpenHCI指定了HCD和HC之间的接口和各自的基本操作。
HCD和HC前后合作地工作,实现在应用端软件和USB设备之间传输数据。数据从应用软件端的共享内存区传输到USB设备端,以及反向传输。
3.2数据传输类型
USB文件定义了四种传输类型。每种类型都被优化设计,使之适合应用软件与USB设备的需求。四种类型分别为:
? 中断传输——小数据量传输,用来从USB设备向应用软件传输信息。HCD通过向设备
周期性发送满足设备需求的tokens来轮询USB设备。 ? 同步传输——固定数据速率下周期数据传输。数据传输在发送方与接收方之间是有时间
关系的。
? 控制传输——非周期性数据传输,用来在应用软件和USB设备之间进行配置、命令、
状态类型信息的传输。
? 批量传输——非周期性数据传输,用来在应用软件和USB设备之间传输大容量信息。 在OpenHCI中数据传输类型被分为两大类:周期性与非周期性。周期传输有中断传输和同步传输,因为它们周期执行。非周期传输有控制传输和批量传输,因为它们不定时执行,而是基于时间空闲基础。
3.3 主机控制器接口 3.3.1 通讯通道
在HC和HCD之间有两个通讯通道。第一个通道使用一组HC上的操作寄存器。在这个通道上HC是所有通讯的目标。操作寄存器包括控制、状态和列表指针寄存器。在在才哦做寄存器组中有一个指针指向一块共享内存区地址,叫做主机控制器通讯区域(HCCA)。HCCA是第二个通讯通道。在这个通道上所有通讯HC都处于主机地位。HCCA包含了指向中断端点描述列表的首指针,完成队列的首指针,以及和SOF处理有关的状态信息。
1
3.3.2 数据结构
组成接口通讯最基础的结构体是端点描述符(ED)和传输描述符(TD)。
HCD为系统中每一个端点分配一个端点描述符。端点描述符包含HC与端点通讯所必须的信息。这些信息包括数据切换信息,共享内存缓冲地址,和完成状态码。传输描述符包含一个或多个数据包的描述信息。每个传输描述符的数据缓冲大小范围从0-8192字节,最多为一个物理页面。传输描述符连接成一个队列:先进先处理。
每个数据传输类型有它自己需处理的端点描述符列表。表3-3,典型列表结构,表现数据结构的关系。
这些指向批量和控制端点描述列表的头指针被保存在HC的操作寄存器中。HCD初始化这些指针,在HC访问他们之前。当这些指针需要更新时,HCD应该停止HC处理特定列表,更新指针,然后重新使能HC。
这些指向中断端点描述列表的头指针被保存在HCCA中。这里没有为同步传输设立单独的头指针。第一个同步端点描述简单地连接到最后一个中断端点描述。共有32个中断头指针。
2
一个为特殊帧使用的头指针决定于Frame Counter最后5位,即HCCA内中断数组的偏移。 中断端点描述组织成为由头指针作为叶子节点的树形结构。中断端点的期望轮询速率是由安排端点描述符在树结构中的相应深度实现的。
表3-5是中断端点安排例子。该表分别展示了2个端点描述符1ms间隔轮询,2个端点描述符2ms间隔轮询,1个端点描述符4ms间隔轮询,2个端点描述符8ms间隔轮询,2个端点16ms间隔轮询,和2个端点32ms间隔轮询。请注意在该例子中,未使用的中断端点标志被忽略,以及连接到层次中下个可用端点上。
3
3.4主机控制器驱动职责
这个章节概述了HCD的职责。
3.4.1 主机控制器管理
HCD管理HC的操作。通过与HC中的操作寄存器直接通讯和在HCCA中建立中断端点描述符列表头指针来完成操作。
3.4.2 带宽分配
所有对USB的访问都由HCD安排。HCD为每个周期端点分配部分有效带宽。如果没有足够的带宽,新连接周期端点将被阻止访问总线。
部分带宽为非周期传输保留。这个确保每个帧周期中发生的批量和控制传输。USB帧周期定义为1ms。
OpenHCI带宽分配策略如图3-6显示。每帧由HC向USB总线发送SOF同步包开始。随后是HC执行非周期传输,直到帧间隔计数器达到HCD设置的值,此时标志着HC开始执行周期传输。周期传输完成后,帧内多余时间通过再次执行非周期传输耗尽。
4
3.4.3 列表管理
USB数据包的传输机制是通过传输描述符队列,这些队列连接在端点描述符列表上。HCD建立这些数据结构体,然后将控制权交给HC来处理。
HCD负责端点描述符队列的入队与出队。入队即将端点描述符添加到恰当列表的队尾。这个操作可以与HC处理列表同时发生,不需要任何锁定机制。端点描述符出队之前,HCD可能禁止HC处理整个端点描述符列表,来保证HC未访问端点描述符。
HCD还负责将传输描述符向相应端点描述符入队。入队即向相应队列添加传输描述符。这个操作可以与HC处理列表同时发生,不需要任何锁定机制。正常操作时,HC会将传输描述符出队。然而,由于应用软件需要取消传输描述符或者特定错误状态时,HCD会将传输描述符出队。在这一情况下,端点描述符会在传输描述符被出队之前被禁止。
3.4.4 根集线器
根集线器集成在HC中,根集线器的内部寄存器向HCD开放的,负责提供适当的集线器类协议,包括USB驱动和适当的根集线器操作。
3.5 主机控制器职责
这个章节概述了HC的职责。
3.5.1 USB状态
OpenHCI定义了4种USB状态:UsbOperational, UsbReset, UsbSuspend, 和 UsbResume。HC为每个状态将USB总线设置为合适的操作模式。
3.5.2 帧管理
HC保持跟踪当前帧计数器和帧周期。在每个帧的起始,HC在USB总线上发生SOF包以及更新系统内存中的帧计数值。HC还决定帧中是否还有足够的时间发送下个数据包。
3.5.3 列表处理
HC在端点描述符和传输描述符上的操作由HCD入队。
中断和同步传输时,HC开始于当前帧的中断端点描述符头指针。顺序遍历列表直到一个包传输完成,该包来自安排在当前帧上的所有中断和同步端点描述符的首个传输描述符。
批量和控制传输时,HC开始于各自列表的上个结束点。当HC达到列表终点时,HC载入头
5