CherryUSB ADB 设备示例
源码位置: samples/subsys/usb/device/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 / LS26 |
|
Venusa RD EVB |
|
VenusA / CSK7 |
|
板级内存和 USB 速度配置位于:
board_configs/arcs_evb.conf
board_configs/venusa_rd_evb.conf
构建系统会根据 -DBOARD=<board> 自动加载对应配置。
硬件连接
使用支持数据传输的 USB 线,将开发板的 USB device 口连接到 Windows 或 Linux 主机。
串口烧录口用于下载固件,不是 ADB 数据口。
如果需要测试
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
配置项 |
说明 |
|---|---|
|
启用 CherryUSB |
|
启用 USB device 栈 |
|
启用 CherryUSB 应用类组件 |
|
使用 LISA MUSB device 控制器 |
|
板级配置中启用 USB Full-Speed |
ADB
配置项 |
说明 |
|---|---|
|
启用 ADB 核心协议 |
|
启用 ADB Shell |
|
启用 ADB Sync 文件传输 |
|
Shell 缓冲区大小 |
|
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 描述符
注意事项
adb devices显示device是 ADB 枚举和握手成功的主要判据;完整验证 Shell 和文件传输还需要执行对应命令。烧录串口和 USB device 数据口是两个不同的连接,Windows 上的 ADB 应连接 USB device 口。
adb push和adb pull依赖 SD 卡及文件系统挂载;没有存储介质时,设备枚举不一定受影响。本示例使用 USB Full-Speed,主机侧无需安装私有 ADB 协议驱动,但 Windows 仍需要正确的 USB/ADB 设备驱动。
如果 Windows 设备管理器中出现未知设备,请检查 USB 线是否支持数据传输,并安装或更新对应的 ADB 驱动。