USB Host Serial 示例

功能说明

演示如何使用 CherryUSB 在 ARCS 和 VenusA 芯片上实现 USB Host Serial 功能,与 USB 串口设备通信。

示例支持以下 USB 串口设备驱动:

  • 标准 CDC ACM,例如 Arduino 和部分 USB 转串口设备

  • CH340/CH341

  • FTDI FT232

  • Silicon Labs CP210x

设备枚举成功后,示例会打开串口并配置为 115200 8N1,然后执行 1024 字节串口回环测试:发送 0x00–0xFF 循环递增的数据,接收后逐字节校验。

支持平台

开发板

芯片系列

状态

arcs_evb

ARCS

支持

venusa_rd_evb

VenusA

支持

VenusA 平台使用独立的 USB 时钟寄存器配置。当前适配只修改了示例层,没有修改 CherryUSB 核心、MUSB Host 驱动或 SoC 底层驱动。

硬件连接

USB Host 硬件要求

开发板的 USB Type-C 接口默认作为 Device 使用。作为 Host 使用时,需要完成对应的 Host 硬件配置:

  • VBUS 直接供电 5 V,给外部 USB 串口设备供电

  • CC1 和 CC2 分别通过 22 KΩ 电阻上拉到 VBUS

  • 使用支持数据通信的 USB 线

将 USB 串口设备连接到开发板的 USB Host Type-C 接口。

回环测试设备

将 USB 串口设备的 TX 和 RX 短接,使发送数据能够回到接收端。也可以在设备的另一端运行串口回环程序。

示例流程

  1. 初始化 USB Host 控制器和 PHY

  2. 等待 USB 串口设备插入

  3. 枚举设备并匹配 CDC ACM、CH340、FTDI 或 CP210x 驱动

  4. 注册串口设备节点:CDC ACM 通常为 /dev/ttyACM0,USB 转串口芯片通常为 /dev/ttyUSB0

  5. 配置串口为 115200 8N1

  6. 发送、接收并校验 1024 字节递增测试数据

  7. 打印回环测试结果,并在设备断开后清理资源

编译

# ARCS EVB
./build.sh -S samples/subsys/usb/host/cherryusb_serial \
  -B build/cherryusb_serial -DBOARD=arcs_evb

# VenusA RD EVB
./build.sh -S samples/subsys/usb/host/cherryusb_serial \
  -B build/cherryusb_serial_venusa -DBOARD=venusa_rd_evb

也可以使用 SDK 文档中的通用 sample build 命令编译。

烧录

# ARCS EVB
./tools/burn/cskburn -C arcs -s /dev/ttyACM0 -b 3000000 0x0 \
  build/cherryusb_serial/arcs.bin

# VenusA RD EVB
./tools/burn/cskburn -C venusa -s /dev/ttyACM1 -b 3000000 0x0 \
  build/cherryusb_serial_venusa/arcs.bin

烧录串口和日志串口可以根据实际设备号调整。VenusA 使用 -C venusa,ARCS 使用 -C arcs。

验证方法

  1. 完成 USB Host 硬件配置。

  2. 将 USB 串口设备的 TX 和 RX 短接。

  3. 编译并烧录对应平台的固件。

  4. 通过调试串口以 921600 波特率查看日志。

  5. 插入 USB 串口设备,等待设备枚举和回环测试完成。

最终成功标志:

[SUCCESS] All 1024 bytes verified correctly! (0 errors)

========================================
  Serial Loopback Test: SUCCESS ✓
========================================

典型日志流程如下:

[INIT] Configuring USB PHY for Host mode...
[INIT] USB Host PHY configured:
       - IDDIG = 0 (Host mode)
       - Clock enabled
       - 16-bit data bus
[INFO] USB Host initialized, waiting for device...
[I/usbh_core] New device found,idVendor:0403,idProduct:6001,bcdDevice:0600
[I/usbh_core] Enumeration success, start loading class driver
[I/usbh_core] Loading ftdi class driver on interface 0
[I/usbh_serial] Register Serial Class: /dev/ttyUSB0 (ftdi)
[INFO] Serial device opened successfully
[INFO] Configuring serial port: 115200 8N1
[TX] Sent 1024 bytes, total: 1024/1024
[RX] Received ... total: 1024/1024
[SUCCESS] All 1024 bytes verified correctly! (0 errors)

不同平台、USB 串口芯片和固件版本的 VID/PID、设备节点、USB 事件顺序以及数据包大小可能不同。

配置说明

prj.conf 默认启用以下 USB 串口驱动:

CONFIG_CHERRYUSB_HOST_CDC_ACM=y
CONFIG_CHERRYUSB_HOST_CH34X=y
CONFIG_CHERRYUSB_HOST_FTDI=y
CONFIG_CHERRYUSB_HOST_CP210X=y

如果只需要支持一种设备,可以关闭其他驱动以减小固件大小。所有驱动通过 CONFIG_USBHOST_SERIAL 提供统一的串口抽象层。

核心 API

API

说明

usbh_initialize()

初始化 USB Host 协议栈

usbh_serial_open()

打开 USB 串口设备

usbh_serial_close()

关闭 USB 串口设备

usbh_serial_control()

配置串口参数

usbh_serial_write()

非阻塞发送数据

usbh_serial_read()

非阻塞接收数据

usbh_serial_run()

设备连接后启动测试线程

usbh_serial_stop()

设备断开后停止测试线程

注意事项

  • USB Host 模式必须能够提供 VBUS 5 V,否则外部 USB 设备可能无法枚举。

  • 回环测试必须将 TX 和 RX 短接,或使用软件回环程序。

  • 示例使用非阻塞收发,发送和接收可能分成多个数据包完成。

  • 如果日志停留在 Please connect USB Serial device,请检查 VBUS、CC 上拉、电缆、设备供电和 USB 接口连接。

  • VenusA 平台已验证固件能够编译、烧录并启动 USB Host;插入具体 USB 串口设备后的枚举和回环结果需要以实际外设日志为准。