搜索
bottom↓
回复: 181

Python+JLinkARM.dll实现JLINK编程器,原创首发!!

  [复制链接]

出0入25汤圆

发表于 2017-3-11 11:41:31 | 显示全部楼层 |阅读模式
本帖最后由 XIVN1987 于 2017-3-11 12:37 编辑

之前发过一个帖子:Python实现RTT客户端,源码+详细讲解,绝对原创!申请置酷!

RTT客户端能实现的根本原因是:Python通过调用JLinkARM.dll,能够实现对单片机任意内存、寄存器的读写

既然能读写任意寄存器,那通过读写STM32内部的Flash寄存器,肯定也可以实现对STM32的编程了,,所以我实现了下面这个简易JLINK编程器


具体的实现代码如下图所示,实现很简单,基本就是C语言擦、写Flash的直白翻译,,就算不懂Python,也能看懂这些语句每条是干啥的




源码和打包后的单文件.exe文件如下,希望大家喜欢



最后,再强调一句Python通过调用JLinkARM.dll,能够实现对单片机任意内存、寄存器的读写,所以通过这种方式能够实现对Cortex-M单片机任意外设的控制,,比如通过写DAC将STM32变成一个信号发生器、通过读ADC将STM32变成一个万用表或示波器,通过读写SPI相当于把STM32变成了一个USB转SPI,,这样就可以通过编写一些脚本将STM32开发板变成一个万能仪表,,想想还有点儿小激动啊

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入8汤圆

发表于 2017-3-11 11:45:12 | 显示全部楼层
看起来很 666 的样子,
谢谢分享,关注一下。

出40入42汤圆

发表于 2017-3-11 11:53:05 | 显示全部楼层
来捧场的

出20入0汤圆

发表于 2017-3-11 12:05:34 | 显示全部楼层
  很强大,谢谢。

出0入0汤圆

发表于 2017-3-11 12:06:19 | 显示全部楼层
屌的不行,牛逼

出0入13汤圆

发表于 2017-3-11 12:27:45 来自手机 | 显示全部楼层
这个不错,支持一下

出0入0汤圆

发表于 2017-3-11 12:32:45 | 显示全部楼层
原来是调用JLINK的官方DLL实现对官方JLINK的控制,我以为是Python控制自己做的硬件编程器。呵呵
类似的,当然也可以调用 ST的 st-link/V2 控制st-link/V2 对STM进行操控。
不过,还是对楼主赞一个!

出0入0汤圆

发表于 2017-3-11 12:34:05 | 显示全部楼层
好厉害,顶一下

出0入0汤圆

发表于 2017-3-11 13:21:30 | 显示全部楼层
不错,曾经试过用批处理调用jlinkARM.dll 下载STM32程序

出0入0汤圆

发表于 2017-3-11 13:27:17 | 显示全部楼层
JLinkARM.dll 动态库的资料能发一份上来吗?

出0入0汤圆

发表于 2017-3-11 13:36:41 | 显示全部楼层
哇哇哇!!
这个好啊

可以用这个来实现UID的自动加密呀、外部参数自动校准呀

出0入8汤圆

发表于 2017-3-11 13:51:58 | 显示全部楼层
lr120363092 发表于 2017-3-11 13:21
不错,曾经试过用批处理调用jlinkARM.dll 下载STM32程序

你这个应该是用 命令行接口 来实现的吧,
不是用 dll 的 api?

出0入25汤圆

 楼主| 发表于 2017-3-11 13:55:51 | 显示全部楼层
hyz_avr 发表于 2017-3-11 13:27
JLinkARM.dll 动态库的资料能发一份上来吗?


资料我也没有,我想这个应该只有SEGGER公司的合作伙伴才能拿到吧

链接JLinkARM.dll的代码在jlink.py文件中,我也是从网上下载的

出0入0汤圆

发表于 2017-3-11 14:21:30 | 显示全部楼层
界面用的什么库画的?

出0入25汤圆

 楼主| 发表于 2017-3-11 14:38:19 来自手机 | 显示全部楼层
seaman117 发表于 2017-3-11 14:21
界面用的什么库画的?

PyQt,QtDesigner画界面

出0入0汤圆

发表于 2017-3-11 14:59:39 | 显示全部楼层
另外的Py接口还有OpenOCD支持范围就广一些,可惜版本太老。

出0入0汤圆

发表于 2017-3-11 15:28:17 来自手机 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2017-3-11 16:30:57 来自手机 | 显示全部楼层
Mark.            

出0入90汤圆

发表于 2017-3-11 16:52:46 | 显示全部楼层
这个软件有点意义啊。如果能找到linux下面的jlink这个文件。那就可以实现在linux板子上面对STM32在线更新了。

