收藏 分享(赏)

OHCI-1.0a中文版.doc

上传人:kpmy5893 文档编号:7330320 上传时间:2019-05-15 格式:DOC 页数:11 大小:208KB
下载 相关 举报
OHCI-1.0a中文版.doc_第1页
第1页 / 共11页
OHCI-1.0a中文版.doc_第2页
第2页 / 共11页
OHCI-1.0a中文版.doc_第3页
第3页 / 共11页
OHCI-1.0a中文版.doc_第4页
第4页 / 共11页
OHCI-1.0a中文版.doc_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、13.架构总览3.1 介绍图表 3-1 显示了 USB4 部分主要关注区域。它们分别是应用软件/USB 驱动,主机控制器驱动(HCD) ,主机控制器(HC) ,和 USB 设备。应用软件/USB 驱动和主机控制器驱动(HCD)由软件方式实现。主机控制器和 USB 设备由硬件实现。OpenHCI 指定了 HCD和 HC 之间的接口和各自的基本操作。HCD 和 HC 前后合作地工作,实现在应用端软件和 USB 设备之间传输数据。数据从应用软件端的共享内存区传输到 USB 设备端,以及反向传输。3.2 数据传输类型USB 文件定义了四种传输类型。每种类型都被优化设计,使之适合应用软件与 USB 设备

2、的需求。四种类型分别为: 中断传输小数据量传输,用来从 USB 设备向应用软件传输信息。HCD 通过向设备周期性发送满足设备需求的 tokens 来轮询 USB 设备。 同步传输固定数据速率下周期数据传输。数据传输在发送方与接收方之间是有时间关系的。 控制传输非周期性数据传输,用来在应用软件和 USB 设备之间进行配置、命令、状态类型信息的传输。 批量传输非周期性数据传输,用来在应用软件和 USB 设备之间传输大容量信息。在 OpenHCI 中数据传输类型被分为两大类:周期性与非周期性。周期传输有中断传输和同步传输,因为它们周期执行。非周期传输有控制传输和批量传输,因为它们不定时执行,而是基于

3、时间空闲基础。3.3 主机控制器接口3.3.1 通讯通道在 HC 和 HCD 之间有两个通讯通道。第一个通道使用一组 HC 上的操作寄存器。在这个通道上 HC 是所有通讯的目标。操作寄存器包括控制、状态和列表指针寄存器。在在才哦做寄存器组中有一个指针指向一块共享内存区地址,叫做主机控制器通讯区域(HCCA) 。HCCA 是第二个通讯通道。在这个通道上所有通讯 HC 都处于主机地位。HCCA 包含了指向中断端点描述列表的首指针,完成队列的首指针,以及和 SOF 处理有关的状态信息。23.3.2 数据结构组成接口通讯最基础的结构体是端点描述符(ED)和传输描述符(TD ) 。HCD 为系统中每一个

4、端点分配一个端点描述符。端点描述符包含 HC 与端点通讯所必须的信息。这些信息包括数据切换信息,共享内存缓冲地址,和完成状态码。传输描述符包含一个或多个数据包的描述信息。每个传输描述符的数据缓冲大小范围从 0-8192 字节,最多为一个物理页面。传输描述符连接成一个队列:先进先处理。每个数据传输类型有它自己需处理的端点描述符列表。表 3-3,典型列表结构,表现数据结构的关系。这些指向批量和控制端点描述列表的头指针被保存在 HC 的操作寄存器中。HCD 初始化这些指针,在 HC 访问他们之前。当这些指针需要更新时,HCD 应该停止 HC 处理特定列表,更新指针,然后重新使能 HC。这些指向中断端

5、点描述列表的头指针被保存在 HCCA 中。这里没有为同步传输设立单独的头指针。第一个同步端点描述简单地连接到最后一个中断端点描述。共有 32 个中断头指针。3一个为特殊帧使用的头指针决定于 Frame Counter 最后 5 位,即 HCCA 内中断数组的偏移。中断端点描述组织成为由头指针作为叶子节点的树形结构。中断端点的期望轮询速率是由安排端点描述符在树结构中的相应深度实现的。表 3-5 是中断端点安排例子。该表分别展示了 2 个端点描述符 1ms 间隔轮询,2 个端点描述符 2ms 间隔轮询,1 个端点描述符 4ms 间隔轮询,2 个端点描述符 8ms 间隔轮询,2 个端点 16ms 间

