Python脚本实现通过JLink烧录Hex文件

news2025/1/21 15:00:17

1 安装JLink驱动程序

驱动安装包下载路径:https://www.segger.com/downloads/jlink/
在这里插入图片描述


选择对应的版本下载:
在这里插入图片描述


将下载的安装文件双击进行安装。

2 安装 pylink 包

 pip install pylink

3 查询 JLink 设备的 serial number

将JLink通过USB线插入电脑。
windows开始菜单 - J-Link Commander,打开 J-Link Commander 界面
在这里插入图片描述


使用 showemulist 命令查看 serial number.

J-Link>showemulist
J-Link[0]: Connection: USB, Serial number: 601012352, ProductName: J-Link PLUS

4 python 编程

import pylink
import sys

jlink = None
flash_progress = 0

# 初始化 J-Link 仿真器
def jlink_init():
    global jlink
    try:
        jlink = pylink.JLink()  # 创建 J-Link 对象
        if jlink is None:
            print("Failed to create J-Link object")
            return None

        # 打开 J-Link 仿真器
        jlink.open(serial_no=601012352)  # 通过命令 "showEmuList" 在 "J-Link Commander" 中获取 serial_no

        # 设置连接接口为 SWD
        jlink.set_tif(pylink.enums.JLinkInterfaces.SWD)

        # 连接目标设备
        jlink.connect('S32K314')

    except Exception as e:
        print("Failed to initialize J-Link:", e)
        jlink = None
        return None

    return jlink


# 检查连接状态
def jlink_check_status():
    if jlink is None:
        print("J-Link is not initialized")
        return
    
    open_status = jlink.opened()  # 检查 J-Link 仿真器是否打开
    if not open_status:
        print("J-Link is not opened")
    else:
        print("J-Link is opened")

    connected_status = jlink.connected()  # 检查 J-Link 仿真器是否连接
    if not connected_status:
        print("J-Link is not connected")
    else:
        print("J-Link is connected")

    target_connected_status = jlink.target_connected()  # 检查仿真器是否和目标设备连接
    if not target_connected_status:
        print("Target is not connected")
    else:
        print("Target is connected")

# 获取设备信息
def jlink_get_info():
    if jlink is None:
        print("J-Link is not initialized")
        return
    
    print("firmware_version:", jlink.firmware_version)  # 获取 J-Link 仿真器的固件版本
    print("product_name:", jlink.product_name)  # 获取 J-Link 仿真器的产品名称
    print("OEM:", jlink.oem)  # 获取 OEM 信息
    print("core_id:", jlink.core_id())  # 获取目标设备的核心 ID
    print("device_family:", jlink.device_family())  # 获取目标设备的家族信息

# 烧写文件到目标设备
def jlink_flash_file(file_path, address):
    if jlink is None:
        print("J-Link is not initialized")
        return
    
    if file_path is None or address is None:
        print("File path or address is None")
        return
    
    if address < 0x00400000 or address > 0x00500000:
        print("The flash start address is invalid.")
        return

    # 烧写文件到目标设备
    try:
        jlink.flash_file(file_path, address, on_progress)
        print("Flashing done!")
    except Exception as e:
        print("Flashing failed:", e)

def on_progress(action, progress_string, percentage):
    global flash_progress
    if action == b'Program':
        if (percentage - flash_progress) > 5:
            # print("Progress:",  progress_string)
            print("Progress:", percentage)
            flash_progress = percentage

def jlink_reset():
    if jlink is None:
        print("J-Link is not initialized")
        return
    
    jlink.reset()  # 重置目标设备
    jlink.restart()
    print("Reset done!")

# 下载文件到目标设备
def jlink_deinit(jlink):
    # 断开连接
    jlink.close()

if __name__ == '__main__':
    jlink_init()
    if jlink is None:
        print("J-Link is not initialized")
        sys.exit(1)
    
    jlink_check_status()
    jlink_get_info()

    # 烧写文件到目标设备
    file_path = "e:/01_code/test.hex"  # 注意路径只能用 "/" 而不能用 "\",否则会报错
    address = 0x00200000
    jlink_flash_file(file_path, address)

    # 重置目标设备
    jlink_reset()

    # 断开连接
    jlink_deinit(jlink)

