USB host/device使用说明
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 07/07/2023 |
1. 概述¶
IFORD USB规格只包含USB20 Host + Device,其中USB20 Host只有一个,USB20 Device也只有一个,并且是共用phy的,因此,Host和Device无法同时使用。
2. 关键词说明¶
EHCI: (Enhanced Host Controller Interface)增强型主机控制器接口规范定义了一个通用串行总线(USB)2.0主机控制器的寄存器级接口
UTMI: 全称为 USB2.0 Transceiver Macrocell Interface,此协议是针对USB2.0的信号特点进行定义的,分为8位或16位数据接口
3. 功能描述¶
-
USB HOST可以支持键盘、鼠标、U盘、USB网卡、USB摄像头、USB耳机等多种设备接入,也支持usb hub接入扩展usb接口数量
-
USB device可以配置成USB摄像头、USB音频采集播放、RNDIS等设备
-
支持USB2.0,兼容多种USB接口,type A/type B/type C等接口都可以支持
4. Uboot用法介绍¶
4.1 USB2.0 Host Driver使用¶
4.1.1 USB 2.0 Host menuconfig配置¶
-> Device Drivers -> [*] USB support ---> -> [*] Enable driver model for USB Gadget -> [*] EHCI HCD (USB 2.0) support -> [*] SigmaStar drivers ---> -> [*] SigmaStar USB2.0 Host Controller
选中以上选项,开启USB20 host driver。
4.1.2 DTS节点配置¶
ehci0: ehci@1f284800{ compatible = "sstar,ehci"; reg = <0x1f284200 0x200>, <0x1f284400 0x200>, <0x1f284600 0x200>, <0x1f284800 0x200>, status = "okay"; };
4.1.3 Uboot dts参数说明¶
属性值 | 描述 | 备注 |
---|---|---|
compatible | 用于匹配驱动进行驱动的注册 | 禁止修改 |
reg | 用于指定ehci所占用4个bank寄存器地址范围 | 不需要改 |
status | 选择是否使能usb device驱动 | 根据需要修改 |
4.1.4 Uboot cmd使用实例¶
uboot支持的usb class driver并不多,下面就以mass storage为例,选中USB Mass Storage support,编译uboot。
-> Device Drivers -> [*] USB support ---> -> [*] USB Mass Storage support
跑进uboot之后,在USB20 host port接上U盘,执行:usb start,可以识别到U盘。
4.2 USB2.0 Device Driver使用¶
4.2.1 USB 2.0 Device menuconfig配置¶
-> Device Drivers ->[*] USB support ---> -> [*] Enable driver model for USB Gadget -> [*] USB Gadget Support ---> -> [*] SigmaStar drivers ---> -> [*] SigmaStar USB 2.0 Device Controller
以上选中开启USB20 device driver。
4.2.2 DTS节点配置¶
msb250x-udc { compatible = "sstar,msb250x-udc"; status = "okay"; };
4.2.3 Uboot DTS参数说明¶
属性值 | 描述 | 备注 |
---|---|---|
compatible | 用于匹配驱动进行驱动的注册 | 禁止修改 |
status | 选择是否使能usb device驱动 | 根据需要修改 |
4.2.4 Uboot ufu cmd使用实例¶
uboot中使用usb20 device需要结合function driver来使用,下面就以UFU command为例,选中UFU,并在UDC selection中选中USB2.0。
-> Command line interface -> SigmaStar cmmon commands ---> -> [*] ufu -> UDC selection (USB2.0 port(msb250x)) --->
跑进uboot之后,执行ufu命令,然后把USB线接到PC端,可以识别到ufu device(如上图所示)。
5. Kernel用法介绍¶
5.1 USB2.0 Host Driver使用¶
5.1.1 USB 2.0 Host menuconfig配置¶
-> Device Drivers -> [M] USB support ---> -> <M> EHCI HCD (USB 2.0) support
选择上述选项,编译出USB 2.0 Host driver:usb-common.ko usbcore.ko ehci-hcd.ko
-> Device Drivers -> [*] SStar SoC platform drivers ---> -> <M> Sigmastar USB2 UTMI Transceiver Driver
选择上述选项,编译出:usb2-phy.ko。不过推荐做法是这两项都选择builtin,不容易漏掉加载。
5.1.2 DTS节点配置¶
sstar_u2phy: sstar-usb2-phy { compatible = "sstar,u2phy"; #address-cells = <1>; #size-cells = <1>; ranges; status = "ok"; sstar_u2phy1: u2phy1 { syscon-utmi = <&usb2phy1_utmi>; syscon-uhc = <&usb2phy1_uhc>; syscon-usbc = <&usb2phy1_usbc>; syscon-bc = <&usb2phy1_bc>; //utmi_dp_dm_swap = <0>; #phy-cells = <0>; status = "ok"; }; }; sstar-ehci-1 { compatible = "sstar-ehci-1"; reg-names = "ehc_base"; reg = <0x1f284800 0x200>; syscon-utmi = <&usb2phy1_utmi>; syscon-usbc = <&usb2phy1_usbc>; syscon-bc = <&usb2phy1_bc>; clocks = <&CLK_upll_480m>; interrupts = <GIC_SPI INT_IRQ_UHC IRQ_TYPE_LEVEL_HIGH>; phys = <&sstar_u2phy1>; phy-names = "usb"; status = "ok"; };
5.1.3 DTS参数说明¶
5.1.3.1 EHCI dts参数说明
属性值 | 描述 | 备注 |
---|---|---|
compatible | 用于匹配驱动进行驱动的注册 | 禁止修改 |
#address-cells | 用于指定子节点reg属性地址信息所占用的字长(32bit) | 禁止修改 |
#size-cells | 用于指定子节点reg属性地址范围信息所占的字长(32bit) | 禁止修改 |
syscon-utmi | 用于指定utmi bank的syscon节点,便于使用regmap访问寄存器 | 不需要改 |
syscon-uhc | 用于指定ehci bank的syscon节点,便于使用regmap访问寄存器,与reg属性相同 | 不需要改 |
syscon-usbc | 用于指定usbc bank的syncon节点,便于使用regmap访问寄存器 | 不需要改 |
syscon-bc | 用于指定bc bank的syncon节点,便于使用regmap访问寄存器 | 不需要改 |
interrupts | 用于指定ehci的中断及触发方式 | 禁止修改 |
phys | 用于指定ehci所使用的phy列表 | 不需要修改 |
phy-names | 用于指定phys属性所支持phy列表的名称,与phy列表对应 | 不需要改 |
clocks | 用于开启ehci时钟 | 禁止修改 |
status | 选择是否使能驱动 | 根据需要修改 |
5.1.3.2 phy dts参数说明
属性值 | 描述 | 备注 |
---|---|---|
compatible | 用于匹配驱动进行驱动的注册 | 禁止修改 |
#address-cells | 用于指定子节点reg属性地址信息所占用的字长(32bit) | 禁止修改 |
#size-cells | 用于指定子节点reg属性地址范围信息所占的字长(32bit) | 禁止修改 |
ranges | 用于表示子节点继承#address-cells和#size-cells属性 | 不需要改 |
status | 选择是否使能驱动 | 根据需要修改 |
5.1.3.3 phy子节点dts参数说明
属性值 | 描述 | 备注 |
---|---|---|
syscon-utmi | 用于指定utmi bank的syscon节点,便于使用regmap访问寄存器 | 不需要改 |
syscon-uhc | 用于指定ehci bank的syscon节点,便于使用regmap访问寄存器,与reg属性相同 | 不需要改 |
syscon-usbc | 用于指定usbc bank的syncon节点,便于使用regmap访问寄存器 | 不需要改 |
syscon-bc | 用于指定bc bank的syncon节点,便于使用regmap访问寄存器 | 不需要改 |
syscon-utmi2 | 用于指定utmi2 bank的syncon节点,便于使用regmap访问寄存器 | 不需要改 |
eye-diagram | 用于指定phy眼图设置使用bank | 禁止修改 |
status | 选择是否使能驱动 | 根据需要修改 |
5.1.4 USB 2.0 Host模块使用¶
按照下列顺序加载(如果有模块选择builtin,请忽略):
insmod usb-common.ko insmod usbcore.ko insmod usb2-phy.ko insmod ehci-hcd.ko
5.2 USB2.0 Device Driver使用¶
5.2.1 USB 2.0 Device menuconfig配置¶
-> Device Drivers ->[*] USB support ---> -><*> USB Gadget Support ---> -> USB Peripheral Controller ---> -> <M> Sstar USB 2.0 Device Controller
选择上述选项,编译出USB 2.0 Device driver:usb-common.ko usbcore.ko udc-core.ko udc-msb250x.ko
5.2.2 DTS节点配置¶
msb250x-udc { compatible = "sstar,msb250x-udc"; interrupts = <GIC_SPI INT_IRQ_OTG IRQ_TYPE_LEVEL_HIGH>; status = "ok"; };
5.2.3 DTS参数说明¶
属性值 | 描述 | 备注 |
---|---|---|
compatible | 用于匹配驱动进行驱动的注册 | 禁止修改 |
interrupts | 用于指定msb250x udc的中断及触发方式 | 禁止修改 |
status | 选择是否使能usb device驱动 | 根据需要修改 |
5.2.4 USB 2.0 Device模块使用¶
按照下列顺序加载(如果有模块选择builtin,请忽略):
insmod usb-common.ko insmod usbcore.ko insmod udc-core.ko insmod udc-msb250x.ko
6. Debug & FAQ¶
-
查看host上所接的所有usb设备
cat /sys/kernel/debug/usb/devices
-
查看ehci mac所有寄存器
riu_r 0x1424
-
查看UTMI所有寄存器
riu_r 0x1421
-
reset phy方法(仅作host时使用)
echo 1 > /sys/kernel/debug/usb/phy-soc:sstar-usb2-phy.0/reset