收藏 分销(赏)

OHCI-1.0a中文版.doc

上传人:pc****0 文档编号:7775655 上传时间:2025-01-16 格式:DOC 页数:11 大小:208KB
下载 相关 举报
OHCI-1.0a中文版.doc_第1页
第1页 / 共11页
OHCI-1.0a中文版.doc_第2页
第2页 / 共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设备的需求。四种类型分别为: l 中断传输——小数据量传输,用来从USB设备向应用软件传输信息。HCD通过向设备周期性发送满足设备需求的tokens来轮询USB设备。 l 同步传输——固定数据速率下周期数据传输。数据传输在发送方与接收方之间是有时间关系的。 l 控制传输——非周期性数据传输,用来在应用软件和USB设备之间进行配置、命令、状态类型信息的传输。 l 批量传输——非周期性数据传输,用来在应用软件和USB设备之间传输大容量信息。 在OpenHCI中数据传输类型被分为两大类:周期性与非周期性。周期传输有中断传输和同步传输,因为它们周期执行。非周期传输有控制传输和批量传输,因为它们不定时执行,而是基于时间空闲基础。 3.3 主机控制器接口 3.3.1 通讯通道 在HC和HCD之间有两个通讯通道。第一个通道使用一组HC上的操作寄存器。在这个通道上HC是所有通讯的目标。操作寄存器包括控制、状态和列表指针寄存器。在在才哦做寄存器组中有一个指针指向一块共享内存区地址,叫做主机控制器通讯区域(HCCA)。HCCA是第二个通讯通道。在这个通道上所有通讯HC都处于主机地位。HCCA包含了指向中断端点描述列表的首指针,完成队列的首指针,以及和SOF处理有关的状态信息。 3.3.2 数据结构 组成接口通讯最基础的结构体是端点描述符(ED)和传输描述符(TD)。 HCD为系统中每一个端点分配一个端点描述符。端点描述符包含HC与端点通讯所必须的信息。这些信息包括数据切换信息,共享内存缓冲地址,和完成状态码。传输描述符包含一个或多个数据包的描述信息。每个传输描述符的数据缓冲大小范围从0-8192字节,最多为一个物理页面。传输描述符连接成一个队列:先进先处理。 每个数据传输类型有它自己需处理的端点描述符列表。表3-3,典型列表结构,表现数据结构的关系。 这些指向批量和控制端点描述列表的头指针被保存在HC的操作寄存器中。HCD初始化这些指针,在HC访问他们之前。当这些指针需要更新时,HCD应该停止HC处理特定列表,更新指针,然后重新使能HC。 这些指向中断端点描述列表的头指针被保存在HCCA中。这里没有为同步传输设立单独的头指针。第一个同步端点描述简单地连接到最后一个中断端点描述。共有32个中断头指针。一个为特殊帧使用的头指针决定于Frame Counter最后5位,即HCCA内中断数组的偏移。 中断端点描述组织成为由头指针作为叶子节点的树形结构。中断端点的期望轮询速率是由安排端点描述符在树结构中的相应深度实现的。 表3-5是中断端点安排例子。该表分别展示了2个端点描述符1ms间隔轮询,2个端点描述符2ms间隔轮询,1个端点描述符4ms间隔轮询,2个端点描述符8ms间隔轮询,2个端点16ms间隔轮询,和2个端点32ms间隔轮询。请注意在该例子中,未使用的中断端点标志被忽略,以及连接到层次中下个可用端点上。 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开始执行周期传输。周期传输完成后,帧内多余时间通过再次执行非周期传输耗尽。 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载入头指针的值继续处理,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 端点描述符格式 注: 1、字段‘—’未被HC使用,HCD可以任意使用 2、在HC处理队列之前,字段‘0’必须由HCD写入0。如果HC对该字段有写权限,总是写0。 4.2.2 端点描述字段定义 Table 4-1:端点描述符字段定义 名称 HC 访问权 描述 FA R 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格式。 MPS R MaximumPacketSize 该端点所能接收、发送的单包最大长度(字节)。 TailP R TDQueueTailPointer 如果TailP等于HeadP,意味着列表不包含任何TD供HC处理。如果不相等,表示列表中含有TD需要处理。 H R/W Halted 该位由HC设置,标志着该端点上处理的TD队列被停止,通常是由于处理TD是发生错误。 C R/W toggleCarry 数据乒乓进位。当TD退休时,该位被置成包含来自退休TD的最后一个数据乒乓值(LSB of data Toggle字段)。 同步端点不使用该字段。 HeadP R/W TDQueueHeadPointer 指向该端点下一个待处理的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指向新加入的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描述的数据缓冲区能横跨两个未连接的物理页。尽管TD的离散力是有限的,但是它也消除了大部分与连续物理页强制性相关的问题,包括不必要的数据移动。 TDs连接成队列依附在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 普通型传输描述符格式 注: 在DWORD0,是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)。 DI 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字段记录错误类型,然后放置该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值指向数据缓冲区的地址,用来和端点传输数据包,端点地址由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字段会被更新,不管成功与否。如果传输成功,该字段设置成NoError,否则设置成错误类型。 4.3.1.3.4 序列位 USB协议使用数据PID序列来保证数据包按正确顺序接收。序列机制要求数据发送器不停的使用相同数据PID(DATA0或DATA1)发送相同数据知道它决定数据包被正确接收和认可。发送数据包之后发送器收到一个ACK握手意味着数据被接收和认可。为了保证数据包不丢失,HC和端点无论开始与停止,都应保持乒乓同步。 端点初始化首先建立数据乒乓同步,与端点传输的第一个数据包使用DATA0。每个成功传输的数据包之后,数据乒乓更改。 通过修改dataToggle字段的LSB位,数据乒乓状态保存在普通型TD。当数据乒乓值必须在两个TD间传输时,ED的toggleCarry位负责传送正确的值到下个TD。 当dataToggle字段的MSB位等于0时,意味着数据乒乓值从ED的toggleCarry位获得,dataToggle字段的LSB忽略。当dataToggle字段的MSB位等于1时,dataToggle字段的LSB值用作数据乒乓值。 针对批量和中断端点,大多数普通型TD都以dataToggle=00b入队。 11
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服