Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Windows Download ToolNew to Visual Studio Code? Get it now.
Windows Download Tool

Windows Download Tool

Aaronlu2026

|
18 installs
| (0) | Free
稳定调用 Cmd_download_tool.exe 下载并运行固件。首次在配置界面填入参数(含工具路径),之后 AI 可通过 CLI 免填参自动调用。
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Windows Download Tool

VSCode 插件:稳定调用 Cmd_download_tool.exe 下载并运行固件,是「AI 全自动化编程」的关键一环。

  • 手动:点开活动栏图标 / 状态栏进入配置界面,首次填入参数(含工具路径,可自由选择)。
  • 自动:参数落盘后,AI(Claude Code)通过独立 CLI 免填参直接调用 windows-download-tool download <bin>。

功能

  • 下载前枚举 USB 设备:all 命令枚举,按目标 PID(默认 pid_8266)定位 Device ID,并显示设备信息。
  • 下载流程(对齐 SDK build_flash.sh):lf 0 0(解锁) → wf -i(写 Flash,校验 Download OK) → rst -f(复位运行)。
  • 命令第一个参数默认用枚举出的 Device ID(标准工具接口),每步前重新枚举(MCU 复位会触发 USB 重枚举、ID 重排)。 若你把 Cmd_download_tool 改成了按 USB PID 解析,把配置项 prefixMode 设为 usbPid,前缀改用 PID 的十六进制值。
  • 配置按工程隔离:每个工程目录一份配置,切工程不用重配(见「配置层级」)。
  • 命令行测试:配置界面里直接添加 / 排序 / 单条或顺序执行任意工具命令,用于手动验证下载工具(见「手动命令行测试」)。
  • 复位目标、列出设备、配置界面(WebView)+ 独立 CLI。

工具与硬件

  • 工具:release_v5.9.5/config/Cmd_download_tool.exe(标准命令行格式 <Device ID> <CHIP> <命令> [参数])。
  • 芯片:TL751X 等;目标板 USB PID:pid_8266(不同板子可改)。
  • 例外:若工具被改成按 USB PID 解析(非默认),第一个参数改为 PID 的十六进制值(见「手动命令行测试」)。

首次配置

方式一:配置界面(推荐)

  1. 左侧活动栏点「Windows Download」图标,或状态栏 $(flame) Windows 下载。
  2. 填工具路径(「浏览…」选 Cmd_download_tool.exe)、芯片、目标 PID。 「命令前缀」保持默认 Device ID;只有工具被改成按 USB PID 解析时才选 USB PID。
  3. 「固件文件」处「浏览…」选好待下载的 .bin(之后 CLI run 直接用它)。
  4. 「查看设备」确认能枚举到板子(应显示 vid_248a&pid_8266),再「保存到本工程」。

方式二:CLI

windows-download-tool config --set "toolPath=C:/.../release_v5.9.5/config/Cmd_download_tool.exe" chip=TL751X devicePid=pid_8266
windows-download-tool list

配置层级(每个工程一份配置)

在多个工程之间来回切换时,不需要反复改配置:配置分两层,工程配置优先、全局配置兜底。

层级 路径 作用
全局 %USERPROFILE%\.windows_download_tool\config.json 跨工程共用的模板与兜底
工程 <工程根>\.vscode\windows-download-tool.json 每个工程一份,优先级更高

工程配置是局部覆盖:只写它声明过的键,没写过的继续从全局取。 所以工程文件里只有 {"chip":"TL321X"} 时,toolPath / devicePid / timeoutMs 仍跟随全局。

配置界面底部的「保存到本工程」写的是全量快照(表单里所有字段),此后该工程不再跟随全局变化; 旁边的「保存为全局默认」则是给新工程当模板用。面板顶部的「配置来源」横幅随时告诉你正在改哪一份。

工程根怎么定

  • 扩展:优先取固件文件所属的工作区文件夹;配置面板取活动编辑器所在文件夹,多根工作区会问你一次。
  • CLI:从当前目录向上找最近的含 .vscode\windows-download-tool.json、.git 或 .vscode 的目录, 到用户主目录为止(~/.vscode 是扩展安装目录,不会被误当成工程根)。因此从 build/bin/ 之类的子目录调用也能命中。

猜不准时(例如 SDK 解压在 ~/work/sdk_project/ 而 .git 只在 ~/work)用显式通道:

