调试2440 RAM拷贝至SDRAM遇到的问题

  汇编代码主要是初始化一些寄存器,关狗,初始化时钟,初始化存储管理器以便访问内存,然后将SoC上4k RAM数据拷贝至SDRAM,然后在SRAM里面运行,由于代码未正常跑起来,于是使用JLinkExe来调试。JLinkExe指定了一个命令文件: JLinkExe -commandfile ./cmd.jlink ,cmd.jlink文件内容如下:

1 r
2 loadbin /home/thomas/learn/armasm/addresses/main.bin 0x0
3 setbp 0x0 a s
4 setpc 0x0

  运行至内存拷贝代码时发现了问题:

 1 copy_steppingstone2sdram:
 2     ldr r0,=0x30000000                 @sdram start addr
 3     ldr r1,=(0x30000000+4*1024)        @steppingstone length + sdram start addr
 4     mov r2,#0x0                            @steppingstone start addr
 5 copy_cycle:
 6     ldr r3,[r2],#4
 7     str r3,[r0],#4
 8     cmp r0,r1
 9     bne copy_cycle
10     mov pc,lr

  代码反复分析,没发现问题,但是诡异的是:单步至第六行汇编指令时,按道理r3里面值应该是我的main.bin文件的前4个字节,输入:regs 查看各寄存器值,发现r3居然是0xDEEEDEEE,继续下一个字节的拷贝,这下r3的值又正常了。于是怀疑难道是flash这个点坏了?但是 flash不是有坏块标识机制吗?然后进一步确认下,使用命令:mem32 0x0 1,发现输出值又是对的,并不是0xDEEEDEEE。突然觉得0xDEEEDEEE这个值比较有特点,于是直接百度这个值,这下搜到了ARM官方文档,Using EmbeddedICE,这下才明白怎么回事了。主要是由于的cmd.jlink文件里面设置了一个软件断点。一般断点分为2种,1.软件断点 2.硬件断点。

  1.硬件断点

    硬件断点通过使用一个被称为EmbeddedICE的宏单元来监视写往地址线上的数据,如果地址匹配上则停止执行。这个宏单元是可以配置的,配置为breakpoint或者watchpoint,它会占据这个硬件单元,一般一个芯片上的EmbeddedICE宏单元数量不会太多,比如ARMv5的ARM9只有2个。也就是说至多设置2个硬件断点,如果要设置第三个,那么必须覆盖其中一个。

  2.软件断点

    软件断点也是通过使用EmbeddedICE宏单元来监测取指时指令是否符合一个特殊的bit-pattern,位模式,就是说取出的指令是否是个特定值,或者指令某几个位是否匹配上。这个bit-pattern会预先存储到下软件断点的位置,也就是说把在内存中哪个位置的值替换为这个bit-pattern,而原来这个位置的指令会被暂存到调试器的存储单元中。因此自修改代码,或者位于ROM中的代码是不能使用这种断点的。ROM中的很好理解,下软件断点必须往里面写bit-pattern,而ROM只读,显然不行了,自修改代码可能出现代码拷贝的动作,从源地址拷贝至目标地址,如果这个时候你在源地址某处下个软件断点,那么你拷贝到目的地址的这条指令变成了bit-paterrn了。

  我遇到的问题正是由于在零地址下了个软件断点导致。软件断点个数是没限制的,所有的软件断点占据一个EmbeddedICE宏单元,也就是说对于只有2个宏单元的ARM9,你下过软件断点后就只能下一个硬件断点了。

时间: 2024-11-06 15:29:28

调试2440 RAM拷贝至SDRAM遇到的问题的相关文章

RAM,SRAM,DRAM,SDRAM,DDR RAM,ROM,PROM,EPROM,EEPROM,NAND FLASH,NOR FLASH的区别

RAM:由字面意思就可以理解,SDRAM SRAM DRAM(下面蓝色字体的这几种)都可以统称RAM,random access memory(随机存取存储器)的缩写,下面是51hei.com为大家整理的目前所有的存储器的区别.SRAM:静态随机存储器,就是它不需要刷新电路,不像动态随机存储器那样,每隔一段时间就要刷新一次数据.但是他集成度比较低,不适合做容量大的内存,一般是用在处理器的缓存里面.像S3C2440的ARM9处理器里面就有4K的SRAM用来做CPU启动时用的.DRAM,动态随机存取

一路艰辛调试特权同学Verilog读写SDRAM实验,终于通了。