出0入0汤圆

发表于 2017-3-11 16:56:20 | 显示全部楼层
搞定dll接口就一切都可以了

出0入0汤圆

发表于 2017-3-11 16:58:59 | 显示全部楼层
楼主太强了!跟着学习。

出0入0汤圆

发表于 2017-3-11 17:14:50 | 显示全部楼层
多谢楼主分享

出0入0汤圆

发表于 2017-3-11 17:58:13 | 显示全部楼层
g感谢大牛,Mark!

出0入0汤圆

发表于 2017-3-11 18:10:32 | 显示全部楼层
楼主,问下,ARM 自家的 U-Link2 有没有类似的 DLL 可以拿来把玩的?

出0入0汤圆

发表于 2017-3-11 18:19:43 | 显示全部楼层
搜了下,果然有类似的,叫 uVision Socket Interface:http://www.keil.com/appnotes/docs/apnt_198.asp

出0入0汤圆

发表于 2017-3-11 20:43:31 来自手机 | 显示全部楼层
楼主,牛,又放毒了,向楼主学习。呵呵!

出0入0汤圆

发表于 2017-3-11 20:56:56 | 显示全部楼层

这个DLL接口API资料有吗?

出0入0汤圆

发表于 2017-3-11 20:59:38 来自手机 | 显示全部楼层
不错  支持一下

出0入0汤圆

发表于 2017-3-11 21:53:20 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2017-3-11 21:53:55 | 显示全部楼层
其它ARM9之类的可以吗?

出0入4汤圆

发表于 2017-3-13 02:37:21 来自手机 | 显示全部楼层
这主意好。

出0入0汤圆

发表于 2017-3-13 08:17:56 | 显示全部楼层
好犀利的样子,关注。

出0入0汤圆

发表于 2017-3-13 08:34:28 | 显示全部楼层
好厉害。

出0入0汤圆

发表于 2017-3-13 09:23:10 | 显示全部楼层
单片机+SWD(jtag)协议也可以, 就是速度和通用性上赶不上JLINK+JLINKARM.DLL

出0入0汤圆

发表于 2017-3-13 09:29:09 | 显示全部楼层
厉害了哥

出0入8汤圆

发表于 2017-3-13 10:52:18 | 显示全部楼层
楼主  python  玩的比较溜啊   PyQt,QtDesigner在window系统下 不是有bug  生成不了python源码吗?难道是新版解决了。

出0入0汤圆

发表于 2017-3-13 11:26:15 | 显示全部楼层
跟着楼主的足迹过来顶一顶

出0入0汤圆

发表于 2017-3-13 11:32:43 | 显示全部楼层
牛啊,楼主!

出0入25汤圆

 楼主| 发表于 2017-3-13 11:43:11 | 显示全部楼层
kebaojun305 发表于 2017-3-13 10:52
楼主  python  玩的比较溜啊   PyQt,QtDesigner在window系统下 不是有bug  生成不了python源码吗?难道是 ...


QtDesigner生成的文件是.ui文件,通过"pyuic4 MCUProg.ui -o MCUProg_UI.py“生成python代码文件使用,,没有bug,一直可以用!!

出0入8汤圆

发表于 2017-3-13 11:47:09 | 显示全部楼层
这下学python有动力了,谢谢楼主的分享。

出0入0汤圆

发表于 2017-3-13 13:39:45 | 显示全部楼层
好厉害            

出0入0汤圆

发表于 2017-3-13 14:09:57 | 显示全部楼层
这个很厉害啊!不错不错!

出0入8汤圆

发表于 2017-3-13 17:05:41 | 显示全部楼层
XIVN1987 发表于 2017-3-13 11:43
QtDesigner生成的文件是.ui文件,通过"pyuic4 MCUProg.ui -o MCUProg_UI.py“生成python代码文件使用, ...

我整过几次都不行,生成不了,google 搜了下 说是windows下的bug  没有找到解决办法。难道是版本问题

出0入0汤圆

发表于 2017-3-13 21:13:55 | 显示全部楼层
牛,,,不过jlink下载程序是通过往mcu里写入一个程序,然后和这个程序交互进行下载的,这样比直接写快

出0入25汤圆

 楼主| 发表于 2017-3-13 21:31:05 | 显示全部楼层
myxiaonia 发表于 2017-3-13 21:13
牛,,,不过jlink下载程序是通过往mcu里写入一个程序,然后和这个程序交互进行下载的,这样比直接写快 ...


多谢大侠阔气的打赏啊

大侠一下就说到关键缺点了,速度确实比较慢,,生产性质的批量烧写的话确实不太合适

