3.8 KiB
description, agent
| description | agent |
|---|---|
| Build → flash (download) → capture USART1 debug log → verify boot/test markers → iterate. The full automated test loop for the STM32F4-Base target. | build |
Run the full automated test loop: build → download → capture serial debug → verify markers → report/iterate.
Prerequisites (checked in step 0):
serial-mcp-serverCLI installed at%LOCALAPPDATA%\serial-mcp-server\serial-mcp-server.exe(Adancurusul/serial-mcp-server, v0.3.0).- ST-Link probe connected; target powered. The USB-serial (CH340) may stay idle while flashing — ST-Link download does not conflict with the serial port.
Procedure
Step 0 — Pre-flight: serial-mcp-server binary + port
Verify the capture binary and target port exist:
Test-Path "$env:LOCALAPPDATA\serial-mcp-server\serial-mcp-server.exe"
& "$env:LOCALAPPDATA\serial-mcp-server\serial-mcp-server.exe" list-ports --json
Read .opencode/serial_config.json for the authoritative portName (COM6) and match it in the list. If the binary is missing, build it from source (see docs/测试说明/serial-mcp-server_串口调试.md).
Step 1 — Build verify
Run the build script (repo-relative; the repo root is the working directory):
& "MDK-ARM\build.bat"
Interpretation (per AGENTS.md): exit code 0 = PASS (0 errors, 0 warnings). 1/2+ = FAIL. If it fails, read MDK-ARM/build_log.txt, fix, and rerun @build until exit code 0 before touching the hardware.
Step 2 — Flash + capture boot log (one orchestrated call)
Use test/run_boot_test.ps1 which starts the capture (waits for first byte),
then flashes, then collects and verifies — all in one call so the capture never
times out before flashing:
powershell -ExecutionPolicy Bypass -File "test\run_boot_test.ps1" `
-Port COM6 -BaudRate 115200 `
-DurationMs 30000 -InitialTimeoutMs 90000 -IdleTimeoutMs 8000 -MaxBytes 65536 `
-FlashCmd "MDK-ARM\download.bat" `
-Required "App init OK;Network Init;net init: OK" `
-Forbidden "FAIL;ERROR;HardFault" `
-OutDir "C:\Users\16241\AppData\Local\Temp\opencode"
Exit codes: 0 = PASS, 1 = FAIL (marker miss / forbidden hit), 2 = capture/flash/parse error.
Step 3 — Iterate
- PASS → report the verdict and which markers matched; done.
- FAIL → the
[MISS]/[HIT]lines + the log tail show what went wrong. Fix the code, then loop again from Step 1. Do not skip the build step.
Alternative: manual MCP capture (interactive debug)
For interactive command/response (not boot-log capture):
serial_list_ports→ matchportNamefrom.opencode/serial_config.json(COM6).serial_open(port=COM6, baud_rate=115200) → note the returnedconnection_id.serial_write/serial_read(connection_id, timeout_ms) for command-response.serial_closeto release the port.
Notes
- 串口端口:以
.opencode/serial_config.json为准(本机为 COM6)。每次连接前先读它。 - ⚠️ 无历史缓冲:serial-mcp-server 的
read只能读调用后的字节。抓开机日志必须走run_boot_test.ps1(先采集等 first-byte → 再烧录触发)。 - ⚠️ EOF 陷阱:COM 刚释放立即重开会报
UnexpectedEof(tokio-serial 读 0 字节)。serial_capture.ps1内置自动重试;别裸跑 CLI capture。 - 参数:
IdleTimeoutMs需 ≥ boot 自然静默间隙(本机 ~3-4s,用 8000);InitialTimeoutMs需覆盖编译+烧录耗时(用 90000)。 - UI (LVGL) task
ui_task已有UI port init: OK/UI menu init: OK打印,可用-Required "UI port init: OK;UI menu init: OK"自动回归 UI 初始化。 - Full capture/analysis details:
docs/测试说明/serial-mcp-server_串口调试.mdanddocs/测试说明/自动化测试流程.md.