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 控制器
在软件上需要需要分开配置。
以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生成:
sdcard(需先实现sdcard挂载 ref_rtt_sdcard)
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
- 用户使用:
将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的 U 盘,可以正常读写。
如图所示:
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 />
- 用户使用:
将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的 U 盘,可以正常读写。
如图所示:
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 />
- 用户使用:
将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的 串口,可以正常读写。
如图所示:
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
- 用户使用:
将单板的 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>