主要目的还是演示一种脚本程序通过JLINK直接操作MCU寄存器的方法,,这种玩儿法灵活性很强,可以做很多有意思的事情

出0入0汤圆

发表于 2017-3-13 22:34:05 | 显示全部楼层
期待想到一个应用现场

出0入0汤圆

发表于 2017-3-13 23:05:26 | 显示全部楼层
XIVN1987 发表于 2017-3-13 21:31
多谢大侠阔气的打赏啊  

大侠一下就说到关键缺点了,速度确实比较慢,,生产性质的批量 ...

我哪对得起大侠称号啊,,,我挺关注你的啊嘿嘿,论坛里谁玩python溜就想到你啊

出0入0汤圆

发表于 2017-3-13 23:14:07 | 显示全部楼层
顶了再说,肯定可以用上!

出0入25汤圆

 楼主| 发表于 2017-3-13 23:17:24 | 显示全部楼层
本帖最后由 XIVN1987 于 2017-3-13 23:21 编辑
myxiaonia 发表于 2017-3-13 23:05
我哪对得起大侠称号啊,,,我挺关注你的啊嘿嘿,论坛里谁玩python溜就想到你啊 ...



MCUer里面python玩儿的溜,pythoner里面MCU玩儿的溜 看来还是跨界发展比较容易火

出0入0汤圆

发表于 2017-3-14 08:18:23 | 显示全部楼层
强大, thanks for share

出0入0汤圆

发表于 2017-3-14 10:47:45 | 显示全部楼层
这个不错。不过你这个办法操作起来效率比较低,而且有些功能可能并不一定能实现。keil下有flash编程的算法库。其实就是把code加载到ram中运行,然后通过jlink操作内存和寄存器来实现与ram总的code交互的方式来工作。这样就可以实现对各种SWD接口的芯片的编程。包括你说的其他功能,而且是全速运行哦。

出0入25汤圆

 楼主| 发表于 2017-3-14 11:01:53 | 显示全部楼层
zstein 发表于 2017-3-14 10:47
这个不错。不过你这个办法操作起来效率比较低,而且有些功能可能并不一定能实现。keil下有flash编程的算法 ...


是,不过那个要求同时写单片机上运行的C代码和控制JLink的上位机程序,这个只需要写上位机脚本,更简单、灵活,,各有优缺点吧!

出0入0汤圆

发表于 2017-3-14 11:58:36 | 显示全部楼层
JLinkARM.dll, 大俠有沒有把它的API函數列反譯出來自用?

出0入25汤圆

 楼主| 发表于 2017-3-14 12:29:43 | 显示全部楼层
xiaolaba 发表于 2017-3-14 11:58
JLinkARM.dll, 大俠有沒有把它的API函數列反譯出來自用?


额,没这能力啊

出0入0汤圆

发表于 2017-3-14 12:40:05 | 显示全部楼层
看你这贴子,我也好激动,牛~

出0入0汤圆

发表于 2017-3-14 12:40:55 | 显示全部楼层
本帖最后由 xiaolaba 于 2017-3-14 12:44 编辑


所以你的使用它給SDK裡面 jlinkarmdll.h 的 寫套接的嗎
還是俺漏看了甚麼
其實要這樣請教是想看看有沒有後門或暗門藏在DLL裡面.


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入25汤圆

 楼主| 发表于 2017-3-14 13:21:51 | 显示全部楼层
xiaolaba 发表于 2017-3-14 12:40
所以你的使用它給SDK裡面 jlinkarmdll.h 的 寫套接的嗎
還是俺漏看了甚麼
其實要這樣請教是想看看有沒有 ...


1楼有源码,我用jlink.py中的代码控制JLinkARM.dll的,,jlink.py我从网上找的

出0入0汤圆

发表于 2017-3-14 13:47:14 | 显示全部楼层
这个思路好,谢谢分享,关注先。

出0入0汤圆

发表于 2017-3-14 14:40:10 | 显示全部楼层
XIVN1987 发表于 2017-3-14 13:21
1楼有源码,我用jlink.py中的代码控制JLinkARM.dll的,,jlink.py我从网上找的

好的了解
謝謝你的資訊

出0入0汤圆

发表于 2017-3-14 21:38:20 | 显示全部楼层
很强大,谢谢。

出870入263汤圆

发表于 2017-3-16 18:56:01 | 显示全部楼层
xiaolaba 发表于 2017-3-14 12:40
所以你的使用它給SDK裡面 jlinkarmdll.h 的 寫套接的嗎
還是俺漏看了甚麼
其實要這樣請教是想看看有沒有 ...

