J-LINK在MDK下调试错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了J-LINK在MDK下调试错误相关的知识,希望对你有一定的参考价值。

Load "F:\\UPAN\\WorkSpace\\SRC\\Mudslide\\mudslide.AXF"
Set JLink Project File to "F:\UPAN\WorkSpace\SRC\Mudslide\JLinkSettings.ini"

JLink info:
------------
DLL: V4.15n, compiled Jun 18 2010 19:55:09
Firmware: J-Link ARM V8 compiled Dec 16 2010 20:21:29
Hardware: V8.00
S/N : 20100214
Feature(s) : RDI,FlashDL,FlashBP,JFlash,GDBFull

以下错误怎么解决?
* JLink Info: Found SWD-DP with ID 0x1BA01477
* JLink Info: Found SWD-DP with ID 0x1BA01477
**JLink Warning: No matching core found.
***JLink Error: SWD-DP error: Could not write Ctrl/Stat register.
ROMTableAddr = 0x0
**JLink Warning: CPU could not be halted

Target info:
------------
Device: LM3S1751
VTarget = 3.209V
State of Pins:
TCK: 0, TDI: 1, TDO: 0, TMS: 0, TRES: 1, TRST: 1
Hardware-Breakpoints: 0
Software-Breakpoints: 2048
Watchpoints: 0
JTAG speed: 4000 kHz

**JLink Warning: CPU could not be halted
***JLink Error: Can not read register 20 (CFBP) while CPU is running
**JLink Warning: CPU could not be halted
***JLink Error: Could not start CPU core. (ErrorCode: -1)
Cannot setup Breakpoint at Address
***JLink Error: Can not read register 20 (CFBP) while CPU is running
**JLink Warning: CPU could not be halted
***JLink Error: Could not start CPU core. (ErrorCode: -1)
Cannot setup Breakpoint at Address
Erase Failed!

芯片被加密,请用串口方式或通用编程器擦空芯片即可解决 参考技术A 寄存器变量可以实时更新,内存变量只有在第一次断点看到的数据是实际的,此后不再更新。
只是看不到,内部运行当然还是有正常更新,只是看不到而已。
知道怎么处理的说下。。。

J-Link固件烧录以及使用J-Flash向arm硬件板下载固件程序

这篇文章的最初版本是在15年写的https://blog.csdn.net/u010592722/article/details/45575663,后来又遇到了一些新问题,故更新在了这里。

一、始于安装新版的MDK5.11a后,J-Link不能使用,提示安装新固件云云

用新版本的STM32集成开发环境MDK5.11a(之前用的4.13a)链接J-Link下载程序,如果J-Link固件版本过低则点击J-Link设置按钮时,会有提醒J-Link驱动有新版可安装(不可忽视,强制安装更新)。不过安装之后,会有弹窗提示连接器是山寨云云,接着MDK就挂掉了,也就是其固件程序已丢失。针对这个问题,

(1)重新刷J-Link V8固件程序(以下操作的先后顺序不要搞错了)

  1.使用USB线连接J-Link与PC机,以提供J-Link工作电源;

  2. 短接ERASE(E) 的两个过孔5秒左右。断开ERASE(E)位置的两个过孔的短接。然后拔掉J-Link与PC间的USB线;

  3.短TST(T)的两个过孔;

  4.使用USB线连接J-Link与PC机,至少超过10秒后,拔掉USB线,停止给J-Link供电(此过程中,TST(T)一直处于可靠的短接状态);

  5.断开图中TST(T)处的短接 

          

重烧固件的关键是在完成上述5各步骤后,再次连接J-Link,要确保设备管理器中驱动的状态是“未识别的设备”云云,如果已经自动安装了一个似乎是“SAM...(名字记不全了)”之类的相关驱动,统统卸掉(卸载完毕最好重启一下)。凡是不能使用SAM-PROG这个软件自动烧录固件的电脑(比如笔者的win7 64位笔记本),推荐使用sam-ba_2.14(亲测多次可用)手动烧录。由于这款软件是Atmel公司的,正如前面所述,打开这款软件连接J-Link,应确保J-Link的驱动在设备管理器中显示的是“Atmel...”(名字记不太清了,这个驱动安装前提示J-Link驱动未识别->右键更新驱动->手动浏览电脑本地更新->C:\\Program Files (x86)\\Atmel\\sam-ba_2.14\\drv(sam-ba_2.14安装目录下)->更新)。

只有正确安装了Atmel公司的相关驱动方可与sam-ba_2.14连接(打开软件,选择正确的串口,目标板一般选at91sam7s64-ek,然后点击连接)。进入软件,添加固件程序所在文件目录,点击发送即可完成固件的烧录(期间会有两次提示加密解锁之类的,总之,下载前解锁加密,下载后加密即可)。

(2)解决与STM32的MDK连接时的J-Link更新问题

方法一:简单粗暴,将J-Link驱动SEGGER安装目录中的JLinkARM.dll替换掉MDK安装目录ARM/Seggeer中的JLinkARM.dll即可(亲测可用);

方法二:J-Link重新烧录的固件需用UE或者WinHex这个软件做些修改(主要是修改S/N号,可参考https://blog.csdn.net/a86458977/article/details/46747065)。固件不修改的后果是,进入MDK设置J-Link是同样是要提醒更新J-Link驱动(没试过)。

二、使用J-Flash烧录ARM9固件程序U-Boot

首先参考韦东山使用J-Link烧录固件程序的pdf文档,确保操作步骤及配置正确(s3c2440.jflash作为J-Flash项目)。

打开J-Flash,使用J-Link连接ARM9板子,点击Target标签中的connect,然后可能会出现固件需要更新的提示。此时,若不更新则总是会出现连接超时而失败;若更新仍可能出现失败。为何会更新失败?

          

首先想到的可能是上文提到的需要修改固件S/N码的问题,尝试修改后,依然无果。后来想到,下载固件的过程中会弹出两个提示框,询问是否对J-Link固件加锁?那么下载的过程是需要解锁的,否则无法下载;而下在完成后,通常就加上锁避免其他程序以外修改从而破坏该固件。但是,这样也就可能导致后来更新固件的时候,无法写入新的固件的问题。想到这里,再次重刷了一遍固件程序并以解锁状态结束。之后,再次点击Target标签中的connect,同意刷新固件,便更新成功了(我猜想还有一种方法是通过修改固件的日期?因为是否提示更新,主要是依据原固件是否为最新编译日期。不过这种方法并未得到验证)。

 

以上是关于J-LINK在MDK下调试错误的主要内容,如果未能解决你的问题,请参考以下文章

J-Link的RTT功能实践

STM32 ~ MDK环境下调试程序 HardFault_Handler 相关

如何使用J-Link远程调试?

CLion 中的 J-Link GDB 调试

在 STM32F765 上使用引导加载程序时 J-Link 调试器出现问题

无法在 Mac 上安装和配置 J-Link JTAG 调试器