搜索
bottom↓
回复: 32

公开一个qt调用jlinkARM.dll的参考代码

  [复制链接]

出0入0汤圆

发表于 2018-4-16 21:35:08 | 显示全部楼层 |阅读模式
一直想自己做一个可对固件加密的烧录工具。保护自己的劳动成果。代码固件放置在服务器上,给用户一个客户端软件。客户可以自己升级程序。服务器端记录STM32的芯片的ID号码。。。。。。。。
参考https://www.amobbs.com/forum.php ... hlight=C%23%2Bjlink的C#代码。
刚开始写了个C#版本的,但是C#实在是不安全。所以又改成qt版本的。折腾了两天,总算运行起来了。实现了程序下载,芯片flash保护,flash解锁。涉及商业机密,所以只提供关键的对jlinkARM.dll的调用部分代码,给需要的人参考。
经过试验直接用jlink写flash太慢。所有写了个STM32的boot代码,通过jlink直接加载到RAM中运行起来,然后jlink把固件发送到ram中,ram中运行的boot程序负责擦写flash。还有个stm32的flash写保护和解除写保护,如果按照STM32的编程手册时序实在是太繁琐。但是把这个功能交给STM32自己完成就太简单了。
boot关键代码:
unsigned char __attribute__((at(0x20005014))) statu = 0; //0空闲 1待擦除 2待数据待写入到flash 3写入数据出错
unsigned int __attribute__((at(0x20005018))) add = 0;//固件写地址
uint8_t buf[2048] __attribute__((at(0x2000501c))) = {0};//固件缓存区

。。。。。。。。。。
statu = 0x55;//主机判断ram引导加载成功
  while(1)
  {
    LED_TOGGLE;                                  //LED亮灭变化
               
                TIMDelay_Nms(100);
               
                if(statu == 1)
                {
                          FLASH_Unlock();
                          FLASH_EraseAllPages();
                          statu = 0;
                }
                else if(statu == 2)
                {
                        FlashProgram((unsigned long *)buf,add,2048);
                  //FLASH_WriteByte(add,buf,2048);
                        statu = 0;
                }
                else if(statu == 0x18)//上锁定
                {
                        if(FLASH_GetReadOutProtectionStatus()!=SET)
                        {
                                        FLASH_Unlock(); //不解锁FALSH也可设置读保护
                                        FLASH_ReadOutProtection(ENABLE);
                                        FLASH_Lock();//上锁
                        }
                        statu = 0;
                }               
                else if(statu == 0x19)//解除锁定
                {
                        if(FLASH_GetReadOutProtectionStatus()!=RESET)
                        {
                         FLASH_Unlock();
                         FLASH_ReadOutProtection(DISABLE);


                          FLASH_Lock();//上锁
                        }                       
                        statu = 0;
                }
  }








本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-4-16 22:08:20 | 显示全部楼层
  不错,好思路,这样可以控制硬件升级,保护权益了!

出0入0汤圆

发表于 2018-4-27 10:51:27 | 显示全部楼层
愣是没看懂,不过还是谢谢楼主分享!!!!

出0入0汤圆

发表于 2018-4-27 11:24:40 | 显示全部楼层
我也做了一个类似的调用  不过 没用到http   是个好思路  不错

出0入0汤圆

发表于 2018-4-27 12:10:59 来自手机 | 显示全部楼层
速度能到多少

出0入0汤圆

发表于 2018-4-27 12:40:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2018-4-27 13:08:19 来自手机 | 显示全部楼层
感谢楼主分享

出0入0汤圆

发表于 2018-4-27 13:15:07 | 显示全部楼层
2G网络据说要停了,是不是gprs就不能用了?

出0入0汤圆

发表于 2018-4-27 13:33:41 来自手机 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2018-4-27 13:43:20 | 显示全部楼层
好东西~感谢~

出0入0汤圆

 楼主| 发表于 2018-4-28 16:41:32 | 显示全部楼层
目前只实现了STM32的程序下载,和禁止flash回读。但是我想在给A8芯片编程,还不知道DLL里的选择芯片型号怎么操作,试了很多方法都不行。有做过这个功能的可以指点吗

出130入0汤圆

发表于 2018-4-28 19:55:02 来自手机 | 显示全部楼层
楼主V5,研究研究……

出0入0汤圆

发表于 2018-4-28 22:43:57 | 显示全部楼层
感谢楼主分享,试了一下你提供的软件,在读取器件ID时,会弹出Jlink让选择器件型号的界面. 这是什么原因导致的了?Jlink驱动是使用的最新驱动板,芯片STM32F407IG

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2018-4-28 22:51:56 | 显示全部楼层
596142041 发表于 2018-4-28 22:43
感谢楼主分享,试了一下你提供的软件,在读取器件ID时,会弹出Jlink让选择器件型号的界面. 这是什么原因导致的 ...

