3.9 KiB
3.9 KiB
FXHCI 驱动程序
1. 概述
XHCI,即可扩展的主机控制器接口,是英特尔公司开发的一个USB主机控制器接口,它主要是面向USB 3.0的,同时它也支持USB 2.0及以下的设备,包括所有种类速度的USB设备(USB 3.0 SuperSpeed, USB 2.0 Low-, Full-, and High-speed, USB 1.1 Low- and Full-speed),是UHCI/OHCI/EHCI等接口标准的升级版本
XHCI接口架构主要包括三大部分,
- 主机配置空间(Host Configuration Space)
- 每个xHC实现都应包括一种通过系统软件识别和枚举主机控制器的方法。本规范提供了一个主机配置空间的PCI示例,它被称为PCI配置空间。PCI配置空间定义提供了一个关于系统xHC枚举和资源(中断、电源、虚拟化等)的配置空间使用的工作示例
- 寄存器空间(MMIO Space)
- 寄存器空间表示xHC向驻留在内存地址空间中的系统软件提供的硬件寄存器。寄存器空间提供了在xHCI正常和扩展功能寄存器中定义的实现特定参数、操作和运行时控制和状态寄存器,以及用于标记对单个USB设备的访问的门钟阵列。该空间,通常被称为I/O空间,被实现为内存映射的I/O(MMIO)空间
- 主机空间(Host Memory)
- 主机空间由控制数据结构(设备上下文基地址阵列、设备上下文、传输环等)定义。以及由xHC驱动程序分配和管理的数据缓冲区,以启用单个设备的端点流量。此空间将在内存地址空间的内核和用户区域中分配
2. 功能
- 驱动相关的源文件如下,
drivers/usb/fxhci
├── fxhci.c
├── fxhci.h
├── fxhci_cmd.c
├── fxhci_debug.c
├── fxhci_dev.c
├── fxhci_evt.c
├── fxhci_hw.c
├── fxhci_hw.h
├── fxhci_private.h
└── fxhci_roothub.c
3. 配置方法
-
- 通过 PCIe 总线连接或者板载外设, 连接 XHCI 控制器
-
- 如果使用 PCIe 总线连接的 XHCI 控制器,先调用 FPCIE 驱动完成设备枚举和 PCIe 配置
-
- 初始化 FUSB 驱动,通过 FUSB 驱动框架,初始化 FXHCI 控制器驱动
-
- 通过 FUSB 驱动完成控制器和设备初始化
-
- 调用 FUSB 轮询接口更新设备状态
4 应用示例
- USB主机操作和USB设备发现
fxhci_host_pcie
- USB大容量存储器读写
fusb_fatfs
5. API参考
5.1. 用户数据结构
无
5.2 错误码定义
- [1] FXHCI_CC_SUCCESS : success
- [-65] FXHCI_CC_TIMEOUT : wait transfer timeout
- [-66] FXHCI_CC_CONTROLLER_ERROR : usb controller in wrong state
- [-67] FXHCI_CC_COMMUNICATION_ERROR : communication error
- [-68] FXHCI_CC_OUT_OF_MEMORY : memory used up
- [-69] FXHCI_CC_DRIVER_ERROR : driver in wrong state
- [-1] FXHCI_CC_GENERAL_ERROR : general error
- [0] FXHCI_CC_ZERO_BYTES : failed, transfer zero bytes
下列错误码来自XHCI标准
- [5] FXHCI_CC_TRB_ERROR : TRB error (XHCI spec.)
- [6] FXHCI_CC_STALL_ERROR : stall error (XHCI spec.)
- [7] FXHCI_CC_RESOURCE_ERROR : resource error (XHCI spec.)
- [8] FXHCI_CC_BANDWIDTH_ERROR : bandwidth error (XHCI spec.)
- [9] FXHCI_CC_NO_SLOTS_AVAILABLE : No available slot error (XHCI spec.)
- [13] FXHCI_CC_SHORT_PACKET : short packet error (XHCI spec.)
- [21] FXHCI_CC_EVENT_RING_FULL_ERROR : event ring full error (XHCI spec.)
- [24] FXHCI_CC_COMMAND_RING_STOPPED : command ring stopped error (XHCI spec.)
- [25] FXHCI_CC_STOPPED : command abort error (XHCI spec.)
- [26] FXHCI_CC_TRB_ERROR : stopped error (XHCI spec.)
- [27] FXHCI_CC_STOPPED_LENGTH_INVALID : stopped invalid length error (XHCI spec.)
5.3. 用户API接口
FXhciHcInit
FUsbHc *FXhciHcInit (FUsb *instance, uintptr base_addr)
Note:
- 创建XHCI USB 控制器实例,完成初始化
Input:
- {FUsb} *instance, USB实例
- {uintptr} base_addr, XHCI控制器基地址
Return:
- {FUsbHc *} 类型为XHCI的USB控制器实例