Edit online

USB Host 配置

5 Dec 2024
Read time: 7 minute(s)
ArtInChip 提供了两路 USB Host 端口和一路 USB Device 端口,需要分别进行配置:
  1. USB Host Contoller 配置

    ArtInChip 在一个 USB Host 端口中提供了下列 Host Contoller,在软件上需要需要分开配置:
  2. USB Interface 驱动配置

    完成 USB Host Contoller 配置后,系统可以正确识别插入 USB 总线的 Device 设备。此时配置 USB Interface 驱动。USB Device 有各种不同类型 ,例如 U 盘、键盘鼠标、无线网卡。在 USB Device 中以 Interface 为单位提供不同类型的功能。如需使用 USB Device 具体功能,配置不同类型 USB Interface 的驱动。

    不同类型 USB Interface 驱动的配置可查看:

配置 EHCI 控制器

针对 USB 2.0 (High Speed) 的 EHCI 控制器,配置流程如下:
  1. 在 Linux Kernel Kconfig 文件中使能相应的 EHCI Driver:
    1. 通过 make menuconfig 命令进入 kernel 的功能配置界面:
      make menuconfig
      
    2. 按如下选择使能相关驱动:
      > Device Drivers > USB support
      
       <*>   EHCI HCD (USB 2.0) support
       [*]     Root Hub Transaction Translators
       [*]     Improved Transaction Translator scheduling
       <*>     Support for ArtInChip on-chip EHCI USB controller
    3. 保存并退出配置界面。

      配置完成后的项目存储在 target/configs/xxx_defconfig 文件中。

  2. 在 DTS 文件中配置相应 EHCI Device。

    找到并编辑目标设备的 DTS 文件,通常位于 target/d211/common/d211.dtsi。添加或修改以下内容:

    usbh0: usb@10210000 {
        compatible = "artinchip,aic-usbh-v1.0";
        reg = <0x0 0x10210000 0x0 0x100>;
        interrupts-extended = <&plic0 35 IRQ_TYPE_LEVEL_HIGH>, <&plic0 4 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&cmu CLK_USBH0>;
        clock-names = "usbh";
        resets = <&rst RESET_USBH0>;
        reset-names = "usbh";
        dr_mode = "host";
    };
    
    usbh1: usb@10220000 {
        compatible = "artinchip,aic-usbh-v1.0";
        reg = <0x0 0x10220000 0x0 0x100>;
        interrupts-extended = <&plic0 37 IRQ_TYPE_LEVEL_HIGH>,
                            <&plic0 38 IRQ_TYPE_LEVEL_HIGH>;
        clocks = <&cmu CLK_USBH1>;
        clock-names = "usbh";
        resets = <&rst RESET_USBH1>, <&rst RESET_USBPHY1>;
        reset-names = "usbh", "usbh-phy";
        dr_mode = "host";
    };

    模块系统参数随 IC 的设定而定,一般不能进行更改,除非更换了新的 IC,则需要在专业人士的指导下进行更改。

    完成上述配置后,编译内核。编译完成后,将新内核安装到系统中。

配置 OHCI 控制器

针对 USB 1.0/1.1 (Low/Full Speed) 的 OHCI 控制器,配置流程如下:
  1. Linux Kernel Kconfig 文件中使能相应 EHCI Driver:
    > Device Drivers > USB support
    
     <*>   OHCI HCD (USB 1.1) support
     <*>     Support for ArtInChip on-chip OHCI USB controller
  2. DTS 文件中配置相应 EHCI Device:
    ohci0: usb@10210400 {
        compatible = "artinchip,aic-ohci-v1.0";
        reg = <0x10210400 0x100>;
        interrupts = <&plic0 4 IRQ_TYPE_LEVEL_HIGH>;
        num-ports = <1>;
    };
    
    ohci1: usb@10220400 {
        compatible = "artinchip,aic-ohci-v1.0";
        reg = <0x10220400 0x100>;
        interrupts = <&plic0 6 IRQ_TYPE_LEVEL_HIGH>;
    };

