# FlashKey
**Repository Path**: jdi058/FlashKey
## Basic Information
- **Project Name**: FlashKey
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-08-25
- **Last Updated**: 2026-08-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
FlashKey FK-01
> FlashKey FK-01 — 专为 AI Agent 设计的嵌入式 USB 烧录调试工具。
[](README.md)
[](LICENSE)
[](https://github.com/Ai-Thinker-Open/FlashKey/actions/workflows/build.yml)
---
## 项目简介
FlashKey FK-01 是安信可(Ai-Thinker)推出的嵌入式 USB 烧录调试器,从设计之初就面向 **AI Agent**:AI 无需手动按键,即可通过 USB 控制 BOOT/RST 引脚与电源,自动完成 Ai-WB2(BL602)、Ai-M62(BL616/BL618)等模组的固件烧录与调试。
> **J-Link 是给人类用的调试器,FlashKey 是给 AI Agent 用的烧录员。**
- 🔌 **USB CDC 控制通道** — BOOT / RST 引脚控制、5V / 3.3V 电源开关
- ⚡ **UART 桥接** — USART2 ↔ USB CDC 透传,最高 2Mbps,满足烧录波特率
- 🔐 **Challenge-Response 认证** — 插上即自动 HELLO 握手,无需手动认证
- 🤖 **MCP 支持** — 通过 [`flashkey-mcp`](flashkey-mcp/) 让 Cline、Hermes Agent、OpenCode、Codex 等 AI 工具直接调用
### 双芯片架构
FK-01 内置 WCH-LinkE 调试器(CH32V305)+ CH32V203 控制芯片:
| 芯片 | 职责 |
| --- | --- |
| WCH-LinkE(CH32V305) | DAPLink 调试器(SWD) |
| CH32V203 | 控制芯片 — 验证/认证 + USB CDC ↔ UART 桥接 + GPIO / 电源控制 |
> 源码仓库:[Ai-Thinker-Open/FlashKey](https://github.com/Ai-Thinker-Open/FlashKey)
---
## 安装 / 编译
### 克隆仓库(含子模块)
```bash
git clone --recurse-submodules git@github.com:Ai-Thinker-Open/FlashKey.git
cd FlashKey
```
如果已经克隆但未拉取子模块:
```bash
git submodule update --init --recursive
```
### 工具链
RISC-V 工具链(xPack RISC-V GCC 12.5.0)以子模块方式固定版本:
```bash
tools/toolchain/bin/riscv-none-elf-gcc --version
```
如果使用其他工具链路径或前缀,请修改 `firmware/ch32v203/CMakeLists.txt` 顶部的 `TOOLCHAIN_FOLDER` / `TOOLCHAIN_PREFIX`。
### 编译固件
```bash
cd firmware/ch32v203
cmake -B build -G "Unix Makefiles"
cmake --build build -j$(nproc)
```
产物(`flashkey_ch32v203.elf` / `.hex` / `.map`)生成在 `build/` 下,已通过 .gitignore 排除,不入库。
### MCP 插件(给 AI 用)
```bash
pip install flashkey-mcp
```
完整的安装与 AI 工具配置说明见 [`flashkey-mcp`](flashkey-mcp/) 子模块 README。
---
## 使用说明
### 1. Windows 驱动(可选)
安装 `driver/windows/flashkey-fk01.inf`,让设备在设备管理器中显示为 **“FlashKey FK-01”**:
```powershell
pnputil /add-driver driver/windows/flashkey-fk01.inf
```
设备标识:VID `1A86` / PID `FE0D`(USB CDC ACM)。
### 2. 烧录 FK-01 自身固件(CH32V203 #2)
将 FK-01 自带的 WCH-LinkE SWD 接口接到 CH32V203 #2,使用 OpenOCD:
```bash
cd tools
openocd -f flashkey-erase-program.cfg # 全片擦除 + 烧录 + 校验
openocd -f flashkey-debug.cfg # 调试 / 复位
```
也可直接使用现成脚本:`tools/flash-fk01.sh`(Linux/WSL)、`tools/flash-burn.cmd`(Windows)。
### 3. 通过 AI 工具(MCP)控制设备
flashkey-mcp 提供 `status()`、`flash()`、`enter_bootloader()`、`rst_pulse()`、`log_open()`、`firmware_check()` 等工具 — 详见 [flashkey-mcp README](flashkey-mcp/)。
### 4. UART1 调试串口
固件启动时在 USART1(**115200 8N1**)打印启动横幅:产品名 / 版本 / 编译 commit / 密钥状态。
---
## 示例
### 查看设备状态
```
status()
```
返回认证状态、固件版本、引脚状态与模组信息。
### 一键烧录(Ai-WB2)
```
flash(firmware_path="/path/to/firmware.bin", chip="ai-wb2", flash_port="ttyACM1")
```
### 手动引脚控制
```
rst_pulse(50) # 50ms 复位脉冲
boot_set(true) # BOOT 拉高
v5v_set(true) # 开启 5V 电源
```
---
## 工作原理
```
┌──────────────────────────────────────────┐
│ USB Type-C │
└────────────────┬─────────────────────────┘
│
┌────┴────┐
│ FE1.1s │ USB Hub (1→4)
└────┬────┘
┌───────┴────────┐
▼ ▼
┌────────────────┐ ┌──────────────────┐
│ CH32V305 #1 │ │ CH32V203 #2 │
│ WCH-LinkE │ │ 验证 + USB CDC │
│ DAPLink SWD │ │ GPIO + 电源控制 │
└────────────────┘ └──────────────────┘
```
### 仓库结构
```
FlashKey/
├── firmware/
│ ├── ch32v203/ # #2 控制芯片固件(USB CDC ↔ UART + GPIO)
│ ├── wch-linke/ # #1 WCH-LinkE DAPLink 调试器固件
│ └── baseline/ # WCH 基线固件(参考)
├── flashkey-mcp/ # MCP 服务器插件(子模块)
├── driver/windows/ # Windows INF 驱动
├── docs/ # 架构 / API / 开发文档
├── tools/ # OpenOCD 配置、烧录脚本、工具链
└── LICENSE # MIT
```
### 固件功能状态(v0.1.5)
| 模块 | 状态 | 说明 |
| --- | :---: | --- |
| USB CDC 设备栈 | ✅ | EP1 OUT + EP2 IN(64B)+ EP3 IN 通知(8B) |
| USB ↔ UART 桥接 | ✅ | USART2 DMA,256 字节环形缓冲,最高 2Mbps |
| 帧协议 | ✅ | `0x7E SOF \| LEN \| CMD \| DATA \| CRC-8/MAXIM \| 0x7F EOF` |
| GPIO 控制 | ✅ | PB3 BOOT / PB4 RST / PB1 5V_EN / PB0 3.3V_EN |
| RST 脉冲 | ✅ | 50~250ms 精确脉宽 |
| Challenge-Response 认证 | ✅ | SBOX + XOR + ROTL1,8 字节密钥,自动 HELLO |
| 设备身份 | ✅ | VID 1A86 / PID FE0D,"Ai-Thinker FlashKey-FK01" |
| UID 读取 / 密钥烧录 | ✅ | `GET_UID`、`SET_KEY`(Flash 持久化,v0.1.3) |
| 心跳保持 | ✅ | ~6s 超时清除认证,PB11 LED 指示 |
| 扩展模组桥接 | ✅ | I2C 清单轮询 + USART2 透传 |
### 文档
| 文档 | 说明 |
| --- | --- |
| [QUICKSTART](docs/QUICKSTART.md) | 30 秒快速入门 |
| [PROJECT_OVERVIEW](docs/PROJECT_OVERVIEW.md) | 项目总览与硬件 |
| [ARCHITECTURE](docs/ARCHITECTURE.md) | 架构设计 |
| [DEVELOPMENT_GUIDE](docs/DEVELOPMENT_GUIDE.md) | 开发环境与流程 |
| [API_REFERENCE](docs/API_REFERENCE.md) | API 参考 |
| [CONTRIBUTING](docs/CONTRIBUTING.md) | 贡献指南 |
---
## 常见问题 / 故障排查
**设备无法识别?**
- Windows:安装 `driver/windows/flashkey-fk01.inf` 后重新插拔。
- 用 `lsusb`(Linux)或设备管理器(Windows)确认设备标识为 `1A86:FE0D`。
**WSL 中看不到设备?**
需要先把 USB 设备附加到 WSL:`usbip attach -r 127.0.0.1 -b `(Windows 端:`usbipd.exe attach --wsl --busid `)。
**如何确认当前固件版本?**
通过 MCP 调用 `get_version()`,或查看 USART1 启动横幅(115200 8N1)。
**烧录报读保护/写保护错误?**
Windows 下可用 WCH-LinkUtility 解锁;flashkey-mcp 的 `firmware_flash()` 也会自动重试解锁后烧录。
---
## 贡献指南
欢迎提交 Issue 和 PR:
1. Fork 本仓库并创建功能分支;
2. 提交信息遵循 Conventional Commits(`feat:`、`fix:`、`docs:` 等);
3. 行为变更时同步更新 `docs/`;
4. 在 PR 中说明目的与验证方式。
详见 [CONTRIBUTING.md](docs/CONTRIBUTING.md)。
---
## 许可证
[MIT](LICENSE) © 2026 Ai-Thinker Open