跳转至

16. webusb

功能 : webusb收发 (使用此功能设备树不能配置usb-cdc)

  • usb-cdc disabled
/ {
    chosen {
        zephyr,flash = &w25q64_qspi;
        zephyr,flash-controller = &w25q64_qspi;
        zephyr,code-partition = &slot0_partition;
        zephyr,udc = &usbotg_fs;
    };
};



zephyr_udc0: &usbotg_fs {
    pinctrl-0 = <&usb_otg_fs_dm_pa11 &usb_otg_fs_dp_pa12>;
    pinctrl-names = "default";

    clocks = <&rcc STM32_CLOCK_BUS_AHB1 0x08000000>,
         <&rcc STM32_SRC_HSI48 USB_SEL(3)>;

    maximum-speed = "full-speed";
    ram-size = <1280>;
    num-bidir-endpoints = <8>;

    status = "okay";

    cdc_acm_uart0: cdc_acm_uart0 {
        compatible = "zephyr,cdc-acm-uart";
        label = "CDC_ACM_0";
        status = "disabled";
    };
};
1
2
3
  west build -p always -b art_pi -d build 16.webusb -- \
  -DCONFIG_BOOTLOADER_MCUBOOT=y \
  -DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE="\"$HOME/zephyrproject/bootloader/mcuboot/root-rsa-2048.pem\""

WebUSB 的核心价值是:让网页直接和 USB 设备对话(控制传感器、收发原始数据、做配置/升级),而且跨平台、免安装本地程序。典型场景:

  • 设备配置/调参面板(免驱):做一个网页就能给 MCU/传感器/机器人调配置、读状态、跑自检,不用写 Windows/macOS 原生 App。适合你做的各类板卡出厂配置与现场维护。Chrome for Developers
  • 浏览器内固件升级(DFU):直接在网页里把 .bin 写进设备(标准 USB DFU 或自定义协议都行)。已有成熟示例可参考 webdfu。GitHub+1
  • 数据采集与可视化:用 Bulk 端点把传感器数据推到网页里,实时画图、保存 CSV,做简易“示波器/逻辑分析/数据记录”类工具。Chrome for Developers
  • 生产/质检(EOL 工装):工位上开 Chrome 的“测试台”网页,插入 USB 设备后自动跳转到指定测试页,执行校准、烧号、跑回归。可用 WebUSB 的“落地页”提示能力做引导。Chrome for Developers+1
  • 教学/演示与开源项目:给开发板做一个在线控制台/示例实验网页,用户点“连接”就能体验,降低门槛。Zephyr 自带回环示例可直接上手。docs.zephyrproject.org

什么时候“更适合/不适合”用 WebUSB

  • 更适合:设备是自定义/非标准类(没现成类驱动),或你想统一一套跨平台JS SDK。Chrome for Developers
  • 不太适合:
  • 标准 HID 键鼠/游戏杆→优先用 WebHID;串口 CDC-ACM → 优先用 Web Serial;这些 API 在浏览器层更友好。Chrome for Developers
  • 你需要覆盖 Safari/Firefox:截至 2025 年,WebUSB 主要在 Chromium 家族可用(Chrome/Edge/Opera/Android Chrome),Firefox/Safari 仍不支持;业务要考虑回退方案。MDN 文档+1

打开 art_pi_example/16.webusb/index.html 连接

image-20250925030718319

发送回传

image-20250925025706706

image-20250925025718849

参考

https://docs.zephyrproject.org/latest/samples/subsys/usb/webusb/README.html

https://developer.chrome.com/docs/capabilities/usb?hl=zh-cn

https://github.com/zephyrproject-rtos/zephyr/pull/90112

https://github.com/search?q=webusb&type=repositories