Birdiebot WiFi DAP 完整用户手册

一块无线 CMSIS-DAP 调试器,加上一套内嵌在浏览器里的工作台:Wi-Fi 或 USB 有线接入,完成 SWD/JTAG 调试、串口透传、目标芯片烧录、变量曲线采集和本地 OTA。本手册面向第一次上手的读者,也覆盖需要压榨性能、排查边界的高级用法。

版本 v1.2.0更新 2026-10-24电控组 · WiFiDAP
本页目录

1 产品与安全信息

i

目标:弄清这台设备能做什么、不能做什么,以及在什么网络与电气环境下才可以安全使用。

前提:已拿到设备、USB 数据线、目标板和杜邦线;准备在可信的实验室局域网内使用。

操作:读完默认端口、默认口令、目标电压与共地要求;第一次上电前先检查接线。

结果:能独立判断“能不能接线、能不能联网、能不能直接烧录”,并知道哪些操作必须避免。

常见错误:把设备接在办公网或公网;用 5 V 电平接 SWD;目标板与 DAP 不共地;烧录时还开着 OpenOCD/Ozone。

1.1 它是什么,不是什么

Birdiebot WiFi DAP 的定位是“无线调试探针 + 自带 Web 管理面板”。设备本体是一块带 USB-OTG 的 ESP32 系列主控(当前发布版为 8 MB Flash;具体板级配置见开发者附录),通过 SWD/JTAG 连接目标 MCU;主机侧既可以用标准 CMSIS-DAP 工具链,也可以直接用浏览器完成大部分日常操作。

能力说明
无线调试主机连接设备热点或同一局域网后,通过 USBIP / elaphureLink / WebSocket-DAP 使用 TCP 3240 端口。
有线调试默认 S3 固件同时带 USB-NCM 与 Wi-Fi:USB 口枚举为 CDC-NCM 网卡,设备固定 192.168.7.1/24 并运行 DHCP(主机通常自动取得 192.168.7.x,也可静态 .2 兜底),仍走 TCP 3240。
Web 管理HTTP 80 提供 UART 终端、Wi-Fi 配置、目标检测/烧录、变量曲线、版本信息与OTA 页面(默认启用)。
目标烧录浏览器上传 BIN/ELF/Intel HEX/SREC,由 ESP32 通过本地 SWD 直接擦写目标内部 Flash,并回读 SHA-256 校验。
变量曲线上传 ELF 解析 DWARF,按变量名/地址采样并绘图;支持设备本地闭环、Web-DAP 回读、断点/看门狗/条件触发。
串口Web UART 终端与 TCP 1346 透传桥,共用同一 UART 服务。
设备维护版本/SN 查询、Wi-Fi 多网络记忆、双槽 OTA(仅 8 MB 双槽发布构建)与回滚。

它不是 J-Link,也不是高速数据采集卡:变量曲线受 Wi-Fi 往返和目标暂停影响,不能等价于 J-Link HSS;Ozone 原生只支持 J-Link,本设备的 Ozone 虚拟 J-Link 路径仍是实验性功能。它也不支持多个目标同时调试,DAP 会话在同一时刻只服务一个客户端。

1.2 默认网络与“实验室模式”

默认固件是无登录、无鉴权、HTTP 明文的实验室模式。设备始终启用 Host/Origin 校验用于降低浏览器跨源攻击风险,但这不是身份认证,不能替代网络隔离。

端口/服务默认风险与用途
80/TCP开Web UI、/ws、/api、OTA 上传;同网段可改配置、操作串口与烧录。
3240/TCP开USBIP、elaphureLink、WebSocket-DAP;可 attach 探针并读写目标。
1346/TCP开UART TCP 透传桥;可直连目标串口。
1900/UDP、5353/UDP开SSDP 与 mDNS 发现;用于局域网发现,不承载业务数据。
UART0物理串口固件日志控制台,默认 GPIO43/44、115200 8N1;具体引脚按板级配置。
!
必须遵守:只在可信局域网/隔离 VLAN 使用;不要把 80/3240/1346 暴露到办公网或公网;首次使用立即修改默认 AP 口令 12345678。Wi-Fi 口令在 NVS 中是明文存储,物理接触设备即可读取。

1.3 电气与接线安全

  • 电平:DAP 的 SWD/JTAG 与 UART 均为 3.3 V 逻辑,不要接 5 V 信号;目标板若为 5 V 系统,必须确认其调试口是 3.3 V 容忍或加电平转换。
  • 共地:SWD 的 GND、UART 的 GND 必须与目标板共地;只接信号线不接地是最常见的“检测不到目标”原因之一。
  • 供电:建议目标板自供电,DAP 由 USB 供电;不要用 DAP 的调试口给目标大电流供电,也不要把目标电源倒灌进 DAP。上电顺序建议先接好地线和信号线,再给目标上电。
  • 复位:nRESET 为开漏模拟,目标板需要上拉;没有接 nRESET 时仍可通过 SWD 的 SYSRESETREQ 软件复位。
  • USB:默认 S3 固件的 USB-NCM 与 USB-Serial/JTAG 不能同时工作;使用 NCM 时主机看不到 USB 串口是正常现象,不是变砖。

1.4 操作安全与互斥

  • 单 DAP 会话:USBIP/OpenOCD/Ozone/Web 变量曲线/Web 目标烧录共享同一个 DAP,任意时刻只允许一个占用者。烧录或采样前先停止其它调试器。
  • 烧录期间:不要刷新页面、断开 USB/Wi-Fi 或同时使用 OpenOCD;目标烧录当前不提供页面中止按钮。失败后先重检测,再决定是否重试。
  • OTA:只上传应用 .bin,不要上传 merge 全量包或 zip;OTA 无签名、无防降级,只从可信主机操作。
  • 曲线采样:设备本地周期采样会按配置暂停/恢复目标,高频或长时间采样会影响目标实时性;调试控制环时优先固定地址 + 低采样率。
  • 无线环境:2.4 GHz Wi-Fi 干扰会直接影响采样率、烧录速度和 DAP 稳定性;对速度敏感时使用有线 NCM。

1.5 不要声称的能力边界

不是生产安全调试器

无鉴权、无 TLS、无签名启动;不能直接作为量产安全工装。

不是多目标并行工具

一次只探测/连接一个 SWD 目标;换板必须重新检测。

不是高速示波器

曲线采样不是 HSS,多路/高采样率下每路刷新率会下降。

不是万能烧录器

部分 STM32 家族仅支持识别,2 MB 双 bank 等边界见第 5、11 章。

2 硬件连接

i

目标:把主机、DAP、目标板三者的网络和电气连接接对,并确认每一根线都有明确用途。

前提:默认板(或已确认引脚定义的兼容板)、3.3 V 目标板、杜邦线、USB 数据线;有线模式需要带原生 USB-OTG 的发布硬件,默认 S3 固件已内置 NCM。

操作:先选择无线或有线接入;再接 SWD/UART;最后接电源并共地。

结果:设备能上网/能被主机发现,Web 页面能打开,目标能被检测到,串口有数据。

常见错误:SWDIO/SWCLK 接反、UART 未交叉、未共地、目标未上电、把 5 V 接到 3.3 V 引脚、有线固件下仍去找 USB 串口。

2.1 两套接入方式怎么选

对比项无线 Wi-Fi有线 USB-NCM
设备固件默认发布固件(已含 NCM)可选兼容构建 scripts/build-wired.sh
主机接入连接 AP Birdiebot-DAP-XXXX,或设备 STA 接入同一局域网USB 线直连;主机出现 CDC-NCM 网卡
设备地址AP 模式 192.168.1.1;STA 模式由路由器分配固定 192.168.7.1/24
主机地址AP 模式自动 DHCP;STA 模式由路由器分配手动 192.168.7.2/24,网关留空
DAP 端口TCP 3240TCP 3240(同一套 DAP 代理)
典型速度受 2.4 GHz 环境影响;345 KB 烧录约 8–9 s,1 MiB 读约 40–44 KiB/s345 KB 烧录约 5.8 s,1 MiB 读约 6.6 s(约 154 KiB/s)
适合场景近场配置、手机/平板、临时调试固定工位、大镜像烧录、稳定性优先
Wi-Fi 是否保留本身即 Wi-Fi保留;NCM 与 Wi-Fi 可同时在线,但 DAP 仍单会话

两种接入共用完全相同的 Web UI 与 DAP 协议。速度数字来自 STM32H723/345 KB 镜像的实测记录,换目标、换主机、换 Wi-Fi 环境都会变化,不应作为 SLA。

2.2 无线连接:AP 与 STA

设备默认工作在 Smart APSTA:AP 热点一直可用;设备作为 STA 连上路由器后,30 秒后关闭 AP;STA 掉线 10 秒后重新开启 AP。因此在 STA 已连接时找不到热点是正常行为,不代表设备坏了。

  1. 上电,等待约 5–15 秒。默认板 Wi-Fi 状态灯 GPIO4 在 STA 获取 IP 后点亮。
  2. 主机/手机搜索 SSID Birdiebot-DAP-XXXX,其中 XXXX 是设备 STA MAC 末 2 字节的大写十六进制。默认口令 12345678。
  3. 连上后浏览器打开 http://192.168.1.1/。若设备已通过 Wi-Fi 页接入路由器,则改访问路由器分配给它的 IP;也可尝试 mDNS 主机名 birdiebot-dap-XXXX.local。
  4. 进入 Wi-Fi 页可扫描、连接局域网、保存多个网络。设备最多记忆 8 个网络,并按“上次成功 → 优先级 → 最近成功”的顺序自动轮换重连。
!
如果主机连接的是设备 AP,在 Wi-Fi 页切换到别的网络会把当前页面与设备断开;请确认你已能通过新网络访问设备 IP,或准备好重新连接 AP。AP 口令与名称修改后,所有已连接客户端都会掉线。

2.3 有线连接:USB-NCM(默认 S3 固件)

iC1 是项目内部对 USB-NCM 有线链路的代号;它不再是独立发布硬件或独立固件,默认 S3 固件同时包含 NCM 与 Wi-Fi。

有线模式需要主控原生 USB-OTG 引脚接到 USB 口;默认 S3 发布固件已经包含 USB-NCM 与 Wi-Fi,无需再刷单独 wired 构建。旧 scripts/build-wired.sh / sdkconfig.wired.defaults 保留为兼容/精简构建。NCM 与 Wi-Fi 在同一固件中同时可用。

项值/说明
USB 设备CDC-NCM 以太网卡,开发描述符约为 303a:4000,产品字符串 Birdiebot WiFi DAP (NCM + WiFi)
设备网络192.168.7.1/24,内置 DHCP server,无默认网关;主机通常自动取得 192.168.7.x
主机网络DHCP 自动获取 192.168.7.x;没有自动地址时静态兜底 192.168.7.2/24,网关留空
DAP 访问usbip attach -r 192.168.7.1 -b 1-1,之后 OpenOCD/Keil 照常使用
控制台USB-Serial/JTAG 被关闭,日志走 UART0 控制台(默认 GPIO43/44,115200,可按板级配置修改)
恢复烧录BOOT(GPIO0 拉低)+RESET 进入 ROM 下载模式,或 UART0 下载,或通过 Wi-Fi OTA

Windows 10/11

  1. 用 USB 数据线连接设备。系统应自动加载 USB NCM 驱动并出现新的以太网适配器。
  2. 先等待系统通过 DHCP 自动取得 192.168.7.x;若没有自动地址,再在“网络适配器 → IPv4”中静态设置 192.168.7.2、掩码 255.255.255.0,网关留空。
  3. 执行 ping 192.168.7.1;安装 usbip-win 0.3.x,执行 usbip.exe attach_ude -r 192.168.7.1 -b 1-1。设备管理器会出现 CMSIS-DAP(VID:PID = C251:F00A)。

Linux

内核通常自动创建 enx* 或 usb0 接口,并直接通过 DHCP 取得地址;没有自动地址时再静态兜底,然后 attach:

# 优先等待 DHCP;若未自动取址,再静态兜底:
sudo ip addr replace 192.168.7.2/24 dev enxXXXXXXXXXXXX
sudo ip link set enxXXXXXXXXXXXX up
ping -c 3 192.168.7.1
sudo usbip attach -r 192.168.7.1 -b 1-1

如果使用 NetworkManager,通常直接 DHCP 即可;只有 NM 清空兜底静态地址时才需要把该接口设为 unmanaged(nmcli device set enx... managed no)。设备经 OTA 重启后主机偶尔会保留旧的 USB 设备对象;物理拔插一次,或重新绑定对应 xHCI 控制器即可。

!
默认 S3 固件第一次启动后,主机看不到 USB-Serial/JTAG 串口是预期行为。烧录新固件前先确认 BOOT 键、UART0 或 Wi-Fi OTA 至少有一条恢复路径可用。

2.4 SWD/JTAG 引脚与接线

