Python pylink进行Jlink自动烧录到单片机
Pylink与Jlink实现电脑-板卡的通信和烧录
本文介绍了如何使用Python的pylink库进行单片机的连接和烧录。
1.安装pylink库,为通信和烧录做准备
此软件包需要SEGGER提供的J-Link软件和开发包。如果您目前没有安装开发包,则必须在使用此Python软件包之前先安装它。
具体的安装有如下的方式:
基本安装
使用pip安装PyLink:
pip install pylink-square
或者使用easy_install:
easy_install pylink-square
从源头建造
将项目克隆到本地存储库中,然后导航到该目录并运行。
python setup.py install
这将给你大师(开发分支)的提示。虽然我们努力使其始终稳定,但可能会引入一些错误,因此最好在安装之前先检查发布分支。
git checkout release-major.minor$python setup.py install
``
您可以将JLinkARM.dll复制到上面列出的任何目录。或者,将SEGGER J-Link目录添加到您的%PATH%中。
  为了使用此库,需要SEGGER提供的J-Link软件和开发包。一旦您拥有开发包的副本,您就可以开始使用PyLink。如果您使用SEGGER网站上提供的安装程序之一安装它,PyLink将自动找到该库,但为了获得最佳效果,您还应该根据您的操作系统执行以下操作之一:
#### 在MAC上
#选项A:将库文件复制到您的库目录。cp libjlinkarm.dylib /usr/local/lib/#选项B:将SEGGER的J-Link目录添加到您的动态库路径中。$ export DYLD_LIBRARY_PATH=/Applications/SEGGER/JLink:$DYLD_LIBRARY_PATH
```powershell
# Option A: Copy the library file to your libraries directory.
cp libjlinkarm.dylib /usr/local/lib/
# Option B: Add SEGGER's J-Link directory to your dynamic libraries path.
export DYLD_LIBRARY_PATH=/Applications/SEGGER/JLink:$DYLD_LIBRARY_PATH
在Windows上
Windows按以下顺序搜索DLL:
1.当前执行目录。
2.Windows系统目录。
3.Windows目录。
#选项A:将库复制到您的库目录。
cp libjlinkarm.so /usr/local/lib/#选项B:将SEGGER的J-Link库路径添加到您的库路径中。$ export LD_LIBRARY_PATH=/path/to/SEGGER/JLink:$LD_LIBRARY_PATH
2.pylink的简单操作
电脑链接Jlink
import pylink
jlink = pylink.JLink()
jlink.open()
print(jlink.product_name)#查看名称
print(jlink.opened())#查看是否打开jlink
print(jlink.connected())#查看jlink是否连接电脑
print(jlink.target_connected())#查看目标设备是否连接jlink
更新jlink固件
jlink.update_firmware()
连接目标CPU
jlink.connect('STM32F103R')
print(jlink.core_id())#查看目标CPU的id
print(jlink.target_connected())#查看目标设备是否连接
Flash文件
jlink.flash_file('/path/to/file', address)
Flash字节
data = [1, 2, 3, 4]
jlink.flash(data, 0)
读取指定地址数据
jlink.memory_read8(0, 4)
2.!!!本文重点:连接单片机并进行烧录
在安装好pylink和SEGGER提供的J-Link软件包之后,就可以进行Pyhton编程烧录了。
def jlink_download(bin_path,board,addr):
import pylink
import time
jlink = pylink.JLink()
jlink.open()
jlink.set_tif(pylink.enums.JLinkInterfaces.SWD)
jlink.connect(board)
jlink.set_reset_pin_low()
time.sleep(0.05)
jlink.set_reset_pin_high()
jlink.reset()
jlink.erase()
print(jlink.target_connected())
print(jlink.core_id)
print(jlink.device_family())
if(jlink.target_connected()):
a = jlink.flash_file(bin_path, addr)
jlink.reset()
# a = jlink.flash_file('deity_dvt-23.8.4-g52d07a-mods-202308041629-mfg-huffman.bin', addr)
print(a)
jlink.close()
bin_path = 'deity_dvt-23.8.4-g52d07a-mods-202308041629-mfg-huffman.bin'
board = 'AMA3B1KK-KCR'
addr = 0x0000c000
jlink_download(bin_path,board,addr)
注意:这里你需要更改的入下:
把bin_path改成你的bin路径
board改成你的板卡型号
addr是烧录的地址,只需要更改这三处
如果不是SWD接口,那需要更改一下接口,即jlink.set_tif(pylink.enums.JLinkInterfaces.SWD)
3.常见的问题汇总
1.引用代码出现报错
import pylink
jlink = pylink.JLink()
jlink.open()
#报错:
#AttributeError: module ‘pylink’ has no attribute ‘Jlink’
解决办法:
这里不是因为网上统一的说法,pyc文件的问题,这里需要特别注意,当help(pylink)的时候会看到可用文件是有jlink的,但是将pylink.JLink()更改为pylink.jlink()仍旧会报错ypeError: ‘module’ object is not callable,这里需要注意,jlink本身是个库文件,而不是函数本身,所以这里也不能引用,正确的用法是:
from pylink.jlink import JLink
jlink = JLink()
jlink.open()
#或者如下
from pylink import jlink
jlink = jlink.JLink()
2.在引用jlink库的时候出现了报错
#报错如下:
#line 295, in init
raise TypeError(‘Expected to :be given a valid DLL.’)
解决方法如下:
其中他进行了一步操作:将 JLinkARM.dll
和 JLink_x64.dll
文件复制到 Windows/system32
目录和运行会话的用户目录。初步尝试之后发现可以正确通过该步骤编码,正确识别jlink