程序的加载地址在NAND FLASH中,可以用J-LINK直接调试吗?

liso   2010-1-30 14:11 楼主
刚开始学习ARM,正在跑裸板程序,开发环境是ECLIPSE+j-link_GDB_SERVER。
在调试代码转移的时候,怎么都调试不了.

刚开始的点灯程序是可以调试的,一切都正常。这些代码直接放在2440的SRAM中了。

当我要调试把NAND FLASH中的代码转移到SDRAM中的时候就不行了。怎么都没反应。是不是J-LINK不支持对NAND FLASH的调试,调试的时候,J-LINK无法把相应的代码放到NAND FLASH中去?

请问如果是这样的话,我怎么才能调试像代码转移这一类的程序呢?4KB的SRAM空间啥都干不了,我剩下的代码要往哪放呢?

一个小菜鸟,分不多,还请大家多帮帮忙~~~

回复评论 (10)

这要看你的init.s中是怎么写的?

一般如果想脱离调试器运行程序,首先需要把程序下载到nandfash,之后在boot.s中需要nandcopy即把nand中EW,RO搬运到SDRAM,搬运结束后PC直接指到SDRAM中
点赞  2010-1-30 14:40
不会的。我都用了,估计是你代码搬移有问题。
点赞  2010-1-30 14:40
nandflash本身不能运行程序,只做存储介质,不存在在nand中调试程序这一说。。。

LZ可以加我QQ。我们交流一下
点赞  2010-1-30 14:44
程序主代码如下:
.text
.global _start
_start:
                                            @函数disable_watch_dog, memsetup, init_nand, nand_read_ll在init.c中定义
            ldr     sp, =4096               @设置堆栈
            bl      disable_watch_dog       @关WATCH DOG
            bl      memsetup                @初始化SDRAM
            bl      nand_init               @初始化NAND Flash

                                            @将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中
                                            @nand_read_ll函数需要3个参数:
            ldr     r0,     =0x30000000     @1. 目标地址=0x30000000,这是SDRAM的起始地址
            ldr     r1,     =14096           @2.  源地址   = 4096,连接的时候,main.c中的代码都存在NAND Flash地址4096开始处
            mov     r2,     #1024           @3.  复制长度= 1024(bytes),对于本实验的main.c,这是足够了
            bl      nand_read               @调用C函数nand_read

            ldr     sp, =0x34000000         @设置栈
            ldr     lr, =halt_loop          @设置返回地址
            ldr     pc, =main               @b指令和bl指令只能前后跳转32M的范围,所以这里使用向pc赋值的方法进行跳转
halt_loop:
            b       halt_loop


链接文件:
SECTIONS {
  firtst          0x00000000 : { head.o init.o nand.o}
  second         0x30000000 : AT(14096) { main.o }
}

其中Main函数就是个简单的点灯程序。
点赞  2010-1-30 14:44
引用: 引用 3 楼 ialwaysgo 的回复:
nandflash本身不能运行程序,只做存储介质,不存在在nand中调试程序这一说。。。

LZ可以加我QQ。我们交流一下



请问QQ是多少?我想加一下~~

还有GM大大,不是调试中出错,是点了debug之后什么反应都没有,这是为什么?
点赞  2010-1-30 14:47
412316446

  @将NAND Flash中地址4096开始的1024字节代码(main.c编译得到)复制到SDRAM中 ???
很怪异,怎么不是0开始的地方
点赞  2010-1-30 14:51
引用: 引用 1 楼 ialwaysgo 的回复:
这要看你的init.s中是怎么写的?

一般如果想脱离调试器运行程序,首先需要把程序下载到nandfash,之后在boot.s中需要nandcopy即把nand中EW,RO搬运到SDRAM,搬运结束后PC直接指到SDRAM中
学习学习,嘿嘿…
点赞  2010-1-31 06:46
引用: 引用 1 楼 ialwaysgo 的回复:
这要看你的init.s中是怎么写的?

一般如果想脱离调试器运行程序,首先需要把程序下载到nandfash,之后在boot.s中需要nandcopy即把nand中EW,RO搬运到SDRAM,搬运结束后PC直接指到SDRAM中


说的很对了。呵呵。

前提是确认你的jlink 没有毛病啊。
点赞  2010-1-31 08:57
恩,debug都无法调试???

lz介意你别一下走迈很多步,慢慢来,先确定JLINK是好的?
之后再确定SDRAM是否成功初始化了,在这些基础上才能谈成功的加载调试
点赞  2010-1-31 11:21
jlink 是不能直接吧程序写到nand中的 ,只能直接写到nor 中,调试的话应该是把程序写到内存中在内存中调试,调试正确以后 再用写nand函数写到nand中
点赞  2010-1-31 13:17
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复