windows-download-tool config --resolve                       # 看当前生效的是哪份、每个字段来自哪一层
windows-download-tool config --init-local                    # 把当前生效配置快照成本工程配置(锚定)
windows-download-tool config --set chip=TL321X               # 默认写本工程
windows-download-tool config --set chip=TL321X --global      # 强制写全局
windows-download-tool run --project D:/path/to/project       # 显式指定工程根,不做向上查找
windows-download-tool run --local                            # 以当前目录为工程根

环境变量 WINDOWS_DOWNLOAD_TOOL_PROJECT 等价于每次都传 --project。

CLI 每次执行会在开头打一行来源,避免"烧的不是我以为的固件":

·· 配置: 工程 D:\proj\.vscode\windows-download-tool.json ← 全局 C:\Users\...\config.json
·· 配置: 全局 C:\Users\...\config.json(未检测到工程目录)

config --get / config --path / chips --json 不打这一行(它们的输出会被脚本解析),需要时用 --no-banner 全局关闭。

工程配置文件默认会被 git 看到。要随工程提交(团队共享参数)就保持原样; 只想本机使用就把它加进该工程自己的 .gitignore。文件里存的是绝对路径,跨机器需要重新选一次。

使用

界面

  • .bin 文件右键 → Windows Download: 下载此固件到目标
  • 命令面板:下载固件到目标 / 列出 USB 设备 / 复位目标
  • 输出通道「Windows Download Tool」查看设备信息与完整输出

手动命令行测试

配置界面底部的「命令行测试」可以直接跑任意工具命令,不用开终端:

  1. 输入一行命令(不含 exe 路径),例如 all、1 TL751X lf 0 0、 1 TL751X wf {addr} -i "{bin}",点「添加」。第一个参数默认是 Device ID,不是 USB PID。
  2. 命令添加后可直接点文本修改(回车或失焦保存,Esc 取消,清空还原); 用 ↑ / ↓ 调整顺序,▶ 执行单条,✕ 删除;或点「▶ 顺序执行」从头跑完整套 (第一条失败即停止)。
  3. 输出实时显示在下方;工具长时间无输出时会补 ·· 心跳,写 Flash 期间不会像卡死。

命令格式是 <Device ID> <CHIP> <命令> [参数](全局命令 all / help 除外)。第一个参数是 「查看设备」结果里的编号(如 1),会随 USB 设备数量变化,执行前请先点「查看设备」确认。 占位符取自面板里当前填写的值(还没保存也生效):{pid}、{chip}、{bin}、{addr}。 含空格的参数用引号包住。命令列表存在配置项 testCommands 里,增删 / 排序会即时写入当前工程配置 (没有工程上下文时写全局)。

USB PID 模式(非默认):如果你把 Cmd_download_tool 改成了按 USB PID 解析,第一个参数 改为 PID 的十六进制值(如设备板 8266),例如 8266 TL751X lf 0 0;同时把配置项 prefixMode 设为 usbPid(面板「命令前缀」选 USB PID),让自动下载 / 复位也用同样的前缀。 标准工具不需要改这一项。

自动下载 / 复位默认按配置的 PID 现查 Device ID(每步前重查,防止 MCU 复位后编号重排); prefixMode=usbPid 时直接用 PID。exec / script 不做前缀改写,第一个参数要写当前工具 解析方式对应的值(Device ID 或 PID)。

同样的能力也开放给 CLI(AI 可直接调用):

windows-download-tool exec 1 {chip} lf 0 0                  # 第一个参数是 Device ID(先 list 确认)
windows-download-tool exec 1 {chip} wf {addr} -i "{bin}"
windows-download-tool exec 8266 {chip} lf 0 0               # 工具改成 USB PID 模式时
windows-download-tool script                                # 顺序执行配置里的命令列表
windows-download-tool script --only 2                       # 只执行第 2 条
windows-download-tool script --keep-going                   # 失败后继续(默认第一条失败即停)

exec 的 argv 原样传给 exe(不经 shell),工具自己的 -i / -f 等参数不会被误当选项; 退出码 0=成功、非 0=失败,与 download / run 一致。

CLI(AI 自动化)

windows-download-tool run                    # 精简:直接下载配置界面里选定的固件
windows-download-tool list
windows-download-tool download ./bttpsll_headset&n22_controller.bin
windows-download-tool download ./x.bin --chip TL751X --pid pid_8266 --no-unlock
windows-download-tool exec 1 {chip} lf 0 0              # 手动执行一条工具命令(1 是 Device ID)
windows-download-tool script                            # 顺序执行配置里的命令列表
windows-download-tool reset
windows-download-tool config --get

