配置指南
USB Host 配置
USB Host Controller 配置
首先需要配置好 USB Host Contoller ,ArtInChip 在 1 个 USB Host 端口中提供了 2 类 Host Contoller:
针对 USB 2.0 (High Speed) 的 EHCI 控制器
针对 USB 1.0/1.1 (Low/Full Speed) 的 OHCI 控制器
在软件上需要需要分开配置。
EHCI 配置
- 在 Menuconfig 中配置设备。使能 USB 端口,并且配置当前 USB 端口为 Host 模式:
> Board options
[*] Using Usb0
Select Usb0 mode (Host) --->
2
3
- 在 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 host mode --->
2
3
4
USB Interface 驱动配置
在配置好 USB Host Controller 以后,就能够正确识别插入 USB 总线的 Device 设备了。
但是 USB Device 有很多不同类型 (例如:U 盘、键盘鼠标、无线网卡 …) ,这些功能都是在 USB Device 中以 Interface 为单位提供的。所以要使用 USB Device 的具体功能,还需要配置不同类型 USB Interface 的驱动。
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 host mode --->
[*] Enable usb msc driver --->
[*] Use msc template
2
3
4
5
6
- 插入 U 盘,会自动挂载到 /disk 目录:
[I/USB] New high-speed device on Hub 1, Port 1 connected
[I/USB] New device found,idVendor:30de,idProduct:6544,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=255 Mult=00
[I/USB] Ep=02 Attr=02 Mps=512 Interval=255 Mult=00
[I/USB] Capacity info:
[I/USB] Block num:30274560,block size:512
[I/USB] Register MSC Class:/dev/sda
found part[0], begin: 32256, size: 14.446GB
[I] udisk_init()122 Found partition 0: type = 11, offet=0x3f, size=0x1cdf2a1
01-01 08:00:06 I/NO_TAG: try to mount file system!
2
3
4
5
6
7
8
9
10
11
12
13
14
USB Device 配置
首先要配置好 USB Device Controller。
USB Device Controller 配置
- 在 Menuconfig 中配置设备。使能 USB 端口,并且配置当前 USB 端口为 Device 模式:
> Board options
[*] Using Usb0
Select Usb0 mode (Device) --->
2
3
- 在 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 --->
2
3
4
USB Interface 配置
USB Device 可以模拟成各种功能的 USB 外设,例如:USB 串口、USB 网口、U 盘。。。
U 盘 配置
在 Menuconfig 中使能 CherryUSB 中 MSC 类型的 Device Class 驱动,并且使能对应实例模板:
在 MSC 类型的 Device Class 驱动中有两类实例模板,一种是把读取RAM,一种是读取 Flash 或 SDCard。
读取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) --->
[*] Use msc ram template
2
3
4
5
6
7
读取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 ram) --->
[*] Use msc ram template
2
3
4
5
6
7
读取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 # 配置线程进行读写
[*] USBD_MSC_STORAGE_USING_HOTPLUG #支持存储媒介的热插拔
(/sdcard) MSC_STORAGE_PATH # U盘读取的分区(这里填写的是对应的文件系统名称)
(2048) USBDEV_MSC_MAX_BUFSIZE # 此值必须是512的倍数,增大此项,可提升读写速度,同时也会消耗更多的ram
2
3
4
5
6
7
8
9
10
11
用户使用:
1.将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的 U 盘,可以正常读写。
U盘产品信息修改
--- Enable usb msc device
(aic) CONFIG_USBDEV_MSC_MANUFACTURER_STRING # 厂商信息(最大支持 8 bytes)
(d13) CONFIG_USBDEV_MSC_PRODUCT_STRING # 产品信息(最大支持 16 bytes)
(0.01) CONFIG_USBDEV_MSC_VERSION_STRING # 厂商信息(最大支持 4 bytes)
2
3
4
效果如下图:
ADBD 配置
- 在 Menuconfig 中使能 CherryUSB 的 Device 驱动,并且使能 ADBD 模块:
> 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 --->
[*] ADBD: Android Debug Bridge daemon implementation in RT-Thread --->
[*] Enable Shell service
[*] Enable File service
2
3
4
5
6
7
- 用户使用:
将单板的 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>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AiBurn 烧录软件默认会不停的使用 ADB 命令来扫描单板是否启动完成,在使用 ADB 命令时为了避免冲突建议关闭 AiBurn 软件,或者在 AiBurn 中关闭 ADB 扫描设备 功能。
Audio 配置
- 在 Menuconfig 中使能 CherryUSB 中 audio 类型的 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 audio device --->
[*] Use audio speaker template --->
Use audio speaker template (UAC2.0) --->
2
3
4
5
6
- 用户使用:
将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上会看到一个新增的Audio设备,可以正常播放音频。
- 如图所示:
MIDI 配置
- 在 Menuconfig 中使能 CherryUSB 中 midi 类型的 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 midi device --->
[*] Use midi template
2
3
4
5
- 用户使用:
将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC的设备管理其中,可以看到一个新增的MIDI设备,需要在特定的midi工具(如MidiEditor)中使用。
- 如图所示,在midi工具中选择对应的midi设备进行数据的收发:
USB Display 配置
- 在 Menuconfig 中使能 CherryUSB 中 Display 类型的 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 display device --->
[*] Use display template
2
3
4
5
6
- 用户使用:
将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,并且在 PC 安装对应的 AicUsbGraphicDriver 驱动,单板将会成为 PC 的一个扩展显示屏。
UVC 配置
在 Menuconfig 中使能 CherryUSB 中 UVC 类型的 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 video device --->
[*] Use video template --->
[X] Use video dvp sensor template
2
3
4
5
6
7
Use video template 选项下有多种配置可以进行选择,分别有:
Use video static mjpeg template
Use video static yuyv template
Use video static nv12 template
Use video dvp sensor template
2
3
4
其中前三者都是传输静态图像的一个测试实例模板,Use video dvp sensor template才是传输摄像头图像数据的实例模板。
- 用户使用:
将单板的 USB Device 端口和 Windows PC 的 USB Host 端口连接,在 Windows PC 上看到一个新增的Camera设备,并且可以正常接收设备返回的图像数据。
- 如图所示:
USB OTG 配置
首先要配置好 USB OTG 相关模式。
USB OTG 配置
- 在 Menuconfig 中配置设备。使能 USB 端口,并且配置当前 USB 端口为 OTG 模式:
> Board options
[*] Using Usb0
Select Usb0 mode (OTG) --->
2
3
- 在 Menuconfig 中配置 CherryUSB 驱动。使能 CherryUSB 驱动,并且使能 OTG 模式:
> Local packages options
> Third-party packages options
[*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP --->
[*] Enable usb otg mode --->
2
3
4
OTG 可以配置工作在 Auto/Manual 模式。
OTG Auto 模式
OTG 工作在 Auto 模式时,使用 id-pin GPIO 来侦测当前是 Host/Device 模式。所以配置 OTG 为 Auto 模式时,id-pin 是必须要配置的,需要配置 id-pin GPIO 的名称和极性。相关 menuconfig 配置:
> Local packages options
> Third-party packages options
[*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP --->
[*] Enable usb otg mode --->
Select otg switch (Auto (Id pin detect)) --->
-*- Using id-pin gpio --->
(PF.15) GPIO name
Select GPIO polarity (Input value: 0 = Host, 1 = Device) --->
2
3
4
5
6
7
8
OTG Manual 模式
OTG 工作在 Manual 模式时,由用户手工来切换 Host/Device 模式。相关 menuconfig 配置:
> Local packages options
> Third-party packages options
[*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP --->
[*] Enable usb otg mode --->
Select otg switch (Manual) --->
Select default mode (Device) --->
2
3
4
5
6
手工切换 Host/Device 模式的命令为 set_otg_mode:
aic /> set_otg_mode host
Usb otg auto mode (switch usb0 to host).
aic />
aic /> set_otg_mode device
Usb otg manual mode (switch usb0 to device).
2
3
4
5
OTG 相关 GPIO
从上面配置可以看到和 OTG 功能相关的 GPIO 管脚有 3 个:
id-gpios 。用来检测当前插入的是不是 OTG 线,如果为 OTG 线则需要把本机切换到 USB Host 模式,否则本机切换到 USB Device 模式。该管脚在 Auto 模式 模式下是必须配置的,如果缺少该管脚 OTG 只能工作在 Manual 模式 手工进行切换。
vbus-en-gpios 。该管脚是用来控制 VBUS 的 5V 输出的,通常情况下:切换到 USB Host 模式时需要使能本机端的 VBUS 5V 输出给对端 Device 供电,切换到 USB Device 模式时需要关闭本机端的 VBUS 5V 输出转而使用对端 Host 的供电。(实际使用上来说,不论本端是 Host/Device 模式,也可以在 VBUS 上一直供电 5V 两边 VBUS 无压差则无漏电,这种情况下 vbus-en-gpios 无需配置。)
dp-sw-gpios 。该管脚是在 OTG 外出两个独立 Host、Device 端口时,用来控制外部 Switch 的。非该模式时, dp-sw-gpios 无需配置。
3 个 GPIO 管脚的具体使用场景如上图所示,用户根据自己的使用场景来选择配置哪些 GPIO。每个 GPIO 的正反电平有效可以通过 menuconfig 菜单中的 GPIO polarity 选项来配置。
USB Host/Device 配置
在 OTG 模式下 CherryUSB 的 Device Mode 和 Host Mode 都必须使能,并且需要配置上相应应用。下图实例使能了 Host U 盘 和 Device MSC RAM disk 设备:
> Local packages options
> Third-party packages options
[*] CherryUSB: tiny and portable USB host/device stack for embedded system with USB IP --->
[*] Enable usb otg mode --->
[*] Enable usb device mode --->
[*] Enable usb msc device --->
Use ram or storage template (msc ram) --->
[*] Enable usb host mode --->
[*] Enable usb msc driver --->
[*] Use msc template
2
3
4
5
6
7
8
9
10