4315|13

11

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

128M sdram的BOOT在开发系统上能运行,但是烧写到FLASH运行总是异常 [复制链接]

开发环境:S3C2440,ADS1.2,PB5.0
使用UL的BOOT代码为基础将64M SDRAM改动为128M SDRAM.
硬件已经实现,软件改动后使用开发系统连接一块板子 (这块板子的NAND FLASH原本在64M SDRAM运行时BOOT和系统都是正常的,为调试128M SDRAM,将64M的SDRAM换成128M的,跳线改了一下) 调试状态下运行没有问题,并且可以烧写系统并运行;而且在开发环境下检测这个128M SDRAM,读写都正常,下载系统后启动查看内存剩余90多M,拷贝文件也没有问题。

但是把开发系统运行正常的这个BOOT烧写到这个板子的NAND FLASH中,可以启动,但是这时候启动系统或是烧写系统时总是出现异常:undefine instruction 或是 pabort, dabort.

各位帮忙想想会是什么原因?多谢!

最新回复

有分了,结帖,送分  详情 回复 发表于 2009-6-5 11:24
点赞 关注

回复
举报

2

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
64M和128M这两个代码改动的也就是扫描位数由9->10,地址输出控制寄存器,然后是一些堆栈和堆以及中断地址的赋值。

——没有这么简单吧。
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
所用的SDRAM时序对了好几遍,也是符合的,BOOT中加的测试SDRAM的代码读写也没有问题,感觉SDRAM部分应该OK了。
每次起NAND FLASH的BOOT就是后面的代码没有加载到SDRAM,换过一片也是一样。
 
 
 

回复

1

帖子

0

TA的资源

禁止访问

4
 
提示: 作者被禁止或删除 内容自动屏蔽
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

5
 
以上还忘说了,BANKSIZE和GPACON在64M BOOT中是按128M走的,因此在128M BOOT实现时这个就没有改动
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

6
 
flash驱动或者flash注册表问题。仔细检查。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

7
 
运行烧写系统时也会出现异常,而且同样的烧写代码在64M下就正常.
另外系统在启动前会从FLASH中拷贝到SDRAM中,执行拷贝前会向串口输出一个信息:Load Kernel...,但是并没有输出这个信息,而是输出undefine instruction,也就是出现了指令异常。
64M和128M这两个代码改动的也就是扫描位数由9->10,地址输出控制寄存器,然后是一些堆栈和堆以及中断地址的赋值。
而且我将编译选项optimization level从ALL变成MIN,那么用开发系统还是可以启动BOOT运行,而烧写到FLASH变成无法启动了,没有任何调试信息输出。


 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

8
 
使用ADS1.2调试BOOT没有问题,进行内存测试写数据读数据没有问题,而且使用ADS1.2看内存数据也是没有问题.
64M-128M确实没有太多改动的地方.
请问楼上复杂在哪里?看你的帖子是调成过,请指教
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 
以下信息是从NAND FLASH启动时,过一段时间串口没有输入则直接拷贝FLASH中WINCE系统数据到SDRAM中并运行
USB: IN_ENDPOINT:1 OUT_ENDPOINT:3
FORMAT: +++
NOTE: 1. Power off/on or press the reset button for 1 sec
                 in order to get a valid USB device address.
          2. For additional menu, Press any key.

USB host is not connected yet.
Read chip id = ec76
Nand flash status = c0
Undefined instruction exception!!!

这是从FLASH启动时输出的异常信息,在这个异常处应该是输出load kernel,然后开始从FLASH将系统加载到SDRAM中,还没有进WINCE.

还有一个调试信息如下:
###### Select Menu ######
[0] Download & Run
[1] Download Only
[2] Download From UART
[3] Write File to SST39VF160
[4] Write File to NAND Flash
[5] Boot OS
[6] Erase NAND Flash Partition
[7] Config parameters
[8] Relocate NK.bin
Found single BIN signature.
Image start is 0x80200000, length is 0x01150270
REC start 0x80200000, length 0x4
Dabort exception!!!

这是我从USB下载NK.BIN文件到SDRAM后开始解压出现的错误.


我再过一遍整个BOOT从64M改动到128M的整个流程,看到底有什么纰漏
1、由于是在BANK6将64扩到128,硬件上仅将内存的BANK选择线由地址线24 25调整为25 26
2、软件对于扫描位数调整为10位,时序由于是从K4S561632切换成MT48LC32M16A2TG-75,因此仔细比过这两个手册,都是75的,时序要设置的几个参数是一样的,仅有一个有1ns误差,但是在误差范围内。
3、堆栈地址,堆地址以及ISR等地址都针对128M进行改动。这个在OPTION.H以及option.inc都进行了调整。
4、BOOT初始化时SDRAM的擦写由64M变为128M,但这段是按键方才执行,因此没什么影响
5、其中对于CL=3,CL=2都进行过尝试,没有什么改善
6、MMU初始化针对BANK6进行调整
就以上这些,其余和64M控制一样。
但是使用ADS12调试这个BOOT,全速运行就可以,不会出现上述异常。
并且也进行过断点调试,在程序中分配的堆也确实在0x37ff0000以后。在程序中加内存测试代码写SDRAM,然后观察实际数据确实与写的相同。

注: 进行过以下测试,就是在ADS运行BOOT时,在是否要拷贝FLASH内容到SDRAM中强行拷贝,到是出现一个现象,应该是拷贝128K数据,但是拷贝了两页就直接跳到拷贝完成的地址了,看汇编代码应该是正确的代码,不是下载到SDRAM出现数据错误.

再实验一下.............



























 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

10
 
检查 MMU 映射表的配置。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

11
 
你的NK直接通过DNW下载到内存运行起来后 wince一切正常?

如果可以这样,那问题真有点怪了。
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

12
 
应该是好了,又弄了块新板子,新SDRAM,新NAND FLASH.烧写的BOOT可以进行下载了,下载后烧写WINCE也可以了,然后就启动了.

那个拷贝两页就跳到拷贝完成的地址原因是碰到坏块了,有个变量判断,所以在前面就直接跳转了,这个是自己忽视了;换了这个新的板子拷贝FLASH内容运行也没有问题,可以起来.

感谢两位的支持,发现手里还没分,挣点分再感谢两位.

 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

13
 
搞定就好 呵呵。
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

14
 
有分了,结帖,送分
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表