hci 的立体构型(XHCI原理概述)

  1. 概述

hci 的立体构型(XHCI原理概述)(1)

Base Address Register

位于配置空间bar0(Offset 0x10)。这个BAR地址是指向xHCI寄存器接口基地址

MMIO Space

是基于MMIO bar0的寄存器空间,所有的寄存器的offset是相对于BAR0

Host Memory

是存放xHCI各种传输所需要的数据结构,这部分空间位于系统内存,有xHCI驱动负责分配,管理

Transfer Ring

是一个环形队列,由传输描述符TD组成。TD是一个数据结构,用来定义和描述xHC和USB 设备之间传输的数据Buffer。TD是由一个活多个TRB(Transfer Request Block)组成。TRB是由xHCI驱动创建,对于xHC来说每个TRB都是只读的

Command Ring

是一个环形队列,由一个一个的命令TRB组成。每个命令TRB是用来存放由xHC执行的命令。这些命令是用来传给xHC或者USB设备。命令TRB也是由xHCI驱动构建,对于xHC只读。Command Ring系统内存位置信息是透过Command Ring Control Register(CRCR)告知xHC

Event Ring

是一个由Event TRB组成的环形队列。Event TRB由xHC构建,对于xHCI驱动只读。事件TRB用来反馈xHC执行Transfer Ring/Command Ring时的结果信息。Event Ring系统内存位置是透过Event Ring Segment Table Base Address告知xHC

Device Context

Device Context是由xHC管理,用来告知xHCI驱动软件USB设备的配置,状态等各种信息。当xHCI驱动枚举USB设备时,如果有USB设备接入,xHCI驱动会在系统内存分配一个Device Context数据结构,并且初始化此数据结构为0,之后xHCI驱动会透过Address Device Command将此数据结构的控制器移交给xHC管理维护。因此这个数据结构在此后对于xHCI驱动来说是只读的。我们都知道USB传输是透过USB设备的endpoint,因此Device Context包含31个Endpoint context结构体。由上图可知xHC执行的Transfer Ring的位置信息就是在Device Contex中的Endpoint context中。那么Device Context在系统内存中的位置又是如何告知xHC呢,所有的Device Context地址信息会以Device Base Address Array形式透过Device Context Base Address Register(DCBAAP)告知xHC

Door Bell

门铃是用来告知xHC有End point有命令或者数据传输需要执行。Door Bell Array是一个由256个寄存器组成的数组,每个Door Bell寄存器对应一个USB设备

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页