7.12.2. 参数配置

7.12.2.1. USB Host 配置

7.12.2.1.1. USB Host Controller 配置

首先需要配置好 USB Host Contoller ,M3/M4 在 1 个 USB Host 端口中提供了 2 类 Host Contoller:

  • 针对 USB 2.0 (High Speed) 的 EHCI 控制器

  • 针对 USB 1.0/1.1 (Low/Full Speed) 的 OHCI 控制器

../../../_images/usb_mode.jpg

在软件上需要需要分开配置。

以M4为例:

struct aic_pinmux aic_pinmux_config[] = {
    {1, PIN_PULL_UP, 3, "PF.0"},    //OTG_EN
}

void aic_board_pinmux_init(void)
{
    //usb   高电平(host)    低电平(Device)
    pin = hal_gpio_name2pin("PF.0");
    g = GPIO_GROUP(pin);
    p = GPIO_GROUP_PIN(pin);
    hal_gpio_direction_output(g, p);

    /*  hal_gpio_set_output(g, p);  //host
        hal_gpio_clr_output(g, p);  //Device
    */
}

7.12.2.1.1.1. EHCI 配置

  • 在 Menuconfig 中配置设备。使能 USB 端口,并且配置当前 USB 端口为 Host 模式:

Board options  --->
    [*] Using Usb0
        Select Usb0 mode (Host)  --->
  • 在 Menuconfig 中配置 CherryUSB 驱动。使能 CherryUSB 驱动,并且使能 Host 模式:

