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外设供电配置的帮助驱动。
关键特性
USB2.0 OTG
特性
特性 | 特性说明 |
---|---|
支持OTG | 支持Host和Device模式切换,并支持idpin+vbuspin检测。 |
支持HS,FS Host/Device | High Speed(480Mb/s), Full Speed(12Mb/s) Host/Device 模式 |
支持LS Host Only | 支持Low Speed(1.5Mb/s) Host only 模式 |
支持16 Host Channel | 最多支持16 Channel同时传输 |
支持16 IN + 16 OUT Device端点 | 16KB Tx Buffer, 2KB Rx Buffer |
支持Remote Wakeup | Host模式下支持High Speed, Full Speed, Low Speed Remote Wakeup |
性能参数
测试项目 | Tx(MB/s) | Rx(MB/s) |
---|---|---|
U盘测速(HIKISEMI S560 256GB) | 32.2 | 32.4 |
U盘模式Gadget测速 | 21.8 | 14.8 |
测试方法
# U盘测速:
## host:
fio -name=Tx -ioengine=libaio -direct=1 -iodepth=64 -rw=write -bs=512K -size=1024M -numjobs=1 -group_reporting -filename=/dev/sda
fio -name=Rx -ioengine=libaio -direct=1 -iodepth=64 -rw=read -bs=512K -size=1024M -numjobs=1 -group_reporting -filename=/dev/sda
# U盘模式Gadget:
## device:
gadget-setup msc
## pc:
fio -name=DevRx -ioengine=libaio -direct=1 -iodepth=64 -rw=write -bs=512K -size=100M -numjobs=1 -group_reporting -filename=/dev/sda
fio -name=DevTx -ioengine=libaio -direct=1 -iodepth=64 -rw=read -bs=512K -size=100M -numjobs=1 -group_reporting -filename=/dev/sda
USB2.0 Host
特性
特性 | 特性说明 |
---|---|
支持HS,FS,LS Host | High Speed(480Mb/s), Full Speed(12Mb/s), Low Speed(1.5Mb/s) Host模式 |
支持16 Host Channel | 最多支持16 Channel同时传输 |
支持Remote Wakeup | Host模式下支持HighSpeed, FullSpeed, LowSpeed Remote Wakeup |
性能参数
测试项目 | Tx(MB/s) | Rx(MB/s) |
---|---|---|
U盘测速(HIKISEMI S560 256GB) | 32.2 | 32.4 |
测试方法
# U盘测速:
fio -name=Tx -ioengine=libaio -direct=1 -iodepth=64 -rw=write -bs=512K -size=1024M -numjobs=1 -group_reporting -filename=/dev/sda
fio -name=Rx -ioengine=libaio -direct=1 -iodepth=64 -rw=read -bs=512K -size=1024M -numjobs=1 -group_reporting -filename=/dev/sda