函数调用参数没选对

出0入0汤圆

 楼主| 发表于 2018-4-29 16:49:35 | 显示全部楼层
596142041 发表于 2018-4-28 22:43
感谢楼主分享,试了一下你提供的软件,在读取器件ID时,会弹出Jlink让选择器件型号的界面. 这是什么原因导致的 ...

dll文件别用太高版本的

出0入0汤圆

 楼主| 发表于 2018-4-29 16:51:24 | 显示全部楼层
596142041 发表于 2018-4-28 22:43
感谢楼主分享,试了一下你提供的软件,在读取器件ID时,会弹出Jlink让选择器件型号的界面. 这是什么原因导致的 ...

高版本的我也出现这个问题,没找到怎么解决。目前用4.90版本的不会出现这个问题

出0入0汤圆

发表于 2018-4-29 21:38:14 | 显示全部楼层
source.ant 发表于 2018-4-29 16:51
高版本的我也出现这个问题,没找到怎么解决。目前用4.90版本的不会出现这个问题 ...

了解,多谢楼主回复

出0入0汤圆

发表于 2018-4-29 22:29:53 | 显示全部楼层
不错不错,可以参考一下。

出0入0汤圆

发表于 2018-4-29 22:53:43 | 显示全部楼层
高手,多谢了  

出0入0汤圆

发表于 2018-4-29 23:27:40 来自手机 | 显示全部楼层
不错,劳德巴赫调试器用的就是这种方法

出0入0汤圆

发表于 2018-5-11 00:02:45 | 显示全部楼层
qt的可以在link上编译通过吗?

出0入0汤圆

发表于 2018-5-11 06:19:23 | 显示全部楼层
很好的思路,研究一下,多谢LZ的贡献

出0入0汤圆

发表于 2018-5-11 10:04:20 | 显示全部楼层
很好的思路

出0入362汤圆

发表于 2018-5-11 10:09:40 | 显示全部楼层
zan!
python应该也能调用吧? 这样前期开发就更简单了.

出0入0汤圆

发表于 2018-5-11 10:35:45 | 显示全部楼层
赞,很好的思路

出0入0汤圆

发表于 2019-10-20 22:28:38 来自手机 | 显示全部楼层
请教一下,如何控制jlink执行已下载到ram中的程序呢?

出0入0汤圆

 楼主| 发表于 2019-10-28 22:24:14 | 显示全部楼层
way2888 发表于 2019-10-20 22:28
请教一下,如何控制jlink执行已下载到ram中的程序呢?

JLINKARM_WriteReg(13, 0x20000000);
    JLINKARM_WriteReg(15, 0x20000004);
    JLINKARM_WriteU32(0xE000ED08, 0x20000000);
    JLINKARM_Go();

出0入0汤圆

发表于 2019-10-28 22:26:35 | 显示全部楼层
source.ant 发表于 2019-10-28 22:24
JLINKARM_WriteReg(13, 0x20000000);
    JLINKARM_WriteReg(15, 0x20000004);
    JLINKARM_WriteU32(0x ...

分享一个demo呗,没有工程高不起来

出0入0汤圆

 楼主| 发表于 2019-10-28 22:30:18 | 显示全部楼层
霸气侧漏 发表于 2019-10-28 22:26
分享一个demo呗,没有工程高不起来

一楼就是工程,qt的

出5入0汤圆

发表于 2021-4-26 14:37:19 | 显示全部楼层
qt_jlink.ara里面没有动态库JLinkARM.dll,能发下吗?

出0入0汤圆

发表于 2021-4-27 09:04:56 | 显示全部楼层
不错的想法,可以借鉴

出0入0汤圆

发表于 2022-2-22 18:22:27 | 显示全部楼层
source.ant 发表于 2018-4-29 16:51
高版本的我也出现这个问题,没找到怎么解决。目前用4.90版本的不会出现这个问题 ...
(引用自16楼)

楼主,我使用你的工程里面的dll,还是出现一样的弹窗提示,而且返回来的ReadID 不对,可以分享你的jlinkarm.dll 4.90版本吗

出0入0汤圆

发表于 2022-3-22 13:52:03 | 显示全部楼层
boboo 发表于 2018-4-27 11:24
我也做了一个类似的调用  不过 没用到http   是个好思路  不错
(引用自4楼)

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

本版积分规则

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

GMT+8, 2024-4-19 11:44

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

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