运行效果如下:

J-Link is opened
J-Link is connected
Target is connected
firmware_version: J-Link V11 compiled Mar 14 2024 13:16:08
product_name: SEGGER J-Link
OEM: None
core_id: 1805657207
device_family: 14
The flash start address is invalid.
Reset done!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2279864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Qt】04-Lambda表达式

前言一、概念引入二、使用方法2.1 基本用法代码示例2.2 捕获外部变量2.3 参数列表 三、完整代码mywidget.cppsecondwidget.cppmywidget.hsecondwidget.h 总结 前言 一、概念引入 Lambda表达式&#xff08;Lambda Expressions&#xff09;是C11标准引入的一种匿名函数对象&…

[STM32 HAL库]串口中断编程思路

一、前言 最近在准备蓝桥杯比赛&#xff08;嵌入式赛道&#xff09;&#xff0c;研究了以下串口空闲中断DMA接收不定长的数据&#xff0c;感觉这个方法的接收效率很高&#xff0c;十分好用。方法配置都成功了&#xff0c;但是有一个点需要进行考虑&#xff0c;就是一般我们需要…

汇编与逆向(一)-汇编工具简介

RadASM是一款著名的WIN32汇编编辑器&#xff0c;支持MASM、TASM等多种汇编编译器&#xff0c;Windows界面&#xff0c;支持语法高亮&#xff0c;自带一个资源编辑器和一个调试器。 一、汇编IDE工具&#xff1a;RadASM RadASM有内置的语言包 下载地址&#xff1a;RadASM asse…

Langchain+FastApi+Vue前后端Ai对话(超详细)

一、引入 首先可以先看下作者的文章 FastApi相关文章&#xff1a;创建最简单FastApi的项目Vue相关文章&#xff1a;最简单的aixos二次封装Langchain相关文章&#xff1a;如何使用LangSmith跟踪deepseek模型 二、后端搭建 1 项目文件结构 routers&#xff1a;存放api接口se…

leetcode49-字母异位词分组

leetcode 49 思路 通过一个哈希表进行记录每个分组&#xff0c;遍历strs&#xff0c;然后对每个字符串item进行排序&#xff0c;比如&#xff1a;acb bac cab都会被排序为’abc’,然后以abc作为map的key&#xff0c;value就是存放所有匹配出来为key的值&#xff0c;最后把ma…

深度学习 DAY1:RNN 神经网络及其变体网络(LSTM、GRU)

实验介绍 RNN 网络是一种基础的多层反馈神经网络&#xff0c;该神经网络的节点定向连接成环&#xff0c;其内部状态可以展示动态时序行为。相比于前馈神经网络&#xff0c;该网络内部具有很强的记忆性&#xff0c;它可以利用它内部的记忆来处理任意时序的输入序列&#xff0c;…

跨境电商使用云手机用来做什么呢?

随着跨境电商的发展&#xff0c;越来越多的卖家开始尝试使用云手机来协助他们的业务&#xff0c;这是因为云手机具有许多优势。那么&#xff0c;具体来说&#xff0c;跨境电商使用云手机可以做哪些事情呢&#xff1f; &#xff08;一&#xff09;实现多账号登录和管理 跨境电商…

【Linux】gawk编辑器二

一、变量 gawk编程语言支持两种变量&#xff1a;内建变量和自定义变量。 1、内建变量 gawk使用内建变量来引用一些特殊的功能。 字段和记录分隔符变量 数据字段变量 此变量允许使用美元符号&#xff08;$&#xff09;和字段在记录中的位置值来引用对应的字段。要引用记录…

部署Metricbeat监测ES

官方参考文档 安装Metricbeat curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.17.27-linux-x86_64.tar.gztar xzvf metricbeat-7.17.27-linux-x86_64.tar.gz设置 Metricbeat连接到 Elasticsearch 进入metricbeat目录配置metricbeat.yml …

Linux--运维