请问这是哪个页面URL,这个sdk能下载到吗?

出0入0汤圆

发表于 2017-3-31 20:53:07 | 显示全部楼层
可以用来实现脚本化测试功能 , 厉害

出0入0汤圆

发表于 2017-4-1 00:01:00 | 显示全部楼层
大牛,jlink玩的好溜,这个一定要收藏。

出0入4汤圆

发表于 2017-4-1 08:18:09 | 显示全部楼层
楼主 jlink 的SDK哪里有下载?

出0入25汤圆

 楼主| 发表于 2017-4-1 09:05:31 | 显示全部楼层
acmilannast 发表于 2017-4-1 08:18
楼主 jlink 的SDK哪里有下载?


我也没见过JLink SDK,有jlink.py这个文件就能操作JLink,,1楼有可以下载

出0入0汤圆

发表于 2017-4-1 10:16:29 | 显示全部楼层
谢谢楼主分享,其实可以写个批处理脚本,讲目标文件放到当前目录下,调用jlink.exe下载到指定的位置上即可。
给生产的话,连上仿真器直接双击即可实现。

出0入0汤圆

发表于 2017-4-1 11:44:05 | 显示全部楼层
资料很棒,谢谢分享~看来电工们除了会C还要多学点儿别的东西啊

出0入8汤圆

发表于 2017-4-1 12:05:51 来自手机 | 显示全部楼层
牛逼。。。。。。

出100入101汤圆

发表于 2017-4-1 13:08:46 | 显示全部楼层
楼主太强了!跟着学习。

出0入0汤圆

发表于 2017-4-1 13:19:53 | 显示全部楼层
楼主,牛人,mark一下,Python+JLinkARM.dll实现JLINK编程器

出0入8汤圆

发表于 2017-6-3 12:15:41 | 显示全部楼层
竟然只有F1

出0入0汤圆

发表于 2017-6-6 09:23:11 | 显示全部楼层
楼主强,学习了

出0入0汤圆

发表于 2017-6-22 14:10:18 | 显示全部楼层
jlink 变成 mark

出0入0汤圆

发表于 2017-6-22 14:48:09 | 显示全部楼层
这个改改,看来就可以跨平台linux, Mac下用喔

出0入0汤圆

发表于 2017-6-25 02:23:47 | 显示全部楼层
顶一下楼主

出0入0汤圆

发表于 2017-6-25 06:05:41 | 显示全部楼层
大大的来个赞

出0入0汤圆

发表于 2017-6-25 06:21:27 来自手机 | 显示全部楼层
顶,这个牛逼

出0入0汤圆

发表于 2017-6-26 00:39:39 | 显示全部楼层
关注一下,刚好学Python~~

出20入118汤圆

发表于 2017-6-27 22:57:20 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2017-6-28 23:31:14 | 显示全部楼层
其实完全可以用Tkinter写界面

出0入25汤圆

 楼主| 发表于 2017-6-28 23:47:31 | 显示全部楼层
proteldxp 发表于 2017-6-28 23:31
其实完全可以用Tkinter写界面


确实,用Tkinter的话打包成exe应该可以小很多,对于这种非常简单的界面还是有优势的

出0入0汤圆

发表于 2017-7-10 09:00:19 | 显示全部楼层
楼主,寄存器的读写和FLASH编程用的函数一样?
谢谢。

出0入0汤圆

发表于 2017-7-10 09:16:00 | 显示全部楼层
牛逼!谢谢楼主分享!

出0入0汤圆

发表于 2017-7-10 09:36:28 | 显示全部楼层
排队学习学习!

出0入25汤圆

 楼主| 发表于 2017-7-10 10:42:41 | 显示全部楼层
Excellence 发表于 2017-7-10 09:00
楼主,寄存器的读写和FLASH编程用的函数一样?
谢谢。


对,完全一样。
其实就是Python通过JLinkARM.dll控制JLINK调试器读写MCU的内存空间(外设寄存器就是SRAM内存),C怎么操作这些寄存器、Python就怎么操作

不过如果你要做产品级的编程器,不建议你用这种方法,,因为速度太慢!!
你可以参考下PyOCD(OpenOCD的Python实现),,他是先用C编写Flash擦除、读写函数,把这些函数编译生成bin文件,,然后下载程序前先把这几个函数通过JLINK传输到单片机的SRAM中,,然后通过JLINK传输程序数据,,让这些C函数执行实际的写入操作,,Keil、IAR里面的编程也是这么做的,,速度可以保证

出0入0汤圆

