USB host/device使用说明


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 04/12/2024

    1. 概述

    IFADO USB规格是包含USB2.0 Host + Device,USB 2.0 Host和Device各一个,Host和device共用一个UTMI,故Host和Device只能存在一个。硬件不支持USB3.0。

    2. 关键词说明

    EHCI: (Enhanced Host Controller Interface)增强型主机控制器接口规范定义了一个通用串行总线(USB)2.0主机控制器的寄存器级接口

    UTMI: 全称为 USB2.0 Transceiver Macrocell Interface,此协议是针对USB2.0的信号特点进行定义的,分为8位或16位数据接口

    3. 功能描述

    1. USB HOST可以支持键盘、鼠标、U盘、USB网卡、USB摄像头、USB耳机等多种设备接入,也支持usb hub接入扩展usb接口数量

    2. USB device可以配置成USB摄像头、USB音频采集播放、RNDIS等设备

    3. 支持USB2.0,兼容多种USB接口,可以支持type A/B 接口。

    4. Uboot用法介绍

    4.1 USB2.0 Host Driver使用

    4.1.1 USB 2.0 Host menuconfig配置

    -> [*] SigmaStar drivers  --->
    
        -> -*-   SigmaStar USB2.0 Host Controller
    

    选中以上选项,开启USB20 host driver。

    4.1.2 DTS节点配置

    sstar_ehci_p0: sstar-ehci-p0@1f284800 {
                compatible = "sstar,ehci";
                reg = <0x1f284000 0x200>, <0x1f284200 0x200>, <0x1f284400 0x200>, <0x1f284600 0x200>, <0x1f284800 0x200>, <0x1f285200 0x200>;
                reg-names = "upll", "utmi", "bc", "usb0", "ehc", "extra_utmi_power";
                status = "okay";
            };
    

    4.1.3 Uboot dts参数说明

    属性值 描述 备注
    compatible 用于匹配驱动进行驱动的注册 禁止修改
    reg 用于指定ehci所占用4个bank寄存器地址范围 不需要改
    reg-names 用于指定上个选项reg中的name 不需要改
    status 选择是否使能usb device驱动 根据需要修改

    4.1.4 Uboot cmd使用实例

    uboot支持的usb class driver并不多,下面就以mass storage为例,编译uboot。

    -> Command line interface  --->
    
        -> SigmaStar common commands  --->
    
            -> SigmaStar usbstar commands  --->
    
                -> [*] usbstar
    
                -> [*] usb2.0
    

    跑进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
    
        -> [*] SigmaStar USB Reset Control
    

    以上选中开启USB20 device driver。

    4.2.2 DTS节点配置

    msb250x_udc_p0: sstar-udc-p0@1f284a00 {
                compatible = "sstar,msb250x-udc";
                reg = <0x1f284000 0x200>, <0x1f284200 0x200>, <0x1f284600 0x200>, <0x1f284a00 0x200>, <0x1f285200 0x200>;
                reg-names = "upll", "utmi", "usb0", "otg", "extra_utmi_power";
                status = "okay";
            };
    

    4.2.3 Uboot DTS参数说明

    属性值 描述 备注
    compatible 用于匹配驱动进行驱动的注册 禁止修改
    reg 用于指定ehci所占用4个bank寄存器地址范围 不需要改
    reg-names 用于指定上个选项reg中的name 不需要改
    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
    

    选择上述选项,编译出:phy-sstar-u2phy.ko。不过推荐做法是这两项都选择builtin,不容易漏掉加载。

    5.1.2 DTS节点配置

    usb2phy1_utmi: utmi@0x1f284200 {
        compatible="syscon";
        reg = <0x1f284200 0x200>;
        reg-io-width = <2>;
    };
    
    usb2phy1_bc: bc@0x1f284400 {
        compatible="syscon";
        reg = <0x1f284400 0x200>;
        reg-io-width = <2>;
    };
    
    usb2phy1_usbc: usbc@0x1f284600 {
        compatible="syscon";
        reg = <0x1f284600 0x200>;
        reg-io-width = <2>;
    };
    
    usb2phy1_uhc: uhc@0x1f284800 {
        compatible="syscon";
        reg = <0x1f284800 0x200>;
        reg-io-width = <2>;
    };
    
    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";
        support_high_2g_access_patch;
        //power-enable-pad = <PAD_GPIO8>;
        status = "ok";
    };
    

    5.1.3 DTS参数说明

    5.1.3.1 EHCI dts参数说明
    属性值 描述 备注
    compatible 用于匹配驱动进行驱动的注册 禁止修改
    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列表 有需要可以修改,参考注1
    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访问寄存器 不需要改
    status 选择是否使能驱动 根据需要修改

    5.1.4 USB 2.0 Host模块使用

    按照下列顺序加载(如果有模块选择builtin,请忽略):

    insmod usb-common.ko
    insmod usbcore.ko
    insmod phy-sstar-u2phy.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-p0 {
        compatible = "sstar,msb250x-udc";
        reg = <0x1f284200 0x200>, <0x1f284600 0x200>, <0x1f284a00 0x400>, <0x1f203c00 0x200>;
        reg-names = "utmi", "usb0", "otg", "chiptop";
        interrupts = <GIC_SPI INT_IRQ_OTG IRQ_TYPE_LEVEL_HIGH>;
        interrupt-names = "msb250x_udc_p0";
        maximum-speed = "high-speed";
        ep_name = "ep0", "ep1" , "ep2", "ep3", "ep4", "ep5", "ep6";
        ep_maxpkt_limit = <64>, <1024>, <1024>, <64>, <512>, <512>, <64>;
        ep_fifo_size =  <64>, <8192>, <1024>, <64>, <512>, <512>, <64>;
        dma_channel_num = <7>;
        status = "okay";
    };
    

    5.2.3 DTS参数说明

    属性值 描述 备注
    compatible 用于匹配驱动进行驱动的注册 禁止修改
    reg 用于指定ehci所占用4个bank寄存器地址范围 不需要改
    reg-names 用于指定上个选项reg中的name 不需要改
    interrupts 用于指定msb250x udc的中断及触发方式 禁止修改
    interrupt-names 用于指定msb250x udc的中断名字 禁止修改
    maximum-speed USB 2.0未使用 不需要改
    ep_name USB 2.0 EP的名字,获取ep有几个 禁止修改
    ep_maxpkt_limit 指定各个ep的支持的最大包长度 根据需要修改
    ep_fifo_size 指定各个ep的HE FIFO支持的最大长度 不需要改
    dma_channel_num 指定各个USB HW DMA有几路 禁止修改
    status 选择是否使能usb device驱动 根据需要修改

    5.2.4 USB 2.0 Device模块使用

    按照下列顺序加载(如果有模块选择builtin,请忽略):

    insmod usb-common.ko
    insmod udc-core.ko
    insmod udc-msb250x.ko
    
    
    ## 6. Debug & FAQ
    
    1. 查看host上所接的所有usb设备
    
        cat /sys/kernel/debug/usb/devices
    
    2. 查看echi host mac所有寄存器
    
        riu_r 0x1424
    
    3. 查看UTMI所有寄存器
    
        riu_r 0x1421
    
    4. 查看udc device mac所有寄存器
    
        riu_r 0x1425
        riu_r 0x1426
    
    5. 查看USB 所有寄存器
        riu_r 0x1420
        riu_r 0x1421
        riu_r 0x1422
        riu_r 0x1423
        riu_r 0x1424
        riu_r 0x1425
        riu_r 0x1426