Mysql主从同步 通过将MySQL的某一台主机&#xff08;master&#xff09;的数据复制到其他主机&#xff08;slaves&#xff09;上&#xff0c;并重新执行一遍来执行 复制过程中一台服务器充当主服务器&#xff0c;而其他一个或多个其他服务器充当从服务器 为什么要做主从复制 …

【odbc】odbc连接kerberos认证的 hive和spark thriftserver

hive odbc驱动&#xff0c;以下两种都可以 教程&#xff1a;使用 ODBC 和 PowerShell 查询 Apache HiveHive ODBC Connector 2.8.0 for Cloudera Enterprise spark thriftserver本质就是披着hiveserver的外壳的spark server 完成kerberos认证: &#xff08;1&#xff09;可以…

家政服务小程序,打造智慧家政新体验

春节即将来临&#xff0c;家政市场呈现出了火热的场景&#xff0c;大众对家政服务的需求持续增加。 近年来&#xff0c;家政市场开始倾向数字化、智能化&#xff0c;借助科学技术打造家政数字化平台&#xff0c;让大众在手机上就可以预约家政服务&#xff0c;减少传统家政市场…

SQL在线格式化 - 加菲工具

SQL在线格式化 - 加菲工具 打开网站 加菲工具 https://www.orcc.online 选择“SQL 在线格式化” 或者直接访问网址 https://www.orcc.online/tools/sql 输入sql&#xff0c;点击上方的格式化按钮即可 输入框得到格式化后的sql结果

WPF1-从最简单的xaml开始.md

1. 最简单的WPF应用 1.1. App.config1.2. App.xaml 和 App.xaml.cs1.3. MainWindow.xaml 和 MainWindow.xaml.cs 2. 正式开始分析 2.1. 声明即定义2.2. 命名空间 2.2.1. xaml的Property和Attribute2.2.2. xaml中命名空间2.2.3. partial关键字 学习WPF&#xff0c;肯定要先学…

cursor重构谷粒商城02——30分钟构建图书管理系统【cursor使用教程番外篇】

前言&#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具&#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中&#xff0c;帮助初级程序员快速进阶&#xff0c;以最快的速度&#xff0c;效率&#xff0c;快速进阶到中高阶程序员。 本项目将基于谷粒商城…

Linux探秘坊-------3.开发工具详解(1)

1 初识vim编辑器 创建第一个vim编辑的代码 1.新建文件 2.使用vim打开 3.打开默认是命令模式&#xff0c;写代码需要在屏幕上输出“i”字符 1.写完代码后要按Esc键退出到指令模式2.再按shift:wq即可保存并退出vim &#xff08;因为不支持鼠标&#xff0c;通常 使用键盘上的箭…

ESP-Skainet语音唤醒技术,设备高效语音识别方案,个性化交互应用

在当今数字化、智能化飞速发展的时代&#xff0c;物联网&#xff08;IoT&#xff09;与人工智能&#xff08;AI&#xff09;的深度融合正在重塑我们的生活和工作方式。 在智能家居的生态系统中&#xff0c;语音唤醒技术不仅能够为用户提供个性化的服务&#xff0c;还能通过定制…

25西湖ctf

2025西湖冬季 图片不全去我blog找&#x1f447; 25西湖 | DDLS BLOG 文章所有参考将在文末给出 web web1 ssti 太简单的不赘述&#xff0c;知道用就行 {{cycler.__init__.__globals__.__builtins__[__import__](os).popen($(printf "\150\145\141\144\40\57\146\1…

Linux C\C++方式下的文件I/O编程

【图书推荐】《Linux C与C一线开发实践&#xff08;第2版&#xff09;》_linux c与c一线开发实践pdf-CSDN博客 《Linux C与C一线开发实践&#xff08;第2版&#xff09;&#xff08;Linux技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 Lin…

python轻量级框架-flask

简述 Flask 是 Python 生态圈中一个基于 Python 的Web 框架。其轻量、模块化和易于扩展的特点导致其被广泛使用&#xff0c;适合快速开发 Web 应用以及构建小型到中型项目。它提供了开发 Web 应用最基础的工具和组件。之所以称为微框架&#xff0c;是因为它与一些大型 Web 框架…