24. USB

本章配套视频介绍:

../../../_images/video.png

《26-鲁班猫USB-OTG功能切换》

https://www.bilibili.com/video/BV1Cs4y1e7Bc

下表为LubanCat-RK3562/RK3566/RK3568系列板卡的usb

usb

板卡名

USB3.0

USB2.0

USB2.0-OTG

LubanCat-Zero系列

Type-C x 1

Type-C x 1

LubanCat-1

Type-A x 1

Type-A x 3

Type-C x 1

LubanCat-1N

Type-A x 1

Type-A x 1

Type-C x 1

LubanCat-2

Type-A x 1

Type-A x 2

Type-C x 1

24.1. USB-OTG功能切换

usb设备是区分主从的,其中host是主设备 device是从设备。USB-otg则能够进行主从切换。

从设备,比如u盘,他只能被控制,不能主动去控制别的usb设备。而电脑的usb接口则作为主设备,可以控制从设备。

  • 具有硬件切换电路:鲁班猫2 鲁班猫2N.

  • 鲁班猫0/1系列未配备自动切换电路,是因为鲁班猫0/1系列的usb口和电源接口复用。使用电源供电时,不具备usb功能。使用电脑供电时,默认作为device设备。

24.1.1. 鲁班猫2系列手动切换

1
2
3
4
5
6
7
8
#Force host mode 主机
echo host > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

#Force device mode 从机
echo peripheral > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

#Force otg mode 根据硬件识别自动切换
echo otg > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

24.1.2. 鲁班猫0/1系列手动切换

1
2
3
4
5
6
7
#Force host mode 主机
echo host > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

#Force device mode 从机
echo peripheral > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode
或
echo otg > /sys/devices/platform/fe8a0000.usb2-phy/otg_mode

24.1.3. 鲁班猫0/1系列otg使用host模式提示

鲁班猫0/1系列,鲁班猫0想要作为host主设备使用,可以手动切换。 但是一般来说从设备都是不带供电的,比如鼠标,键盘,U盘,都是要主设备去供电。 我们就需要解决鲁班猫的供电问题。

有两个供电方案:

  1. 是使用鲁班猫的40PIN排针的供电引脚对鲁班猫进行供电。(仅支持鲁班猫0/1系列)

  2. 使用type-c接口供电的同时,还可以使usb从设备连接到鲁班猫,具体实现方式如下

  • 使用带独立供电的转接板或魔改usb线,使用外部电源同时给鲁班猫和usb从设备供电(魔改有风险,请慎重考虑)。

  • 使用usbhub连接鲁班猫,然后给usbhub供电。usbhub是一个从设备(有些usbhub可能不支持该功能)。

24.2. USB-OTG配置功能(usb gadget)

24.2.1. 配置文件及参数

  1. /etc/init.d/.usb_config 默认配置文件,系统启动时调用

  2. /tmp/.usb_config 默认配置文件的复制文件,系统启动后优先级高于默认配置文件,重启后失效

  3. /usr/bin/usbdevice 服务配置脚本,使用调用 /usr/bin/usbdevice {start|stop|restart}

24.2.2. 功能配置

可配置的功能

  • usb_adb_en - ADB 调试

  • usb_rndis_en - RNDIS USB模拟以太网

  • usb_acm_en - ACM USB虚拟串口

  • usb_ums_en - UMS 虚拟存储设备

  • usb_uac1_en - UAC 虚拟声卡

  • usb_uac2_en - UAC 虚拟声卡

24.2.3. ADB 调试

1
2
3
4
5
#配置功能
echo usb_adb_en > /etc/init.d/.usb_config

#应用功能(使用下面的指令或者重启)
/usr/bin/usbdevice restart

24.2.4. RNDIS USB模拟以太网

24.2.4.1. 临时配置(重启后功能消失)

1
2
3
4
5
#配置功能
echo usb_rndis_en > /tmp/.usb_config

#应用功能
/usr/bin/usbdevice restart

24.2.4.2. 永久配置

1
2
3
4
5
#配置功能
echo usb_rndis_en > /etc/init.d/.usb_config

#应用功能(使用下面的指令或者重启)
/usr/bin/usbdevice restart

24.2.5. ACM USB虚拟串口

使能ACM后,可以在Device上看到/dev/ttyGS0设备,PC上看到/dev/ttyACM0设备

24.2.5.1. 临时配置(重启后功能消失)

1
2
3
4
5
#配置功能
echo usb_acm_en > /tmp/.usb_config

#应用功能
/usr/bin/usbdevice restart

24.2.5.2. 永久配置

1
2
3
4
5
#配置功能
echo usb_acm_en > /etc/init.d/.usb_config

#应用功能-使用下面的指令或者重启
/usr/bin/usbdevice restart

24.2.6. UMS 虚拟存储设备

将板卡文件系统中的一个分区或一个img镜像挂载到PC上

推荐使用img镜像挂载,使用以下配置自动生成img文件

1
2
3
4
5
6
7
8
9
echo usb_ums_en > /tmp/.usb_config
# 配置挂载的镜像文件地址
echo "ums_block=/ums_shared.img" >> /tmp/.usb_config
# 设置镜像文件大小,单位为MB
echo "ums_block_size=8" >> /tmp/.usb_config
# 设置文件系统格式为fat
echo "ums_block_type=fat" >> /tmp/.usb_config
# 设置断开UMS后自动挂载到/mnt/ums目录
echo "ums_block_auto_mount=on" >> /tmp/.usb_config

