基于python的jlink单片机自动化批量烧录工具

我写了一个基于python的jlink自动烧录器,自动检测jlink是否连接上指定mcu,连接上后自动烧录程序,烧录完成后等待断开,下一个mcu连接后继续自动烧录。

而且可以一台电脑连接多个jlink,通过运行多个脚本实现,一台电脑使用多个jlink批量烧录单片机

目前的话经过测试,上百次烧录是没有问题的。

代码在最后,相关仓库也在最后。

复制代码
import pylink
import time
import os

# ==================== 配置参数 ====================
MCU = 'STM32F407VE'
DOWNLOAD_FILE = 'E:\\other\\jlink_programing\\PWM.bin'
FLASH_START_ADDR = 0x08000000
POLL_INTERVAL = 2
COUNT_FILE = 'burn_count.txt'
JLINK_SERIAL = None
# ===================================================


def auto_burn_mcu():
    jlink = pylink.JLink()
    burn_count = 0
    print("="*50)
    print("🚀 自动烧录程序启动(核心ID=-1视为未连接)")
    print(f"📌 配置:MCU={MCU} | 间隔={POLL_INTERVAL}秒 | 累计烧录:{burn_count}次")
    print("💡 操作:连接MCU→自动烧录→断开接线→等下一轮")
    print("="*50)

    try:
        while True:
            # 每次循环重置J-Link,避免前次异常残留
            if jlink.opened():
                jlink.close()
            jlink.open(serial_no=JLINK_SERIAL)
            jlink.set_tif(pylink.enums.JLinkInterfaces.SWD)

            try:
                print(f"\n⌛ 等待MCU连接...(累计:{burn_count}次)")
                connect_result = jlink.connect(MCU, verbose=False)
                core_id = jlink.core_id() if jlink.connected else "-1"

                # 关键判断:核心ID=-1 或 未连接 → 视为没接上,重新等待
                if core_id == -1 or not jlink.connected:
                    print(f"⚠️  未检测到有效MCU(核心ID:0x{core_id}),{POLL_INTERVAL}秒后重试")
                    time.sleep(POLL_INTERVAL)
                    continue

                # 走到这步=真正连接成功
                print(f"✅ 检测到MCU!核心ID:0x{core_id}")
                print(f"🚀 开始烧录文件...")

                # 烧录前确保CPU暂停,避免冲突
                jlink.halt()
                jlink.flash_file(DOWNLOAD_FILE, FLASH_START_ADDR)
                jlink.reset()
                jlink.power_on()  # 正确启动程序

                # 计数更新
                burn_count += 1
                print("🎉 烧录成功!程序已运行")
                print("="*50)

                # 等待断开(读取核心ID,-1即视为断开)
                print("🔌 请断开MCU所有接线...")
                while True:
                    try:
                        current_id = jlink.core_id()
                        if current_id == -1:
                            print("✅ 已确认MCU断开!准备下一轮")
                            print("="*50)
                            break
                        time.sleep(1)
                    except pylink.JLinkException:
                        # 读取失败也视为断开
                        print("✅ 已确认MCU断开!准备下一轮")
                        print("="*50)
                        break

            except pylink.JLinkException as e:
                print(f"⚠️  连接异常:{str(e)[:30]}...,{POLL_INTERVAL}秒后重试")
                time.sleep(POLL_INTERVAL)
            except Exception as e:
                print(f"\n❌ 操作异常:{str(e)}")
                print("💡 排查:接线是否牢固 | MCU供电是否稳定")
                print("="*50)
                time.sleep(POLL_INTERVAL)

    except KeyboardInterrupt:
        print(f"\n\n🛑 程序终止")
        print(f"📊 本次烧录:{burn_count}次")
    finally:
        jlink.close()
        print("🔌 J-Link已断开,程序退出")

if __name__ == "__main__":
    auto_burn_mcu()

仓库地址jlink-auto-flash-mcu: 一款基于 Python + JLink 的 **单片机自动化批量烧录工具**,支持「检测到单片机连接即自动烧录,断开后持续等待下一次连接」,无需手动触发,大幅提升批量生产/测试场景的效率。 使用前请先安装pylink库 pip install pylink

相关推荐
Patrick_Wilson3 小时前
从 React 到 Flutter:写给前端的一张跨端知识地图
前端·flutter·react.js
颜酱3 小时前
06 | 把 meta_config 同步进 MySQL(生成阶段)
前端·人工智能·后端
OpenTiny社区4 小时前
Loop Engineering:让 AI Agent 自己跑起来的工程方法
前端·github
IT_陈寒4 小时前
SpringBoot自动配置坑了我一周,原来问题这么蠢!
前端·人工智能·后端
kyriewen4 小时前
我review了一份Vibe Coding写的前端代码——能跑,但5个地方迟早要命
前端·javascript·ai编程
chenment5 小时前
ComfyUI 自定义节点开发:从零扩展你的图像生成工作流
python·stable diffusion
REDcker5 小时前
Cesium三维WebGIS入门详解
前端·gis·web·cesium·webgis
0暗影流光05 小时前
十倍效能提升——Web 基础研发体系的建立
前端
前端一课5 小时前
用Agent Skill重构代码:300行缩至30行的实战教程
前端
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:IM 即时通讯模块,一个被低估的「全功能聊天系统」
java·前端·vue.js·产品经理·ai编程