J-link大家都不陌生,但是很多朋友都是只拿它当作一个调试仿真器,其实J- Link有许多宝藏功能有待大家发现,今天这篇文章就简单的介绍一下J-link Commander的几个常用使用指令。
首先大家的笔记本需要安装J-link的驱动,该驱动的安装包除了驱动也会安装j-link全家桶,包括且不限于J-link commander/J-fFlash/j- Link RTT等实用工具,以后都会一一介绍。
驱动包可从Segger的官网获取到: https://www.segger.com/downloads/jlink/
安装后通过搜索栏找到J-link commander,并打开它

打开后是类似于Windows终端的窗口,多少是有些B格的。仿真器连接至电脑后输入指令”connect”并回车,则会执行与J-link仿真器连接的动作,因此当无法使用仿真器时,可通过该步骤用来判断是无法连接仿真器还是无法连接芯片。
如果当前显示的芯片不是你想要的目标芯片,那么可以输入”?”并回车来进行芯片的选择,如下图所示:

如下图所示为进入MCU选型界面,在该界面下选择好对应芯片即可。
⚠:选择的芯片信号会被记录在仿真器中,如果用IDE调试其他芯片提示无法进入仿真,可能就需要到这里进行对应配置修改。

完成选型后则是选择J-link与芯片的通讯方式,若是JTAG则输入“j”,若是SWD则输入”s”, 点击回车键输入指令,成功连接后如下图所示:

完成和芯片的连接后,就可以使用各类风骚的指令了。如果不知道有哪些指令以及指令格式,那么键入”?”并回车后则会输出所有指令及其指令格式。如下图所示

“h”指令(halt)类似于MCU遇到断点停止运行,并会将暂停时刻的通用寄存器和状态寄存器等数值一并打印出来。

“g”指令(go),例如下发了”h”指令后想让MCU回复运行,则下发“g”指令即可

“r”指令(Reset),下发该指令后MCU会执行复位动作

通常在仿真环境中,MCU各类信息都可以在IDE上随意查看。可是进入仿真环境可能会造成程序的擦除、复位动作,导致破坏现场。若是现在返回一个故障件,它的某个功能不正常,那就可以通过j-link直接读取的方式,在不破坏当前状态的情况下获取到相关寄存器/Flash/RAM中的数值,进行初步的一些故障判断。
mem8 起始地址,读取长度:可打印出从起始地址后指定长度的数据,mem8的话打印数据是按照byte为单位显示,还有mem16和mem32分别是按照半字与字为单位显示。如下则分别展示mem8与mem16的效果,可看出内容是一致的,只是size和大小端不同。


savebin 生成位置与文件名,起始地址,目标长度: savebin指令帮助我们将MCU任意有效地址内的数据予以反读取并生成bin文件。应用场景可以是
(1) 反读当前MCU内的程序,如果将编译信息集合到了固件中,则可以直观看到固件的版本号/编译日期等,方便定位问题固件版本号。
(2) 反读程序与目标程序进行对比,查看是否发生了篡改。
本次测试使用的指令为 savebin d:/test.bin,0,0x1000,目的是将该MCU地址0开始后0x1000个字节的数据生成名为test.bin的文件存放在D盘中。正常的话读取速度是非常快的,几百K byte的程序基本按了回车键后就完成读取了。
⚠:该指令并不是都能成功,如果MCU处于休眠状态,此时读取的话,会发现可能读取速度很慢,其次反读出来的数据可能还是错误的,所以使用该方法反读数据需要MCU处于非休眠状态。

loadbin 文件位置与文件名,起始地址:既然可以读取,那对应就有烧录,如果很不幸,你电脑没有原工程,MCU也没有bootloader,那要将一个bin文件烧录进MCU就可以通过该方式。本次使用loadbin d:/test.bin,0 其意思就是将D盘中一个叫test.bin的文件烧录以0为起始地址执行烧录。
⚠:一般执行loadbin之前最好先下发“h”指令回车停止MCU运行,再下发“erase”指令再回车完成片内数据擦除,最后再执行loadbin指令;有一些情况是无法完成bin文件烧录的,例如编程时有锁定flash以保护数据,或者 j-link不支持该MCU,大部分情况下如果能够连接MCU,还是那就能够完成bin文件的直接烧录的。

欢迎大家关注我的公众号,一起技术交流
