-
折腾Keil5(MDK)起因及目的
由于年后项目开发需要使用jlink来对nRF51822这款蓝牙Soc进行程序烧录调试,而烧录51822需要的工具包括nrfgostudio 及nRF5x-Command-Line-Tools还有相应的pack包,本来之前只玩玩STM32F103系列开发板都是使用串口下载调试,不怎么用到jlink,现在开始要用jlink开发,就上淘宝买了个百来块的jlinkV9(铁定是盗版无疑,不过这个还挺好用,在我手上没出问题,过段时间去看店家都找不到了),用过几次调试都没问题,后来有一次学弟借用了一下,还回来时给了个壳子上标着E-link(实际是个盗版jlinkV8)的给我,结果烧程序马上报错是盗版,手头也没有可用的替代品(不找学弟要回来是因为学弟也在用那个调试51822,我们一起搞这项目),导致那段时间我一直无法进行程序调试,后来不死心刷到帖子说重新刷固件能恢复功能,结果脑子一热就通宵搞起来了,好死不死我刚组好不到一个月的台式机为了系统精简装了个Win10LTSC系统,导致刷固件要用的软件sam-ba XXX 时报错部分系统驱动没有,去网上找解决方案时误入歧途,下了个适用XP系统的驱动文件导入win10系统驱动目录进行覆盖,还忘了给系统驱动备份,这下把win10搞崩了,花了两三周的空闲时间去网上找不重装系统(系统里下载好了很多开发用资料和软件,且软件也大都装在C盘,重装就要重头来过)的系统驱动文件恢复解决方法,最后实在没辙了,只能暂停51822的开发,没事时用串口调调32程序,就这样过了两个多月,学弟项目搭好了框架毕业了,但很多细节还留着没搞,只能自己上了,这时jlinkV9又回到我手上了,在实验室就可以进行开发了,但那个盗版V8还扔在我寝室吃灰,后面觉得寝室组了台式机却不能用jlink调试开发简直是浪费,一狠心重装了系统并配了环境(又浪费了小一周的科研时间),但是那个V8上次刷固件到一半,没有更新sn码和固件(这是后来刷成功恢复了之后才明白的),还是只能识别不能用,就又吃灰近一个月,直到最近想学学RTOS,非jlink不行了,所以从昨晚搞到现在,各种查资料配环境,终于把这个盗版jlink复活了,在这个过程中学习到了很多以前不了解的东西,对以后的硬件开发应该是非常有意义的,故把其中经验写下来以作纪念。
写作此文,目的在于:
- 搞懂Keil5用jlink调试时的一些莫名其妙的问题如何通过版本控制来避免
- 了解正确的盗版jlink复活完整路线及易出问题之处
- 熟悉keil5对DFP包的安装及安装好后版本兼容问题报错的处理办法
-
keil5和jlink驱动版本越新越好?
相信有些用keil开发的小伙伴和我以前的想法一致,就是版本越新,Bug越少、越稳定,如果你所有的开发设备都是正版的话,这么说确实有道理,但随着SEGGER对国内盗版jlink的打击和在软件端做的各种保护措施,对热爱动手又手头拮据的学生党玩家来说可就不这么想了,正版教育版jlink仿真器四五百的价格这明显很不符合我们的国情(读研每月也才600补助,合着就值一个jlink-EDU?),既然新版软件盗版防护做的挺好,那哪个版本的keil5和SEGGER才比较符合国情呢?(这里不管Keil4是因为很多官方SDK都提供keil5了,你还用keil4?keil5能向下兼容但keil4可不能向上兼容)根据网上众人实验结果和我的有限经验来看,keil5.25版本及以上(我试过最新的5.35版)都容易出问题,比如进行jlink设置时报错 error:cannot load driver JL2CM3.dll 问题,这个有时候根据网上经验在系统变量里添加路径也解决不了,所以想要对jlink兼容性好,别装太高版本的keil5了,根据我的经验,**keil5.14和jlinkV4.9是对V7、V8系列通用的,按高版本向下兼容原则,那V9甚至V10也肯定能用,**同时jlinkV8调试器完整刷好固件后,jlink驱动在4.9-5.12f版本之间测试都是没问题的,但更新版还没进行尝试,网上说是不管多新都可以的,不过建议不要过于追新,以免出问题
-
jlinkV8复活完整路线
由于网上已有较为完整的教程,而我刷成功后也不想再为了截图折腾一边,因此就上一则我参考的较详细的链接: Jlink V8重刷固件_ChenYX的博客-CSDN博客_jlink v8刷固件 ,其中我使用的是sam-ba_2.12,固件jlink-v8.bin和jlinkV4.9驱动都会随本文件一起存放( (25条消息) jlink驱动及刷固件工具.zip-电信文档类资源-CSDN下载 ),在根据上述步骤刷固件时,有以下几个点需注意:
- 刷固件之前先卸载以前版本的jlink驱动(如果keil5在设置jlink下载时弹出error:cannot load driver JL2CM3.dll,一定先还原到jlinkV4.90驱动,再重启keil5试试jlink能否识别,一般不识别的话还要再卸载版本较高的Keil5,重新安装5.14版本keil5才能使用),再安装我提供的jlinkV4.90驱动,这样可以确保之后操作的成功率。
- 在该链接文章 步骤2:恢复BootLoader 中,如短接拉高TST操作时间不够,或者中间未一直可靠短接,可能会导致BootLoader恢复至Flash中出现问题导致下一步操作时,把jlinkV8连上电脑却在Win10、win7等系统下识别不了,一直无法安装驱动的问题,从而即使sam-ba_XXX软件安装上了也检测不到要刷的jlinkV8设备(我昨晚就在这一步卡了非常久,弄到深夜一点半也没弄好,早上又借室友win7系统电脑试了很久,重新走一遍刷固件流程才发现问题在此),所以在这一步卡了,驱动安装不了,可以试着多来几遍短接TST,实在不行再去换个win7系统电脑试试(XP系统电脑估计难找了,虚拟机感觉太费劲了,根据我的N次经验来看,在Win10和Win7上都成功识别安装过驱动,这一步驱动只要安好后能被sam-ba_XXX软件识别即可,不要求驱动必须装正确,也就是不能在设备管理器中看到插上jlinkV8后提示未知设备或无法识别的设备警告)
- 另一个注意的点就是 步骤3:下载固件 中,第3点和第4点一定要严格执行(即弹出的菜单提示一定是先YES后NO),不然后面的sn序列号更新步骤无法完成,jlinkV8即使能安上驱动可能也无法在keil5中正常使用(我第一次刷固件参照的教程就没有修改jlinkV8序列号的步骤导致jlinkV8仍无法正常使用)
- 除以上两点容易出错导致不成功,网上的很多经验贴说不到点子上或者不适用外,剩下步骤按该链接文章来即可
-
keil5安装DFP包报错 Loading PDSC Debug Description Failed for STMicroelectronics STM32F1XXXX 等类似问题
这两天因为修复jlinkV8和重装keil5,引出来很多问题,在完成上述步骤后,安装STM32F1系列的DFP包时就突然弹出了Loading PDSC Debug Description Failed for STMicroelectronics STM32F1XXXX的报错信息,这是因为KEIL版本(5.14是15年发行)相对安装的DFP PACK包版本发行日期较早,引发的提示信息,但是我们的keil5为了兼容jlinkV8又不能升为较新版本,那么为了排除该错误提示(不影响hex文件编译),可以进keil5的包管理界面将相关器件的较新版本DFP 包先移除以使用较低的不报该错误提示的版本,如果项目需要使用最新版的DFP 包且希望关闭该错误提示,则可以把Keil5安装目录下的…\ARM\Pack\.Download(已下载好的离线DFP包安装时会复制到该路径进行解压) 或…\ARM\Pack\.web(keil5包管理界面下载安装的DFP包在该路径进行解压)下的STM32F1xx_DFP.XXX.pdsc文件中,删除行“Message(2, “Not a genuine ST Device! Abort connection.”);” ,如果想切换至低版本,也可在此处删除高版本的.pack和.pdsc文件,再进包管理界面选择低版本的包以规避该错误提示,注意排查错误时一定要按照先排除新版本DFP包再排除次低版本DFP包以排除掉导致该错误提示出现的包版本,当然卸载高版本也可以直接在包管理中操作而不直接进目录中删除(缺点在于用不到的包不会被清理掉,浪费空间)