下表是默认发布板的参考引脚;引脚不是焊死的——换板/改 IO 时修改 components/board/boards/*.h 的 PIN_* 宏并通过 Kconfig 选板即可(详见开发者附录 §3.7)。公版接线以 docs/board-pins.md 和实际板文件为准,不要凭旧版 ESP8266 资料接线。

功能GPIO方向/说明
SWCLK / TCKGPIO12DAP 输出时钟
SWDIO / TMSGPIO11单线双向;JTAG 模式下为 TMS
nRESETGPIO13开漏复位输出,目标板需上拉;可不接
TDO(目标→DAP)GPIO15仅 JTAG 使用
TDI(DAP→目标)GPIO16仅 JTAG 使用
nTRSTGPIO14预留;当前固件未实现有效驱动,不要依赖它
Connected LEDGPIO5CMSIS-DAP Connected 状态
Running LEDGPIO6CMSIS-DAP Running 状态
Wi-Fi LEDGPIO4STA 获取 IP 后点亮

SWD 最少四根线:SWCLK、SWDIO、GND,以及目标板自身的供电。需要硬复位时再增加 nRESET。JTAG 需要 TCK、TMS、TDI、TDO 与 GND,nTRST 可选但当前不驱动。接线尽量短,SWD 线不要与电机驱动、开关电源或大电流走线并行。

DAP 默认 SWD 时钟为 2 MHz,Web 目标烧录页的检测卡片可手动选择“自动 / 500 kHz / 1 / 2 / 4 / 10 MHz”;该选择同时作用于 Web 目标检测、Web 烧录和本地变量采样。OpenOCD 等外部工具仍可在目标配置之后用 adapter speed 覆盖。遇到长线、干扰或低电压目标时先降到 1 MHz 或更低。

2.5 UART 接线

UART 桥使用 UART1,默认 115200 8N1。注意“TX 接 RX、RX 接 TX”:

  • DAP GPIO10(UART1 TX)→ 目标 RX
  • DAP GPIO9(UART1 RX)← 目标 TX
  • GND 与目标 GND 共地;目标 3.3 V 逻辑

控制台 UART0 是另一组引脚(默认 GPIO43/44,115200,可按板级配置修改),只用于固件启动日志,不会被 Web UART 或 TCP 1346 占用。调试目标串口时要把目标接到 GPIO10/9,而不是 GPIO43/44。

2.6 供电、共地与接口速查

DAP 供电

由 USB 5 V 供电。不要从目标板反向给 DAP 的 3.3 V 网络供电。

目标供电

建议独立供电;若目标与 DAP 分属两个电源,务必先共地。

逻辑电平

SWD/JTAG/UART 均为 3.3 V;5 V 目标需确认调试口耐受或加转换。

USB 口

既是固件烧写口,也是默认固件的 NCM 口;两种角色不能同时使用 USB-Serial/JTAG。

上电后的快速自检:设备指示灯是否正常、能否搜到 AP、Web 页面是否打开、About 页是否显示协议匹配、UART 页是否可启停、目标检测是否返回 DEV_ID。任何一项失败,先查接线与供电,再查网络。

!
接线或拔线前先断电;不要在目标板带电时插拔 SWD 排线,避免瞬态电压损坏 IO。若目标板使用高压/隔离电源,必须确认调试地与 DAP 地等电位。

3 首次使用与快速开始

i

目标:在 10 分钟内完成“上电 → 联网 → 打开 Web → 看到目标/串口数据”的第一条链路。

前提:设备已有可启动固件(出厂固件或维护者烧好的发布固件),有一块已接好 SWD 的 STM32 目标板。

操作:按本节顺序执行,不要跳步;每一步都有明确的通过标志。

结果:浏览器能访问设备,顶部状态显示“已连接”,UART 或目标检测有响应。

常见错误:没连设备 AP 就打开 192.168.1.1;把 192.168.7.1 当成无线地址;目标未上电;烧录时还开着 OpenOCD。

3.1 开箱检查

  • DAP 板、USB 数据线(能传数据,不是纯充电线)、目标板、SWD 杜邦线。
  • 目标板供电与调试口定义(3.3 V、GND、SWCLK、SWDIO;需要时加 nRESET)。
  • 一台带 Wi-Fi 的电脑/手机;有线模式还需 USB-NCM 驱动与 usbip 客户端。默认 S3 固件已内置 NCM,不需要额外刷 wired 固件。
  • 浏览器使用 Chrome、Edge、Firefox 或 Safari 的较新版本;不支持过旧的 IE。

3.2 六步完成第一次连接

  1. 接目标:按第 2 章接好 SWD 四线并共地,目标板上电。先不接 USB,检查没有短路。
  2. 给 DAP 上电:USB 线连接 DAP 与主机。等待设备启动,默认板 Wi-Fi 灯在 STA 获取 IP 后亮起。
  3. 接入网络:无线模式下连接 SSID Birdiebot-DAP-XXXX(口令 12345678);有线模式等待主机 DHCP 自动取址(兜底静态 192.168.7.2/24),确认能 ping 192.168.7.1。
  4. 打开 Web:无线 AP 模式访问 http://192.168.1.1/;有线模式访问 http://192.168.7.1/;设备接入路由器后访问其 STA IP。页面默认进入目标烧录页。
  5. 确认版本与连接:右上角状态应为“已连接”;进入“关于”页确认协议匹配,记下固件/Web UI 版本与 SN。
  6. 做一次目标动作:到“目标烧录”页点“检测目标”,或在 UART 页选择正确波特率后点“开始数据收发”。有 DEV_ID 或串口输出,即第一条链路打通。
目标烧录页的目标检测卡片,包含 SWD 时钟选择与目标信息
图 3-1 目标烧录页的检测卡片(截图版本较早;当前首页还包含状态总览、首次使用引导和命令面板,具体以设备实际页面为准)。

3.3 首次连通检查清单

检查项通过标志不通过先查
设备启动指示灯亮/闪,能搜到 AP 或 USB 枚举出 NCMUSB 线、供电、固件是否烧录
网络能打开 Web;顶部“已连接”IP 网段、AP 是否被 Smart APSTA 关闭、防火墙
Web 与固件关于页显示协议匹配刷新页面;浏览器缓存;版本是否过旧
目标检测显示 DEV_ID、Flash 大小、UID0/1/2SWD 线序、共地、目标供电、SWD 时钟
UART目标串口有输出/可发送TX/RX 是否交叉、波特率、是否接到 GPIO10/9
DAPOpenOCD/Keil 能识别 CMSIS-DAP3240 端口、usbip attach、是否被曲线/烧录占用

3.4 接下来做什么

要调试固件

读第 7 章,用 USBIP + OpenOCD/Keil;或直接用有线 NCM 获得更稳定的吞吐。

要烧录目标

读第 5 章,先检测目标,再选 BIN/ELF/HEX/SREC,确认支持矩阵后烧录。

要看变量

读第 8、9 章,上传带 DWARF 的 ELF,先用设备本地 20 ms/50 Hz 采样。

要改 Wi-Fi

读第 6 章,配置 STA、已保存网络和 AP 口令;首次使用务必改默认口令。

!
如果这是刚焊好的空白板或固件已被擦除,需要先通过 USB/UART 烧入发布固件。构建与首次烧录流程见 开发者附录 与仓库 README_CN.md 第 4 章;首烧只写 bootloader、分区表和 ota_0,不要初始化 otadata。不要在没有恢复手段时随意全片擦除。

4 Web 界面与通用操作

i

目标:熟悉设备内嵌 Web UI 的页面结构、状态含义和通用交互,后续章节不再重复解释。

前提:已能打开 http://设备IP/,浏览器版本较新。

操作:浏览页面、切换语言/主题、查看信息图标、在手机与桌面两种布局下操作。

结果:知道每个页面负责什么,能从状态标签判断“设备在线/离线、目标运行/暂停、采样进行/停止”。

常见错误:把本手册页面与设备页面混淆;忽略顶部“未连接”仍继续操作;在手机上找不到被折叠的高级控件。

4.1 页面地图

本手册是静态文档;设备内嵌的 Web UI 是另一套页面(路径带 #/)。两者都有顶部导航和深色主题,但功能不同。设备 UI 默认进入目标烧录页(/#/target),桌面顶部主导航提供目标烧录 / 变量曲线 / UART / Wi-Fi / 更新五个入口,移动端抽屉里还有“关于”。更新页默认启用。

页面路径主要用途
UART/#/uart串口终端、收发、断帧、快捷命令、TCP 透传配置。
Wi-Fi/#/wifi扫描/连接 STA、保存网络、AP 名称与口令、模式、静态 IP/DNS。
目标烧录/#/target(默认)SWD 检测、内置 profile 自动匹配、镜像转换与烧录、复位。
变量曲线/#/debug-curveELF/DWARF 变量、采样、图表、源码/对象、录制与回放。
关于/#/about协议版本、网页版本、构建标签、固件/硬件信息、SN、鸣谢。
更新/#/update浏览器本地 OTA;默认启用,仅显式裁剪 OTA 的构建没有,见 6.5 节。

4.1.1 状态总览、首次引导与命令面板

  • 状态总览 Dashboard:目标烧录页顶部集中显示 DAP 状态/会话、Wi-Fi SSID/RSSI/IP、目标检测信息和当前链路(Wi-Fi 或 USB-NCM)。
  • 首次使用引导:首次打开自动出现“连接 → 检测 → 加载 ELF → 采样 → 烧录”的引导,可跳过,也可从页面重新打开;引导只做提示,不会自动执行危险操作。
  • 全局命令面板:按 Ctrl K(macOS 为 ⌘ K)打开,可搜索页面与动作;它不搜索文档内容。

4.2 顶部栏与连接状态

  • 品牌区:左侧图标与产品名,移动端点击可回到首页;品牌下方小字显示当前页面。
  • 连接状态:绿色“已连接”表示 WebSocket 正常;黄色“连接中”表示正在建立或刚加载;红色“未连接”表示断线。状态同时显示在移动端抽屉顶部。
  • 语言:中文/English 切换,选择会保存在浏览器本地;切换后当前页面文案即时更新。
  • 主题:太阳/月亮图标切换深色/浅色,偏好保存在本地。设备 UI 深色优先。
  • 全屏:移动端抽屉里提供全屏/窗口切换,适合手机看曲线。
  • 搜索:本手册页面顶部提供章节搜索(Ctrl K);设备 UI 另有全局命令面板(Ctrl K),可搜索页面/动作,但不搜索文档内容。

连接状态来自单条 WebSocket 连接(ws://设备IP/ws)。固件每 1.5 秒发送心跳,前端超过约 2 秒收不到任何消息就判定断线。断线时页面仍能显示已加载的数据,但所有控制操作会失败;先恢复网络再刷新页面。

4.3 信息图标、标签与表格

页面中大量出现圆形的小 i 图标。它不是装饰:鼠标悬停会显示说明,单击可把说明钉住,点击页面其它位置关闭;触屏上直接点按即可。看到不熟悉的字段、采样率、Halt、Out of scope、组权重等,先点它。

视觉元素含义
绿色/黄色/红色状态胶囊连接状态或操作状态。绿色通常表示成功/运行,黄色表示进行中/警告,红色表示错误/断开。
“采样中 / 已停止”变量曲线页的采样状态,不是设备连接状态。
“Halt: ON/OFF”设备本地采样是否每拍暂停目标。固定地址/指针为 OFF,栈帧/寄存器相关为 ON。
“已连接 · 协议匹配”Web 与固件协议版本一致;不匹配时会禁用 OTA 等高风险操作。
进度条烧录/OTA 的浏览器上传进度与设备处理进度是两条不同进度,以设备状态为准。
表格 + 复制按钮参数、检测字段、版本信息可读;代码块右上角有“复制”按钮。

设备多数表单是“本地编辑 + 显式保存”:改完输入框后必须点“保存/连接/开始”,不会自动生效;Wi-Fi 切换尤其注意,可能导致页面立即断线。

4.4 桌面与手机布局

桌面端顶部显示全部主入口,右侧显示语言、主题和连接状态;窗口宽度小于约 980 px 时,左上角出现“目录/菜单”按钮,侧栏改为抽屉,顶部只保留当前页面与状态点。变量曲线页在窄屏下默认折叠“更多控件”中的高级区域,图表支持单指平移、双指/滚轮缩放。

手机窄屏下的变量曲线页面,顶部折叠菜单,状态区换行,图表控件被收纳
图 4-1 手机窄屏(390×844)下的变量曲线页:顶部只保留菜单、页面名、状态点和主题;高级控件折叠进“更多控件”。桌面端的完整布局见后续章节。

手机端建议:横屏看曲线、关闭系统省电模式、保持页面在前台;iOS/Android 浏览器在后台会节流定时器,采样统计和曲线刷新会变慢,但设备本地采样仍在运行,返回前台后恢复显示。

4.5 通用故障处理

  • 页面能打开但操作 403:Host/Origin 校验拦截。用 IP 地址访问;或把使用的主机名加入固件允许来源。403 不是登录失效。
  • 页面空白/样式错乱:强制刷新、清缓存,确认固件内嵌 Web 资源与当前固件版本匹配。
  • 协议不匹配:刷新网页;仍不匹配说明网页/固件版本差距过大,需升级固件或重新构建。
  • 状态一直红色:检查是否连错 AP、设备是否重启、是否有另一个页面占满连接;刷新页面。
  • 找不到按钮:窄屏下先展开抽屉或“更多控件”;更新页默认存在,只有显式裁剪 OTA 的构建才没有。

5 目标检测与烧录

i

目标:用浏览器完成“识别目标 → 选择固件 → 烧录 → 回读校验”的完整闭环,并知道哪些芯片不能烧。

前提:SWD 接线正确、目标已上电共地;DAP 未被 OpenOCD/Ozone/曲线采样占用;手上有与目标匹配的 BIN/ELF/HEX/SREC。

操作:打开“目标烧录”页,先检测,再选文件、确认转换结果、开始烧录、看结果并复位。

结果:页面显示写入字节数与设备回读 SHA-256,目标复位后可运行新固件。

常见错误:拿完整 merge 包当 app 烧;目标超出支持矩阵;烧录中刷新页面/断开连接;同时开着 OpenOCD。

!
仅限可信内网使用;烧录期间请勿同时使用 OpenOCD/USBIP/Ozone。Web 目标烧录当前不支持页面中止,开始后不要刷新或拔线。

5.1 检测目标:能看到什么

点击“检测目标”,设备通过 SWD 读取目标调试信息。一次只探测一个目标;换板后必须重新检测。检测卡片旁有 SWD 时钟选择:默认“自动”(2 MHz → 1 MHz → 500 kHz 探测),也可固定 500 kHz / 1 / 2 / 4 / 10 MHz;该设置同时作用于目标检测、Web 烧录和本地变量采样。长线、低电压或干扰环境建议先用自动或 1 MHz,不要承诺 4/10 MHz 一定可用。检测成功后页面显示以下只读字段:

字段含义怎么用
芯片系列由 DEV_ID 定位的家族,如 STM32H7、STM32F1。判断大类是否正确。
芯片型号内置 profile 自动匹配出的代表 order code;无匹配时显示“未知”。核对板子丝印/工程配置,但不要把它当成封装证明。
候选型号组按 DEV_ID + FSIZE 缩小后的候选组,例如 STM32H723/H725/H730/H733/H735 [xG, 1024 KiB]。确认容量档位与候选范围;完整 order code 仍需外部信息。
DEV_IDDBGMCU_IDCODE 低 12 bit,定位器件组。高级排查:确认与资料/OpenOCD 读数一致。
Flash 大小由 FSIZE 读出的 KiB 数,如 1.00 MB。判断镜像是否超容量;作为自动匹配条件之一。
CPUID / DBGMCU IDCODE内核 ID 与完整 IDCODE 寄存器。确认内核类型和 REV_ID,便于反馈问题。
UID96 bit 唯一 ID,拆成 UID0 / UID1 / UID2 三个 32-bit 字显示。区分多块板/多颗芯片;记录到测试报告。
Flash 地址主 Flash 基地址,STM32 通常 0x08000000。确认镜像基地址与链接脚本一致。
目标烧录页检测结果:STM32H7 系列、自动匹配 STM32H723VGT6、候选型号组、DEV_ID 0x483、Flash 1 MB、UID0/UID1/UID2
图 5-1 检测结果示例:系列/型号/候选组来自 DEV_ID 与 FSIZE,UID 拆成 UID0/1/2 三个字。页面不显示封装与完整 order code 的自动确认结果。

检测失败时页面会提示“未检测到目标芯片,请检查接线与供电”。常见原因按顺序排查:目标未上电、未共地、SWDIO/SWCLK 接反、nRESET 被拉低、目标处于低功耗/安全启动状态、SWD 时钟过高、DAP 正被另一个会话占用。

5.2 内置 profile 自动匹配

STM32 的 DBGMCU_IDCODE 只有 DEV_ID(器件组)和 REV_ID;SWD 还能读 CPUID、UID、FSIZE 和 Flash 基地址。设备把 DEV_ID + FSIZE 两个条件同时匹配到内置只读 profile,才给出“芯片型号”的代表值;匹配不到时显示“未知”,不会猜测其它容量或器件组。

系列内置代表型号(共 16 个)
STM32F1F103C8T6、F103CBT6、F103RCT6、F103ZET6、F107VCT6
STM32F4F401CCU6、F411CEU6、F407VGT6、F429IGT6、F446RET6
STM32G4G431CBT6、G474RET6
STM32H7H723VGT6、H743VIT6、H743VGT6、H750VBT6

例如 DEV_ID 0x410 + 64 KiB 会匹配 F103C8T6;DEV_ID 0x483 + 1 MiB 会匹配 H723VGT6;DEV_ID 0x450 + 2 MiB 会匹配 H743VIT6。若 DEV_ID 不在表内、FSIZE 读不到,或该组合没有内置项,就显示未知,但仍会显示检测到的系列/DEV_ID/Flash/UID。

i
为什么不能显示完整型号:SWD 读不到封装(如 LQFP48)、温度范围、批次、丝印和完整 order code。同一 DEV_ID + FSIZE 可能对应多个真实型号,内置值只是最常用的代表型号。检测信息用于核对和选烧录驱动,不构成对完整型号的证明。

5.3 烧录支持矩阵

“代码支持”表示该家族的擦除/编程序列已实现并通过 host 测试与固件编译;“已实机”表示有现场硬件回归记录。新增家族即使代码支持,也可能尚未覆盖所有容量/双 bank 形态,第一次使用请先烧小镜像并回读校验。

家族内核DEV_ID(主要)烧录状态实板验证
STM32F4M40x413/0x421/0x423/0x431/0x433/0x441/0x458支持(单 bank,x64/x32 回退)F407(0x413)已实机
STM32H7M70x450/0x483支持(128 KiB 扇区,256-bit flash word;0x450 双 bank,0x483 单 bank)H723(0x483)已实机;0x450 有实现但未实板验证
STM32G4M40x468/0x469/0x479支持(2/4 KiB 页,0x469 支持单/双 bank)代码支持,待实板验证
STM32F0M00x440/0x442/0x444/0x445/0x448支持(1/2 KiB 页,16-bit 编程)代码支持,待实板验证
STM32F1M30x410/0x412/0x414/0x418/0x420/0x428/0x430支持(1/2 KiB 页,16-bit 编程,0x430 XL 双 bank)代码支持,待实板验证
STM32F3M40x422/0x432/0x438/0x439/0x446支持(2 KiB 页,16-bit 编程)代码支持,待实板验证
STM32F2M30x411支持(16/64/128 KiB 扇区)代码支持,待实板验证
STM32F7M70x449/0x452支持(单 bank 1 MiB/512 KiB)代码支持,待实板验证
STM32L4M40x415/0x435/0x461/0x462/0x464/0x470/0x471支持(2/4/8 KiB 页、双 bank 选项)代码支持,待实板验证
STM32G0M0+0x456/0x460/0x466/0x467支持(2 KiB 页;G0B/G0C 双 bank 映射)代码支持,待实板验证
STM32WBM40x495支持(4 KiB 页)代码支持,待实板验证
STM32WLM40x497支持(2 KiB 页)代码支持,待实板验证

明确不支持烧录(只识别/只显示边界)

边界涉及器件/DEV_ID原因
F4 2 MiB 双 bank0x419(F42x/F43x)、0x434(F469/F479)扇区号 bank 相对编号,需要 bank-gap 扇区表与 bank 感知擦除,未建模。
F413/F423 1.5 MiB0x463非标准 15 保护位/1.5 MiB 扇区映射,未实现。
F7 2 MiB 双 bank0x451双 bank 与 NDBANK 变体未建模。
H7A/H7B0x480Flash 控制器地址与现有 H7 驱动不同。
L0 / L1L0:0x417/0x425/0x447/0x457;L1:0x416/0x427/0x429/0x436/0x437PECR/PEKEYR 控制器与 L4 风格差异大。
L5 / U5 / C0L5 0x472;U5/U0/C5/H5 等;C0 0x443/0x453/0x44C/0x493/0x44DTrustZone/secure 寄存器组、quad-word 编程或 C0 几何未实现。
WB0x / WL3x0x01E/0x028/0x032/0x027无 FSIZE 寄存器,新系列 Flash 布局无参考,仅识别。
STM32MP15 / STM32W108 / STM32XL 非 STM32—不在目标 Flash 引擎范围,仅由 OpenOCD 参考集覆盖。

当 supported=false 时,页面会禁用“开始烧录”并提示“该芯片系列可识别,但暂不支持烧录”。此类目标仍可用于变量曲线和识别,不要尝试用其它家族的镜像强行烧录。

5.4 选择固件与镜像转换

支持 .bin、.elf/.out、.hex/.ihex、.srec/.s19/.mot。浏览器会先解析并转换成“从目标 Flash 基地址开始的裸镜像”,再计算 SHA-256;设备端只接收裸镜像。

  • BIN:原样使用,默认从 0x08000000 开始;必须与目标链接地址一致。
  • ELF/OUT:只取 PT_LOAD 中落在目标 Flash 范围的段;RAM-only 段和调试信息会被忽略。页面会显示忽略的段数。
  • Intel HEX / S-Record:解析地址记录、校验和,合并数据块;地址必须在目标 Flash 范围内。
  • 空隙:镜像内未覆盖的字节按规则填充——一般填 0xFF(擦除态),HEX/SREC 的小对齐间隙可能填 0x00;页面会统计填充字节。
  • 大小:镜像不得超过目标 flash_size;页面显示 Flash 占用百分比。超过时禁用烧录。
  • SHA-256:浏览器计算源文件哈希,设备写入后再计算实际镜像哈希;两者用于核对。
!
不要上传 merge_bin 全量包、bootloader+分区表+app 的合并镜像或 zip。Web 目标烧录只接受应用镜像;全量包会把 bootloader/分区表当应用数据写到 0x08000000,导致目标无法启动。

5.5 烧录流程

  1. 检测:确认目标已识别且支持烧录;记下 DEV_ID、Flash 大小和 UID0/1/2。
  2. 选文件:点“选择固件文件”,等待解析/转换完成;核对格式、镜像大小、Flash 占用、段数、SHA-256。
  3. 确认:检查“开始烧录”按钮可用(目标 detected、supported 不为 false、文件转换成功、哈希已算完)。
  4. 开始:点击后确认弹窗,设备先获取 DAP、探测、擦除、分块写入,再回读校验。页面显示浏览器上传进度与设备状态(如 ERASE/PROGRAM/VERIFY)。
  5. 等待:不要刷新页面、不要断开 USB/Wi-Fi、不要启动 OpenOCD。烧录期间其它 DAP 请求会失败。
  6. 结果:成功后页面显示写入字节数、系列/型号、IDCODE、UID 与 SHA-256;需要看新固件运行时点“复位目标”。

如果烧录失败,页面会显示错误标题和技术细节。先记录错误文本与当前目标/镜像信息,再按 5.7 节处理;不要连续盲目重试。

5.6 校验(Verify)与结果判读

Web 目标烧录没有单独的“Verify”按钮,但流程末尾包含设备端回读校验:写入完成后读取目标 Flash 并与镜像计算 SHA-256 比对,结果中的 SHA-256 应与浏览器显示的源文件哈希一致。若不一致,页面会报失败,目标可能无法启动。

另外两条验证路径:

  • OpenOCD:使用 verify_image app.bin 0x08000000 或 flash write_image erase app.bin 0x08000000; verify_image app.bin 0x08000000。
  • 变量曲线页:“目标检测 / ELF 匹配”卡片提供“验证 ELF/目标固件”按钮。它用 no-halt 单变量采样读取 ELF 首个 PT_LOAD Flash 段前 4 字节并与 ELF 文件比较;采样中需先停止。这个校验是快速一致性检查,不是整镜像校验。

5.7 常见失败与处理

现象/提示可能原因处理
检测失败/未检测到目标未供电、未共地、SWD 接反、nRESET 拉低、DAP 被占用断电检查接线;断开其它调试器;降低 SWD 时钟;重新上电。
“该芯片系列可识别,但暂不支持烧录”命中不支持矩阵(双 bank、TrustZone、L0/L1 等)改用 OpenOCD/官方工具或更换支持的目标;不要强行烧录。
文件格式不支持/转换失败扩展名不对、HEX/SREC 校验失败、ELF 无 Flash 段换 BIN;检查链接地址与文件完整性;用 readelf -l 确认 PT_LOAD。
镜像超过 Flash 容量文件过大、基地址错误、把全量包当 app使用 app-only 镜像;核对 flash_size 与链接脚本。
烧录中失败/连接断开Wi-Fi 抖动、目标掉电、DAP 被抢占、目标写保护恢复连接后重新检测;改用有线 NCM;检查目标供电与读保护。
SHA-256 不一致Flash 写入失败、目标读保护、镜像地址错误重新烧录;用 OpenOCD 读回比对;检查选项字节/RDP。
烧录后不运行向量表/启动地址不对、目标需硬件复位、镜像不是应用点“复位目标”;检查链接脚本;用 OpenOCD 读 PC/向量表。
无法中止页面未提供中止;设备正在擦写等待完成或断电重启设备,然后重新检测;不会损坏 DAP 固件。
i
多块相同型号的板子只能靠 UID0/1/2 区分。烧录前把 UID 记入测试记录;换板后重新检测,不要沿用上一块板的结果。

6 UART、WiFi、OTA、设备管理

i

目标:掌握串口收发与透传、Wi-Fi 连接和多网络记忆、浏览器 OTA 与版本/恢复操作。

前提:Web 已连接;目标 UART 已按第 2 章接线;升级 OTA 时需要与设备同网的浏览器和正确的 app 镜像。

操作:在 UART 页收发数据;在 Wi-Fi 页扫描/保存网络;在更新页上传镜像;在关于页核对版本。

结果:目标串口可见/可控,设备能自动重连已知网络,固件可升级并在失败时回滚。

常见错误:UART 波特率不匹配;切换 Wi-Fi 后页面断线;上传全量包导致 OTA 校验失败;把 4 MB 目标当 OTA 目标。

6.1 Web UART 终端

UART 页用于看目标日志、发 AT 指令、做二进制协议调试;它不是默认首页,默认首页是目标烧录页。页面分为设置窗(左)、数据窗(中)、快捷窗(右),可通过“布局”按钮切换横/竖排、自适应和面板显隐。

UART 页面:左侧显示选项/断帧策略/其他设置,中间数据窗,右侧快捷命令,顶部状态与布局按钮
图 6-1 UART 页面。左栏为接口、显示选项、断帧策略和过滤;中栏为收发数据窗;右栏为快捷命令。窄屏会自动改为单列并保留“布局”入口。

收发配置

  • 接口/端口:当前固件提供一个 UART 实例(UART1,GPIO10/9)。
  • 波特率、数据位、校验、停止位、流控:默认 115200-8N1;必须与目标一致。修改后需要重新启停或按页面提示应用。
  • 开始/停止数据收发:数据窗的启停按钮控制接收显示;停止后后台仍可能接收,恢复时注意缓存。
  • 发送格式:文本或 HEX;文本支持 \n、\xNN 转义;HEX 模式只接受合法十六进制,错误会提示。
  • 循环发送:设置周期(ms)后重复发送;实际频率受界面刷新率影响,需要精确节拍时关闭自动刷新。
  • 缓存帧数/清屏/自动刷新:缓存用于回看;“清空”只清显示,不改变设备端数据。

显示与断帧

  • 显示模式:文本、HEX、HEXDUMP;时间戳、自动换行、接收/发送高亮、ANSI 转义解码、过滤。
  • 断帧策略按优先级组合:超时、匹配规则、固定字节。典型用法:以 \n 匹配断后;有特殊帧头时用“匹配断前”;大块二进制用固定 1024 字节断帧。
  • 未满足断帧规则的数据先进入临时显示区,超过 8192 字节会自动断帧。

快捷命令

右栏可新增/编辑/删除命令,支持拖拽排序、导入/导出、重置和“保存到本地”。常用 AT 指令可以做成按钮一键发送;带参数的宏命令可在发送前编辑。快捷命令属于浏览器本地配置,换浏览器/清缓存会丢失。

6.2 UART TCP 透传桥(1346)

设备同时提供裸 TCP 透传桥:数据从 TCP 写入目标 UART TX,目标 UART RX 数据从 TCP 返回。默认端口 1346,默认波特率 115200,无鉴权。

nc DEVICE_IP 1346

新建连接后的首个文本包如果是 2–7 位数字(例如 115200),桥会切换到该波特率;否则按普通数据透传。Web UART 与 TCP 桥共用同一 UART 服务,可同时连接;多客户端按广播语义处理,调试时注意不要互相干扰。控制台 UART0(GPIO43/44)不经过该桥。

6.3 Wi-Fi 配置

Wi-Fi 配置页:连接 Wi-Fi、已保存网络、Wi-Fi 模式、终端(STA)状态
图 6-2 Wi-Fi 配置页。上半部分是扫描/连接局域网与已保存网络,中部是 AP/STA 模式,下半部分是 STA 信号、IP、MAC 等信息。

连接与扫描

在“连接 Wi-Fi”输入 SSID 或点“扫描”选择网络,输入密码后点“连接”。连接成功后设备会记录该网络(自动记忆默认开启),并按规则自动重连。若当前页面正通过设备 AP 访问,连接另一个网络会导致页面断开,这是预期行为;连接前先确认你知道设备在新网络中的 IP。

已保存网络

  • 最多保存 8 个网络;列表显示 SSID、最近成功时间、优先级、当前连接标记。
  • 支持自动记忆开关、添加、连接、删除;超过上限会按优先级淘汰旧网络。
  • 上电/掉线后的轮换顺序:上次成功的网络 → 其它已保存网络(优先级升序、最近成功降序)→ 扫描到的已保存网络 → 退避重试(5/10/20/30 秒封顶)。
  • 不会自动连接未保存的开放网络。

模式与 AP

  • 智能热点 + 常开终端(AP+STA):STA 连上后 30 秒关闭 AP;STA 断开 10 秒后重开 AP。默认模式。
  • 仅开启热点(AP):不连外部网络,适合近场配置。
  • 常开热点 + 常开终端(AP+STA):AP 与 STA 同时保持,方便但增加功耗与干扰。
  • AP 默认 SSID Birdiebot-DAP-XXXX,默认口令 12345678,默认地址 192.168.1.1/24,最多 4 个客户端。首次使用务必改口令,可恢复默认 SSID。
  • STA 支持 DHCP 或静态 IP/DNS;改静态 IP 前确认不冲突,否则会失去设备访问。
!
Web/AP/STA 配置无鉴权,同一网段任何主机都能读取/修改 AP 口令与 Wi-Fi 凭据。不要把设备接入不可信 Wi-Fi;不要把管理页面暴露到公网。

6.4 mDNS / SSDP 发现

设备有两种局域网发现方式,只用于“找到设备”,不提供鉴权,也不替代 IP 直连:

方式地址/名称适用场景
mDNSbirdiebot-dap-XXXX.local,服务 _http._tcp同一二层局域网;macOS/Linux 通常开箱可用
SSDP / UPnP239.255.255.250:1900,描述地址 GET /SSDP.xmlWindows/智能家居工具、需要程序化发现

mDNS

浏览器直接打开 http://birdiebot-dap-XXXX.local/。设备实例名为 Birdiebot WiFi DAP,服务类型 _http._tcp,端口 80;部分设备的实例名还会带 MAC 后缀。命令行验证:

# Linux(avahi)
avahi-browse -rt _http._tcp
getent hosts birdiebot-dap-XXXX.local

# macOS(Bonjour)
dns-sd -B _http._tcp
dns-sd -L "Birdiebot WiFi DAP" _http._tcp local

# Windows(安装 Bonjour / 支持 mDNS 时)
ping birdiebot-dap-XXXX.local
Resolve-DnsName birdiebot-dap-XXXX.local

Windows 默认没有完整的 mDNS 解析器时,主机名可能失败;先确保设备和电脑在同一网段,必要时装 Bonjour 或直接用 IP。AP 模式下设备 IP 是 192.168.1.1;STA 模式下在 Wi-Fi 页查看路由器分配的 IP。

SSDP

向 239.255.255.250:1900 发送 M-SEARCH,设备返回 200 响应,其中 LOCATION 指向 http://<设备IP>/SSDP.xml:

python3 - <<'PY'
import socket
msg = ('M-SEARCH * HTTP/1.1\r\n'
       'HOST: 239.255.255.250:1900\r\n'
       'MAN: "ssdp:discover"\r\n'
       'MX: 1\r\n'
       'ST: upnp:rootdevice\r\n\r\n')
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.settimeout(3)
s.sendto(msg.encode(), ('239.255.255.250', 1900))
try:
    data, addr = s.recvfrom(4096)
    print(addr)
    print(data.decode(errors='replace'))
except socket.timeout:
    print('no SSDP response: same L2 network / firewall 1900 UDP?')
PY

拿到 IP 后可直接用浏览器或 curl http://<设备IP>/SSDP.xml 查看友好名、型号、序列号和厂商信息。SSDP 与 mDNS 都依赖同一二层局域网;访客网络/VLAN 隔离、主机防火墙 UDP 1900/5353 被拦截时都会失败。失败时直接用 IP,不要反复重启设备。

6.5 浏览器本地 OTA(8 MB 双槽发布构建,默认启用)

固件支持浏览器选择本地 app 镜像流式上传,写入空闲 OTA 槽、校验、切换启动分区并重启;默认启用双槽回滚。4 MB 目标(C3/ESP32 构建)没有 OTA 分区,不能使用该功能。

!
页面可见性:默认构建已启用“更新”页,/#/update 可直接访问。只有显式设置 VITE_ENABLE_OTA=false 的精简构建,或固件没有 OTA 端点的旧版本,才会出现 404;这不是默认行为。仍可用仓库脚本或 HTTP 端点上传(见下)。
更新页面:当前默认 Web 构建启用 OTA,可拖放上传并在页面查看槽位与进度
图 6-3 默认构建已启用 /#/update:显示当前槽/版本、拖放上传区、浏览器与设备双进度、状态标签和重启按钮;只有显式裁剪 OTA 的构建会显示 404。

页面操作

  1. 进入“更新”,核对当前运行槽、固件版本、OTA 槽容量与可用空间。
  2. 选择或拖入 .bin 应用镜像;页面校验镜像头、版本、大小,并计算 SHA-256。
  3. 点击“上传并更新”;浏览器上传与设备接收/校验是两条进度,设备状态依次为 IDLE → RECEIVING → VERIFYING → READY → APPLYING。
  4. 成功后设备约 1 秒重启;等待页面重新连接。新镜像首启处于待确认状态,应用稳定运行约 10 秒后标记有效。

如果新镜像在确认前崩溃/复位,bootloader 会自动回滚到旧槽。上传过程中断/失败不会破坏当前运行镜像,但目标槽内容不完整;重新上传会重新擦除该槽。

HTTP 端点与脚本

上传端点为 POST /api/ota/upload,要求 Content-Type: application/octet-stream、Content-Length,可选 X-SHA256;只接受 ESP-IDF 应用镜像,大小 4 KB–3 MB。没有可用页面时可用仓库脚本:

python3 scripts/ota_upload.py --host DEVICE_IP \
  --file build/<target>/birdiebot_wifi_dap.bin --info

也可用等价 HTTP 客户端直接上传,但必须带 Content-Length,且不要用 chunked。设备不会接受 merge/全量包、zip 或非 app 镜像。

失败与回滚

现象原因处理
页面 404显式 VITE_ENABLE_OTA=false 的精简构建,或旧固件无 OTA 端点用默认构建/脚本上传;确认固件支持 OTA。
409 / ota session busy已有上传会话等待超时、发送 ABORT,或重启设备后重试。
413 / image too large超过 3 MB 槽容量上传 app-only 镜像;检查是否误传全量包。
415 / 411Content-Type 或 Content-Length 不符合要求使用正确端点和头;不要 chunked。
422 / image verification failed镜像格式错误或 SHA-256 不匹配重新下载/构建镜像;核对哈希。
升级后版本回退新镜像 10 秒内崩溃,触发回滚看 UART0 日志/panic/coredump,修复后重传。
上传超时/断连网络中断或客户端断开恢复网络后重新上传整个文件;不支持断点续传。
!
OTA 无签名、无防降级、无镜像加密;同网段攻击者可上传任意有效镜像。只在可信网络操作,上传前核对来源和 SHA-256。

6.6 版本、状态与恢复

关于页面:协议版本、网页版本、构建标签、构建时间,以及关于调试器/网页版上位机的折叠信息
图 6-4 “关于”页:核对协议匹配、Web UI 版本、构建标签/时间;展开后可看固件版本、发布/生产日期、硬件版本、SN 和第三方鸣谢。
  • 协议匹配:绿色“协议匹配”表示网页与固件协议 v1 一致;不匹配时刷新网页或升级固件。协议不匹配会禁用 OTA 等操作。
  • 版本信息:“复制版本信息”会复制 Web 版本、协议版本、Git 标签、构建时间、固件版本/日期、SN、硬件版本/生产日期。反馈问题时附上这段文本。
  • 重启:默认更新页提供重启按钮;若使用裁剪构建没有页面入口,断电重新上电即可。重启不会丢失已保存的 Wi-Fi 配置。
  • Wi-Fi 失联恢复:STA 断开 10 秒后 AP 重开;用默认 AP 或已知网络重新连接。若 AP 被改为未知名称,需要对设备重新烧录/擦除 NVS。
  • 有线救砖:BOOT(GPIO0 拉低)+RESET 进入 ROM 下载模式,用 esptool 烧录;或通过 UART0 下载;默认固件保留 Wi-Fi OTA,可回退。
  • 日志与 coredump:UART0 115200 是首选日志通道;设备有 coredump 分区(debug 构建使用),崩溃后可用对应 IDF 版本分析。coredump 可能含 Wi-Fi 口令等敏感信息,按敏感数据处理。

7 Web-DAP 在线调试

i

目标:用 OpenOCD、Keil、pyOCD 等标准 CMSIS-DAP 工具通过无线/有线调试目标,并理解 DAP 占用与断线处理。

前提:目标已接 SWD、目标上电;主机与设备网络互通;已安装 usbip 客户端/OpenOCD/Keil 等工具。

操作:把 3240 端口的 DAP 会话 attach 到主机,然后按工具链连接;结束时 detach。

结果:工具能识别 CMSIS-DAP、读 IDCODE、halt/断点/烧录/复位;速度符合预期。

常见错误:没 attach 就开 OpenOCD;busid 不是 1-1;固件/工具版本不兼容;Web 曲线或目标烧录占着 DAP。

7.1 传输架构与端口

设备在 TCP 3240 上提供 DAP 代理。连接建立后的首包决定协议:USBIP、elaphureLink 或 WebSocket-DAP;之后统一转成 CMSIS-DAP 命令。无线和有线共享同一套 DAP 代码,因此端口、VID/PID、工具步骤完全相同,只是网络路径不同。

  • USBIP:主机把远端 USB 设备“搬”到本地,之后 OpenOCD/Keil/pyOCD 看到标准 CMSIS-DAP v2 探针。
  • elaphureLink:Keil 插件或 OpenOCD-elaphureLink 直连 3240,不需要 USBIP 驱动。
  • WebSocket-DAP:浏览器端工具使用,二进制帧就是 CMSIS-DAP 命令包;曲线页的 Web-DAP 模式也走它。

设备对外呈现的探针 VID:PID 为 C251:F00A,USBIP busid 固定 1-1。同一时刻只允许一个 DAP 会话,详见 7.5 节。

7.2 USBIP 接入

Windows

  1. 安装 usbip-win 0.3.x(kmdf/ude 驱动)。
  2. 确认主机与设备同网:无线 AP 模式设备 IP 为 192.168.1.1;有线 NCM 为 192.168.7.1;STA 模式用路由器分配 IP。
  3. 执行 usbip.exe attach_ude -r DEVICE_IP -b 1-1。旧版 HID 用法为 usbip.exe -D -a DEVICE_IP 1-1,但本固件默认 WinUSB,推荐 attach_ude。
  4. 设备管理器出现 CMSIS-DAP 后,在 Keil/OpenOCD 中按 CMSIS-DAP 选型使用。

Linux

sudo modprobe vhci-hcd
sudo usbip attach -r DEVICE_IP -b 1-1
usbip port
# 调试结束
sudo usbip detach -p 00

Linux 内核自带 usbip 客户端,但本项目的主验证平台是 Windows usbip-win 与 Linux 开发验证;遇到枚举问题先确认内核模块、防火墙和 3240 可达。

7.3 OpenOCD 配置

推荐使用 OpenOCD master(或含 DAP_TransferBlock 支持的新版 0.13 开发快照),读大块内存比 0.12 快约 2.4 倍。0.11 对 CMSIS-DAP 2.1 的两字节 capabilities 响应不兼容,会报 SWD not supported,需要补丁;不建议日常使用。

sudo usbip attach -r DEVICE_IP -b 1-1
openocd -f interface/cmsis-dap.cfg \
  -c "cmsis_dap_vid_pid 0xc251 0xf00a" \
  -c "transport select swd" \
  -f target/stm32h7x.cfg \
  -c "adapter speed 2000" \
  -c "reset_config none" \
  -c "cortex_m reset_config sysresetreq" \
  -c "init; reset halt"

要点:adapter speed 必须放在目标配置文件之后,否则会被目标脚本的默认值覆盖;STM32H7 可尝试 1900–4000 kHz,STM32F1/F4 从 1000–2000 kHz 起。目标脚本按芯片选择(target/stm32f1x.cfg、stm32f4x.cfg 等)。需要烧录时:

-c "flash write_image erase app.bin 0x08000000; verify_image app.bin 0x08000000; reset run; shutdown"

若 OpenOCD 打不开 USBIP 设备,可改用 OpenOCD-elaphureLink 直连 3240,或换 Linux 测试机;这不是 DAP 固件问题。

7.4 Ozone:原生限制与实验路径

Ozone 原生只支持 J-Link 探针,不能直接把 CMSIS-DAP 当 J-Link 使用。仓库里的“虚拟 J-Link”方案通过代理 DLL 把 Ozone 的 J-Link API 桥接到 OpenOCD telnet,已打通连接、PC/寄存器读取和 Data Sampling 能力门禁;但 Ozone 不主动读取 HSS 数据,Timeline/HSS 曲线仍未打通。因此:

  • 生产/关键调试:使用真实 J-Link(EDU Mini 即可)或 OpenOCD + GDB;不要依赖虚拟 J-Link。
  • 实验:需要 Windows、官方 J-Link DLL、代理 DLL 和已 attach 的 OpenOCD;具体构建/替换步骤见 docs/ozone-virtual-jlink.md。仅把这个路径当作验证性功能。
  • 替代:需要看变量时用本设备的变量曲线(第 8、9 章),需要断点/单步时用 OpenOCD + GDB 或 Keil。

7.5 DAP 占用与互斥

USBIP、OpenOCD、Keil、Ozone、Web 变量曲线、Web 目标烧录都使用同一个 DAP。任意时刻只能有一个占用者;第二个会话会失败、排队或被“踢掉”。

当前占用想做的操作正确做法
OpenOCD/USBIP 连着Web 目标烧录先 detach/停止 OpenOCD,再烧录;烧录期间不要重新 attach。
OpenOCD/USBIP 连着Web 变量曲线(Web-DAP)曲线页会请求接管并关闭当前会话;之后要重新 attach 才能继续 OpenOCD。
Web 变量曲线采样中OpenOCD/目标烧录先“停止采样”,再 attach/烧录。
目标烧录中任何 DAP 操作等待完成;不要刷新页面或启动调试器。
设备本地曲线采样中Web-DAP/OpenOCD设备本地模式不建立 WS-DAP,但仍占用 SWD;先停止采样。

曲线页通过 POST /api/dap/kick 请求关闭当前 DAP 代理会话;若无会话则 no-op。这个操作对正在烧录的 OpenOCD 是破坏性的,执行前确认没有关键写入。停止曲线采样后,主机需要重新 usbip attach 才能继续 USBIP 调试。

7.6 断线、重连与会话清理

  • USBIP 断线:先 detach 再 attach;同一主机连续 attach 时 busid 仍为 1-1。旧固件偶发第二会话 CMD_INFO failed,升级到包含 DAP 会话 drain 修复的版本;临时可重新插拔/重启设备。
  • Wi-Fi 断线:OpenOCD 会报 USB 超时/管道错误;恢复网络后重新 attach。烧录中断可能留下不完整镜像,重新烧录整个文件。
  • 有线 NCM 断线:检查主机网卡 IP 是否被 NetworkManager 清空;设备 OTA 重启后若 cdc_ncm 绑定失败,物理拔插 USB 或重新绑定 xHCI。
  • DAP 任务忙:Web 曲线/烧录正在使用 DAP 时,OpenOCD 会看到超时;停止占用者后重试。
  • 目标无响应:检查目标是否处于低功耗/安全状态,降低 SWD 时钟,使用 nRESET 或 SYSRESETREQ 复位。

7.7 速度预期与优化

路径/操作实测参考说明
Wi-Fi USBIP 烧录 345 KB + verify约 8.3–8.9 sSTM32H723,Wi-Fi 环境良好;受干扰会变慢。
Wi-Fi USBIP 读 1 MiB约 40–44 KiB/s旧基线;主机 OpenOCD 版本影响很大。
USB-NCM 烧录 345 KB约 5.8 s(58 KiB/s)verify 约 0.42 s;C1 验收数据。
USB-NCM 读 1 MiB约 6.6 s(154 KiB/s)第二次会话 detach/attach 后复测。
OpenOCD master vs 0.12 读 1 MiB10.25 s vs 25.23 sSTM32F407;master 使用 DAP_TransferBlock 并流水线。
OpenOCD master vs 0.12 烧录6.78 s vs 8.33 s写路径收益小于读;目标 Flash 与 SWD 时钟占主导。

优化顺序:优先有线 NCM;使用 OpenOCD master/新版;把 adapter speed 放在目标配置之后并逐档测试;减少 Wi-Fi 干扰与距离;避免同时跑曲线/串口大数据流。不要期待提高 SWD 时钟能无限加速——Wi-Fi 往返和 USBIP 调度经常才是瓶颈。

8 变量曲线基础

i

目标:上传 ELF、选对变量、以默认 20 ms/50 Hz 开始第一条曲线,并能读懂状态数字。

前提:DAP 已连接目标、目标已上电;有带 DWARF 调试信息的 .elf/.out;没有其它调试器占用 DAP。

操作:选择采样来源 → 上传 ELF → 搜索/勾选变量或填手动地址 → 开始采样 → 观察/停止。

结果:曲线持续刷新,实际采样率、Halt、组、帧等状态稳定,导出 CSV/PNG 可用。

常见错误:用 -O2 发布 ELF 找不到局部变量;选到寄存器变量;本地模式仍开着 OpenOCD;误以为 256 路是日常推荐值。

8.1 先分清两种采样来源

对比项设备本地(默认)Web-DAP
闭环位置ESP32 本地 SWD 完成 halt/读寄存器/读内存/resume,Web 只下发配置并批量收帧。浏览器通过 WebSocket-DAP 逐拍发起 CMSIS-DAP 请求,再回传数据。
是否建立 WS-DAP 会话不建立;但仍独占 SWD/DAP。建立,会“踢掉”正在使用的 USBIP/OpenOCD 会话。
默认速率20 ms(50 Hz);可选 5/10/20/50 ms。手动 10/20/50/100 Hz 或 Auto;调试模式 20/50/100/200 ms。
最大曲线数256,按每组最多 64 路、每组 sum(size) ≤ 256 B 自动分组。24 路,适合少量变量的交互调试。
适用多变量、连续观察、断点/看门狗/条件触发、固定地址高速采样。少量变量、需要栈帧/寄存器变量、临时接管 DAP。

设备本地模式下,固定地址/全局变量/固定指针可以“Halt OFF”,每拍只读内存,不暂停目标;需要读栈帧、寄存器、指针链时则每拍 halt/resume,目标实时性会受影响。默认 20 ms 兼顾可读性与干扰;10 ms 适合需要 100 Hz 的场合,但 halt 占用更高;5 ms 仅在固定地址/指针等无需 halt 的场景有意义。日常建议几十路(例如 20–60 路),256 是容量上限,不是推荐工作点。每行变量还可单独设置目标刷新率(÷1/÷2/÷4/÷8),通过分组权重实现;实际刷新率是相对份额,页面会标记“≈”,不能保证精确 Hz。

8.2 ELF、DWARF 与变量树

上传 ELF 后,页面解析 DWARF 2–5,列出变量名、类型、地址、大小和来源 file:line,结构体/联合/数组/指针可展开。若 ELF 没有 DWARF,会回退到符号表:只能看到符号名和固定地址,类型显示未知,名称会做反混淆。

  • 实时可采样:变量有固定地址(全局/静态),或指针链全部为固定地址;设备本地高速路径。
  • 调试可采样:局部变量/参数位于栈帧或寄存器,需要 halt 后读取;Web-DAP 调试模式或设备本地 halt 路径。
  • 不可采样:被优化掉、无位置信息、地址越界、寄存器值变量(设备本地模式明确不支持 DW_OP_reg 值)。
  • PC 范围/多段位置:变量可能只在某个函数或 PC 段有效;越界时设备填 0 并计入 Out of scope,不计入 Invalid。
i
要采集任意代码变量,用 -O0/-Og -g3 构建调试固件,关闭 LTO/死代码消除;-O2 发布固件通常只有全局/静态变量有固定地址。ELF 必须与目标固件来自同一次构建,否则地址/行号会错。

8.3 选择变量与手动地址

  • 变量树支持搜索变量名/地址、按源文件或命名空间分组、展开/折叠、仅显示可采样、仅当前有效/当前函数;首屏只渲染部分行,点“显示更多”。
  • 勾选变量或 Shift 连选当前可见行;也可“全选可见/全选可采样/清空选择/选当前文件/选当前组”。
  • 手动地址:十六进制、4 字节对齐、非 0;多个地址用逗号或空格分隔,支持 0x20000000 这类写法。
  • 设备本地上限 256 路;达到上限会提示,不能继续添加。超过 64 路时页面自动按每组 64 路分组,并额外受每组 sum(size) ≤ 256 B 约束:4 字节变量最多 4 组覆盖 256 路;8 字节变量会拆成 8 组(协议最多 8 组)。
  • 选中的曲线可上移/下移、单独隐藏、改显示格式、删除;选择不会自动记住(刷新页面后需重选)。每行还可设置目标刷新率(÷1/÷2/÷4/÷8):单桶 ÷N 不能降低绝对总帧率,混合桶会被归一化;实际刷新率是相对份额,UI 会显示“≈”和相应警告。

8.4 开始与停止

  1. 打开“变量曲线”,确认“采样来源”为“设备本地(ESP32 闭环)”。
  2. 点“上传 ELF”选择文件,等待解析;记录 DWARF 变量数与固定地址数。
  3. 搜索并勾选变量;需要固定地址时可直接填手动地址。曲线数显示为 n/256。
  4. 如需限定 SWD 速率,先到“目标烧录”页的检测卡片选择手动 SWD 时钟;该设置同时作用于目标检测、Web 烧录和本地变量采样。
  5. 选择本地采样间隔(默认 20 ms)与触发方式(基础阶段保持“周期采样”)。
  6. 点“开始采样”。若提示 DAP 被占用,先停止 OpenOCD/USBIP 或其它采样。
  7. 观察曲线与状态;点“停止采样”。停止/刷新/离开页面都会尝试恢复目标运行,但推荐显式停止。
变量曲线页初始状态:设备本地来源、20 ms 默认间隔、0/256 曲线、暂无数据、目标检测为 STM32H7
图 8-1 初始状态:采样来源默认“设备本地”,本地间隔 20 ms,曲线 0/256;页面同时显示目标检测/ELF 匹配行和空图表。未上传 ELF 时变量区为空。
变量曲线页采样中:50 Hz、20/256 曲线、Halt OFF、WS 通道、154 个采样点、变量树和曲线
图 8-2 采样中:实际 50.0 Hz、20/256 路、Halt OFF、通道 ws(WebSocket 推送优先,失败回退 HTTP)、组 1/1;下方变量树显示固定地址与“指针成员”徽标。截图数据仅作界面示意。

8.5 状态字段怎么读

字段含义异常时看什么
实际采样率页面实际收到的帧率(Hz),不是设定值。低于设定:网络/固件 ring/组轮转/目标响应慢。
采样点当前环形缓冲内样本数。不增长:未真正启动、DAP 忙、目标无响应。
曲线 n/256已选路数/本模式上限。接近上限时考虑减少变量或分组。
HaltON=每拍暂停目标;OFF=固定地址/指针免暂停。需要低干扰选 OFF;栈帧变量通常只能 ON。
无效 (Invalid)表达式求值失败、地址不可读等,该帧对应字节填 0。地址错误/变量不在范围/指针为空。
超出函数范围 (Out of scope)PC 不在变量所属函数范围,本拍填 0,不计 Invalid。栈帧变量只在函数运行时有效。
覆盖 (Overwritten)设备 ring 被新帧覆盖,Web 取帧落后。降低路数/提高轮询/换有线。
组 / 当前组 / 组刷新率自动分组的数量与当前轮转组;单个变量的刷新率约为总帧率/组数。多组时每条曲线不会每帧都更新,属设计行为。
通道 / WS 帧 / WS 丢弃 / WS 间隔ws=WebSocket 推送优先;http=回退轮询。WS 不可用时自动回退,不影响采样但延迟可能增大。

8.6 常见错误

  • “没有可采样变量”:ELF 无 DWARF 或所有变量都被优化;换 -O0/-Og -g3 固件与匹配 ELF。
  • “寄存器值变量暂不支持设备本地采样”:该变量直接存放在寄存器;改用 Web-DAP 调试模式,或选择固定地址/栈帧变量。
  • 启动失败/busy:OpenOCD、USBIP、目标烧录或另一个标签页占用 DAP;停止后重试。
  • 目标变量值不变:目标可能被 halt、断点停住或固件 assert;看 Halt/复位/恢复目标。
  • 选到 256 后无法再加:这是容量上限;减少曲线或分多次采样。
  • 画面卡顿:路数过多时默认 B 模式只画前 64 条;不要盲目切 A 模式,详见 9.7 节。

9 变量曲线进阶

i

目标:用精确行断点、PC 联动、断点/看门狗/条件触发、图表分析、录制回放和对象浏览解决真实调试问题。

前提:已掌握第 8 章;ELF 与目标固件匹配;目标 Flash 地址与源码行表可解析。

操作:按需组合触发方式与分析工具;先小规模验证,再提高路数/采样率。

结果:能抓到“只在某条件/某函数/某地址写时”的数据,并沉淀为可回放/可分享的录制。

常见错误:断点放在函数入口读未初始化局部变量;条件永不命中;256 路全绘制导致卡顿;录制忘记先点开始。

9.1 精确行断点与源码联动

ELF 卡片切换到“源码”视图,可打开本地 C/C++ 项目文件夹(只读、不上传)。页面解析 DWARF 的 .debug_line 行表,把变量/行号映射到源码;源码行号旁的 gutter 可点击,直接把该行设置为设备本地断点地址。地址来自行表中最合适的可执行地址(优先 is_stmt/Flash),不再用函数入口或变量地址近似。

  1. 上传/解析 ELF(可与“源码”视图共用同一解析流程;项目里发现 ELF 也可直接使用)。
  2. 在“源码”视图打开项目文件夹,或选择 ELF;文件树/过滤/变量映射状态会显示。
  3. 找到目标代码行,点击行号 gutter。页面会切到本地断点模式并填入地址;若该行是宏/声明/已优化/无行表,会提示“该行没有可用地址”。
  4. 必要时在“断点地址”基础上填 Offset,把断点放到初始化之后的指令;最终地址会显示并校验。
  5. 选择变量与最小采样间隔,开始采样;命中信息在状态行显示。
变量曲线源码视图:左侧项目文件树,右侧源码行号与 DWARF 变量映射,顶部显示 ELF 自动发现与变量映射统计
图 9-1 源码视图:打开本地项目文件夹后,DWARF 变量映射到源码;行号 gutter 可设置本地断点,点击变量可直接加入曲线。文件只读读取,内容不会上传。
  • 断点地址必须在目标 Flash 0x08000000–0x08FFFFFF,半字对齐;Thumb bit0 会被忽略。
  • 函数入口处局部变量可能尚未初始化;优先放在初始化语句之后,或使用 Offset。
  • FPB 硬件断点是独占资源,与其它调试器同时使用时先断开。
  • 没有行表时无法精确映射;页面会提示,不会伪造地址。

9.2 PC 联动、当前函数与 stale 标记

本地采样帧可以携带当前 PC。页面显示 PC 与源码位置,并提供“PC 行联动”开关:打开后源码视图自动滚动/高亮当前行;关闭后不抢你的滚动位置。变量树可勾选“仅当前有效”“当前函数”过滤,不在当前 PC/函数范围的变量会标红点/灰显。

  • PC 范围:来自 DWARF subprogram 的 low_pc/high_pc 或 loclist variants;文件作用域全局变量没有 PC 范围,不参与门控。
  • Out of scope:固件按 PC 门控填 0 并单独计数;不是变量坏掉,而是“这个函数当前不在栈上”。
  • 无 PC 会话:纯固定地址的 no-halt 采样不带 PC,不做 stale 判定;需要 PC 时至少包含一个 halt/断点会话。
  • 行表缺失:只能显示 PC,无法联动源码行;这不是变量解析失败。

9.3 触发方式:周期、断点、Watchpoint、条件

触发原理关键配置适用
周期采样每 interval 采样当前组;需要栈帧/寄存器时 halt/resume。本地间隔 5/10/20/50 ms;默认 20 ms。连续观察、固定地址高速、日常曲线。
断点触发ESP32 用 FPB comparator 在指定 PC 配置硬件断点;命中后采样并恢复。Flash 地址、函数下拉 + Offset、最小间隔 5/10/20/50 ms。函数执行瞬间抓局部变量/指针。
WatchpointDWT 数据比较器监视地址访问;命中后采样并恢复。支持 read / write / readwrite;可配置第二个 comparator(watch2)。地址、大小 1/2/4、访问类型;read 与 watch2 受 DWT 资源限制。抓“谁在写/读这个变量或寄存器块”。
条件触发每拍后读取条件地址并按操作符比较;命中后按 once/continuous 处理,可停止采样。地址、大小、操作符、阈值、有符号、once/continuous、stop after。只在满足阈值/状态时保留数据;可与上面三种组合。

断点触发

函数下拉来自 ELF 的 Flash FUNC 符号(最多 2000 个,按地址排序,C++ 名称反混淆);也可手工填地址。最小间隔是两次命中的节流下限,避免高频函数把目标反复停住。状态行显示 Hits / Sampled / 实际帧率;停止时恢复 comparator 与目标运行。

Watchpoint

Watchpoint 使用 DWT comparator,监视地址必须按大小对齐;支持 read / write / readwrite 三种访问类型,命中后读取当前变量并记录触发 seq。可用“前 N 帧/后 N 帧”跳转到触发附近。第二个 comparator(watch2)可同时监视另一个地址,但 DWT comparator 总数有限,资源不足时按固件返回的错误原文处理。目标必须实际运行;如果命中后目标不再运行,先检查是否被其它断点/调试器占用。

函数快照

函数快照在 breakpoint 命中后冻结/标记触发帧,固件可 one-shot 补采 N 帧;旧固件忽略该字段时,前端使用首帧冻结作为 fallback。它用于抓函数执行瞬间的局部变量,不改变原有断点节流语义。

UART trace、backtrace 与边界

调试面板新增 UART trace(按字节流记录/查看)和帧指针 backtrace;两者用于现场排障,不等同于完整调试器。当前 SWO 与 RTOS 任务感知尚未实现;backtrace 仅为帧指针原型,遇到优化/无帧指针代码时可能不完整。详细字段与端点见开发者附录。

条件触发

条件由设备在每拍采样后读取一个地址并比较:支持 == != > >= < <=、1/2/4 字节、无符号/有符号、once(默认命中一次后停止/停止采样)或 continuous,并可勾选“命中后停止”。它只决定“何时停/何时标触发”,不改变已采数据;可与周期/断点/Watchpoint 组合。条件地址不会自动从变量列表推断,需手工填或从变量地址复制。

!
触发资源与调试器互斥:FPB/DWT 被其它调试器占用时启动会失败。断点/看门狗触发期间目标被硬件暂停;高频命中会显著拖慢目标。先从小间隔、少量变量、单次触发验证,再扩大。

9.4 图表与数据分析

坐标轴与视图

  • Y 轴:共享 auto(默认)、归一化 0–100%(每个变量按窗口内自身 min/max)、对数 log10(忽略 ≤0)。指针/地址大值压扁小曲线时用归一化或对数。
  • 时间轴:1 / 2 / 5 / 10 / 20 / 60 秒;滚轮以光标为中心缩放,拖拽平移,双击复位;Follow latest 跟随最新数据。Hover 十字线显示当前时间和各曲线值。
  • 冻结显示:Freeze 暂停重绘但采样继续;Unfreeze 恢复;导出使用冻结时视图。
  • 显示缩放:全局 multiplier/offset 只影响显示/图表,不改变原始数据;保存在浏览器本地。

双光标与统计

点击图表设置光标 A,Shift+点击设置光标 B;overlay 显示两条竖线。下方统计面板按曲线列出 A 值、B 值、Δ、窗口 min/max/avg,以及整段 Δt。Esc 清除光标。统计与 CSV 导出都按当前 X 视图范围/当前 Y 模式。

FFT、平滑与派生曲线

  • FFT:对当前窗口第一条绘制曲线做简单 DFT(N≤256,去均值,取 Top 8 频率/幅值);按需执行,不是实时频谱,也不是窗函数分析。
  • 平滑:每条曲线可选 1/3/5/9 点滑动平均,仅绘制时计算,不改变 ring/CSV/latest 原始值。
  • 派生曲线:A+B / A−B,仅显示与导出,不参与采集;采样中不能创建,本地 start 会过滤派生曲线。至少需要两条曲线。

渲染模式与格式

默认 B 模式最多绘制 drawCap 条(32/64/128,默认 64),其余曲线仍被选中/采样,可在 Selected/图例中切换可见;页面显示“绘制 n/N”。切到 A 模式会绘制全部可见曲线并提示性能风险;可见 >128 时 B 自动降到 32,A 模式可能降帧。格式支持 u8/i8/u16/i16/u32/i32/f32/hex/bool/enum,auto 按 DWARF 类型显示枚举名/64 位/浮点/指针 hex。Canvas 约 30 fps 节流,Worker/OffscreenCanvas 可用时优先在 Worker 渲染,失败自动回退主线程。

9.5 录制、回放与导出

录制不会自动开始:先开始采样,再点“开始录制”;页面把 series 元数据与每帧相对时间/group/原始 payload 写入浏览器 IndexedDB。录制上限 6000 帧,达到后自动停止。停止捕获后可命名保存;Recordings 列表支持加载、删除、刷新。回放支持时间轴拖动、播放/暂停、0.5×/1×/2×/4× 倍速,并复用 Y 轴/时间轴/hover/统计;回放期间不写入录制,退出回放清空。

数据内容用途
CSV(图表工具栏)当前 X 视图范围、各系列原始值、time_s、group 列。Excel/Python 分析。
PNG当前画布所见即所得。报告/分享截图。
录制 JSON完整 series/rows,payload 转 hex,含 trigger/trigger_seq/watchpoint 元数据。离线复现/归档/分享。
录制 CSVtime_s/group/seq/pc + 每 series payload hex。脚本处理。

录制保存在当前浏览器的 IndexedDB 中,清站点数据/换浏览器/隐私模式会丢失;它不保存变量选择,也不会自动上传。录制不含派生曲线。

变量曲线的对象视图:选择 xrobot_debug_handle 根,展开模块字段,显示类型/地址/值,并支持 Watch/加入曲线/预设
图 9-2 对象视图:从全局根(示例 xrobot_debug_handle)按需展开类/字段/数组/指针成员,查看类型、地址、当前值,并批量 Watch/加入曲线。该组件当前部分标签为英文,属已知边界。

9.6 对象 Watch 与对象预设

变量区第三个标签是“对象”(Objects):把全局对象根当成 Ozone 式对象浏览器,按需展开字段,而不是把几千个节点一次性铺平。

  • 根发现:每颗目标默认优先 xrobot_debug_handle,也可在根下拉里选其它固定地址且含子成员的对象/指针/数组。真实 ELF 常有上百个候选根。
  • 浏览:搜索名称/路径/类型/地址;过滤仅可采样/仅固定地址/仅有值;单击选中、Ctrl/Cmd 多选、Shift 区间、双击展开;右侧显示类型、地址、当前值、stale 状态。
  • Watch:变量行的 ☆ 加入独立 Watch 列表(当前值/min/max/变化次数);Watch 与曲线选择独立,未选曲线时也能等待值;对象视图支持 Watch subtree/Watch visible/Watch selected 批量操作。
  • 加入曲线:Add curve/Add selected 批量加入,去重并受 256 上限约束;源码跳转会切到 Source 并定位。
  • 对象预设:按根保存字段路径列表到 localStorage,可命名保存/加载/删除;预设只记录路径,不自动记录变量选择;换 ELF/根后需要重新加载。
  • 解析上限:解析器每个变量最多 64 个子节点、3 层展开、节点预算;数组可能只 materialise 前 64 项,界面显示声明长度(如 64/256);超大子树会显示提示,仍需惰性展开。

9.7 性能与容量建议

场景建议原因
日常观察20–60 路、本地 20 ms、B 模式 drawCap 64单组/少量组;每路刷新率接近总帧率,画面稳定。
几十路到 128 路本地 20 ms、B 模式;关闭不需要的图例/派生B 模式默认只绘制 64 条,未绘制曲线仍采样。
接近 256 路仅在需要时使用;分组后看组刷新率;优先固定地址/指针(Halt OFF)4 组 × 64 路(4B)或 8 组 × 32 路(8B);每组刷新率约为总帧率/组数;全绘制会明显降帧。
栈帧/局部变量断点触发 + 最小间隔 20 ms;避免高频函数每次命中暂停目标;入口处变量可能未初始化。
抓写操作Watchpoint + 条件 + 触发前后 N 帧只在关键访问时采样,减少无效数据。
带宽/稳定性优先有线 NCM;WS 推送;减少路数/提高间隔Wi-Fi 抖动会限制取帧与刷新率。

每变量目标刷新率会进一步影响有效样本:÷N 只改变该系列的分组权重,不保证精确的 50/25/12.5/6.25 Hz,混合桶会被归一化。统一 NCM+WiFi 固件的 start 请求体上限为 6 KiB(6144 B),典型几十路没问题,超大选择可能返回 413;不要假设所有 256 路请求都一定能上传。当前 ring 为每系列 6000 点(约 50 Hz 下 120 秒),256 路内存约 24 MB;不要用 256 路长时间录制。页面性能还受 Canvas 绘制条数、变量树 DOM、浏览器后台节流影响。遇到卡顿先用 B 模式、降低 drawCap、减少绘制/选中数,再考虑 A 模式或 Worker 诊断。

按 D 可展开诊断面板,复制设备/ELF/性能/录制 JSON;按 F 冻结、+/- 切时间窗、方向键平移、Space 启停采样、Esc 清光标。输入框获得焦点时快捷键不生效。

10 典型工作流

i

目标:把前面章节的能力串成可复制的操作剧本,减少现场摸索。

前提:已完成一次首次连通;目标/ELF/固件版本可追溯。

操作:按场景选择剧本,先做小验证,再扩展路数或触发条件。

结果:得到可解释的数据/截图/录制/烧录记录,能交给同事复现。

常见错误:跳过热身直接上 256 路;采样与 OpenOCD 同时抢 DAP;没有记录 UID/ELF 哈希导致结果无法复现。

10.1 同时观察几十个变量

  1. 确认目标固件与 ELF 来自同一次构建;记录 ELF 路径/SHA-256。
  2. “变量曲线”选设备本地、20 ms;上传 ELF,打开“仅显示可采样变量”。
  3. 按源文件/命名空间分组,用“选当前文件/选当前组”批量勾选 20–60 路;超过 64 路会自动分组。
  4. 开始采样;Halt 应为 OFF(固定地址/指针)。若 Halt ON,说明包含栈帧/寄存器变量,评估目标实时性。
  5. 默认 B 模式 drawCap 64;变量更多时只绘制前 64 条,其余仍采样。需要看全部时再切 A,并注意帧率。
  6. Y 轴按数据形态选择 auto/归一化/对数;需要对比时设 A/B 光标,导出 CSV 归档。

10.2 只在条件满足时抓取

  1. 确定条件变量/寄存器的绝对地址与宽度(4 字节对齐),例如某个状态字的 0x24001234。
  2. 本地模式选“周期采样”,间隔 20 ms;勾选条件触发,填地址、大小 4、操作符(如 >=)、阈值、无符号。
  3. 模式选 once,勾选“命中后停止”;开始采样。状态会显示 Armed / Met / Hits / Trigger seq。
  4. 命中后停止;用“跳转条件触发”按钮定位到触发前后帧,检查变量快照。
  5. 需要连续记录多次命中时改 continuous,并取消 stop after,但注意录制帧数上限 6000。

如果条件一直不命中,先确认地址有效、目标在运行、阈值/有符号设置正确;条件读取失败会按固件错误路径提示,不要用“条件触发”代替断点。

10.3 源码断点抓局部变量

  1. 上传带 DWARF/行表的调试 ELF(建议 -O0 -g3),在源码视图打开项目。
  2. 点击目标行号设置断点;若局部变量在函数入口未初始化,添加 Offset 或选初始化之后的行。
  3. 选择栈帧/指针变量,最小间隔 20 ms;开始采样。
  4. 观察 Hits/Sampled 与实际帧率;变量值出现 Out of scope 说明当前 PC 不在该函数,属正常。
  5. 抓够后停止,导出 CSV/录制;记录断点地址、Offset、ELF 哈希和目标 UID。

10.4 烧录并验证新固件

  1. 目标上电、SWD 接好;关闭 OpenOCD/USBIP/曲线采样。
  2. 目标烧录页检测,记录系列、DEV_ID、Flash 大小、UID0/1/2。
  3. 选择 app-only BIN/ELF,核对转换后镜像大小、Flash 占用与 SHA-256。
  4. 开始烧录,等待设备回读校验完成;成功后记录返回的 SHA-256 与写入字节数。
  5. 点“复位目标”,观察 UART/指示灯;需要整镜像校验时用 OpenOCD verify_image 或曲线页 ELF 快速校验。
  6. 失败时保留页面错误文案与 UART0 日志;按 5.7 节处理后再重试。

10.5 Ozone / OpenOCD 调试剧本

标准路径:USBIP attach → OpenOCD(或 Keil/pyOCD)→ halt/断点/烧录。Ozone 原生不支持 CMSIS-DAP;需要 Ozone 时:

  1. 先用 USBIP + OpenOCD 验证探针和目标正常,记录 IDCODE。
  2. 若使用真实 J-Link:直接按 Ozone 官方流程连接,不经过本设备。
  3. 若试用实验性虚拟 J-Link:在 Windows 上按 docs/ozone-virtual-jlink.md 准备代理 DLL,OpenOCD 保持运行,Ozone 通过 USB 连接虚拟探针。
  4. 只把它用于连接/PC/寄存器/单步等基础验证;Timeline/HSS 未打通,不要用于依赖高速采样的分析。
  5. 调试结束先关 Ozone,再停 OpenOCD/USBIP;需要曲线时重新按第 8 章接管。

曲线与调试切换:OpenOCD 正在使用时,曲线页会提示接管并断开当前会话;停止采样后主机要重新 usbip attach。反过来,OpenOCD 正在烧录时不要启动曲线。

10.6 分享一次录制/测试结果

  1. 开始采样后点“开始录制”,复现故障;达到 6000 帧会自动停止。
  2. 停止采样并保存录制,命名包含目标/固件/变量/工况。
  3. 在 Recordings 面板加载回放,确认关键帧;导出 JSON/CSV,同时导出关键截图/PNG。
  4. 附上目标 UID0/1/2、DEV_ID、Flash 大小、ELF SHA-256、Web/固件版本、采样间隔与触发配置。
  5. 对方在本地浏览器导入/加载或直接分析 CSV/JSON;录制不会自动上传,注意敏感数据脱敏。
i
一份可复现的报告至少包含:目标型号/UID、固件/ELF 哈希、DAP 接入方式(无线/有线)、采样来源/间隔/触发、曲线路数与分组、失败日志/截图。缺少这些信息时,别人很难判断问题是目标、固件还是采样配置。
11 已知限制与边界 默认折叠

11 已知限制与边界

i

目标:在动手前就知道哪些能力有硬边界,避免把“设计限制”误判成故障。

前提:已了解设备的基本定位;本清单随固件/构建变化,遇到具体版本以实测为准。

操作:按网络、DAP、烧录、曲线、OTA/有线/浏览器五类逐项核对。

结果:能为每个限制找到替代方案或明确的“不要做”。

常见错误:把 256 当日常路数;把 Web-DAP 当 HSS;在 4 MB 目标上找 OTA;在有线模式下找 USB 串口。

11.1 网络与安全边界

  • 默认无登录/鉴权,HTTP/WS/TCP 全明文;Host/Origin 校验只防浏览器跨源,不是身份认证。
  • AP 默认口令 12345678,最多 4 个客户端;不改口令等于把调试口交给射频范围内所有人。
  • Wi-Fi 凭据以明文存 NVS;物理接触设备即可读取。coredump 也可能含敏感数据。
  • 仅支持 2.4 GHz;不支持 WPA-Enterprise、隐藏 SSID 特殊处理、按网络静态 IP、SNTP 对时;不会自动连接未保存的开放网络。
  • Wi-Fi 最多记忆 8 个网络;STA 连上 30 秒后 AP 关闭、断开 10 秒后重开,找不到 AP 时先等 10 秒。
  • OTA 无签名、无防降级、无镜像加密;只应从可信主机上传。

11.2 DAP 与调试边界

  • 单 DAP 会话、单 SWD 目标;不能多客户端并发、不能多目标同时调试。换板必须重新检测。
  • nTRST 当前未实现有效驱动;复位依赖 nRESET 或 SYSRESETREQ。SWO/UART-over-DAP 未启用。
  • JTAG 可用,但 SPI 高速路径主要针对 SWD;JTAG 高速受 GPIO 路径限制。
  • Ozone 原生只支持 J-Link;虚拟 J-Link 为实验性功能,连接/寄存器/Data Sampling 能力可打开,但 Timeline/HSS 数据读取未打通。
  • Web 曲线/目标烧录/OpenOCD 互相抢占 DAP;切换时必须停止占用者,必要时重新 attach USBIP。
  • Wi-Fi 环境、目标复位、USBIP 调度会显著影响速度;第二会话清理在旧固件上可能失败,升级后仍属低概率残余风险。

11.3 目标烧录边界

  • 只烧目标内部主 Flash 的应用镜像;不处理选项字节、读保护/RDP、Secure Boot、外部 QSPI Flash、量产签名。
  • F4/H7 有实机验证;G4、F0/F1/F3、F2/F7、L4、G0、WB/WL 为代码支持、部分/尚无实板验证;首次使用先小镜像。
  • 明确不支持:F4/F7 2 MB 双 bank、F413/F423、H7A/H7B、L0/L1、L5/U5/C0、WB0x/WL3x、MP15/XL;只识别,不擦写。
  • 目标检测读不到封装和完整 order code;内置型号只是代表值,同一 DEV_ID+FSIZE 的其它真实型号无法区分。
  • 烧录没有页面中止;开始后刷新/断线可能留下不完整镜像,需整片重烧。

11.4 变量曲线边界

  • 设备本地最多 256 路、每组最多 64 路;日常建议几十路。Web-DAP 路径仍支持,但上限 24 路。
  • 不是 HSS/示波器:采样率受目标暂停、SWD、Wi-Fi/HTTP 影响;多组时每条曲线的刷新率约为总帧率/组数。
  • 默认 20 ms/50 Hz;10 ms 可选;5 ms 只在固定地址/指针等无需 halt 时低干扰。周期 halt 会影响控制环实时性。
  • 设备本地模式不支持寄存器值变量(DW_OP_reg);栈帧/指针变量受 PC 范围影响,越界计 Out of scope。
  • 多段 loclist 由 v2 固件按 PC 选择变体;旧固件只能使用单段/第一段,数值可能不准确。
  • 解析器每个变量最多 64 个子节点、3 层展开;数组可能只 materialise 前 64 项。对象浏览器部分标签仍是英文。
  • 录制上限 6000 帧,存 IndexedDB;清站点数据会丢。录制不含派生曲线;回放不是重新采样。
  • 256 路 ring 约 24 MB 内存;A 模式全绘制可能降帧,B 模式默认只画 64 条。FFT 为简单 DFT,不是实时频谱。

11.5 OTA、有线与浏览器边界

  • OTA 仅 8 MB 双槽发布版(2 × 3 MB 槽);4 MB 目标无 OTA。默认构建启用更新页,/#/update 可直接访问;只有显式 VITE_ENABLE_OTA=false 的裁剪构建或旧固件才会 404。
  • OTA 单会话、无断点续传;空闲 10 秒/总 300 秒超时;新镜像首启 10 秒内崩溃会回滚。
  • USB-NCM 设备侧提供 DHCP(192.168.7.0/24 池),主机通常自动取址;也可手工配 192.168.7.2/24、网关留空兜底。默认 S3 固件关闭 USB-Serial/JTAG,运行期无 USB 串口。
  • NCM 物理上限 USB FS 12 Mbps;主机通常通过 DHCP 自动取址,特殊情况下 NetworkManager 可能清掉静态兜底地址,可临时设为 unmanaged;OTA 重启后可能需重新枚举 USB。
  • HTTP 页面不是安全上下文:File System Access API 可能不可用,自动回退到文件夹选择;每次重选目录。Source 扫描上限约 2000 个 C/C++ 文件、单文件 2 MB。
  • 手机窄屏默认折叠高级控件;后台标签页会被浏览器节流;iOS/Android 的文件选择行为可能不同。
  • Web UI 不记忆变量选择;主题/语言/显示缩放等本地设置可能在清缓存后丢失。
12 FAQ 默认折叠

12 FAQ

i

目标:用最短路径定位常见问题,不把环境/配置问题误判为硬件损坏。

前提:能打开设备页面或至少能 ping 通设备;准备好固件/页面版本与错误原文。

操作:按关键词找到问题,依次执行“先查/再做”;每次只改一个变量。

结果:恢复连接或得到明确的下一步(升级、换构建、换接线、换工具)。

常见错误:同时改 Wi-Fi、固件和接线导致无法定位;未记录错误原文;在 AP 关闭时反复找热点。

找不到 Birdiebot-DAP-XXXX 热点 / 打不开 192.168.1.1

先确认设备已上电且固件正常(UART0 115200 看启动日志)。默认 Smart APSTA 下,STA 已连接 30 秒后 AP 会关闭;等 10 秒或断开 STA 后重试。若使用有线 NCM 连接,USB 口是 NCM,不是热点。若已改过 AP 名称/口令,用新值连接;实在忘记见下一问。打不开页面时确认主机连的是设备 AP,而不是家里路由器;有线模式地址是 192.168.7.1。

忘记 AP 口令 / 设备失联怎么办

设备无登录鉴权,AP 口令无法从网页“找回”。如果只是 STA 失联,AP 会在 10 秒后重开;如果 AP 口令/名称被改且未知,只能通过 USB/UART 重新烧录固件或擦除 NVS 后恢复默认。设备物理可及时,优先用 BOOT+RESET 进入下载模式重刷;默认固件也可通过 Wi-Fi OTA 回退。

页面一直显示“未连接”/红色

检查主机是否还在设备网络、设备是否重启、是否有另一个页面/工具占满连接;刷新页面。若协议不匹配,刷新后仍红则升级固件/Web 资源。USBIP/OpenOCD 占用不会让 WebSocket 变红,但会让 DAP 操作失败,两者要分开判断。

usbip attach 失败 / 设备管理器没有 CMSIS-DAP

确认 usbip-win 为 0.3.x、busid 固定 1-1、设备 IP 可达、3240 未被防火墙拦截;Windows 推荐 attach_ude。Linux 先加载 vhci-hcd,再 usbip attach -r IP -b 1-1。有线模式确认主机 IP 是 192.168.7.2/24 且网关为空。attach 前先确认没有 Web 曲线/烧录占用 DAP。

OpenOCD 报 “SWD not supported”

这通常是 OpenOCD 0.11 对 CMSIS-DAP 2.1 两字节 capabilities 响应不兼容,不是目标/接线问题。换 OpenOCD master/新版 0.13 开发快照,或给 0.11 打仓库补丁。确认 transport select swd 与 cmsis_dap_vid_pid 0xc251 0xf00a 正确。

第二次 attach 报 CMD_INFO failed

旧固件在第二会话结束时可能清理 DAP ring buffer 失败;升级到包含会话 drain 修复的版本。临时处理:拔插 USB/重启设备,重新 attach。若使用 wired NCM,同时检查主机 USB 枚举是否陈旧、NetworkManager 是否清掉 IP。

目标检测不到

按顺序查:目标供电、共地、SWDIO/SWCLK 是否接反、nRESET 是否被拉低、目标是否处于低功耗/安全状态、SWD 时钟是否过高、DAP 是否被 OpenOCD/曲线占用。换一块已知可用的目标或降低时钟做对照。检测失败页会显示“未检测到目标芯片”,不是“未支持”。

为什么芯片型号显示“未知”

自动匹配只覆盖 16 个内置代表型号,且要求 DEV_ID + FSIZE 同时命中。其它容量/器件组会显示未知,但仍会显示系列、DEV_ID、Flash、UID;这不影响识别和变量曲线,也不代表不能烧录(烧录能力由 supported 字段决定)。同 DEV_ID+FSIZE 的其它真实型号无法从 SWD 区分。

烧录提示“可识别但不支持”

目标命中了明确不支持矩阵(2 MB 双 bank、F413/F423、H7A/B、L0/L1、L5/U5/C0、WB0x/WL3x 等)。不要强行烧录;改用 OpenOCD/官方工具或换支持的目标。若只是型号显示未知但仍 supported=true,可以按支持矩阵尝试。

烧录失败/镜像超过容量

确认上传的是 app-only 镜像,不是 merge/全量包/zip;镜像大小不超过目标 flash_size;目标未开读保护;供电稳定;烧录期间没有 OpenOCD。失败后重新检测,再整片重烧。SHA-256 不一致时用 OpenOCD 读回比对。

曲线页没有数据/变量值不变

先确认 ELF 与目标固件同一次构建;变量是否可采样(固定地址/栈帧/指针);本地模式是否被其它 DAP 会话占用;目标是否被 halt/assert;选的是不是寄存器值变量(本地不支持)。若 Halt 为 ON,目标会周期暂停;若目标不运行,栈帧变量会 Out of scope。

256 路怎么设置,为什么卡顿

设备本地模式按每组最多 64 路、每组 sum(size) ≤ 256 B 自动分组,总量上限 256(8 字节变量最多 8 组);日常建议几十路。多组时每组刷新率约为总帧率/组数,256 路全绘制也会增加 Canvas 开销。默认 B 模式只画 64 条,其余仍采样;先降路数/提高间隔/切 B,再考虑 A 模式。

设备本地和 Web-DAP 怎么选

默认用设备本地:不建 WebSocket-DAP,20 ms/50 Hz,适合多变量固定地址/指针。需要读栈帧/寄存器变量、少量变量交互调试时选 Web-DAP;它会接管 DAP 会话,最多 24 路,停止后需重新 attach USBIP。两者不能同时对同一目标采样。

条件/断点触发不命中

检查地址是否在可读范围、宽度/对齐、操作符/有符号/阈值;目标必须在运行且未被其它调试器暂停。断点地址必须在 Flash 0x08000000–0x08FFFFFF 且半字对齐;函数入口处变量可能未初始化。条件触发是每拍后比较,不是硬件断点;高频信号可能漏掉瞬时值。

OTA 页面 404 / 上传失败

默认构建已启用 OTA 页;404 只可能出现在显式 VITE_ENABLE_OTA=false 的精简构建或旧固件。可用 scripts/ota_upload.py 兜底。4 MB 目标没有 OTA 分区。上传失败检查:是否 app-only、是否超过 3 MB、Content-Type/Content-Length、409 会话占用、422 校验失败、网络超时。升级后崩溃会自动回滚。

有线模式没有 USB 串口 / 主机断网

默认 S3 固件把 USB 口交给 NCM,USB-Serial/JTAG 被关闭,运行期看不到串口是正常的;日志走 UART0(默认 115200)。主机 DHCP 通常可用;若手工配静态地址,网关留空,避免 NCM 抢默认路由。Linux 用 NetworkManager 时通常可直接 DHCP,特殊环境可把接口设为 unmanaged。

设备能直接接公网吗

不能。默认无鉴权、明文、AP 口令公开,连接公网等于把 SWD/UART/OTA 控制权暴露给任何人。只在可信局域网/隔离 VLAN 使用;首次改 AP 口令;不用的传输用 Kconfig 关闭或用网络 ACL 限制 3240/1346。

13 附录 默认折叠

13 附录

i

目标:提供查表型资料:快捷键、默认参数、错误信息、术语与支持矩阵摘要。

前提:需要快速核对某个值/错误,或向他人描述问题。

操作:用浏览器查找(Ctrl+F)或本页搜索(Ctrl K)定位关键词。

结果:能独立确认默认值、错误含义和下一步链接。

常见错误:把本页面的 #/ 文档锚点与设备 UI 的 #/ 路由器混淆;用旧固件值套新版本。

13.1 快捷键与鼠标操作

场景操作作用
本手册Ctrl+K / ⌘+K打开章节搜索。
本手册搜索↑/↓、Enter、Esc选择结果、跳转、关闭。
本手册侧栏输入“筛选章节…”按标题过滤目录。
变量曲线Space开始/停止采样(输入框聚焦时不生效)。
变量曲线F / D冻结/恢复显示 / 展开诊断面板。
变量曲线+ / -缩短/延长当前时间窗。
变量曲线← / →平移时间视图(关闭跟随最新)。
变量曲线Esc清除 A/B 光标。
图表滚轮 / 拖拽 / 双击以光标为中心缩放 / 平移 / 复位到 20 秒并跟随最新。
图表单击 / Shift+单击设置光标 A / 设置光标 B。
变量树Shift+点击行区间连选(受当前可见行与上限约束)。
手机曲线页“更多控件”展开渲染/目标/录制/Watch/派生等高级区域;≤760 px 默认折叠。

13.2 默认参数速查

项默认值说明/可改位置
HTTP Web80/TCPWeb UI、/ws、/api、OTA 上传。
DAP 代理3240/TCPUSBIP/elaphureLink/WS-DAP;VID:PID C251:F00A,busid 1-1。
UART TCP 桥1346/TCP,115200首包可切波特率;Web UART 共用 UART 服务。
发现SSDP 1900/UDP;mDNS 5353/UDP主机名 birdiebot-dap-XXXX.local。
无线 APBirdiebot-DAP-XXXX / 12345678 / 192.168.1.1/24XXXX=STA MAC 末 2 字节大写 hex;最多 4 客户端。
Smart APSTASTA 连上 30 s 关 AP;断开 10 s 重开Wi-Fi 页模式可改。
已保存 Wi-Fi最多 8 个自动记忆默认开;按优先级/最近成功轮换。
有线 NCM设备 192.168.7.1/24,主机 DHCP 或静态 192.168.7.2/24设备内置 DHCP;无网关;默认 S3 固件。
SWD 默认时钟2 MHz工具侧可用 adapter speed 覆盖;从低速往上试。
SWD 手动时钟自动 / 500 kHz / 1 / 2 / 4 / 10 MHz目标烧录页检测卡片设置;作用于检测、Web 烧录和本地采样,过高会失败。
UART 参数115200 8N1,无流控Web UART/透明桥;目标侧可改。
WebSocket 心跳1500 ms前端约 2 s 无消息判离线。
OTA 槽2 × 3 MB(8 MB 发布版)仅 app 镜像;更新页默认启用;新镜像 10 s 确认,失败回滚。
OTA 超时空闲 10 s / 总 300 s重启延迟约 1 s。
曲线默认来源设备本地(ESP32 闭环)可切 Web-DAP。
曲线默认间隔20 ms(50 Hz)可选 5/10/20/50 ms;5 ms 仅适合无 halt 变量。
曲线容量256 路;每组 64 路日常建议几十路;Web-DAP 模式上限 24 路。
曲线 ring/录制6000 点/系列;录制 6000 帧录制存 IndexedDB;导出 JSON/CSV。
时间轴 / Y 轴1/2/5/10/20/60 s;auto另可选归一化 0–100%、log10。
平滑 / 绘制1/3/5/9 点;B 模式 drawCap 64可选 32/64/128;A 模式全部绘制。
目标镜像上限目标 flash_sizeWeb 烧录只收 app-only 镜像;SHA-256 回读校验。

13.3 错误信息速查

错误/现象含义优先处理
未检测到目标芯片SWD 探测失败供电/共地/线序/DAP 占用/降低时钟。
该芯片系列可识别,但暂不支持烧录命中不支持矩阵换工具/目标;不要强行烧。
固件超过目标 Flash 容量镜像或地址错误用 app-only 镜像/核对链接地址。
不支持的固件格式扩展名/内容不匹配BIN/ELF/HEX/SREC,检查文件完整性。
DAP_Transfer failed: ACK=0x4 (FAULT)目标地址不可访问/总线 FAULT检查地址/栈帧范围;连续失败会停止采样。
CMSIS-DAP command CMD_INFO failed旧固件会话清理问题或 USBIP 超时升级固件;重新 attach/重启。
USB timeout @ 0USBIP 管道超时网络/目标/DAP 忙;重连。
SWD not supportedOpenOCD 0.11 能力字节不兼容换 master/0.12/打补丁。
ota session busy(409)已有 OTA 会话等待/ABORT/重启。
image too large(413)超过 3 MB 槽app-only 镜像。
unsupported content type(415)不是 octet-stream改用正确上传头。
image verification failed/sha256 mismatch(422)镜像格式/哈希失败重传/重新构建。
upload timeout(408)OTA 空闲/总时长超时检查网络,重传。
forbidden origin(403)Host/Origin 校验失败用 IP 访问/加允许来源。
kickFailedUSBIP/DAP 会话占用,无法接管先 detach/停止 OpenOCD。
localStartFailed/localPollFailed本地采样启动/取帧失败DAP 占用/目标/网络;停止后重试。
localBreakpointInvalid断点不在 Flash/未半字对齐改地址/Offset。
watchpointInvalid监视地址/对齐无效按 1/2/4 字节对齐。
conditionInvalid条件地址/对齐/值无效检查地址/宽度/阈值。
cdc_ncm bind() failure/failed to get mac address主机 USB 枚举陈旧拔插 USB/重新绑定 xHCI。
Hardware setup does not support data sampling.Ozone 能力门禁虚拟 J-Link 实验路径;不建议生产依赖。
页面 404(/#/update)显式裁剪 OTA 的 Web 构建用默认构建或脚本/HTTP 升级。

13.4 术语表

术语解释
CMSIS-DAPARM 定义的标准调试探针协议;OpenOCD/Keil/pyOCD 通过它访问目标。
SWD / JTAG两种调试传输;SWD 两线(SWCLK/SWDIO),JTAG 四/五线。
USBIP把远端 USB 设备映射到主机的协议;本设备 3240 端口承载。
NCMUSB CDC-NCM 以太网类;默认 S3 固件用它提供 192.168.7.0/24 链路,并运行 DHCP。
ELF / DWARF可执行文件格式 / 其中调试信息;变量、类型、行号、位置表达式都来自 DWARF。
PC程序计数器;本手册中的 PC 联动指当前执行地址到源码行/变量作用域的映射。
FPB / DWTCortex-M 的硬件断点单元 / 数据观察与跟踪单元;断点触发与 Watchpoint 使用。
Halt / Resume暂停/恢复目标 CPU;栈帧/寄存器变量采样需要 halt。
HSSJ-Link 高速采样;本设备的曲线不是 HSS 等价物。
AP / STA设备自发热点 / 设备作为客户端连接路由器。
mDNS / SSDP局域网发现协议;用于主机名和服务发现。
OTA空中升级;本设备用浏览器上传 app 镜像到空闲槽。
UID0/1/2STM32 96-bit 唯一 ID 的三个 32-bit 字。
DEV_ID / FSIZEDBGMCU 器件组 ID / Flash 容量;自动匹配的两个条件。
Profile内置只读的 MCU 代表型号信息;不是用户可编辑配置。
Ring / 录制页面环形缓冲 / IndexedDB 中保存的帧序列。
Out of scope当前 PC 不在变量所属函数范围,本拍填 0 并单独计数。
Stale当前帧与变量/源码不匹配或已过期,界面灰显/标红。

13.5 支持矩阵摘要

能力支持不支持/注意
目标识别80 个 DEV_ID 组;显示系列/DEV_ID/FSIZE/UID/CPUID封装/完整 order code 不可读;自动型号仅 16 个内置代表。
目标烧录F4、H7(已实机);G4、F0/F1/F3、F2/F7、L4、G0、WB/WL(代码支持,部分待实板)F4/F7 2 MB 双 bank、F413/F423、H7A/B、L0/L1、L5/U5/C0、WB0x/WL3x、MP15/XL 不支持。
变量曲线任意可 SWD 访问且有匹配 ELF 的目标;本地 256 路/Web-DAP 24 路不是 HSS;寄存器值变量本地不支持;栈帧受 PC 范围限制。
OTA8 MB 发布版,双 3 MB 槽,回滚4 MB 目标无 OTA;无签名;页面需构建启用。
接入Wi-Fi AP/STA、USB-NCM 有线仅 2.4 GHz;NCM 内置 DHCP/无网关;USB-OTG 与 USB-Serial/JTAG 互斥。
调试工具OpenOCD/Keil/pyOCD/elaphureLinkOzone 原生仅 J-Link;虚拟 J-Link 实验且 HSS 未打通。

13.6 版本、文档与许可

本手册对应 Web UI v1.2.0 与固件 v1.2.x 系列,最后更新 2026-10-24。实际版本以设备“关于”页和构建标签为准;不同构建的页面可用性(尤其 OTA)可能不同。

  • 快速上手:index.html;开发者附录:developer.html。
  • 仓库总览:README_CN.mddocs/README.md
  • 引脚契约:board-pins.mdprotocol.mdsecurity.md
  • 目标烧录:target-flash.mdtarget-profiles.mdtarget-flash-formats.md
  • 变量曲线:web-variable-curve.mdcurve-local-sampler.mdsource-browser.mdobject-watch.md
  • OTA/Wi-Fi:ota-local-upload.mdwifi-credential-memory.mdwired-dap-mvp.md
  • Ozone 实验:ozone-virtual-jlink.md
  • 许可证:项目原创部分 Apache-2.0;第三方组件分别遵循 MIT/Apache-2.0,详见 NOTICELICENSES/