基于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

相关推荐
LeeYaMaster2 小时前
15个例子熟练异步框架 Zone.js
前端·angular.js
evelynlab2 小时前
打包原理
前端
拳打南山敬老院2 小时前
Context 不是压缩出来的,而是设计出来的
前端·后端·aigc
用户3076752811272 小时前
💡 从"傻等"到"流淌":我在AI项目中实现流式输出的血泪史(附真实代码+深度解析)
前端
bluceli2 小时前
前端性能优化实战指南:让你的网页飞起来
前端·性能优化
SuperEugene2 小时前
Vue状态管理扫盲篇:如何设计一个合理的全局状态树 | 用户、权限、字典、布局配置
前端·vue.js·面试
没想好d2 小时前
通用管理后台组件库-9-高级表格组件
前端
阿虎儿3 小时前
React Hook 入门指南
前端·react.js
核以解忧3 小时前
借助VTable Skill实现10W+数据渲染
前端
IVEN_3 小时前
只会Python皮毛?深入理解这几点,轻松进阶全栈开发
python·全栈