Jlink在使用的过程中的一些实用问题

转载 2015年07月06日 18:41:49

                              Jlink在使用的过程中的一些实用问题 

最近几天一直在学习bootloader的开发与移植,计划是根据vivi的代码,实现一个相对简单的bootloader,个人认为单纯的进行移植,不 能够对bootloader和底层的一些驱动原理有很深入的了解。 这里使用的开发板是友善的sbc2410x和友善的mini2440,为了能够跟踪bootloader的启动状态,使用J-Link进行调试。 Jlink版本是V8。这中间遇到了不少问题,在这里简单记录一下,自己备忘,也供有问题的朋友参考。新手上路,希望高手看了,对我写的不好的地方多批评 指出。 先简要记录几个问题: 

1.如何下载程序到开发板的NorFlash 
2.如何下载程序到开发板的NandFlash 
3.如何最小化地编译bootloader的各部分代码。
 4.如何分步测试各部分代码 
5.可不可以不烧写进flash,而在内存中进行调试,如何进行。 
6.Jlink如何进行单步调试。 
7.如何解决Jlink的unable to halt cpu,以及无法通过jlink 进行cpu 的reset操作,和从0x0开始单步调试。 这几个问题,最近几天基本都找到了答案,现在时间有点晚了,留下问题的引子,这几天逐个补充。 ----------------------2010-11-28补充 --------------------------------------------------------------- 
       1-5得单独用文章来说,6,7在这里简述一下,也算对以前说的做个补充。这段时间太忙,直到最近才有了点时间。 
       先来解决7: 要想实现7,先要有一些硬件条件,即,硬件复位电路要设计的没有问题。对JTAG接口各信号线的正常上下拉都要正常,还有就是REST信号的问题。很多板 子出现7的问题,多是REST信号没有设计正常,即,JTAG上加REST信号的时候,没有对CPU的RESET信号线进行复位。这种情况还算比较好的。 可以通过手动的方法来解决: 先在jlink commander中输入入"r"指令,不要按回车。然后另一只手准备按板子上的RESET键。按下回车,然后马上按板子上的RESET键。这样,多数情 况就能正常复位了。 有的时候会出现复位后CPU的PC不是处理0X0位置,这种情况下往往是硬件电路设计不好,信号不稳定,或者JTAG线过长造成的。解决办法,一般可以通 过JLINK的设置,降低工作频率。或者选用质量稍好的长度稍短的信号线。 
        解决6: jlink对于bootloader调试提供了很强大的功能。而且不一定需要使用ADS,RVDS或者KEIL之类的第三方的IDE,就可以。这就是 JLINK COMMANDER。在安装JLINK的驱动后就可以看到这个功能 一般使用方法是这样的: 
       (1)连接JTAG线到板子上,另一端连接JLINK(真是废话!) 
       (2)打开板子的电源 (3)打开JLINK COMMANDER 正常情况下,会出现 SEGGER J-Link Commander V4.20p ('?' for help) Compiled Nov 19 2010 15:55:19 DLL version V4.20p, compiled Nov 19 2010 15:55:07 Firmware: J-Link ARM V8 compiled Nov 19 2010 11:55:23 Hardware: V8.00 S/N: XXXXXXXXXX Feature(s): RDI,FlashDL,FlashBP,JFlash,GDBFull VTarget = 3.319V Info: TotalIRLen = 4, IRPrint = 0x01 Info: CP15.0.0: 0x41129200: ARM, Architecure 4T Info: CP15.0.1: 0x0D172172: ICache: 16kB (64*8*32), DCache: 16kB (64*8*32) Info: Cache type: Separate, Write-back, Format A Found 1 JTAG device, Total IRLen = 4: #0 Id: 0x0032409D, IRLen: 04, Unknown device Found ARM with core Id 0x0032409D (ARM9) JTAG speed: 100 kHz J-Link> 类似上面的信息。 
        我这里连接的是S3C2410X的CPU,所以被识别出来是 ARM处理器,指令体系是ARMv4T。同时,还发现了CP15协处理器(在24x0上是MMU)。发现了16K的 ICACHE,16K的DCACHE。连接速率是100K 正常连接后,可以做很多事。
       (4)可以做的事: 
        a.中断现在程序的运行,观察寄存器和内存甚至FLASH中的内容 在提示符后输入 "h" 指令,可以中断现在的运行。这时候,可以用"Regs"指令来查看通用寄存器的值。 也可以点击通知区域的这个图标: 在标签里选择 "CPU Regs" 同时,在指令行输入 mem 0x4800000,16 可以观察从0x48000000开始往后的0x16个字节的内容。ARM的地址空间整个在这4G上,包括SFR。所以,通过该指令可以观察寄存器,NOR FLASH,SRAM,DRAM中的内容。需要指出的是,某些寄存器的内容是不稳定的,在读取后其值就会发生变化(例如NAND控制器的NFDATA寄存 器,每读一次推出一个字节),所以读寄存器有可能会使程序运行不正常。 
         b.单步执行 在中断后,按s键,即可一行一行的执行指令。每执行一行s,会弹出一个PC=xxxx的地址,这是还未执行的,PC当前指向的地址。 另,如果想从头开始执行,可以先执行r指令,这时,PC会回到0x0,并处于halt状态。然后按s就可以单步执行,按g就可以连续执行。
         c.断点设置 还是在JLINK的WINDOW图形界面窗里,点击BreakPoint标签。 在上面的code里面右击,就可以 Set code breakpoint,选择代码模式Mode,处理ARM模式就选ARM,处理THUMB就选THUMB。 输入地址Address,点OK。 这样就设置了一个断点。在程序正常执行时,执行到指定行,就会中断下来。 这里需要指出的是,以上调试的内容都是汇编语言的模式,而且在JLINK里面只能看到编译好的二进制机器码。如果是ARM LINUX GCC编译的程序,就可以通过反编译得到对照码,调试运行。这些内容对于调试BOOTLOADER和裸机运行的汇编程序非常有意义。
         d.直接通过jlink设置寄存器或者内存的内容。 指令为 w1,w2,w4 分别对应写 1字节,2字节,4字节 指令格式(以w4为例) w4 0x48000000,0x1 将地址0x48000000的内容设置为0x1 这个功能的用途可以做一些测试,比如手工向NAND寄存器设置命令和地址,然后执行。以查看/修改NAND中的内容。 还有很多很实用的功能,这里不一一说明,JLINK有详细的说明书。另外,输入空指令,可以得到指令帮助。 ------------------------2010-12-1 补充 ------------------------------------------------- 
         针对复位问题,今天无意发现了个指令rsettype 。
        J-Link>rsettype Syntax: RSetType Types: 0 = NORMAL (Using RESET pin, halting CPU after Reset) 1 = BP0 (Using RESET pin, halting CPU with breakpoint @ 0) 2 = ADI (Software Reset for Analog Devices MCUs) 3 = NO_RESET (Nothing happens) 4 = HALT_WP (Using RESET pin, halting CPU after Reset using watchpoint) 5 = HALT_DBGRQ (Using RESET pin, halting CPU after Reset using DBGRQ) 6 = SOFT (Software Reset, resetting CPU regs only) 7 = HALT_DURING (Halt during RESET) 8 = SAM7 (Software reset for Atmel AT91SAM7 MCUs) 9 = LPC (Hardware reset for NXP LPC2xxx MCUs) J-Link> 指令的格式是 rsettype n n为0-9。 
       当CPU复位不正常时,可以尝试修改该值。 手头一块SBC2410X的板子,后来发现用6方式复位非常好。 而对于LPC2XXX的CPU,用9方式非常好。我估计对于s3c6410的板子,5方式可能比较好。

