105 lines
3.9 KiB
Markdown
105 lines
3.9 KiB
Markdown
|
# 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接口架构主要包括三大部分,
|
|||
|
|
|||
|
1. 主机配置空间(Host Configuration Space)
|
|||
|
|
|||
|
- 每个xHC实现都应包括一种通过系统软件识别和枚举主机控制器的方法。本规范提供了一个主机配置空间的PCI示例,它被称为PCI配置空间。PCI配置空间定义提供了一个关于系统xHC枚举和资源(中断、电源、虚拟化等)的配置空间使用的工作示例
|
|||
|
|
|||
|
2. 寄存器空间(MMIO Space)
|
|||
|
|
|||
|
- 寄存器空间表示xHC向驻留在内存地址空间中的系统软件提供的硬件寄存器。寄存器空间提供了在xHCI正常和扩展功能寄存器中定义的实现特定参数、操作和运行时控制和状态寄存器,以及用于标记对单个USB设备的访问的门钟阵列。该空间,通常被称为I/O空间,被实现为内存映射的I/O(MMIO)空间
|
|||
|
|
|||
|
3. 主机空间(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. 配置方法
|
|||
|
|
|||
|
- 1. 通过 PCIe 总线连接或者板载外设, 连接 XHCI 控制器
|
|||
|
- 2. 如果使用 PCIe 总线连接的 XHCI 控制器,先调用 FPCIE 驱动完成设备枚举和 PCIe 配置
|
|||
|
- 3. 初始化 FUSB 驱动,通过 FUSB 驱动框架,初始化 FXHCI 控制器驱动
|
|||
|
- 4. 通过 FUSB 驱动完成控制器和设备初始化
|
|||
|
- 5. 调用 FUSB 轮询接口更新设备状态
|
|||
|
|
|||
|
## 4 应用示例
|
|||
|
|
|||
|
- USB主机操作和USB设备发现
|
|||
|
### [fxhci_host_pcie](../../../baremetal/example/peripheral/usb/fxhci_host_pcie)
|
|||
|
|
|||
|
- USB大容量存储器读写
|
|||
|
### [fusb_fatfs](../../../baremetal/example/storage/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
|
|||
|
|
|||
|
```c
|
|||
|
FUsbHc *FXhciHcInit (FUsb *instance, uintptr base_addr)
|
|||
|
```
|
|||
|
|
|||
|
Note:
|
|||
|
|
|||
|
- 创建XHCI USB 控制器实例,完成初始化
|
|||
|
|
|||
|
Input:
|
|||
|
|
|||
|
- {FUsb} *instance, USB实例
|
|||
|
- {uintptr} base_addr, XHCI控制器基地址
|
|||
|
|
|||
|
Return:
|
|||
|
|
|||
|
- {FUsbHc *} 类型为XHCI的USB控制器实例
|