run 不填固件路径时用配置文件里的 lastBinPath(配置界面「固件文件」浏览选定的那个,或上次下载成功的那个),可另接 [bin] 与同样的覆盖选项。下载成功后 lastBinPath 记到工程配置(没有工程上下文时才落全局)——它是工程级的,落全局会让 A 工程刚烧的固件被 B 工程的 run 拿去用。

CLI 退出码 0=成功、非 0=失败(错误打到 stderr),方便 AI 直接判断。

烧录期间的进度输出

写 Flash 实测约 95 秒,且期间工具可能完全没有输出 —— 工具自身的进度行在直连终端时是行缓冲、看得见,一旦 stdout 被管道接管(| tail)就退化成全缓冲,中途什么都不吐。这是子进程的 stdio 策略,Node 改不了。

所以工具静默满一个心跳间隔时,CLI 会自己补一行(前缀 ··),证明进程还活着:

[step 2/3] 1 TL751X wf 0 -i xxx.bin
·· 写 Flash 开始,固件 1.5 MB。工具可能长时间无输出,属正常,请勿中断;超时 120s
·· 写 Flash 进行中:已用 10s / 超时 120s(工具暂无输出,属正常,请勿中断)
·· 写 Flash 进行中:已用 20s / 超时 120s(工具暂无输出,属正常,请勿中断)
  • 只有工具自己安静时才发:工具在输出时心跳完全不会出现,不刷屏。
  • 已用时间达到超时的 80% 时改口提醒:·· 写 Flash 已用 96s / 超时 120s,接近超时——超时将中断该步骤,请勿断电。
  • 心跳与 [step] 行同在 stdout,所以现有的 | tail 命令不用改;行尾换行、立即写出,被 tail 时最后一行始终是新鲜的。
  • 以 ·· 开头的是本工具的行,其余是工具自己的输出。
  • 间隔可用 --heartbeat <秒> 调整(默认 10),--no-heartbeat 关闭。

扩展侧同样有心跳:输出通道会打 ·· 行,进度通知的副标题也会刷新成同一句话。

CLI 稳定路径

扩展安装目录带版本号(~/.vscode/extensions/aaronlu2026.windows-download-tool-<版本>/),每次升级都会变;写死该路径的脚本、文档、AI 记忆升级后必然失效(MODULE_NOT_FOUND)。

因此扩展每次激活时把 CLI 落位(或刷新)到不含版本号的稳定目录 %USERPROFILE%\.windows_download_tool\(与 config.json 同目录):

路径 说明
%USERPROFILE%\.windows_download_tool\cli.js CLI 入口(连同 core/、deploy.js)
%USERPROFILE%\.windows_download_tool\windows-download-tool.cmd Windows 启动器(cmd / PowerShell)
%USERPROFILE%\.windows_download_tool\windows-download-tool POSIX 启动器(Git Bash / WSL)
%USERPROFILE%\.windows_download_tool\config.json 全局配置(工程配置在各工程自己的 .vscode\ 下,见「配置层级」)
%USERPROFILE%\.windows_download_tool\.deployed-version 落位标记(版本一致时跳过重复复制)

脚本与 AI 记忆只引用这里的路径,永不写扩展安装目录。加入 PATH 后即可在任意目录直接调用(一次性,新开终端生效):

[Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path","User") + ";$env:USERPROFILE\.windows_download_tool", "User")

未加 PATH 时直接用完整路径,例如 Git Bash:"$USERPROFILE/.windows_download_tool/windows-download-tool" list。

落位发生在扩展激活时(onStartupFinished),所以装好扩展、重启一次 VSCode 后该路径即可用。 源码树内开发时仍可直接 node dist/cli.js <命令>;CLI 的 help 会按当前是否已落位自动显示对应调用前缀。

构建与打包

npm install
npm run build     # tsc -> dist/
npm run package   # vsce package -> .vsix(vscode:prepublish 会自动先 build,避免打包到旧 dist)

说明

  • 插件无运行时依赖,仅用 Node 内置模块 + vscode API。
  • 命令以 argv 数组直传(不拼 shell),路径含空格/中文/& 均安全。
  • 工具的工作目录(表单里的「工作目录」)默认自动推断为 release 根目录(config/*.ini 相对其加载),可覆盖。 它和上面的工程根是两回事:前者是 exe 的运行目录,后者是配置文件的归属。
  • 配置分全局与工程两层,见「配置层级」;全局配置目录 %USERPROFILE%\.windows_download_tool\ 同时也是 CLI 稳定落位目录(见上)。
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
  • Your Privacy Choices
  • Consumer Health Privacy
© 2026 Microsoft