SSU_USB使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 05/12/2023
    1.1
  • 新增UVC device和host配置
  • 08/11/2023
    1.2
  • 新增USB2.0 P0 OTG使用参考
  • 10/08/2023

    1. 概述

    Opera提供最多3个USB Port:

     2个USB2.0 Port(P0和P1), 其中P0可以作为Device或者Host, P1只能作为Host
    
     1个USB3.0 Port, 只能作为Host
    

    2. Linux配置使用USB device

    2.1. kernel config配置

    Opera只有USB2.0 Port0支持配置成USB device, device的配置方式主要是开启UDC的配置(udc-msx250x.ko)和gadget的一些配置(具体看需要哪个function)

    开启UDC配置(生成usb-common.ko、udc-core.ko、udc-msb250x.ko)

    [*]USB support  --->
        [M]USB Gadget Support  --->
            USB Peripheral Controller  --->
                [M]Sstar USB 2.0 Device Controller
    

    开启gadget配置, 红色箭头指向为配置具体的device function(生成libcomposite.ko, 以及具体function的ko)

    [*]USB support  --->
        [M]USB Gadget Support  --->
            [M]USB functions configurable through configfs
    

    也可通过加载对应的g_xxx.ko来配置gadget:

    [*]USB support  --->
        [M]USB Gadget Support  --->
               USB Gadget precomposed configurations
    

    例如adb需要打开如下配置(生成usb_f_fs.ko):

    2.2. dts配置

    对应pioneer5.dtsi里面的节点如下, status default是okay的:

    2.3. ko加载

    按如下顺序加载ko:

    #usb2.0 device normal ko
    usb-common.ko
    udc-core.ko
    udc-msb250x.ko
    libcomposite.ko
    #device function ko
    例如adb需要加载usb_f_fs.ko
    

    3. Linux配置使用USB host

    Opera的3个USB Port均支持配置成USB host

    3.1. USB2.0配置成USB host

    3.1.1. kernel config配置

    kernel config打开如下配置:

    COFNIG_USB_EHCI_HCD:(生成ehci-hcd.ko)

    CONFIG_SS_USB2_PHY:(生成phy-sstar-u2phy.ko)

    3.1.2. dts配置

    对应pioneer5.dtsi的节点如下, USB2.0配置成host需要设置sstar_ehci1/sstar_ehci2节点的status为okay

    在板级dts里面会将status覆盖为okay, 例如pioneer5-ssz028b-s01a-s.dts里面会将sstar_ehci2的status覆盖为okay, 即default usb2.0 port1用作host

    sstar_ehci1还是disalbed, 即default usb2.0 port0用作device, 如果要使用port0作为host, 需要设置sstar_ehci1的status也为okay。

    3.1.3. ko加载

    按如下顺序加载ko:

    #usb2.0 host normal ko
    usb-common.ko
    phy-sstar-u2phy.ko
    ehci-hcd.ko
    

    3.1.4. usb2.0 port0 OTG使用参考

    如果dts中sstar_udc和sstar_ehci1均打开的情况下,单独加载host或device的驱动则会配置成host或device。

    如果host和device的驱动都加载了,默认会配置成device,可以通过脚本来切换host或device,脚本路径: Alkaid\project\release\chip\p5\dispcam\common\glibc\6.4.0\bin\debug\usb_otg.sh

    #USB2.0 P0切换为device
    ./usb_otg.sh device
    #USB2.0 P0切换为host
    ./usb_otg.sh host
    

    3.2. USB3.0配置成USB host

    3.2.1. kernel config配置

    kernel config打开如下配置:

    COFNIG_SS_USB3_PHY:(生成usb3-phy.ko)

    CONFIG_USB_XHCI_HCD:(生成xhci-hcd.ko、xhci-plat-hcd.ko)

    COFNIG_USB_DWC3:(生成dwc3.ko)

    CONFIG_SSTAR_USB_DWC3_OF_SIMPLE:(生成sstar-dwc3-of-simple.ko)

    3.2.2. dts配置

    对应pioneer5.dtsi的节点如下, USB3.0配置成host需要设置usb3drd_ctrl、u3phy、usb3_drd节点的status为okay

    usb3drd_ctrl:

    u3phy:

    usb3_drd:

    3.2.3. ko加载

    按如下顺序加载ko:

    #usb3.0 host normal ko
    usb-common.ko
    usb3-phy.ko
    xhci-hcd.ko
    xhci-plat-hcd.ko
    dwc3.ko
    sstar-dwc3-of-simple.ko
    

    4. Vbus控制

    目前SSU9386和SSD2381的板子usb host vbus是通过SAR_GPIO1来控制的, 如下图

    uboot和kernel已经包含了相关的Vbus去拉gpio的逻辑,需要在板级的dts里面配置, 比如pioneer5-ssz028b-s01a-s.dts里面的配置如下

    5. UVC device配置

    首先参考第二节配置USB device

    5.1. kernel config配置

    开启UVC device function配置(生成ko:libcomposite.ko、usb_f_uvc.ko、g_sstar_gadget.ko)

    Device Drivers  --->
        [*]USB support  --->
            [M]USB Gadget Support  --->
                [M]USB functions configurable through configfs
                USB Gadget precomposed configurations  --->
                    [M]USB SigmaStar Gadget
                    [*]Include configuration with UVC (Video)
    

    开启Multimedia配置(生成的ko:mc.ko、videodev.ko、videobuf2-common.ko、videobuf2-v4l2.ko、videobuf2-memops.ko、videobuf2-vmalloc.ko、videobuf2-dma-sg.ko、uvcvideo.ko)

    Device Drivers  --->
        [*]Multimedia support  --->
            Media drivers  --->
                [*]Media USB Adapters  --->
                    [M]USB Vide Class (UVC)
            Media device types  --->
                [*]Cameras and video grabbers
            Media core support  --->
                [*]Media Controller API
    

    5.2. ko加载

    按如下顺序加载ko:

    #multimedia ko
    mc.ko
    videodev.ko
    videobuf2-common.ko
    videobuf2-v4l2.ko
    videobuf2-memops.ko
    videobuf2-vmalloc.ko
    videobuf2-dma-sg.ko
    uvcvideo.ko
    #uvc device ko
    udc-core.ko
    libcomposite.ko
    usb_f_uvc.ko
    udc-msb250x.ko
    g_sstar_gadget.ko
    

    ko加载成功之后将生成/dev/video0节点,板子USB device口用USB线连接到PC端,运行UVC demo使用PotPlayer等播放器打开摄像头设备将出现UVC Camera设备

    6. UVC host配置

    首先参考第三节配置USB host

    6.1. kernel config配置

    开启Multimedia配置(生成的ko:mc.ko、videodev.ko、videobuf2-common.ko、videobuf2-v4l2.ko、videobuf2-memops.ko、videobuf2-vmalloc.ko、videobuf2-dma-sg.ko、uvcvideo.ko)

    Device Drivers  --->
        [*]Multimedia support  --->
            Media drivers  --->
                [*]Media USB Adapters  --->
                    [M]USB Vide Class (UVC)
            Media device types  --->
                [*]Cameras and video grabbers
            Media core support  --->
                [*]Media Controller API
    

    6.2. ko加载

    #multimedia ko
    mc.ko
    videodev.ko
    videobuf2-common.ko
    videobuf2-v4l2.ko
    videobuf2-memops.ko
    videobuf2-vmalloc.ko
    videobuf2-dma-sg.ko
    uvcvideo.ko
    #usb2.0 host ko
    phy-sstar-u2phy.ko
    ehci-hcd.ko
    #usb3.0 host ko
    usb3-phy.ko
    xhci-hcd.ko
    xhci-plat-hcd.ko
    dwc3.ko
    sstar-dwc3-of-simple.ko
    

    ko加载成功之后,板子USB host口用USB线连接到uvc device设备,可以看到/dev/videoX节点