24.2.6.1. 永久配置

1
2
3
4
5
6
7
8
9
#配置功能
echo usb_ums_en > /etc/init.d/.usb_config
echo "ums_block=/ums_shared.img" >> /etc/init.d/.usb_config
echo "ums_block_size=8" >> /etc/init.d/.usb_config
echo "ums_block_type=fat" >> /etc/init.d/.usb_config
echo "ums_block_auto_mount=on" >> /etc/init.d/.usb_config

#应用功能(使用下面的指令或者重启)
/usr/bin/usbdevice restart

24.2.7. UAC 虚拟声卡

  • UAC通过USB虚拟标准PCM接口给Host设备,实现Device和Host之间音频互传功能。

  • UAC分为UAC1和UAC2,UAC2和UAC1有以下区别: UAC2比UAC1具有更高的带宽(各平台实现略有不同,以实测为准) Windows 7及部分Windows 10系统默认不支持UAC2,需要手动安装驱动,但都支持UAC1

24.2.7.1. 临时配置(重启后功能消失)

1
2
3
4
5
6
7
8
#配置功能
echo usb_uac1_en > /tmp/.usb_config

#或
echo usb_uac2_en > /tmp/.usb_config

#应用功能
/usr/bin/usbdevice restart

24.2.7.2. 永久配置

1
2
3
4
5
6
7
8
#配置功能
echo usb_uac1_en > /etc/init.d/.usb_config

#或
echo usb_uac2_en > /etc/init.d/.usb_config

#应用功能(使用下面的指令或者重启)
/usr/bin/usbdevice restart

24.2.8. UVC 图传

usb otg口实现UVC gadget,作为usb camara向windows传输图像,也即将usb uvc摄像头接到板卡usb接口,可以不通过网络推流,而是通过usb传输图像到电脑。

1、安装环境:

1
2
3
4
sudo apt-get update
sudo apt-get install build-essential git python3-pip
sudo pip3 install meson==0.63
sudo pip3 install ninja

2、获取uvc-gadget源码并编译源码:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#获取源码
git clone https://git.ideasonboard.org/uvc-gadget.git

#进入源码目录
cd uvc-gadget

#最新0.3.0版本依赖libcamara,回退到0.1.0版本
git checkout v0.1.0

#编译源码
meson build
ninja -C build

3、修改源码uvc-gadget/scripts/uvc-gadget.sh脚本,在脚本的180行添加以下内容:

如下图所示:

../../../_images/usb_0.jpg

也即添加以下内容:

1
2
umount /sys/kernel/config
mount -t configfs none /sys/kernel/config

修改源码uvc-gadget/scripts/uvc-gadget.sh脚本,第121行位置,调整摄像头分辨率,以下测试640*480分辨率,可根据实际修改:

../../../_images/usb_1.jpg

uncompressed为未压缩图像分辨率,mjpeg为压缩图像分辨率。

提示

如果是运行后面步骤程序后想再修改分辨率,需修改后重启板卡才能重新设置分辨率。

4、接入USB UVC摄像头并查看摄像头编号

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#查看摄像头设备
v4l2-ctl --list-devices

#信息输出如下
root@lubancat:~/uvc-gadget# v4l2-ctl --list-devices
rkisp-statistics (platform: rkisp):
                /dev/video8
                /dev/video9

rkisp_mainpath (platform:rkisp-vir0):
                /dev/video0
                /dev/video1
                /dev/video2
                /dev/video3
                /dev/video4
                /dev/video5
                /dev/video6
                /dev/video7
                /dev/media0

USB camera: USB camera (usb-fd800000.usb-1):
                /dev/video10
                /dev/video11
                /dev/media1

从以上信息输出可以看到,此处USB camera为/dev/video10

5、运行测试

运行前确认usb otg口通过usb线和电脑连接,usb uvc摄像头正确接入板卡和识别,以下摄像头编号需根据实际确定。

1
2
3
4
5
6
7
#停止当前usbdevice的配置,避免冲突
/usr/bin/usbdevice stop

#进入uvc-gadget源码目录并运行
cd uvc-gadget
./scripts/uvc-gadget.sh start
./build/src/uvc-gadget -c /dev/video10 &

如果配置正常,相关信息输出如下图所示:

../../../_images/usb_2.jpg

电脑端打开设备管理器找到照相机可以看到识别出UVC Camara设备,可以通过OBS或者AMCap等软件打开设备。

../../../_images/usb_3.jpg

24.3. USB速度测试

usb2.0速度测试

板卡名

写速度

读速度

LubanCat-Zero系列

32.45MB/s

35.8MB/s

LubanCat-1

33.3MB/s

36.3MB/s

LubanCat-1N

MB/s

MB/s

LubanCat-2

33MB/s

36.5MB/s

usb3.0速度测试

板卡名

写速度

读速度

LubanCat-1

170MB/s

380MB/s

LubanCat-1N

MB/s

MB/s

LubanCat-2

138.5MB/s

387MB/s