搜索
bottom↓
回复: 89

分享JLINK编程器,,快速版

  [复制链接]

出0入25汤圆

发表于 2019-2-23 21:49:25 | 显示全部楼层 |阅读模式

之前分享过一个JLINK编程器工具:Python+JLinkARM.dll实现JLINK编程器,原创首发!!

不过它是通过JLINK直接读写Flash控制器寄存器来实现编程的,,速度非常慢,,因此只有技术价值,,不具有实用价值

正常的JLINK编程器一般都是把一段代码下载到单片机的RAM中,然后用JLINK控制这段代码的执行、并传输程序数据给这段儿代码,,让它完成实际的Flash擦除、写入,,Keil MDK、IAR、JFlash给单片机下载程序都是使用的这种方法

实现这种编程器需要克服两个技术问题:
1、通过JLINK控制单片机执行指定函数
2、从Keil MDK的算法文件*.FLM中提取出算法代码和信息(提取现成算法可以节省大量时间,且这些算法都是MCU官方出品、质量可靠)

幸运的是这两个难题都已被国外大神解决,并把相关代码开源到github上,,我的源码中的flash.py和flash_algo.py这两个文件就是github上找到的分别解决上述两个难题的代码

由此,我实现了高速版的JLINK编程器,,下载速度和Keil MDK、IAR、JFlash一样快 ,,而且实际的烧写算法代码不需要自己写,直接从Keil MDK的烧写算法文件中提取即可,,因此,只要是Keil支持的芯片,本工具都可以简单扩展、快速支持,,而且稳定可靠

先把此工具分享给坛友,,希望大家喜欢,,

效果图:


源代码:https://github.com/XIVN1987/JMCUProgFast (如果喜欢的话可以去给加个星

打包生成的exe免安装文件:




本帖子中包含更多资源

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

x

出0入25汤圆

 楼主| 发表于 2019-2-26 21:08:46 | 显示全部楼层
本帖最后由 XIVN1987 于 2019-2-26 21:10 编辑

如何添加器件:J-Link/CMSIS-DAP编程器(快速版)如何添加器件

出0入0汤圆

发表于 2019-2-23 21:53:29 | 显示全部楼层
666必须的支持,虽然现在只搞8位单片机,也许后面用得着。

出0入0汤圆

发表于 2019-2-23 21:59:34 | 显示全部楼层
高手,膜拜呀!

出0入0汤圆

发表于 2019-2-23 22:06:37 来自手机 | 显示全部楼层
厉害了

出0入0汤圆

发表于 2019-2-23 22:11:27 来自手机 | 显示全部楼层
好贴,谢谢了。

出0入0汤圆

发表于 2019-2-23 22:12:02 来自手机 | 显示全部楼层
Jlink的都行吗?Ob可以吗

出0入4汤圆

发表于 2019-2-23 22:13:20 | 显示全部楼层
牛逼,不过我用jlink lite

出0入0汤圆

发表于 2019-2-23 22:14:28 | 显示全部楼层
不错,做批量编程的时候,可以考虑一下。

出0入25汤圆

 楼主| 发表于 2019-2-23 22:19:21 | 显示全部楼层
小溪 发表于 2019-2-23 22:12
Jlink的都行吗?Ob可以吗


可以的,,JLINK都支持

出0入0汤圆

发表于 2019-2-23 22:22:16 | 显示全部楼层
好东西,顺便问一下,怎么实现芯片加密,不懂

出0入25汤圆

 楼主| 发表于 2019-2-23 22:25:57 | 显示全部楼层
wajlh 发表于 2019-2-23 22:13
牛逼,不过我用jlink lite


jlink lite应该也支持,,

出0入0汤圆

发表于 2019-2-23 22:52:34 来自手机 | 显示全部楼层
跟jflash比有啥好处呢,何不用jflash烧写呢

出0入25汤圆

 楼主| 发表于 2019-2-23 22:56:21 | 显示全部楼层
