USB
介绍USB的功能和使用方法。
模块介绍
USB全称Universal Serial Bus(通用串行总线),是一种新兴的并逐渐取代其他接口标准的数据通信方式,由 Intel、Compaq、Digital、IBM、Microsoft、NEC及Northern Telecom 等计算机公司和通信公司于1995年联合制定,并逐渐形成了行业标准。
K1共有三个USB控制器,分别为USB2.0 OTG(USB0),USB2.0 Host(USB1),USB3.0 DRD(USB2.0 Port记为USB2、SuperSpeed Port记为USB3)。
Linux中,支持两种USB角色,可以外接USB外设的Host模式和作为USB外设可以接入到其他上位机的Device模式。
功能介绍
USB Host
USB Host角色驱动框架图可以分为以下几个层次:
- USB Host Controller Driver:这是USB控制器驱动层,负责初始化控制器以及进行底层数据收发操作。
- USB Core Services:这是核心层,负责抽象出USB层次和基于URB的传输,并提供接口供上下使用。
- USB Class Driver:这是USB设备功能层,负责实现USB设备驱动、USB功能驱动,对接内核其他框架(如HID、UVC、Storage等)。
USB Device
USB Device角色驱动框架图可以分为以下几个层次:
- USB Device Controller Driver:这是USB Device角色控制器驱动层,负责初始化控制器及进行底层数据收发操作。
- UDC Core:这是核心层,负责抽象出USB Device层次和基于usb_request的传输,并提供接口供上下使用。
- Composite: 用于组合多个USB Device功能为一个设备,支持用户空间通过configfs配置,或者legacy驱动硬编码组合好的Functions。
- Function Driver:这是USB Device功能层,负责实现USB Device模式的功能驱动,对接内核其他框架(如存储、V4L2、网络等)。
这些层次结构共同构成了Linux系统中USB子系统的框架,确保了USB模块系统中的正常运行和数据传输。
源码结构介绍
USB2.0 OTG控制器驱动代码在drivers/usb目录下:
drivers/usb
|-- phy/
| |-- phy-k1x-ci-otg.c # OTG驱动,用于实现EHCI Host和K1X UDC两种模式驱动切换。
| |-- phy/phy-k1x-ci-usb2.c # PHY驱动。
|-- host/
| |-- ehci-k1x-ci.c # EHCI Host模式平台驱动, 需要和EHCI Host驱动组合使用。
|-- gadget/
|-- udc/
|-- k1x_udc_core.c # Device模式驱动。
USB2.0 HOST控制器驱动代码在drivers/usb目录下:
drivers/usb
|-- phy/
| |-- phy-k1x-ci-usb2.c # PHY驱动。
|-- host/
|-- ehci-k1x-ci.c # EHCI Host模式平台驱动, 需要和EHCI Host驱动组合使用。
USB3.0 DRD控制器驱动代码在drivers/usb目录下:
drivers/usb
|-- phy/
| |-- phy-k1x-ci-usb2.c # USB3.0复合端口下的USB2.0 PHY驱动。
|-- phy/
| |-- spacemit/
| |-- phy-spacemit-k1x-combphy.c # USB3.0 5Gbps PHY驱动。
|-- dwc3/
| |-- dwc3-spacemit.c # DWC平台驱动, 需要和DWC3驱动搭配使用。
其他一些组件代码路径如下:
drivers/
|-- extcon/
| |-- extcon-k1xci.c # MicroUSB Pin检测连接器驱动,需搭配OTG驱动、Extcon驱动使用。
|-- usb
| |-- misc/
| |-- spacemit_onboard_hub.c # 用于板载USB外设供电配置的帮助驱动。