# mcu_flash_tool **Repository Path**: solawc/mcu_flash_tool ## Basic Information - **Project Name**: mcu_flash_tool - **Description**: 自制作的烧录工具,方便不管用DAP-Link/Jlinkd 都可以使用。 - **Primary Language**: Unknown - **License**: MPL-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-29 - **Last Updated**: 2026-06-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: tool ## README # MCU Flash Tool V1.0.1 > 基于 Python + PyQt6 的 MCU 固件编程工具,通过 J-Link / DAP-Link 实现固件的读取、烧录与校验。 [![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)](https://www.python.org/) [![PyQt6](https://img.shields.io/badge/PyQt-6.5+-green.svg)](https://pypi.org/project/PyQt6/) [![License](https://img.shields.io/badge/license-MIT-orange.svg)](LICENSE) --- ## 📖 简介 **MCU Flash Tool** 是一款桌面端 MCU 固件编程工具,图形界面参照 SEGGER J-Flash 设计。支持通过 J-Link、DAP-Link、ST-Link 等调试器对 ARM Cortex-M 系列 MCU 进行固件的读取、烧录、擦除和校验操作。 ### 核心功能 | 功能 | 说明 | |------|------| | 🔗 **设备连接** | 自动扫描调试器,支持 J-Link / DAP-Link / ST-Link | | 🔥 **固件烧录** | 支持 HEX / BIN / ELF / SREC 格式,带实时进度 | | 📖 **固件读取** | 从 MCU Flash 读取数据并保存为文件 | | 🗑️ **芯片擦除** | 整片擦除 / 扇区擦除 | | ✓ **数据校验** | 逐字节比对 MCU 内容与固件文件,精确定位差异 | | ▶️ **自动编程** | 一键完成:擦除 → 烧录 → 校验 | | 📊 **数据视图** | 十六进制内存数据预览(仿 J-Flash 布局) | | 📋 **分级日志** | DEBUG / INFO / SUCCESS / WARNING / ERROR 五级彩色日志 | | 🔍 **芯片搜索** | 预置 2000+ 型号,支持模糊搜索 + 自动补全 | | 💾 **配置记忆** | 窗口位置、芯片型号、最近文件等自动保存 | --- ## 🖥️ 界面布局 ``` ┌─────────────────────────────────────────────────────────┐ │ 菜单栏: 文件 | 目标 | 操作 | 选项 | 帮助 │ ├─────────────────────────────────────────────────────────┤ │ 工具栏: [打开] [保存] | [擦除] [烧录] [读取] [校验] [自动] [复位] │ ├──────────────────┬──────────────────────────────────────┤ │ 左侧配置面板 │ 右侧主区域 │ │ ┌───────────┐ │ ┌──────────────────────────────┐ │ │ │ 设备配置 │ │ │ 十六进制数据预览 │ │ │ │ ·调试器 │ │ │ (地址 | 数据 | ASCII) │ │ │ │ ·芯片型号 │ │ └──────────────────────────────┘ │ │ │ ·接口类型 │ │ │ │ │ ·接口速度 │ │ ┌──────────────────────────────┐ │ │ ├───────────┤ │ │ 分级日志输出 │ │ │ │ 操作配置 │ │ │ [INFO] 已连接 J-Link... │ │ │ │ ·起始地址 │ │ │ [OK] 烧录完成,校验通过 │ │ │ │ ·读取大小 │ │ │ [ERROR] 连接失败 │ │ │ │ ·FLM算法 │ │ └──────────────────────────────┘ │ │ ├───────────┤ │ │ │ │ 芯片信息 │ │ │ │ │ Flash/RAM │ │ │ │ └───────────┘ │ │ ├──────────────────┴──────────────────────────────────────┤ │ 状态栏: 🔗已连接 | 芯片: STM32F407VG | J-Link | ████░░ 45% │ └─────────────────────────────────────────────────────────┘ ``` --- ## 🚀 快速开始 ### 环境要求 - **操作系统**: Windows 10+ / Linux / macOS - **Python**: 3.10+ - **调试器驱动**: J-Link 驱动(如需使用 pylink 后端) ### 安装步骤 ```bash # 1. 克隆项目 git clone cd ceshi # 2. 创建虚拟环境 python -m venv .venv # 3. 激活虚拟环境 # Windows: .venv\Scripts\activate # Linux/macOS: source .venv/bin/activate # 4. 安装依赖 pip install -r mcu_flash_tool/requirements.txt ``` ### 运行程序 ```bash # 方式1: 直接运行 python mcu_flash_tool/main.py # 方式2: 作为模块运行 python -m mcu_flash_tool # 方式3: 使用启动脚本 (Windows) run_mcu_tool.bat ``` --- ## 📦 打包为 EXE 使用 PyInstaller 打包为独立可执行文件: ```bash cd mcu_flash_tool build_package.bat ``` 输出文件: `MCU_Flash_Tool_V1.0.1.exe` --- ## 🗂️ 项目结构 ``` ceshi/ ├── readme.md # 本文件 ├── design.md # 架构设计文档 ├── run_mcu_tool.bat # Windows 启动脚本 ├── Jlink_support/ # J-Link 设备数据库 │ ├── MCU.csv │ └── Flash.csv └── mcu_flash_tool/ # 主项目目录 ├── main.py # 程序入口 ├── __main__.py # 模块入口 ├── requirements.txt # Python 依赖 ├── build_package.bat # PyInstaller 打包脚本 ├── app/ # 应用层 (MVC) │ ├── main_window.py # 主窗口 (View) │ ├── controller.py # 业务协调器 (Controller) │ ├── app_signals.py # 全局事件总线 │ └── config_manager.py # JSON 配置管理 ├── core/ # 核心业务层 (Model) │ ├── device_manager.py # 设备管理器 │ ├── firmware_manager.py # 固件文件管理 │ ├── flash_operator.py # Flash 操作器 │ ├── chip_database.py # 芯片数据库 (2000+型号) │ ├── chip_list.xml # 芯片数据 (XML) │ └── flm_loader.py # .FLM 算法加载 ├── hardware/ # 硬件抽象层 │ ├── base_debugger.py # 抽象基类 (ABC) │ ├── pylink_backend.py # J-Link 后端 │ └── pyocd_backend.py # CMSIS-DAP 通用后端 ├── gui/ # GUI 组件 │ ├── widgets/ # 可复用组件 │ │ ├── config_panel.py # 左侧配置面板 │ │ ├── toolbar.py # 工具栏 │ │ ├── log_panel.py # 日志面板 │ │ ├── data_view.py # 数据视图 │ │ └── status_bar.py # 状态栏 │ └── dialogs/ # 对话框 │ ├── chip_selector.py # 芯片选择器 │ ├── settings_dialog.py# 设置对话框 │ └── about_dialog.py # 关于对话框 ├── utils/ # 工具模块 │ ├── helpers.py # 格式化/解析函数 │ └── logger.py # 分级日志系统 └── tests/ # 测试 ├── test_chip_database.py └── test_firmware_manager.py ``` --- ## 🔧 技术栈 | 层级 | 技术 | 说明 | |------|------|------| | **GUI** | PyQt6 | 专业桌面界面,信号/槽通信 | | **J-Link** | pylink-square | SEGGER 官方 Python 封装 | | **DAP-Link** | pyocd | 开源 CMSIS-DAP 调试器库 | | **HEX 解析** | intelhex | Intel HEX 文件读写 | | **SREC 解析** | bincopy | Motorola S-Record 文件解析 | | **ELF 解析** | pyelftools | ELF 可加载段提取 | | **异步** | QThread | PyQt 原生多线程 | --- ## 🧩 架构设计 项目采用严格的 **三层架构**: ``` ┌──────────────────────────────────────┐ │ GUI 层 (View) │ │ 主窗口 · 面板 · 对话框 · 工具栏 │ └────────────┬─────────────────────────┘ │ Qt 信号/槽 ┌────────────▼─────────────────────────┐ │ 业务逻辑层 (Controller) │ │ 设备管理 · 固件操作 · Flash操作 │ └────────────┬─────────────────────────┘ │ 策略模式 ┌────────────▼─────────────────────────┐ │ 硬件抽象层 (Hardware) │ │ BaseDebugger → Pylink / Pyocd │ └──────────────────────────────────────┘ ``` **核心设计模式**: - **策略模式**: `BaseDebugger` 抽象接口,`PylinkBackend` / `PyocdBackend` 双后端实现 - **单例模式**: `AppSignals` 事件总线、`Logger` 日志系统 - **观察者模式**: PyQt6 信号/槽实现组件间松耦合通信 --- ## 🎯 支持的调试器 | 调试器 | 后端 | 状态 | |--------|------|------| | **SEGGER J-Link** | pylink-square (优先) / pyocd (回退) | ✅ 稳定 | | **DAP-Link (CMSIS-DAP)** | pyocd | ✅ 稳定 | | **ST-Link** | pyocd | ✅ 支持 | ## 🧠 支持的芯片 预置 **2000+** 芯片型号,覆盖以下厂商: | 厂商 | 系列 | |------|------| | **ST** | STM32F1 / F4 / G0 / G4 / H7 | | **GD** | GD32F1 / F3 / F4 / H7 | | **NXP** | Kinetis / LPC | | **Nordic** | nRF52 | | **Atmel** | SAM3 / SAM4 / SAMC / SAMD | | **Espressif** | ESP32 | > 支持通过芯片选择器搜索、FLM 下载算法文件动态扩展。 --- ## 📝 使用说明 ### 基本操作流程 1. **选择芯片**: 在左侧面板输入或搜索目标芯片型号 2. **连接设备**: 点击「🔗 连接」按钮 3. **加载固件**: 点击「📂 打开」选择固件文件 (.hex/.bin/.elf/.srec) 4. **执行操作**: - 点击「🔥 烧录」将固件写入芯片 - 点击「📖 读取」从芯片读取固件 - 点击「▶️ 自动」一键完成擦除→烧录→校验 ### 快捷键 | 快捷键 | 功能 | |--------|------| | `Ctrl+O` | 打开固件文件 | | `Ctrl+S` | 保存数据 | | `Alt+F4` | 退出程序 | --- ## 🧪 运行测试 ```bash # 芯片数据库测试 python -m mcu_flash_tool.tests.test_chip_database # 固件管理器测试 python -m mcu_flash_tool.tests.test_firmware_manager ``` --- ## 📄 许可证 MIT License --- ## 👤 作者 **LC @ wangchong** --- *MCU Flash Tool V1.0.1 — 让 MCU 固件编程更简单 🚀*