qingyin2009 发表于 2019-2-23 22:52
跟jflash比有啥好处呢,何不用jflash烧写呢


有源代码,,可以定制算不算

出0入0汤圆

发表于 2019-2-23 23:04:23 | 显示全部楼层
观看大神作品,^_^。

出0入0汤圆

发表于 2019-2-23 23:31:43 | 显示全部楼层
腻害啊

出140入115汤圆

发表于 2019-2-24 00:17:16 来自手机 | 显示全部楼层
你真棒! 赞

出0入0汤圆

发表于 2019-2-24 02:16:00 | 显示全部楼层
能贴下国外大神的github链接吗?

出0入0汤圆

发表于 2019-2-24 03:08:00 来自手机 | 显示全部楼层
历害了,高手

出0入13汤圆

发表于 2019-2-24 07:55:14 来自手机 | 显示全部楼层
厉害了,已经关注大神的github

出0入0汤圆

发表于 2019-2-24 08:01:59 来自手机 | 显示全部楼层
厉害!可以自己做编程器

出0入25汤圆

 楼主| 发表于 2019-2-24 08:12:12 | 显示全部楼层
ysoni 发表于 2019-2-24 02:16
能贴下国外大神的github链接吗?


flash.py:https://github.com/mbedmicro/pyOCD

flash_algo.py:https://github.com/mbedmicro/FlashAlgo

出0入0汤圆

发表于 2019-2-24 08:57:53 来自手机 | 显示全部楼层
感谢楼主分享,巨牛无比啊!

出0入0汤圆

发表于 2019-2-24 08:59:34 | 显示全部楼层
楼主PY真是溜啊

出0入0汤圆

发表于 2019-2-24 09:04:46 来自手机 | 显示全部楼层

出0入0汤圆

发表于 2019-2-24 09:04:47 | 显示全部楼层
楼主解析FLM格式信息怎么来的

出0入25汤圆

 楼主| 发表于 2019-2-24 09:21:12 | 显示全部楼层
huangqi412 发表于 2019-2-24 09:04
楼主解析FLM格式信息怎么来的


flash.py:https://github.com/mbedmicro/pyOCD

flash_algo.py:https://github.com/mbedmicro/FlashAlgo

关键代码都是国外大神搞的,,我只是整合了下代码、弄了个界面

出0入0汤圆

发表于 2019-2-24 09:38:46 | 显示全部楼层
这和 JFlashLite 很像啊

出0入0汤圆

发表于 2019-2-24 11:00:18 | 显示全部楼层
厉害了啊~大神!

出0入0汤圆

发表于 2019-2-24 11:26:44 | 显示全部楼层
赞,支持!

出0入0汤圆

发表于 2019-2-24 12:05:49 | 显示全部楼层
支持一下,牛逼

出0入134汤圆

发表于 2019-2-24 12:25:31 | 显示全部楼层
厉害了,加颗星

出0入0汤圆

发表于 2019-2-24 14:50:47 | 显示全部楼层
谢谢,学习!!!

出0入0汤圆

发表于 2019-2-24 15:16:09 | 显示全部楼层
厉害了,赞,支持!

出0入0汤圆

发表于 2019-2-24 15:53:40 | 显示全部楼层

谢谢,学习了,想请教一下pyinstaller怎么打包,我打包出来的都不能运行

出100入101汤圆

发表于 2019-2-24 16:22:36 | 显示全部楼层
大神,顶你!

出0入0汤圆

发表于 2019-2-24 18:28:18 | 显示全部楼层
大神,顶你!

出0入0汤圆

发表于 2019-2-24 19:20:11 | 显示全部楼层
厲害,謝謝分享。

出255入0汤圆

发表于 2019-2-24 20:40:21 | 显示全部楼层
非常不错的工具

出0入0汤圆

发表于 2019-2-24 20:52:01 | 显示全部楼层
就是说不用通过Keil烧程序,直接用这个通过JLINK编程器烧程序是不。

出0入0汤圆

发表于 2019-2-24 23:01:30 来自手机 | 显示全部楼层
非常好的工具

