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

3.9 KiB
Raw Blame 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枚举和资源中断、电源、虚拟化等的配置空间使用的工作示例
  1. 寄存器空间(MMIO Space)
  • 寄存器空间表示xHC向驻留在内存地址空间中的系统软件提供的硬件寄存器。寄存器空间提供了在xHCI正常和扩展功能寄存器中定义的实现特定参数、操作和运行时控制和状态寄存器以及用于标记对单个USB设备的访问的门钟阵列。该空间通常被称为I/O空间被实现为内存映射的I/O(MMIO)空间
  1. 主机空间(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 控制器
    1. 如果使用 PCIe 总线连接的 XHCI 控制器,先调用 FPCIE 驱动完成设备枚举和 PCIe 配置
    1. 初始化 FUSB 驱动,通过 FUSB 驱动框架,初始化 FXHCI 控制器驱动
    1. 通过 FUSB 驱动完成控制器和设备初始化
    1. 调用 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控制器实例