当前位置:   article > 正文

xHCI1.1-DCBAAP(设备上下文及地址数组指针 寄存器)_xhci协议的用法

xhci协议的用法

一、DCBAAP(设备上下文及地址数组指针 寄存器):

xhci里面的Operational 寄存器组里面的设备上下文基地址数组指针寄存器(Device Context Base Address Array Pointer Register,DCBAAP),用于保存设备上下文基地址数组(DCBAA)的指针(也就是这个数组的首地址)。

P418

二、DCBAA(设备上下文基地址数组,内存数据结构):

DCBAA和xHCI的设备槽相关联(Device Slot),也就是一个Slot对应DCBAA里面的一个条目,可以通过Slot ID来索引对应的设备上下文(Device Context)数据结构,也就是可以将DCBAA看为是一个查找表。在初始化xHCI时每个条目都会初始化为0。注意DCBAA的首个条目(Slot ID=0)是被xHCI的暂存机制(xHCI Scratchpad Mechanism)使用的。

并且设备上下文基地址数组的首地址,在xHCI被设置为“run”模式(也就是USBCMD寄存器的R/S bit位置1)之前,应该被写入到DCBAAP寄存器中,同时Scratchpad Buffer Array的首地址也要在此之前放入到设备上下文及地址数组的第0个条目。如下图xHCI协议中所示。

每个slot又会对应一个Doorbell寄存器,软件可以通过写对应的寄存器,来告知xHCI使用对应slot,所对应的设备上下文。

当使用某个slot,也即是enable某个slot后,需要构造对应的设备上下文数据结构,然后将其首地址放入DCBAA数组里面对应的条目中。

三、DC(设备上下文数据结构,内存数据结构)

设备上下文数据结构(Device Context data structure)被xHC管理并用来向系统软件报告设备配置和状态信息。 设备上下文数据结构由32个数据结构的数组组成。 第一个上下文数据结构(索引=“ 0”)是Slot上下文数据结构(6.2.2)。 其余上下文数据结构(索引1-31)是端点上下文数据结构(6.2.3)。

作为枚举USB设备的一部分,系统软件分配一个设备上下文数据结构给在Host内存中的设备并且将它初始化为“0”。数据结构的归属权就传给了xHC通过一个地址设备命令(Address Device Command)。xHC保持着设备上下文信息的归属权直到设备slot因为Disable Slot命令不能使用。

设备上下文数据结构由xHC拥有时,应被系统软件视为只读。

DCBAA里面的每个条目存放的是一个设备上下文数据结构的地址(首地址,因为设备上下文也是一个数组),设备上下文的数据结构如下图所示:

如图所示,设备上下文数据结构,也相当于是一个数组,这里面一共有32个条目,第0个条目是槽上下文(Slot Context),第一个条目是端点0对应的端点上下文(Endpoint Context)(也就是Default Control endpoint,每个USB设备都会有这样一个默认端点,用来最初配置设备,该端点是支持双向的)。

3.1 槽上下文(Slot Context)的结构如下:

槽上下文包含与整个设备相关的信息,或影响一个USB设备的所有端点。这个数据结构作为设备上下文的成员(也作为Input Context的成员,这里我们只讲作为设备上下文的成员)。槽上下文数据结构提供的信息包括:控制(Control),状态(State),寻址(Addressing),和功耗管理(Power Management)。xHC使用Slot State来标识当前设备的状态并映射到USB协议中描述的USB 设备的状态(如下图)。

xHC分配的USB设备地址,可以被开发者使用总线分析仪来跟踪设备相关的USB活动。Route String被hubs用来路由Packets到下游端口,即定位Super Speed Packet的目标。Route Srting的形式在USB3协议规范的8.9节有介绍。Speed, TT Port Number和TT Hub Slot ID允许xHC执行address连接到高速hub后面的低速(low)和全速(full)设备时所必须的拆分事务(Split Transactions)。功耗管理信息包括Max Exit Latency,被xHC用于总线上等时包(Isoch packets)的调度。

3.2 端点上下文(Endpoint Context)数据结构如下:

端点上下文数据结构定义一个具体USB端点(Endpoint)的配置(Configuration)和状态(State),这个数据结构作为设备上下文的成员(也作为Input Context的成员,这里我们只讲作为设备上下文的成员)。端点上下文数据结构被xHC用来向系统软件报告端点相关的参数值。

大多数端点上下文(Endpoint Context)包含端点相关的类型(Type),状态(State),带宽(Bandwidth)的信息,这些信息对应着设备报告的相关的端点描述符中的信息。在端点描述符中,也定义了TR Dequeue Pointer字段,这个指针指向与Pipe相关联的Transfer Ring。对于USB3的Bulk端点有一个特殊的情况,因为USB3的Bulk Pipe支持Streams,所以TR Dequeue Pointer也可能指向一个Stream Context Array。

注意设备上下文提供USB设备所能声明的31个端点的设备上下文。但是大多数设备只有声明少部分的端点,也就说设备上下文中大部分端点上下文是没有被使用的。

端点上下文也包含一些和Debug与Pip相关的Transfer操作的字段。Error Counter(CErr)字段可以用来强制对USB事务的无限制的Retry。

3.2.1 Stream Context Array

流山下文数组被用来定义USB3中支持Streams的端点的Transfer Ring。一个流上下文数组(Stream Context Array)由流上下文数据结构组成(Streams Context Data Structures)。在一个主流上下文数组(Primary Streams Context Array)中,其流上下文数据结构(Streams Context Data Structures)数量和其位置,都是被定义在其父端点上下文数据结构中(Parent Endpoint Context)。

3.2.1.1 Stream Context

Stream上下文数据结构提供了一个指针,该指针指向流的Transfer Ring,并向xHC提供一些不透明(Opaque)(暂存,Scratchpad)的空间。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/613927
推荐阅读
相关标签
  

闽ICP备14008679号