出0入25汤圆

 楼主| 发表于 2019-2-24 23:32:30 | 显示全部楼层
zjrenyu 发表于 2019-2-24 20:52
就是说不用通过Keil烧程序,直接用这个通过JLINK编程器烧程序是不。


对,,功能非常类似于JFlash

出50入0汤圆

发表于 2019-2-25 10:31:21 | 显示全部楼层
   定制---JFLASH, 好工具, 顶一个!!!

出0入0汤圆

发表于 2019-2-25 11:09:59 | 显示全部楼层
大神能添加一下navota的芯片的读写吗?我用得很多。

多谢了!

奇怪,回复不能添加附件了?我还想上传一下navota的flm文件呢

出0入0汤圆

发表于 2019-2-25 11:14:08 | 显示全部楼层
厉害,以后可以定制jflash了,谢谢

出0入0汤圆

发表于 2019-2-25 11:21:59 | 显示全部楼层
为什么前两个压缩包不能下载呢?

出0入0汤圆

发表于 2019-2-25 13:56:24 | 显示全部楼层
好给力,感谢楼主分享。去加星

出0入0汤圆

发表于 2019-2-25 15:05:33 | 显示全部楼层
不错,我的单片机里运行的程序是自己写的,jlink只负责传输数据。没研究过MDK的算法怎么调用

出0入0汤圆

发表于 2019-2-25 15:10:17 | 显示全部楼层
谢谢 楼主分享,一个批处理也可以实现 。

出0入8汤圆

发表于 2019-2-25 15:16:56 | 显示全部楼层
秀儿,你怎么知道这么多呢?

出0入17汤圆

发表于 2019-2-25 15:25:58 | 显示全部楼层
楼主又出py编程器上位机了,赞一个

出0入4汤圆

发表于 2019-2-25 15:32:45 | 显示全部楼层
果断加星,楼主py用得溜啊

出0入0汤圆

发表于 2019-2-25 18:06:49 | 显示全部楼层
谢谢分享,正需要

出0入0汤圆

发表于 2019-2-25 19:06:03 | 显示全部楼层
不会PY  自己用的是自制的C语言的版本

出140入115汤圆

发表于 2019-2-25 19:42:13 | 显示全部楼层
可以增加计算HEX文件大小功能吗

出0入0汤圆

发表于 2019-2-25 20:27:09 | 显示全部楼层
这个挺好的,量产用的到

出0入0汤圆

发表于 2019-2-25 21:52:21 | 显示全部楼层
amlt_shifu 发表于 2019-2-25 15:10
谢谢 楼主分享,一个批处理也可以实现 。

批处理是要BIN文件的吧?

出0入8汤圆

发表于 2019-2-25 22:32:31 来自手机 | 显示全部楼层
iar行不行

出0入0汤圆

发表于 2019-2-25 22:37:11 来自手机 | 显示全部楼层
感谢楼主分享

出0入25汤圆

 楼主| 发表于 2019-2-25 22:42:45 | 显示全部楼层


支持下载.bin文件和.hex文件,,都是标准格式,,MDK、IAR、GCC输出的.bin、.hex都一样的,,

出0入0汤圆

发表于 2019-2-26 10:56:31 | 显示全部楼层
XIVN1987 发表于 2019-2-24 09:21
flash.py:https://github.com/mbedmicro/pyOCD

flash_algo.py:https://github.com/mbedmicro/FlashAl ...

make   Keil MDK算法提取

出0入0汤圆

发表于 2019-2-26 11:12:42 | 显示全部楼层
XIVN1987 发表于 2019-2-25 22:42
支持下载.bin文件和.hex文件,,都是标准格式,,MDK、IAR、GCC输出的.bin、.hex都一样的,, ...

芯片如何更改???

出0入0汤圆

发表于 2019-2-26 12:11:05 | 显示全部楼层
666必须的支持!

出0入0汤圆

发表于 2019-2-26 12:54:03 | 显示全部楼层
厉害! 感谢楼主分享