今年过完年回到学校,大概二月19日,开始调SDRAM这个实验,目的是想做最后的那个数码相框的项目.特权使用的SDRAM是三星的K4S641632(64M),而我板子上是海力士的H57V1262GTR(128M),由于不知道二者时序是否兼容,于是乖乖的按照特权的建议,仔仔细细的把<SDRAM-高手进阶,终极内存技术指南——完整进阶版.pdf>一文读了个遍,结果感觉时序是一样的,又从网上查资料,得到的结论也是二者兼容.于是不打算动其中大的时序过程.检查程序,修改程序,进行了许多尝试,下到我的板子上

RAM, SDRAM ,ROM, NAND FLASH, NOR FLASH

在看上面2440的内存映射的时候,对其中的有些名字,不是完全太懂,所以到网上找了相关的信息. 对于mini2440来说,SDRAM,即内存,程序运行时的地方.选择连接SDRAM的为bank6. 1)S3C2440 支持两种启动模式:一种是从 Nand Flash 启动:一种是从Nor Flash启动.在此两种启动模式下,各个片选的存储空间分配是不同的, 2)左面时nGCS0片选的Nor Flash启动模式下的存储分配图,右边是Nand Flash启动模式下的存储分配图,这里要注意,nGCS0片选

五、2440裸机开发 nand flash 操作

五.nand flash 操作 原文地址:http://blog.csdn.net/woshidahuaidan2011/article/details/51220911 by jaosn Email: [email protected] 于nor flash相比,nand flash的容量要大许多,nand 不同于nor ,其采用i/o接口只能采取顺序访问,s3c2440不仅具有nandflash的接口,而且还可以利用某些机制实现直接从nandflash启动并运行程序.相对于norflash,

二、存储管理器--SDRAM

2.1 硬件结构 2.1.1 硬件框图 CPU 通过存储管理器来读取 SDRAM 网卡 等外部设备,CPU不管外部设备是怎么样的,只是读存储管理器中的地址 CPU从0x30000000地址读取数据. 1 mov R1, #0x30000000 2 ldr R0, [R1] 存储管理器会根据配置信息来访问外部的设备. 配置信息包括: 外部设备的地址 外部设备的数据,数据宽度是多少位(8位/16位/32位) 时钟信号频率 外部设备相关的特性,SDRAM包括行地址,列地址和bank SDRAM的存储结

MAC使用IDA PRO远程调试LINUX程序

1 背景 在学习Linux系统上的一些漏洞知识的时候,往往需要进行“实地测试”,但是在Linux系统上进行调试并不太方便,因为LINUX自带的GDB调试工具真的不太人性化,即使有GDBTUI之类的“伪图形界面调试器”,也跟IDA PRO之类的调试器相差甚远.这里又遇到另一个问题了——LINUX平台的IDA PRO不太好找. 综上,对于初学者而言最佳方案就是使用IDA PRO的远程调试功能! 2 环境配置 本文主要说明在MAC系统上如何通过IDA PRO对linux程序进行远程调试(如果宿主机为W

关于SRAM,DRAM,SDRAM,以及NORFLASH,NANDFLASH

关于SRAM.DRAM.SDRAM SRAM:静态随机存储器,不需要刷新电路,这使得静态RAM比动态的RAM要快的多,但是,由于他所含的器件较多,集成度较低,不适合做大容量的内存,一般用在处理器的缓存里面,SRAM的速度非常快,在快速读取和刷新时能够保证数据完整性,SRAM的电路结构非常复杂,制造相同容量的SRAM比DRAM的成本高的多,正因如此,才使其发展受到了限制,在S3C2440片内,有16KB的instruction cache(指令缓存)16KB的data cache(数据缓存)和4K

VS2013 配置远程调试

环境: 主机A:VS2013 + win8.1          192.168.1.48 主机B:Win7                     192.168.1.32 一:配置远程工具(开启远程工具允许连接): 将VS2013安装目录下的E:\Program Files (x86)\Visual Studio\Common7\IDE\Remote Debugger\拷贝到主机B D:\Remote Debugger\ 把要调试的程序拷贝到主机B 关闭防火墙 打开D:\Remote Beb

备忘:SDRAM、NOR Flash、NAND Flash等几个常见的术语辨析

2015/4/14更新 SDRAM:掉电后不保存数据,运行时需要动态刷新.读取速度比Flash快,适合启动后的程序执行,使用前需要初始化.主要用于程序执行时的程序存储.执行或计算,类似PC的内存. NOR Flash:掉电保存数据/程序.可以直接执行指令,读取速度较快,写入不太方便,擦除速度较慢.适合小容量的程序或数据存储,类似小硬盘,,相当于电脑的BIOS.NAND Flash:掉电保存数据/程序.读取速度比NOR Flash略快,但写入.擦除都较快.可靠性略低,需要做损耗平衡.数据校验等.适