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 sysjlink = None
flash_progress = 0# 初始化 J-Link 仿真器
def jlink_init():global jlinktry: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# 设置连接接口为 SWDjlink.set_tif(pylink.enums.JLinkInterfaces.SWD)# 连接目标设备jlink.connect('S32K314')except Exception as e:print("Failed to initialize J-Link:", e)jlink = Nonereturn Nonereturn jlink# 检查连接状态
def jlink_check_status():if jlink is None:print("J-Link is not initialized")returnopen_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")returnprint("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()) # 获取目标设备的核心 IDprint("device_family:", jlink.device_family()) # 获取目标设备的家族信息# 烧写文件到目标设备
def jlink_flash_file(file_path, address):if jlink is None:print("J-Link is not initialized")returnif file_path is None or address is None:print("File path or address is None")returnif 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_progressif action == b'Program':if (percentage - flash_progress) > 5:# print("Progress:", progress_string)print("Progress:", percentage)flash_progress = percentagedef jlink_reset():if jlink is None:print("J-Link is not initialized")returnjlink.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 = 0x00200000jlink_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!