CherryUSB ADB 设备示例

功能说明

本示例使用 CherryUSB device 栈和 components/cherryusb-appclass/adb,将开发板实现为标准 USB ADB 设备。主机端可以使用 Android Platform-Tools 中的 adb 命令与开发板通信。

支持的功能包括:

  • adb devices:查看设备是否枚举并完成 ADB 握手

  • adb shell:执行设备端支持的 shell 命令

  • adb push / adb pull:通过 ADB Sync 传输文件

  • adb shell ls:查看设备文件系统目录

本示例不使用 TinyUSB,也不启用 CherryUSB 自带的 ADB class。示例通过 raw vendor bulk endpoint 注册传输接口,由 adb.c 处理完整的 ADB 协议。

支持的开发板

板型

构建参数

芯片系列

烧录参数

Arcs-EVB

arcs_evb

Arcs / LS26

-C arcs

Venusa RD EVB

venusa_rd_evb

VenusA / CSK7

-C venusa

板级内存和 USB 速度配置位于:

board_configs/arcs_evb.conf
board_configs/venusa_rd_evb.conf

构建系统会根据 -DBOARD=<board> 自动加载对应配置。

硬件连接

  1. 使用支持数据传输的 USB 线,将开发板的 USB device 口连接到 Windows 或 Linux 主机。

  2. 串口烧录口用于下载固件,不是 ADB 数据口。

  3. 如果需要测试 adb push 和 adb pull,请准备并正确挂载 SD 卡;文件系统和 SDMMC 驱动由本示例启用。

编译

在 SDK 根目录执行。

Arcs-EVB

./build.sh -C -S samples/subsys/usb/device/cherryusb_adb -DBOARD=arcs_evb

Venusa RD EVB

./build.sh -C -S samples/subsys/usb/device/cherryusb_adb -DBOARD=venusa_rd_evb

成功后固件位于:

build/arcs.bin

sample.yaml 将该示例标记为 build_only: true,因为完整验证还需要主机 USB 枚举以及 ADB 命令交互。

烧录

Arcs-EVB

./tools/burn/cskburn -C arcs -s /dev/ttyACM0 -b 3000000 0x0 build/arcs.bin

Venusa RD EVB

./tools/burn/cskburn -C venusa -s /dev/ttyACM0 -b 3000000 0x0 build/arcs.bin

如果烧录工具提示设备没有响应,请让开发板进入烧录模式后重试:按住 BOOT,按一下 RESET(或重新上电),再松开 BOOT。

设备端日志

烧录后通过设备串口查看日志,正常启动时应包含类似内容:

CherryUSB ADB example starting...
CherryUSB ADB initialized
CherryUSB ADB example running...

当主机连接 USB device 口并完成枚举后,还应看到:

USB connected
USB configured

日志中的堆统计用于观察 ADB 运行期间的内存使用情况。

Windows 主机验证

1. 准备 ADB 工具

下载并解压 Android SDK Platform-Tools:

https://developer.android.com/tools/releases/platform-tools

在解压后的 platform-tools 目录打开 cmd 或 PowerShell,确认 adb.exe 可执行。

2. 查看设备

adb devices

正常结果示例:

List of devices attached
0123456789abcdef    device

状态为 device 表示 USB 枚举和 ADB 握手成功。unauthorized、offline 或列表为空表示主机端还没有建立正常的 ADB 连接。

3. 验证 Shell

adb shell

也可以直接执行命令:

adb shell ls /

4. 验证文件传输

需要已挂载并可访问的 SD 卡文件系统:

adb push local_file.txt /SD:/adb/remote_file.txt
adb pull /SD:/adb/remote_file.txt local_file_copy.txt
adb shell ls /SD:/adb/

如果未安装 SD 卡或文件系统未挂载,adb devices 仍可能正常,但 push、pull 和对应目录操作会失败。

Linux 主机验证

adb devices
adb shell
adb shell ls /
adb push local_file.txt /SD:/adb/remote_file.txt
adb pull /SD:/adb/remote_file.txt local_file_copy.txt

Linux 主机还可以使用 lsusb 确认 USB 设备已经枚举。

配置说明

CherryUSB

配置项

说明

CONFIG_CHERRYUSB

启用 CherryUSB

CONFIG_CHERRYUSB_DEVICE

启用 USB device 栈

CONFIG_CHERRYUSB_APP_CLASS

启用 CherryUSB 应用类组件

CONFIG_CHERRYUSB_DEVICE_MUSB_LISA

使用 LISA MUSB device 控制器

CONFIG_CHERRYUSB_DEVICE_SPEED_FS

板级配置中启用 USB Full-Speed

ADB

配置项

说明

CONFIG_ADB

启用 ADB 核心协议

CONFIG_ADB_SHELL

启用 ADB Shell

CONFIG_ADB_SYNC

启用 ADB Sync 文件传输

CONFIG_ADB_SHELL_BUFFER_SIZE

Shell 缓冲区大小

CONFIG_ADB_PUSH_PULL_DEFAULT_ROOT

push/pull 的默认根目录

文件系统

CONFIG_FILE_SYSTEM、CONFIG_FATFS_FILESYSTEM、CONFIG_DISK_DRIVER_SDMMC、CONFIG_LSFS 和 CONFIG_LSFS_FAT 用于支持 ADB Sync。实际文件传输仍取决于 SD 卡、文件系统挂载和底层存储状态。

内存

公共配置位于 prj.conf,板型差异位于 board_configs/:

  • Arcs-EVB 使用较大的单核 SRAM 窗口和 0x30000 字节系统堆。

  • Venusa RD EVB 使用单核 AP 的 0x17000 字节 SRAM 窗口和 0x6000 字节系统堆。

  • 两种板型都关闭本示例不使用的 IPC/LUNA shared memory 配置,避免占用可用 SRAM。

源码结构

cherryusb_adb/
├── board_configs/              # arcs_evb、venusa_rd_evb 板级配置
├── CMakeLists.txt              # 示例源文件和文件系统库
├── Kconfig
├── prj.conf                    # 公共 CherryUSB、ADB、文件系统配置
└── src/
    ├── main.c                  # 文件系统初始化、USB 任务和堆监控
    ├── fs.c                    # LSFS/存储初始化
    ├── app_usb.c               # USB 控制器和 ADB 服务初始化
    └── usb_descriptors.c       # ADB USB 描述符

注意事项

  1. adb devices 显示 device 是 ADB 枚举和握手成功的主要判据;完整验证 Shell 和文件传输还需要执行对应命令。

  2. 烧录串口和 USB device 数据口是两个不同的连接,Windows 上的 ADB 应连接 USB device 口。

  3. adb push 和 adb pull 依赖 SD 卡及文件系统挂载;没有存储介质时,设备枚举不一定受影响。

  4. 本示例使用 USB Full-Speed,主机侧无需安装私有 ADB 协议驱动,但 Windows 仍需要正确的 USB/ADB 设备驱动。

  5. 如果 Windows 设备管理器中出现未知设备,请检查 USB 线是否支持数据传输,并安装或更新对应的 ADB 驱动。