基于CSC2440开发板的vivi的烧写过程

  • 2010年05月11日 10:53
  • 227KB
  • 下载

ARM入门学习经验

一 首先说说ARM的发展        ARM由于其功耗、成本、功能、可控性、供货等多方面的优势,在商业、工业等电子产品领域发展的越来越快,占据的市场份额也越来越多。          广义的嵌入...
  • maoyongf2008
  • maoyongf2008
  • 2011年11月14日 15:28
  • 1207

Mini2440开发板串口连接

Mini2440开发板串口连接网上淘来一片二手的mini2440开发板,准备玩一玩。串口连接单板,是第一步,但却让我折腾了好一阵子。首先是解决笔记本没有串口的问题,同样是淘宝,买来一个usb转串口转接...
  • sharpbladepan
  • sharpbladepan
  • 2016年12月01日 15:03
  • 1714

stm32的两种固件下载模式:JTAG和SWD

一、JTAG模式 这种模式一般有10pin的、14pin的和20pin的,尽管引脚数和引脚的排列顺序不同,但是其中有一些引脚是一样的。值得注意的是,不同的IC公司会自己定义自家产品专属的Jtag...
  • zhengshifeng123
  • zhengshifeng123
  • 2017年01月05日 09:43
  • 3360

ARM-CM3 -【教程】摆脱UART,仅用JLink也能实现printf功能!! /*更新scanf*/

http://www.amobbs.com/thread-5516711-1-1.html 本帖最后由 zgxcom123 于 2013-1-19 10:50 编辑 Pri...
  • iamlvshijie
  • iamlvshijie
  • 2013年01月22日 16:31
  • 3165

程序在JLink调试时运行正常,退出调试环境后运行不正常的问题

之前的程序都是在JLink调试环境下调试运行的,在FLASH和RAM中调试都运行正常,虽然偶尔会出现跑到Hard Fault中的情况,一开始也只以为是硬件调试环境问题。   随后将程序下载到FLAS...
  • lgd370323
  • lgd370323
  • 2015年09月23日 20:31
  • 1220

JLINK v8命令集

JLINK v8命令集 Available commands are: 有效的命令如下: (本人简单翻译了一下如有错误还请指出,谢谢各位网友) ---------------------- ...
  • liushaowei2008
  • liushaowei2008
  • 2012年07月06日 11:16
  • 7649

JLink和JFlash使用方法笔记

这段时间在用jlink调试freescale的mx51板子,下面将使用jlink的方法在此做一个笔记。    jlink是segger公司的产品,由于正版的工具巨贵,所以现在大部分人都喜欢用山寨版的...
  • hexiechina2010
  • hexiechina2010
  • 2016年05月22日 00:46
  • 9021

用J-Link调试bootloader

      最近几天一直在学习bootloader的开发与移植,计划是根据vivi的代码,实现一个相对简单的bootloader,个人认为单纯的进行移植,不能够对bootloader和底层的一些驱动原...
  • HumorRat
  • HumorRat
  • 2010年05月28日 00:02
  • 4832

Jlink调试环境搭建

转自:http://blog.csdn.net/kangear/article/details/9077669 版权声明:本文为博主原创文章,未经博主允许不得转载。              ...
  • l502091250
  • l502091250
  • 2016年08月01日 20:24
  • 828
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Jlink在使用的过程中的一些实用问题
举报原因:
原因补充:

(最多只允许输入30个字)