出0入0汤圆

发表于 2019-2-26 20:23:30 | 显示全部楼层
楼主给力,开源分享值得肯定。

出0入25汤圆

 楼主| 发表于 2019-2-26 21:10:00 | 显示全部楼层
soosqt 发表于 2019-2-26 11:12
芯片如何更改???


J-Link/CMSIS-DAP编程器(快速版)如何添加器件

出0入25汤圆

 楼主| 发表于 2019-2-26 21:12:45 | 显示全部楼层
kazuyuki 发表于 2019-2-25 11:09
大神能添加一下navota的芯片的读写吗?我用得很多。

多谢了!


如何添加器件:J-Link/CMSIS-DAP编程器(快速版)如何添加器件

出10入46汤圆

发表于 2019-2-27 11:47:12 | 显示全部楼层
正常的JLINK编程器一般都是把一段代码下载到单片机的RAM中,然后用JLINK控制这段代码的执行、并传输程序数据给这段儿代码,,让它完成实际的Flash擦除、写入。  

对你的这句话,持怀疑态度。 从哪里得出的结论? 正常的编程器是这样操作的?
仅仅是支持这种方式而已吧。 没感觉到RAM模式加载写入有多快

出0入0汤圆

发表于 2019-2-27 11:55:50 | 显示全部楼层
JLINK 编程 mark

出0入104汤圆

发表于 2019-10-11 21:25:02 | 显示全部楼层
楼主,我发现一个BUG,下载好一个芯片后插拔到另一个芯片上,软件会卡死

出0入0汤圆

发表于 2019-10-12 20:07:04 来自手机 | 显示全部楼层
高手啊,

出0入0汤圆

发表于 2019-10-12 22:18:23 | 显示全部楼层
NB,MARK备用

出0入0汤圆

发表于 2019-11-15 16:49:26 | 显示全部楼层
大神,膜拜,请问二个问题:
1.rw段在哪里初始化的?代码只看到有这句:self.jlink.write_reg('r9', self.flash['static_base'])
2.进入halt 是什么指令,这里有:BLOB_HEADER = '0xE00ABE00, 0x062D780D, 0x24084068, 0xD3000040, 0x1E644058, 0x1C49D1FA, 0x2A001E52, 0x4770D1F2,'

出0入25汤圆

 楼主| 发表于 2019-11-15 17:13:00 | 显示全部楼层