6、隔轮询,和 2 个端点 32ms 间隔轮询。请注意在该例子中,未使用的中断端点标志被忽略,以及连接到层次中下个可用端点上。43.4 主机控制器驱动职责这个章节概述了 HCD 的职责。3.4.1 主机控制器管理HCD 管理 HC 的操作。通过与 HC 中的操作寄存器直接通讯和在 HCCA 中建立中断端点描述符列表头指针来完成操作。3.4.2 带宽分配所有对 USB 的访问都由 HCD 安排。HCD 为每个周期端点分配部分有效带宽。如果没有足够的带宽,新连接周期端点将被阻止访问总线。部分带宽为非周期传输保留。这个确保每个帧周期中发生的批量和控制传输。USB 帧周期定义为 1ms。OpenHCI 带

7、宽分配策略如图 3-6 显示。每帧由 HC 向 USB 总线发送 SOF 同步包开始。随后是 HC 执行非周期传输,直到帧间隔计数器达到 HCD 设置的值,此时标志着 HC 开始执行周期传输。周期传输完成后,帧内多余时间通过再次执行非周期传输耗尽。53.4.3 列表管理USB 数据包的传输机制是通过传输描述符队列,这些队列连接在端点描述符列表上。HCD建立这些数据结构体,然后将控制权交给 HC 来处理。HCD 负责端点描述符队列的入队与出队。入队即将端点描述符添加到恰当列表的队尾。这个操作可以与 HC 处理列表同时发生,不需要任何锁定机制。端点描述符出队之前,HCD可能禁止 HC 处理整个端点

8、描述符列表,来保证 HC 未访问端点描述符。HCD 还负责将传输描述符向相应端点描述符入队。入队即向相应队列添加传输描述符。这个操作可以与 HC 处理列表同时发生,不需要任何锁定机制。正常操作时,HC 会将传输描述符出队。然而,由于应用软件需要取消传输描述符或者特定错误状态时,HCD 会将传输描述符出队。在这一情况下,端点描述符会在传输描述符被出队之前被禁止。3.4.4 根集线器根集线器集成在 HC 中,根集线器的内部寄存器向 HCD 开放的,负责提供适当的集线器类协议,包括 USB 驱动和适当的根集线器操作。3.5 主机控制器职责这个章节概述了 HC 的职责。3.5.1 USB 状态Open

9、HCI定义了 4种USB状态:UsbOperational, UsbReset, UsbSuspend, 和 UsbResume。HC为每个状态将USB总线设置为合适的操作模式。3.5.2 帧管理HC保持跟踪当前帧计数器和帧周期。在每个帧的起始,HC在USB总线上发生SOF包以及更新系统内存中的帧计数值。HC还决定帧中是否还有足够的时间发送下个数据包。3.5.3 列表处理HC在端点描述符和传输描述符上的操作由HCD入队。中断和同步传输时,HC开始于当前帧的中断端点描述符头指针。顺序遍历列表直到一个包传输完成,该包来自安排在当前帧上的所有中断和同步端点描述符的首个传输描述符。批量和控制传输时,H

10、C开始于各自列表的上个结束点。当HC达到列表终点时,HC载入头6指针的值继续处理,HC处理n个控制传输到1个批量传输,n值由HCD设置。当传输描述符完成后,无论是成功还是由于发生错误,HC都将传输描述符移至完成队列。完成队列的入队实现是指把最近完成的传输描述符放在队列头部。完成队列通过HCCA从HC到HCD进行周期传输。4 数据结构4.1 概述USB未对连接设备提供总线使用机制。因此,接口使用模式是由HC预言的,以及HCD软件为设备分配服务提供的职责,该职责是预言时设备所需要的。USB必然要在软件和端点(批量、控制、中断和同步)之间支持多种不同的通讯模式。在这些服务类型中总线的用法是多样的,使

11、主机任务相当复杂。OpenHCI使用的方法是在端点中有两个层次的仲裁可供选择。第一层仲裁是在列表层,每个端点类型需要的服务在相应的列表类型中(例:同步端点在同步列表中)以及HC选择那个列表去执行。在列表中,端点们有同等的优先权,以此来保证某一特定类型的端点具有或多或少同等执行机会。当端点执行完成后列表等级被定期修改。在每个帧内,有一段时间保留用作处理控制和批量列表的条目。这段时间在每帧的开头。HCD设置HcPeriodicStart 在帧内的时间来限制这个时间间隔,在此之后周期传输(中断和同步)具有总线的优先使用权。处理周期列表时,针对当前帧的中断列表先于同步列表处理。当周期性列表处理完成后,

