rt-thread/bsp/phytium/libraries/standalone/doc/reference/driver/fxhci.md

105 lines
3.9 KiB
Markdown
Raw Normal View History

# 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控制器实例