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

相关推荐
十一.3664 分钟前
79-82 call和apply,arguments,Date对象,Math
开发语言·前端·javascript
yuanjj887 分钟前
域格移芯平台模块FTP下载应用
单片机·物联网·网络协议
霍格沃兹测试开发学社-小明9 分钟前
测试左移2.0:在开发周期前端筑起质量防线
前端·javascript·网络·人工智能·测试工具·easyui
用户990450177800912 分钟前
若依工作流-包含网关
前端
xwill*14 分钟前
RDT-1B: A DIFFUSION FOUNDATION MODEL FOR BIMANUAL MANIPULATION
人工智能·pytorch·python·深度学习
陈奕昆21 分钟前
n8n实战营Day2课时2:Loop+Merge节点进阶·Excel批量校验实操
人工智能·python·excel·n8n
by__csdn22 分钟前
Vue 中计算属性、监听属性与函数方法的区别详解
前端·javascript·vue.js·typescript·vue·css3·html5
程序猿追25 分钟前
PyTorch算子模板库技术解读:无缝衔接PyTorch模型与Ascend硬件的桥梁
人工智能·pytorch·python·深度学习·机器学习
古译汉书30 分钟前
嵌入式笔记(个人总结)
数据结构·笔记·stm32·单片机·嵌入式硬件
on_pluto_42 分钟前
【debug】关于如何让电脑里面的两个cuda共存
linux·服务器·前端