logo资料库

OHCI-1.0a中文版.doc

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
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
指针的值继续处理,HC处理n个控制传输到1个批量传输,n值由HCD设置。 当传输描述符完成后,无论是成功还是由于发生错误,HC都将传输描述符移至完成队列。 完成队列的入队实现是指把最近完成的传输描述符放在队列头部。完成队列通过HCCA从 HC到HCD进行周期传输。 4 数据结构 4.1 概述 USB未对连接设备提供总线使用机制。因此,接口使用模式是由HC预言的,以及HCD软件 为设备分配服务提供的职责,该职责是预言时设备所需要的。USB必然要在软件和端点(批 量、控制、中断和同步)之间支持多种不同的通讯模式。在这些服务类型中总线的用法是多 样的,使主机任务相当复杂。OpenHCI使用的方法是在端点中有两个层次的仲裁可供选择。 第一层仲裁是在列表层,每个端点类型需要的服务在相应的列表类型中(例:同步端点在同 步列表中)以及HC选择那个列表去执行。在列表中,端点们有同等的优先权,以此来保证 某一特定类型的端点具有或多或少同等执行机会。 当端点执行完成后列表等级被定期修改。在每个帧内,有一段时间保留用作处理控制和批量 列表的条目。这段时间在每帧的开头。HCD设置HcPeriodicStart在帧内的时间来限制这个时 间间隔,在此之后周期传输(中断和同步)具有总线的优先使用权。处理周期列表时,针对 当前帧的中断列表先于同步列表处理。当周期性列表处理完成后,控制和批量列表得以继续 执行。 一个端点描述符(ED)包含端点相关信息,HC使用该信息来管理端点的访问。端点地址, 传输速度,和最大数据包大小是ED中的典型参数。另外,ED也是传输描述符队列的锚点。 一个TD连接到一个ED上,TD定义了一个与端点传输数据的内存缓冲区。当HC访问一个端 点描述符然后发现一个有效的TD地址,HC完成ED指定的端点与TD指定的内存地址之间的 单一传输。 当TD定义的所有数据都传输完成,TD从ED处断开,连接到完成队列中。然后HCD处理完 成队列以及向发起传输请求的软件提供完成信息。 根据以上描述的处理机制,由HC处理的内存数据结构的信息在将这个章节中详细阐述。因 为数据结构都被定义在系统内存中,所以HCD对所有数据结构拥有完全的读写权限。字段 描述注明了结构体中被HC修改的字段。当包含那些字段的结构体在HC当前处理的队列或列 表上时,系统软件不能修改会被HC改写的字段。没有使用硬件互锁来提供互斥。 4.2 端点描述符 端点描述符长度为16字节,内存结构体,16字节对齐。HC遍历包含TD链表的ED列表,HC 执行标明的传输。 4.2.1 端点描述符格式 6
注: 1、字段‘—’未被HC使用,HCD可以任意使用 2、在HC处理队列之前,字段‘0’必须由HCD写入0。如果HC对该字段有写权限,总是写0。 4.2.2 端点描述字段定义 Table 4-1:端点描述符字段定义 名称 描述 FunctionAddress 包含该ED控制端点的USB功能地址 EndpointNumber 端点地址 Direction 该2位字段指示了数据流方向(IN or OUT)。如果未定义IN或OUT, 方向由TD结构体字段PID决定。该字段编码如下 Speed 表示端点速率:全速(S=0)或低速(S=1) sKip ==1时,HC直接跳至链表上的下个ED,不再防伪TD队列或者向这个 端点发送任何USB令牌。 Format 这位表示了连接到ED上的TD的格式。如果是控制、批量、或者中断 端点,F=0,标志着使用通用TD格式。如果是同步端点,F=1,标志 着使用同步TD格式。 MaximumPacketSize 该端点所能接收、发送的单包最大长度(字节)。 TDQueueTailPointer 如果TailP等于HeadP,意味着列表不包含任何TD供HC处理。如果不 相等,表示列表中含有TD需要处理。 Halted 该位由HC设置,标志着该端点上处理的TD队列被停止,通常是由于 处理TD是发生错误。 toggleCarry 7 HC 访问权 R R R R R R R R R/W R/W FA EN D S K F MPS TailP H C
HeadP R/W NextED R 数据乒乓进位。当TD退休时,该位被置成包含来自退休TD的最后一 个数据乒乓值(LSB of data Toggle字段)。 同步端点不使用该字段。 TDQueueHeadPointer 指向该端点下一个待处理的TD。 NextED 如果非零,这个入口指向列表的下个ED。 4.2.3 端点描述符描述 ED连接成列表,由HC来处理。NextED字段非零时,意味着有下一个ED连接到本ED上。 当HC访问ED时,查看sKip和Halted字段是否进行更进一步处理。如果其中一个被设置,HC 直接跳到链表上的下一个ED。如果两者都位设置,然后HC比较HeadP和TailP字段,如果不 相等,根据HeadP指向的TD定义了一个缓冲区,HC将会从该缓冲区传入或传出一个数据包。 这个连接约定假设HCD总是添加至TD队列尾部。将新TD链接至TailP指向的地址,然后跟新 TailP指向新加入的TD。 当一个TD处理完成后,HC通过将该TD从ED链表中断开并链接至已处理队列中使之“退休”。 当一个TD断开链接时,将传输描述符字段NextTD赋值给端点描述符的HeadP字段。 HCD通过设置sKip位来跳过HC对该端点的处理。当HCD必须修改HeadP值时,以及从列表 中删除ED被禁止时,设置sKip位通常是有需要的。 当HC在处理TD时发生错误时设置Halted位。当错误TD移到已完成队列时,HC更新HeadP值 以及设置Halted位,让HC跳过ED处理直到Halted位被清除。当错误状态修正后HCD清除 Halted位,端点的传输得以继续。HCD不应该去写HeadP/toggleCarry/Halted除非Halted和sKip 被设置,或者ED从链表中移除。 当ED的D字段等与10b(IN),且HeadP不等于TailP,HC会向指定端点发出IN令牌。这个表 示存在一个数据缓冲区,也表示端点的数据输入会与HC访问内存区中的TD同时发生。 因为ED必须16字节对齐,HC只使用了DWORD3的高28位来指向下个ED。TailP和HeadP指 向TD,TD可以是16字节或32字节对齐。HC只使用DWORD1和DWORD2的高28位来指向一 个16字节对齐的TD(F=0)。如果HeadP和TailP指向32字节对齐的TD(F=1),那么这些DWORD 的第4位必须为0。 4.3 传输描述符 HC所使用的数据结构TD保存在系统内存中,定义了一个与端点进行数据传输的数据缓冲 区。TD有两种类型:普通型和同步型。普通型TD适用于中断、控制和批量端点,同步型TD 唯一适用于处理同步传输要求。两种TD类型都被系统支持,因为同步传输的特性并不适用 于标准DMA缓冲格式,且缓冲区需要分包操作,因为同步传输比普通传输类型有更多限制。 普通型TD和同步型TD都提供了一种指定缓冲区的方法,长度从0-8192字节。另外,TD描述 8
分享到:
收藏