跳转到内容

将 OTG 切换为 U 盘模式

1.1. 正文介绍

1.1. 1 将 OTG 切换为 USB 模式

通过切换 OTG 的 USB 模式,开发板既可以作为 HOST(主机)使用,也可以作为 Device(设备:如 U 盘等)使用,从而提高数据传输效率。

1.1.1 将 OTG 切换为 USB 模式 图1

1.1.1 将 OTG 切换为 USB 模式 图1

1.1.2 OTG 的基本概念

OTG 是 “USB On-The-Go” 的缩写,是 USB 标准化组织于 2001 年发布的一项扩展 USB 功能的技术规范。其核心是打破传统 USB 中“主机和设备角色固定”的限制,改善不同设备之间的连接和数据交换。由此,设备(开发板、智能手机、平板电脑等)既可以作为主机连接外设,也可以作为设备(从设备)被其他设备访问。

11.1. 2 OTG 的基本概念 图2

11.1. 2 OTG 的基本概念 图2

1.2. Linux 内核驱动的配置与编译

1.2.1 升级到最新固件

1.2.2 下载 Ubuntu 系统 SDK

1.2.3 修改内核

Terminal window
Device Drivers --->
[ ] USB support --->
<*> DesignWare USB2 DRD Core Support(RV1126B 默认支持该核心驱动)
DWC2 Mode Selection (Dual Role mode) --->(选择双角色模式)
<*> USB Gadget Support --->
(保持默认)将 Maximum VBUS Power usage (2-500 mA) 设置为 500
(保持默认)将 Number of storage pipeline buffers 设置为 2
<M> USB functions configurable through configfs
[*] Mass storage(启用大容量存储功能)
<M> Gadget Filesystem
< > Function Filesystem
<M> Mass Storage Gadget

在内核中找到对应的驱动配置,并按如下方式添加到 RV1126b_eai.config` 中。

11.2. 3 修改内核 图3

11.2. 3 修改内核 图3

💡 注意:RV1126b_eai.config` 位于 kernel_dev/arch/arm64/configs 目录中。

1.2.4 编译并生成内核模块