coolhorse 发表于 2019-11-15 16:49
大神,膜拜,请问二个问题:
1.rw段在哪里初始化的?代码只看到有这句:self.jlink.write_reg('r9', self.f ...


1、全局变量都在初始化函数里赋值就不需要初始化了

2、是一条BREAK指令

出0入0汤圆

发表于 2019-11-15 17:36:12 | 显示全部楼层
全局变量都在初始化函数里赋值,在哪里啊,代码里没看到,我想是JLINK利用R9做的一个赋值,我愚钝,能贴出来吗?

出0入25汤圆

 楼主| 发表于 2019-11-15 17:44:07 | 显示全部楼层
coolhorse 发表于 2019-11-15 17:36
全局变量都在初始化函数里赋值,在哪里啊,代码里没看到,我想是JLINK利用R9做的一个赋值,我愚钝,能贴出 ...


我是说算法文件里面的初始化函数,,就是在单片机上运行的代码里的初始化函数

不过我没看过算法文件的源代码,,具体源码怎么写的我也不知道

出0入0汤圆

发表于 2020-11-27 10:37:02 | 显示全部楼层
感谢楼主分享!

出0入0汤圆

发表于 2020-11-28 23:39:37 | 显示全部楼层
这个太有用了,思路大开

出0入0汤圆

发表于 2020-11-30 13:00:45 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2021-3-12 22:18:42 | 显示全部楼层
大神,为啥我运行你的代码(非exe)python MCUProg.py在点击烧录,或者擦除会弹出jlink的device select对话框,而你发布的exe文件没有

出0入25汤圆

 楼主| 发表于 2021-3-13 00:47:30 | 显示全部楼层

我发布的exe是用pyinstaller打包的,,听说可以用pyinstallerextractor解包,,你解包后对比下源码有什么区别

我猜测有可能是大小写的问题,,你把STM32F103.py里的CHIP_CORE = 'Cortex-M3'改成CHIP_CORE = CORTEX-M3'试试,,可能新版jlink dll对输入要求更严格了

出0入0汤圆

发表于 2021-3-13 10:18:00 | 显示全部楼层
XIVN1987 发表于 2021-3-13 00:47
我发布的exe是用pyinstaller打包的,,听说可以用pyinstallerextractor解包,,你解包后对比下源码有什么 ...

大神,我刚试不是CHIP_CORE的大小写问题,我再说下我这边的情况:刚通过pyinstxtractor.py你的exe文件看,你的打包版本是2.7的python版本。我还没验证是不是这个差异。我想问题是不是还有其他什么地方问题,因为你发布的exe使用同一个jlinkarm.dll,你的exe没有弹出device select对话框,而我用python3.9编译就有这个问题。

出0入25汤圆

 楼主| 发表于 2021-3-13 11:13:52 | 显示全部楼层
chad_ouyang 发表于 2021-3-13 10:18
大神,我刚试不是CHIP_CORE的大小写问题,我再说下我这边的情况:刚通过pyinstxtractor.py你的exe文件看 ...


如果不是CHIP_CORE设置的的问题,,那我也没思路了

代码里其实是通过”self.jlk.JLINKARM_ExecCommand(f'Device = {coretype}', err_buf, 64)“这句选择器件型号的,,其中的{coretype}会在执行时被替换成你选择的那个芯片对应的文件中CHIP_CORE的值,,比如STM32F103.py中的”Cortex-M3“

如果它现在不起作用了,,那可能是新版本的JLink DLL更改了通信协议,,换个旧版本的JLink DLL试试

出0入0汤圆

发表于 2021-3-13 11:50:14 | 显示全部楼层
XIVN1987 发表于 2021-3-13 11:13
如果不是CHIP_CORE设置的的问题,,那我也没思路了

代码里其实是通过”self.jlk.JLINKARM_ExecCommand( ...

大神,我想了解下你的python执行命令是怎么样的,我看你的exe都会有一个命令提示符界面,我是这样执行的:python  MCUProg.py

出0入0汤圆

发表于 2021-3-13 16:54:27 | 显示全部楼层
XIVN1987 发表于 2021-3-13 11:13
如果不是CHIP_CORE设置的的问题,,那我也没思路了

代码里其实是通过”self.jlk.JLINKARM_ExecCommand( ...

我参考你的exe反编译出的python 2.7版本就正常了,用python3.6,3.9都不行。

出0入25汤圆

 楼主| 发表于 2021-3-13 18:59:55 | 显示全部楼层
chad_ouyang 发表于 2021-3-13 16:54
我参考你的exe反编译出的python 2.7版本就正常了,用python3.6,3.9都不行。


找到问题了,,把jlink.py里面的
  1. self.jlk.JLINKARM_ExecCommand(f'Device = {coretype}', err_buf, 64)
复制代码

替换成:
  1. self.jlk.JLINKARM_ExecCommand(f'Device = {coretype}'.encode('latin-1'), err_buf, 64)
复制代码

就可以了

python2升级到python3改动最多的地方就是str的编码问题了 ,,我去github上也升级下去

出10入12汤圆

发表于 2021-3-14 04:32:49 | 显示全部楼层
楼主好人

出0入0汤圆

发表于 2021-3-14 21:29:27 | 显示全部楼层
XIVN1987 发表于 2021-3-13 18:59
找到问题了,,把jlink.py里面的

替换成:

大神人太好了

出0入0汤圆

发表于 2021-3-15 11:59:21 | 显示全部楼层
学习学习

出0入10汤圆

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

本版积分规则

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

GMT+8, 2024-4-20 09:42

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

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