U 盘配置

  1. U 盘是 USB 2.0 设备,所以首先得配置好上节中的 EHCI,再进行下面的配置。

  2. 在 Linux Kernel Kconfig 中使能对 USB Mass Storage 类型的 USB Interface 驱动的支持。
    > Device Drivers > USB support
    
     <*>   USB Mass Storage support
  3. 还需要使能其他相关配置:
    • 块设备:
      > Device Drivers
      
       [*] Block devices  --->
    • SCSI 设备:
      > Device Drivers > SCSI device support
      
       <*> SCSI device support
       [*] legacy /proc/scsi/ support
           *** SCSI support type (disk, tape, CD-ROM) ***
       <*> SCSI disk support
    • 文件系统:
      > File systems > DOS/FAT/EXFAT/NT Filesystems
      
       <*> VFAT (Windows-95) fs support
      插入 U 盘,通过 mount 命令将 U 盘挂载到合适的目录下就可以操作了:
      [aic@] #
      [ 1591.469696] usb 1-1: new high-speed USB device number 3 using aic-ehci
      [ 1591.674435] usb-storage 1-1:1.0: USB Mass Storage device detected
      [ 1591.682567] scsi host0: usb-storage 1-1:1.0
      [ 1592.692021] scsi 0:0:0:0: Direct-Access     SanDisk  Cruzer Blade     1.00 PQ: 0 ANSI: 6
      [ 1592.714329] sd 0:0:0:0: [sda] 30842880 512-byte logical blocks: (15.8 GB/14.7 GiB)
      [ 1592.724171] sd 0:0:0:0: [sda] Write Protect is off
      [ 1592.730166] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
      [ 1592.751720]  sda: sda1
      [ 1592.768330] sd 0:0:0:0: [sda] Attached SCSI removable disk
      
      [aic@] # mount -t vfat /dev/sda1 /mnt/u
      [aic@] # ls /mnt/u
      System Volume Information  u-boot-spl-dtb.bin
      u-boot-dtb.bin             vmlinux
      u-boot-dtb.img             zImage
      u-boot-spl-dtb.aic
      [aic@] #

USB 键盘/鼠标配置

  1. U 盘是 USB 1.0/1.1 设备,所以首先得配置好上节中的 OHCI,再进行下面的配置。

  2. 在 Linux Kernel Kconfig 中使能对 USB HID 类型的 USB Interface 驱动的支持。
    > Device Drivers > HID support > USB HID support
    
     <*> USB HID transport layer
  3. 插入键盘鼠标,可以通过 /dev/input/event 文件读取到键盘鼠标上报的数据:
    [aic@] #
    [   14.210983] usb 2-1: new low-speed USB device number 2 using aic-ohci
    [   14.478006] random: fast init done
    [   14.497013] input: PixArt Dell MS116 USB Optical Mouse as /devices/platform/soc/10220400.usb/usb2/2-1/2-1:1.0/0003:413C:301A.0001/input/input2
    [   14.510871] hid-generic 0003:413C:301A.0001: input: USB HID v1.11 Mouse [PixArt Dell MS116 USB Optical Mouse] on usb-10220400.usb-1/input0
    
    [aic@] # hexdump /dev/input/event2
    0000000 e138 5e0b 4c30 0004 0004 0004 0001 0009
    0000010 e138 5e0b 4c30 0004 0001 0110 0001 0000
    0000020 e138 5e0b 4c30 0004 0000 0000 0000 0000
    0000030 e138 5e0b d657 0007 0004 0004 0001 0009
    0000040 e138 5e0b d657 0007 0001 0110 0000 0000
    0000050 e138 5e0b d657 0007 0000 0000 0000 0000
    0000060 e139 5e0b 9085 0003 0004 0004 0001 0009
    0000070 e139 5e0b 9085 0003 0001 0110 0001 0000
    0000080 e139 5e0b 9085 0003 0000 0000 0000 0000
    0000090 e139 5e0b a3bc 0005 0004 0004 0001 0009
    00000a0 e139 5e0b a3bc 0005 0001 0110 0000 0000
    00000b0 e139 5e0b a3bc 0005 0000 0000 0000 0000