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

相关推荐
excel2 小时前
深度解析:Vue 3 中 ssrTransformTransitionGroup 的实现原理与机制
前端
胖哥真不错2 小时前
Python基于PyTorch实现多输入多输出进行CNN卷积神经网络回归预测项目实战
pytorch·python·毕业设计·课程设计·毕设·多输入多输出·cnn卷积神经网络回归预测
星尘库2 小时前
抖音自动化-实现给特定用户发私信
前端·javascript·自动化
程序员-小李2 小时前
基于PyTorch的动物识别模型训练与应用实战
人工智能·pytorch·python
excel2 小时前
深入理解 Vue SSR 中的 v-for 编译逻辑:ssrProcessFor 源码解析
前端
excel2 小时前
Vue SSR 编译器核心逻辑解析:ssrInjectFallthroughAttrs
前端
excel2 小时前
深度解析:Vue SSR 编译器中的 ssrTransformElement 与 ssrProcessElement
前端
excel2 小时前
Vue SSR 源码解读:ssrTransformTransition 与 ssrProcessTransition 的实现逻辑
前端
excel2 小时前
Vue SSR 深度解析:ssrProcessTeleport 的源码机制与实现原理
前端