USB使用参考


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 09/06/2024
    1.1
  • 文档架构优化
  • 04/18/2025

    1. 概述

    USB(通用串行总线,Universal Serial Bus)是一种广泛使用的接口标准,主要用于连接计算机与外部设备,实现数据传输和设备供电。

    2. 关键字说明

    • Device

      通过USB接口连接至计算机或其他设备以实现数据传输、供电或扩展功能的外部硬件,如U盘、键盘、移动硬盘等。

    • Host

      USB Host是控制USB总线并管理连接设备的主控端(如电脑、手机),负责供电、数据传输协调及驱动加载,使外部设备(如U盘、鼠标)得以正常工作。

    3. 功能描述

    • 支持2个usb port

    • 每个usb port都支持host mode和device mode

    • USB Device EP资源

      EP0 EP1 EP2 EP3 EP4 EP5 EP6
      64 2048 1024 64 512 128 128

    4. Uboot用法介绍

    4.1. ufu使用

    Uboot CONFIG要开启CMD_SSTAR_UFU, 如果需要编译空片升级的uboot,还需要额外开启CONFIG_SSTAR_AUTOBOOT_RUN_UFU_ALWAYS

    使用方法:Uboot下输入ufu, 就会进入ufu升级模式,等待PC工具启动升级

    4.2. usbstar使用

    Uboot CONFIG要开启CONFIG_CMD_SSTAR_USBSTAR

    使用方法:project下执行./image/makefiletools/script/make_usb_upgrade_sigmastar.sh,将生成的image bin放入Fat32格式的U盘,将U盘插入USB Host口,Uboot下输入usbstar,就可以开始升级

    5. Kernel用法介绍

    5.1. Linux配置使用USB device

    5.1.1 kernel config配置

    device的配置方式主要是开启UDC的配置(udc-msx250x.ko)和gadget的一些配置(具体看需要哪个function)

    开启Gadget核心层和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
    

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

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

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

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

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

    5.1.2. dts配置

    对应pcupid.dtsi里面的节点如下, msb250x-udc-p0和msb25x-udc-p1分别对应P0和P1,default status分别是okay和disabled

    参数 释义 备注
    reg register基地址 硬件固定地址,不能修改
    reg-names register名称 驱动根据名称获取reg,不能修改
    interrupts 中断 由硬件决定,不能修改
    interrupt-names 中断名称 驱动根据名称获取中断,不能修改
    maximum-speed 最大速率 支持high-speed和full-speed
    ep_name endpoint名称 驱动根据名称获取ep个数,不能修改
    ep_maxpkt_limit endpoint最大包的长度 硬件固定值
    ep_fifo_size endpoint fifo size 硬件固定值
    dma_channel_num dma通道的数量 硬件固定值
    clocks 使用的clock配置 硬件固定值

    5.1.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
    #如果是leagacy配置方式,还需要加载g_xxx.ko
    

    sdk如果需要默认开启需要在project/kbuild/customize/XXX/pcupid/dispcam/kernel_mod_list加入上述ko, 其中XXX表示kernel版本

    5.2. Linux配置使用USB Host

    Pcupid的2个USB Port均支持配置成USB host

    5.2.1. kernel config配置

    kernel config打开如下配置:

    COFNIG_USB_EHCI_HCD:(生成ehci-hcd.ko)

    CONFIG_SSTAR_USB2_PHY:(生成sstar-usb2-phy.ko)

    5.2.2. dts配置

    对应pcupid.dtsi的节点如下, USB2.0配置成host需要设置sstar_ehci0/sstar_ehci1节点的status为okay, 当前ehci0/ehci1默认为disabled/okay

    参数 释义 备注
    reg register基地址 硬件固定地址
    interrupts 中断 固定中断
    phys 使用的phy节点 引用的phy节点
    phy-names phy名称 驱动通过此获取phy节点
    clocks 使用的clock配置 时钟源

    5.2.3. ko加载

    按如下顺序加载ko:

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

    sdk如果需要默认开启需要在project/kbuild/customize/XXX/pcupid/dispcam/kernel_mod_list加入上述ko, 其中XXX表示kernel版本

    5.2.4. usb2.0 port0 OTG使用参考

    首先dts中host和device均需要enable

    P0口:msb250x-udc-p0和sstar_ehci0

    P1口:msb250x-udc-p1和sstar_ehci1

    如果host和device的驱动都加载了,根据加载顺序默认会配置成device,可以通过脚本来切换host或device,脚本路径:Alkaid\project\release\chip\pcupid\dispcam\common\glibc\10.2.1\debug\bin\debug\usb_otg.sh 板端rootfs路径:/customer/usb_otg.sh

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

    5.3. UVC device配置

    首先参考Linux配置使用USB device

    5.3.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.3.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
    

    sdk如果需要默认开启需要在project/kbuild/customize/XXX/pcupid/dispcam/kernel_mod_list加入上述ko, 其中XXX表示kernel版本 ko加载成功之后将生成/dev/video0节点,板子USB device口用USB线连接到PC端,运行UVC demo使用PotPlayer等播放器打开摄像头设备将出现UVC Camera设备

    5.4. UVC host配置

    首先参考Linux配置使用USB Host

    5.4.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
    

    5.4.2 Vbus控制

    kernel已经包含了相关的Vbus去拉gpio的逻辑,需要根据在dts加入vbus的控制信息,下图在加入P1的vbus GPIO信息, USB host在init阶段会将该GPIO拉高,来给device上电

    5.4.3. 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
    sstar-usb2-phy.ko
    ehci-hcd.ko
    

    sdk如果需要默认开启需要在project/kbuild/customize/XXX/pcupid/dispcam/kernel_mod_list加入上述ko, 其中XXX表示kernel版本 ko加载成功之后,板子USB host口用USB线连接到uvc device设备,可以看到/dev/videoX节点

    6. FAQ

    Q1:Kernel下USB Host接入Device无法识别

    1. 检查是否有将vbus拉高

    2. 检查DTS ehci节点的status是否为ok

    3. 检查kernel config是否配置

    Q2:Kernel下high speed device识别成full speed

    1. 检查device上级是否有接full speed hub

    Q3:Uboot下U盘升级失败

    1. 检查是否有将vbus拉高

    2. 检查DTS ehci节点的status是否为ok

    3. 检查U盘是否是Fat32格式

    Q4:USB空片升级失败

    1. 检查是否处于空片升级状态,空片升级状态串口会打印Start USB Mode

    2. 检查打包的usb image是否和板子匹配