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

相关推荐
Y3815326625 分钟前
印度电商数据采集教程:用 SerpBase 查 Flipkart/Myntra/Ajio 商品(附代码)
数据库·python
console.log('npc')22 分钟前
第 1 章 项目概述与环境搭建
前端·人工智能·大模型
定栓23 分钟前
Webpack迁到Vite第七节(二):全家桶移除 — Babel 全家桶深度分析
前端·webpack·node.js
阿维的博客日记31 分钟前
大白话解析快排Python
python
IT_陈寒31 分钟前
React组件莫名重渲染?你可能忘了这个小细节
前端·人工智能·后端
鶴哥只手遮天43 分钟前
React 19.3.1 源码深度剖析-第 12 章(下)RSC 与 Flight 协议
前端·react.js·开源
deli00743 分钟前
TCP 三次握手到底发几个包?丢包重传动画实测一遍
前端
doujiaozh1 小时前
我在 DOS 6.22 上跑通了 Kimi AI:一场跨越 40 年的硬核接力
python
盟接之桥1 小时前
盟接之桥谈线束数字化-按单入按单出:线束企业库存管理的破局之道
大数据·前端·网络·数据库·人工智能·制造
巴勒个啦1 小时前
Prompt Engineering 实战:5 个让 AI 生成生产级业务代码的工程模式
java·前端