12、控制和批量列表得以继续执行。一个端点描述符(ED)包含端点相关信息, HC使用该信息来管理端点的访问。端点地址,传输速度,和最大数据包大小是ED中的典型参数。另外,ED 也是传输描述符队列的锚点。一个TD连接到一个ED上,TD定义了一个与端点传输数据的内存缓冲区。当HC访问一个端点描述符然后发现一个有效的TD地址,HC完成ED 指定的端点与 TD指定的内存地址之间的单一传输。当TD定义的所有数据都传输完成,TD 从ED处断开,连接到完成队列中。然后HCD处理完成队列以及向发起传输请求的软件提供完成信息。根据以上描述的处理机制,由HC处理的内存数据结构的信息在将这个章节中详细阐述。因为数据结构都

13、被定义在系统内存中,所以HCD对所有数据结构拥有完全的读写权限。字段描述注明了结构体中被HC修改的字段。当包含那些字段的结构体在HC当前处理的队列或列表上时,系统软件不能修改会被HC改写的字段。没有使用硬件互锁来提供互斥。4.2 端点描述符端点描述符长度为16字节,内存结构体,16字节对齐。HC遍历包含TD链表的ED 列表,HC执行标明的传输。4.2.1 端点描述符格式7注:1、字段未被HC使用,HCD可以任意使用2、在HC处理队列之前,字段0必须由HCD写入0。如果HC对该字段有写权限,总是写0。4.2.2 端点描述字段定义Table 4-1:端点描述符字段定义名称 HC访问权描述FA R

14、FunctionAddress包含该ED控制端点的USB 功能地址EN R EndpointNumber端点地址D R Direction该2位字段指示了数据流方向(IN or OUT) 。如果未定义IN或OUT ,方向由TD结构体字段PID决定。该字段编码如下S R Speed表示端点速率:全速(S=0)或低速(S=1)K R sKip=1时, HC直接跳至链表上的下个ED,不再防伪TD 队列或者向这个端点发送任何USB令牌。F R Format这位表示了连接到ED上的TD的格式。如果是控制、批量、或者中断端点,F=0,标志着使用通用TD格式。如果是同步端点,F=1 ,标志着使用同步TD格式

15、。MPS R MaximumPacketSize该端点所能接收、发送的单包最大长度(字节) 。TailP R TDQueueTailPointer如果TailP等于HeadP,意味着列表不包含任何TD 供HC处理。如果不相等,表示列表中含有TD需要处理。H R/W Halted该位由HC设置,标志着该端点上处理的TD队列被停止,通常是由于处理TD是发生错误。8C R/W toggleCarry数据乒乓进位。当TD退休时,该位被置成包含来自退休 TD的最后一个数据乒乓值(LSB of data Toggle字段) 。同步端点不使用该字段。HeadP R/W TDQueueHeadPointer指

16、向该端点下一个待处理的TD。NextED R 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指

17、向新加入的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/t

18、oggleCarry/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位必

19、须为0。4.3 传输描述符HC所使用的数据结构TD保存在系统内存中,定义了一个与端点进行数据传输的数据缓冲区。TD有两种类型:普通型和同步型。普通型 TD适用于中断、控制和批量端点,同步型TD唯一适用于处理同步传输要求。两种TD 类型都被系统支持,因为同步传输的特性并不适用于标准DMA缓冲格式,且缓冲区需要分包操作,因为同步传输比普通传输类型有更多9限制。普通型TD和同步型TD都提供了一种指定缓冲区的方法,长度从 0-8192字节。另外,TD描述的数据缓冲区能横跨两个未连接的物理页。尽管TD的离散力是有限的,但是它也消除了大部分与连续物理页强制性相关的问题,包括不必要的数据移动。TDs连接成队