Local packages options  --->
Third-party packages options  --->
    [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
        [*]   Enable usb device mode  --->
            [*]   Enable usb host mode  --->

7.12.2.1.2. USB Interface 驱动配置

在配置好 USB Host Controller 以后,就能够正确识别插入 USB 总线的 Device 设备了。

但是 USB Device 有很多不同类型 (例如:U 盘、键盘鼠标、无线网卡 …) ,这些功能都是在 USB Device 中以 Interface 为单位提供的。所以要使用 USB Device 的具体功能,还需要配置不同类型 USB Interface 的驱动。

7.12.2.1.2.1. U 盘 配置

  • 在 Menuconfig 中使能 CherryUSB 中 msc 类型的 Host Class 驱动,并且使能对应实例模板:

Local packages options  --->
    Third-party packages options  --->
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
            [*]   Enable usb device mode  --->
                [*]   Enable usb host mode  --->
                    [*]   Enable usb msc driver  --->
                        [*]   Use msc template
  • 插入 U 盘,会自动挂载到 /udisk 目录:

ZXM47D0N />
ZXM47D0N /> [I/USB] New high-speed device on Bus 0, Hub 1, Port 1 connected
[I/USB] New device found,idVendor:0951,idProduct:1665,bcdDevice:0100
[I/USB] The device has 1 interfaces
[I/USB] Enumeration success, start loading class driver
[I/USB] Loading msc class driver
[I/USB] Get max LUN:1
[I/USB] Ep=81 Attr=02 Mps=512 Interval=00 Mult=00
[I/USB] Ep=02 Attr=02 Mps=512 Interval=00 Mult=00
[E/USB] csw bStatus 1

ZXM47D0N /> [I/USB] Capacity info:
[I/USB] Block num:30712320,block size:512
[I/USB] Register MSC Class:/dev/sda
found part[0], begin: 262144000, size: 13.784GB
[I] udisk_init()163 Found partition 0: type = 12, offet=0x7d000, size=0x1b88000
01-01 09:44:16 I/NO_TAG: try to mount file system!
01-01 09:44:16 I/DFS: mount fs[elm] device[udisk] to /udisk ok.


ZXM47D0N /> ls ud
ZXM47D0N /> ls udisk
Directory udisk:
System Volume Inform<DIR>
d211-doc-master.zip 87831525
ZXM3C3D95_rtt_defcon38728
filetest.c          819
ZXM47D0N_rtt_defconf41427
ZXM47D0N_bootloader_11622
image_cfg.json      2997
image_cfg.rar       12065
d13x-OneOS-V1.0.1.ra208099546
M3A-V0.3.0-OneOS.zip361168667
ZXM47D0N />

7.12.2.2. USB Device 配置

首先要配置好 USB Device Controller。

7.12.2.2.1. USB Device Controller 配置

  • 在 Menuconfig 中配置设备。使能 USB 端口,并且配置当前 USB 端口为 Device 模式:

Board options  --->
    [*] Using Usb0
        Select Usb0 mode (Device)  --->
  • 在 Menuconfig 中配置 CherryUSB 驱动。使能 CherryUSB 驱动,并且使能 Device 模式:

Local packages options  --->
    Third-party packages options  --->
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
            [*]   Enable usb device mode  --->
                [*]   Enable usb msc device  --->

7.12.2.2.2. USB Interface 配置

USB Device 可以模拟成各种功能的 USB 外设,例如:USB 串口、USB 网口、U 盘…

7.12.2.2.2.1. U 盘 配置

  • 在 Menuconfig 中使能 CherryUSB 中 msc 类型的 Device Class 驱动,并且使能对应实例模板:

> Local packages options
    > Third-party packages options
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
            [*]   Enable usb device mode  --->
                [*]   Enable usb msc device  --->
                    [*]   Use msc ram template
  • U 盘生成有两种方式,一种是通过开发板上的sdcard生成,一种是通过ram生成:

  1. sdcard(需先实现sdcard挂载 挂载 SD 卡)

Local packages options  --->
    Third-party packages options  --->
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
            [*]   Enable usb device mode  --->
                [*]   Enable usb msc device  --->
                    Use ram or storage template (msc storage)  --->
                    MSC Storage Parameter  --->
                        [*] USBDEV_MSC_THREAD
                        (/sdcard) MSC_STORAGE_PATH
                        (204800) USBDEV_MSC_MAX_BUFSIZE
Startup time: 0.679 sec
[ND]nftl start:240,51
[ND]nftl ok!
ZXM47D0N /> 01-01 09:33:52 I/SDMC: SDMC1 BW 1, sclk 50400 KHz, clk 400 KHz(406 KHz), div 2-62


01-01 09:33:52 I/SDIO: SD card capacity 7609344 KB.
01-01 09:33:52 I/SDMC: SDMC1 BW 1, sclk 50400 KHz, clk 50000 KHz(50400 KHz), div 1-0

[I] aic_sdmc_set_iocfg()437 SDMC1 Buswidth 4, DDR mode 0, Current clock: 50000 KHz
01-01 09:33:52 I/DFS: mount fs[elm] device[sd0] to /sdcard ok.

card insertion detected!
[I/USB] Open ep:0x02 type:2 mps:512
[I/USB] Open ep:0x81 type:2 mps:512
[I/USB] Unmount /sdcard
  • 用户使用:
    1. 将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的 U 盘,可以正常读写。

  • 如图所示:

../../../_images/usb_msc_device.jpg
  1. msc ram

Local packages options  --->
    Third-party packages options  --->
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
            [*]   Enable usb device mode  --->
                [*]   Enable usb msc device  --->
                    Use ram or storage template (msc ram)  --->
[ND]nftl start:240,51
[ND]nftl ok!
ZXM47D0N /> [I/USB] read MS OS 2.0 descriptor string
[E/USB] standard request error
[I/USB] Setup: bmRequestType 0x80, bRequest 0x06, wValue 0x03ee, wIndex 0x0000, wLength 0x0012
01-01 09:38:19 I/SDMC: SDMC1 BW 1, sclk 50400 KHz, clk 400 KHz(406 KHz), div 2-62

01-01 09:38:19[I/USB] Open ep:0x02 type:2 mps:512
[I/USB] Open ep:0x81 type:2 mps:512


ZXM47D0N />
ZXM47D0N /> [I/USB] Open ep:0x02 type:2 mps:512
[I/USB] Open ep:0x81 type:2 mps:512

ZXM47D0N />
ZXM47D0N />
  • 用户使用:
    1. 将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的 U 盘,可以正常读写。

  • 如图所示:

../../../_images/usb_msc_device2.jpg

7.12.2.2.2.2. HID 配置(鼠标、键盘…)

  • 在 Menuconfig 中使能 CherryUSB 中 hid 类型的 Device Class 驱动,并且使能对应实例模板:

Local packages options  --->
    Third-party packages options  --->
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
            [*]   Enable usb device mode  --->
                [*]   Enable usb hid device  --->
                    Use hid template (mouse)  --->
ZXM47D0N />
ZXM47D0N /> test_usbd_hid_mouse

7.12.2.2.2.3. CDC 配置(串口)

  • 在 Menuconfig 中使能 CherryUSB 中 cdc 类型的 Device Class 驱动,并且使能对应实例模板:

Local packages options  --->
    Third-party packages options  --->
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
            [*]   Enable usb device mode  --->
                [*]   Enable usb cdc acm device  --->
                    [*]   Use cdc acm template
Startup time: 0.684 sec
[ND]nftl start:240,51
[ND]nftl ok!
ZXM47D0N /> [I/USB] Open ep:0x83 type:3 mps:8
[I/USB] Open ep:0x02 type:2 mps:512
[I/USB] Open ep:0x81 type:2 mps:512

//PC端打开串口
ZXM47D0N />
ZXM47D0N />
ZXM47D0N /> Out len: 5
]0x0d [ [1]0x31 [2]0x32 [3]0x33 [
]0x0a

ZXM47D0N /> cdc_acm_data_send_with_dtr_test
In len: 2048
In len: 0
ZXM47D0N />
  • 用户使用:
    1. 将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的 串口,可以正常读写。

  • 如图所示:

../../../_images/usb_cdc_device.jpg

7.12.2.2.2.4. ADBD 配置

  • 在 Menuconfig 中使能 CherryUSB 中 msc 类型的 Device Class 驱动,并且使能对应实例模板:

> Local packages options
    > Third-party packages options
        [*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP  --->
        [*] ADBD: Android Debug Bridge daemon implementation in RT-Thread  --->
            [*]   Enable Shell service
            [*]   Enable File service
  • 用户使用:
    1. 将单板的 USB Device 端口和 PC 的 USB Host 端口连接,在 PC 端运行 adb shell 命令即可进行 adb 操作。 进入 adb shell 以后,可以通过 exitas 命令退出:

C:\Users\xxx>adb shell

aic /> ls
Directory /:
ram                 <DIR>
data                <DIR>
rodata              <DIR>
sdcard              <DIR>
udisk               <DIR>
aic />
aic /> exit
exitas
aic /> exitas

C:\Users\xxx>