各位大三侠,小弟在使用型号为MPC8260AZUPIBB的CPU过程中出现了问题:SDRAM改成了page-based interleaving模式后软件运行异常。具体问题如下:
我使用的是Micro的SDRAM,型号为:48LC32M16A2 (8 Meg x 16 x 4 banks) ,一共4片组成256M的内存,使用的是VxWorks操作系统。最早我们采用bank-based interleaving模式来设置的SDRAM,运行一直非常正常,但由于bank-based interleaving模式只能支持128M以下的SDRAM访问空间,所以为了访问整个256M空间就必须将SDRAM改成了page-based interleaving模式。
目前的SDRAM配置方式(page-based interleaving模式)如下表:
Register |
Feild |
Value |
BR1 |
BA |
Base address |
|
PS |
00 = 64bit port size |
|
MS |
010 = SDRAM-60X bus |
|
V |
1 |
OR1 |
USDAM |
11110 |
|
SDAM |
0000000 |
|
LSDAM |
00000 |
|
BPD |
01 |
|
ROWST |
0100 |
|
NUMR |
100 |
PSDMR |
PBI |
1 |
|
RFEN |
1 |
|
OP |
000 |
|
SDAM |
100 |
|
BSMA |
001 |
|
SDA10 |
100 |
|
RFRC |
101 |
|
PRETOACT |
011 |
|
ACTTOROW |
011 |
|
BL |
0 |
|
LDOTOPRE |
10 |
|
WRC |
11 |
|
CL |
11 |
关于SDRAM配置的正确与否请您指点一下,关于这个配置已经和freescal联系过,他们确信我的配置完全。
首先说明一下软件在内存中存放的位置,如下:
BootRom Image(1~2M) Pharos Image(5M~18M) 0(Mem Start) 0x0020 0000(Pharos Start Addr) 0x01F0 0000(BootRom Addr) 0x1000 0000(Mem end)
图1、VxWorks Image在内存中的示意图
单板上电后,首先运行其中内存中的BootRom Image,BootRom Image负责引导和加载Pharos Image,如果加载成功则程序跳转到Pharos Image去执行。现在的问题是如果Pharos Image较大(>12M),那么Pharos Image就无法被引导和执行成功,系统死机。但如果Pharos Image较小(<12M),那么系统运行正常,整个256M内存空间都能正常读写;
如果按最早以前的方式采用bank-based interleaving模式来设置SDRAM,Pharos Image(5M~20M)都能被正常引导起来,如今的软件版本就是这种方式,运行了好几个月都没任何问题。所有的改动就是一点:SDRAM初始化不同。
后来我又采用点灯的方式单步跟踪发现其实pharos软件已经完全解压成功,并且运行到了usrRoot()的mmu初始化的地方,也就是死在了mmu初始化。后来去掉了mmu组件,pharos完全运行起来了,唯一的缺憾就是tShell不能支持了。问题应该就是出在mmu地方,请哪位大侠出手相救,小弟不胜感激!