20、列依附在EDs上。ED提供TD 与端点进行数据传输的端点地址。HCD将TD 加入到队列中,HC将TD从队列中移除。当 HC从队列中移除一个TD 后,将其连接到已完成队列。当TD从ED移除且连接至已完成队列,我们称之为“ 退休” 。TD可以退休是因为正常完成或者发生错误。当TD退休时,一个状态码写入 TD,该状态码帮助 HCD确定TD退休的原因。处理TD的细节与TD类型相关,在章节4.3.1到4.3.3.1中讨论。4.3.1 普通型传输描述符控制、批量和中断传输使用相同格式的传输描述符。这个普通型TD长16字节,主机内存结构体必须16字节对齐。4.3.1.1 普通型传输描述符格式注:在DWORD

21、0,是HC读写字段。字中未使用部分(表示为)不能被HC 写,后者读出来再原样写回。TD中可被HC访问的部分, HCD都不应该修改。4.3.1.2 普通型传输描述符字段定义Table 4-2: 普通TD的字段定义名称 HC访问权 描述R R bufferRounding如果=0,从端点传输至TD的最后一个数据包必须完全填充完已定义数据缓冲区。如果=1,最后一个数据包或许小于已定义数据缓冲区,而且TD上不产生错误状态。DP R Direction/PID这2位表示数据流方向,PID被令牌使用。这个字段只和HC有关,如果ED的D字段设置成00b或者11b(表示PID 的决定权交给TD) 。10DI

22、R DelayInterrupt这个字段包含这个TD的中断延时数。当 TD完成后,HC可能会等待DelayInterrupt个帧之后才产生中断。如果=11b ,TD完成后不产生中断。T R/W DataToggle这个2位字段用来产生/比较数据 PID值(DATA0或者DATA1) 。每次成功发送与接收一个数据包后跟新该值。当数据乒乓值从ED的toggleCarry字段获得时,那么这个字段的 MSB=0;当数据乒乓值取自这个字段的LSB时,该字段的MSB=1。EC R/W ErrorCount每次传输错误时,该值递增。当=2且有错误发生时,ConditionCode字段记录错误类型,然后放置该

23、TD到已完成队列。当传输成功完成,该字段复位到0。CC R/W ConditionCode该字段包含最后一次传输的状态。 (参看章节0)CBP R/W CurrentBufferPointer包含下个存储单元的物理地址,用来跟端点进行传输。0值表示0长度数据包或所有字节都已经传输完成。NextTD R/W NextTD该入口指向连接到这个端点上的TD链表中的下个TD 。BE R BufferEnd包含这个TD缓冲区中最后一个字节物理地址。4.3.1.3 普通型传输描述符描述4.3.1.3.1 缓冲区地址决策普通型TD中的CurrentBufferPointer值指向数据缓冲区的地址,用来和端点

24、传输数据包,端点地址由ED指定。当传输毫无错误的完成, HC用传输的字节数来更新该字段。如果在数据传输中,包含在HC使用的CBP的工作拷贝中的缓冲区地址超出了4k边界,BufferEnd的高20位复制到CBP的工作值中,引起下个缓冲区地址成为相同4K页的0字节,该页包含缓冲区的最后一个字节。4.3.1.3.2 包大小当HC向端点写时(OUT和SETUP) ,发送到端点的数据包大小总是取MaximumPacketSize和缓冲区剩余数据小者。当HC从端点读时(IN) ,数据包大小决定于端点。4.3.1.3.3 状态码每次尝试传输后,普通TD的 ConditionCode字段会被更新,不管成功与否

25、。如果传输成功,该字段设置成NoError,否则设置成错误类型。4.3.1.3.4 序列位USB协议使用数据PID序列来保证数据包按正确顺序接收。序列机制要求数据发送器不停的使用相同数据PID(DATA0或DATA1)发送相同数据知道它决定数据包被正确接收和认可。发送数据包之后发送器收到一个ACK握手意味着数据被接收和认可。为了保证数据包11不丢失,HC和端点无论开始与停止,都应保持乒乓同步。端点初始化首先建立数据乒乓同步,与端点传输的第一个数据包使用DATA0。每个成功传输的数据包之后,数据乒乓更改。通过修改dataToggle 字段的LSB位,数据乒乓状态保存在普通型TD。当数据乒乓值必须在两个TD间传输时,ED的toggleCarry位负责传送正确的值到下个TD。当dataToggle字段的 MSB位等于 0时,意味着数据乒乓值从 ED的toggleCarry位获得,dataToggle字段的 LSB忽略。当dataToggle字段的MSB位等于 1时,dataToggle 字段的LSB 值用作数据乒乓值。针对批量和中断端点,大多数普通型TD都以dataToggle=00b入队。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报