发表于 2017-7-10 10:54:16 | 显示全部楼层
XIVN1987 发表于 2017-7-10 10:42
对,完全一样。
其实就是Python通过JLinkARM.dll控制JLINK调试器读写MCU的内存空间(外设寄存器就是SRAM ...

谢谢回复。
不打算做编程器,我打算控制GPIO或AD之类的单片机外设,为了调试方便,减少烧写程序。

最近用你的小程序,调试AD很方便。多谢。呵呵。

出0入0汤圆

发表于 2017-10-10 03:06:25 | 显示全部楼层
holly high

出20入118汤圆

发表于 2017-11-14 00:44:24 | 显示全部楼层
这个思路好,谢谢分享

出0入8汤圆

发表于 2017-11-23 22:22:53 来自手机 | 显示全部楼层
好牛逼    开辟新思路

出0入0汤圆

发表于 2017-11-24 00:49:50 | 显示全部楼层
Mark一下

出0入0汤圆

发表于 2017-11-24 17:00:23 | 显示全部楼层
请问 调用DLL的路径需要指明吗?我想使用labview 调用DLL 做一个更炫的 界面! 不知道可以不可以哦?

出0入0汤圆

发表于 2017-11-24 17:01:19 | 显示全部楼层
另外 是不是说 这样 读写的话 速度是不是比串口 USB什么的要快很多?很多?很多?

出0入25汤圆

 楼主| 发表于 2017-11-24 17:16:12 | 显示全部楼层
阿豪博士 发表于 2017-11-24 17:01
另外 是不是说 这样 读写的话 速度是不是比串口 USB什么的要快很多?很多?很多? ...


肯定比串口快啊,至于快多少取决于你用哪种JLINK,,

如果用最便宜的JLINK-OB的话,频率最高4MHz,传输速率估计也就几百Kbps吧,比串口115200快几倍而已

如果用JLINK v9 JTAG接口的话,频率最高15MHz,传输速率应该有串口几十倍了

最顶级的JLINK Ultra+,JTAG接口最高50MHz,传输速率20Mbps以上,,

至于比USB快,那肯定是不可能的啊,,JLINK本身就是用USB传输的啊

出0入0汤圆

发表于 2017-11-24 20:19:12 | 显示全部楼层
XIVN1987 发表于 2017-11-24 17:16
肯定比串口快啊,至于快多少取决于你用哪种JLINK,,

如果用最便宜的JLINK-OB的话,频率最高4MHz,传输 ...

是不是说 写一个简单的ADC DMA 就可以读取ADC的采集数据了?

我想试验一下!另外 可以不可以通过labview 加载固件来实现不同的采集的功能呢?

希望能够给予指点!

出0入25汤圆

 楼主| 发表于 2017-11-24 21:34:38 | 显示全部楼层
阿豪博士 发表于 2017-11-24 20:19
是不是说 写一个简单的ADC DMA 就可以读取ADC的采集数据了?

我想试验一下!另外 可以不可以通过labview ...


可以啊!
不过想实现ADC数据采集的话,,更简单的方法应该是用SEGGER RTT,,参考如下:
开贴研究:JLINK RTT,完爆各种printf形式,从此swo是路人
Python实现RTT客户端,源码+详细讲解,绝对原创!申请置酷!

Labview的话,,只要能调用JLinkARM.dll就可以实现上述功能,,你可以搜下Labview调用JLinkARM.dll的资料,,不过我没见到过。。

出0入0汤圆

发表于 2017-11-24 22:51:04 | 显示全部楼层
好东西,感谢楼主,标记下,JLINK RTT下载软件

出0入0汤圆

发表于 2017-11-26 11:51:44 | 显示全部楼层
XIVN1987 发表于 2017-11-24 21:34
可以啊!
不过想实现ADC数据采集的话,,更简单的方法应该是用SEGGER RTT,,参考如下:
开贴研究:JLIN ...

感谢楼主哦!

我比较擅长labview
如果你愿意 我们可以一起合作 搞一个开源或者专门化的测试系统??

不知道你意下如何?

出0入25汤圆

 楼主| 发表于 2017-11-26 19:56:16 | 显示全部楼层
阿豪博士 发表于 2017-11-26 11:51
感谢楼主哦!

我比较擅长labview

可惜,labview我不懂啊!
我最近在搞micropython的mt7687移植

出0入0汤圆

发表于 2017-11-27 13:16:51 | 显示全部楼层
楼主,方便不方便留个电话,请教一下?
另外 JLINK的JTAG模式与SW模式速度有很大区别吧?

出0入0汤圆

发表于 2017-11-27 13:45:45 | 显示全部楼层
楼主,貌似找不到 JLINK.DLL 的头文件啊!

!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-27 13:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表