💡 注意:请不要忘记将 lib_modules.tar.gz` 传输到开发板并解压。 编译和更新完成后,开发板的指定目录中会生成以下 4 个重要模块。

Terminal window
drivers/usb/gadget/libcomposite.ko
drivers/usb/gadget/legacy/gadgetfs.ko
drivers/usb/gadget/legacy/g_mass_storage.ko
drivers/usb/gadget/function/usb_f_mass_storage.ko

所在目录:/lib/modules/6.1.141/kernel/drivers/usb/…

【编译和更新前】

1.2.4 编译并生成内核模块 图4

1.2.4 编译并生成内核模块 图4

【编译和更新后】

1.2.4 编译并生成内核模块 图5

1.2.4 编译并生成内核模块 图5

💡 注意:更新完成后 adb 会被禁用。请使用串口控制台或 ssh 进行调试。

1.3. OTG U 盘切换配置

1.3.1 创建 U 盘镜像文件和挂载点

执行以下命令创建一个 1.6GB 的虚拟 U 盘镜像(可根据 RV1126B 的内存大小进行调整。如果内存较少,请减小 count 值。例如:count=800 表示 0.8GB):

Terminal window
dd if=/dev/zero of=/userdata/mydisk/udisk.img bs=1M count=1600

安装依赖工具:

Terminal window
sudo apt-get update && sudo apt-get install dosfstools -y

将镜像格式化为 PC 可识别的 vfat 格式:

Terminal window
mkfs.vfat /userdata/mydisk/udisk.img

1.3.2 加载模块并启动 U 盘模拟

将镜像文件绑定到 loop 设备(RV1126B 支持 `loop7` 设备,无需额外配置):

Terminal window
sudo losetup /dev/loop7 /userdata/mydisk/udisk.img

按顺序加载编译生成的内核模块:

Terminal window
sudo insmod gadgetfs.ko
sudo insmod libcomposite.ko
sudo insmod usb_f_mass_storage.ko

💡 注意:上述命令执行后不会显示任何信息。请务必按照上述顺序执行。

所在目录:/lib/modules/6.1.141/kernel/drivers/usb/…

创建镜像文件的挂载点:

Terminal window
sudo mkdir /mnt/udisk

将镜像文件挂载到创建的目录:

Terminal window
sudo mount /dev/loop7 /mnt/udisk

启动 U 盘模拟功能(执行后,PC 上会弹出检测到新 USB 设备的通知):

Terminal window
sudo insmod g_mass_storage.ko file=/dev/loop7 removable=1

1.4. 功能测试

基本数据收发测试

1. PC 侧:使用 USB 线连接 Nano-TB RV1126B 开发板的 OTG 接口与 PC,可像普通 U 盘一样进行文件读写。

2. 开发板侧:进入 /mnt/udisk 目录后,可以查看从 PC 复制到 U 盘中的文件。向该目录写入文件后,通过拔插 USB 线,也会在 PC 侧同步显示。

1.4.1 注意事项

1. 如果在 PC 上写入文件后,开发板侧未显示:

Terminal window
sudo umount /mnt/udisk && sudo mount /dev/loop7 /mnt/udisk

请执行上述命令重新挂载。

2. 如果在开发板上写入文件后,PC 侧未显示:

请拔插一次 USB 线进行刷新。

3. 启动大容量存储模式并将开发板作为 U 盘使用时,**adb 功能会被禁用**。

2. USB OTG 模式

2.1. USB OTG 概述

USB OTG(On-The-Go)是 USB 协议的扩展标准,用于解决传统 USB 只能进行“主机(HOST)-设备(Peripheral/Device)”单向连接的问题。EASY-EAI-Nano-TB 开发板的 USB OTG 接口支持 HOST 模式与 Peripheral 模式的灵活切换。默认可配置为 OTG 模式,并可使用系统命令快速更改工作模式,以满足不同场景下的设备连接需求,例如连接 U 盘、键盘、鼠标等外设,或作为从设备与 PC 通信。

2.2. 默认 OTG 模式

EASY EAI Nano USB 资源介绍

2.2. 默认 OTG 模式 图1

2.2. 默认 OTG 模式 图1

使用以下固件进行开发时,默认会配置为 USB OTG 模式:

查看当前 OTG 模式:

Terminal window
cat /sys/devices/platform/21400000.usb2-phy/otg_mode

2.2.1 切换到 HOST 模式

但是,在某些特定场景下,例如需要连接并使用 U 盘或其他 USB 设备时,需要将 USB 接口切换为 USB HOST 模式。此时请按照以下步骤进行切换。 首先,将连接到 USB 接口的设备【全部拔下】。然后使用【串口控制台(串口调试)】(波特率:1500000)登录开发板控制台。用户名为 nano,密码为 123456`。 接着执行以下命令,即可将 USB 接口切换到 HOST 模式:

Terminal window
echo host \> /sys/devices/platform/21400000.usb2-phy/otg_mode

查看当前 HOST 模式:

Terminal window
cat /sys/devices/platform/21400000.usb2-phy/otg_mode

2.2.1 切换到 HOST 模式 图2

2.2.1 切换到 HOST 模式 图2

使用 USB 设备(以 U 盘为例)进行验证。插入 U 盘后,可以通过以下两种方式进行验证:

1 lsusb 命令

2.2.1 切换到 HOST 模式 图3

2.2.1 切换到 HOST 模式 图3

2 lsblk 命令

2.2.1 切换到 HOST 模式 图4

12.2.1 切换到 HOST 模式 图4

2.2.2 切换到 Device 模式

如果想切换回 USB Device 模式使用,可以按照与切换到 HOST 模式类似的操作切换到 Device 模式。首先同样将连接到 USB 接口的设备【全部拔下】。然后执行以下命令切换到 USB Device 模式:

Terminal window
echo peripheral \> /sys/devices/platform/21400000.usb2-phy/otg_mode

2.2.2 切换到 Device 模式 图5

2.2.2 切换到 Device 模式 图5

最后连接 ADB 线,并使用 `adb shell` 进入 ADB 环境进行确认。

💡 注意:切换到 Device 模式时,ADB 不会立即生效。需要等待约 1 分钟,直到可以通过 adb shell 命令访问 ADB 环境。