EBOOT中SDRAM读写测试

时间:2022-04-28 18:04:31
各位英雄:
我的系统基于pxa255+wce4.2,外挂2个bank的sdram,每个bank接64M,由两片32M组成。我在eboot中为测试sdram,就分别对两个bank的地址进行读写(每个bank的低400字节),发现bank0可以正常读写,也即读写数据一致;bank1读写数据不一致,且每次读出的数据还不一样。

请问会是什么原因呢?硬件?还是内存映射问题?

另外,我用示波器观察sdram的引脚时,发现clk信号是正弦波,频率正常;但是片选信号在eboot启动后就出现周期性的低电平(不规则),且两个bank的片选周期还不一样(bank0为800KHZ,bank1为200KHZ);在循环读写时,发现片选信号的频率会有2KHZ左右的升高!

8 个解决方案

#1


不好意思帮不上忙啊

#2


我觉得你的已经有一个内存读写正常。
另外一个不正常,这说明不是软件的问题,是你的接线没有接好。先和硬件工程师查找原因,看是否应该这样接。
——
没有ADS的东西,真不是那么好开发的。

#3


接线问题?两个bank的接线基本一样,区别就在于片选不一样。而且观察发现两个bank的片选信号波形不一致,差别挺大。

有没有可能我的数据没有写入SDRAM,而是写到CACHE里,所以数据读出是随机的?

#4


引用 3 楼 daigua04 的回复:
接线问题?两个bank的接线基本一样,区别就在于片选不一样。而且观察发现两个bank的片选信号波形不一致,差别挺大。 

有没有可能我的数据没有写入SDRAM,而是写到CACHE里,所以数据读出是随机的?


时钟等都要注意的。

你要仔细看内存控制器那章节,肯定会发现问题。

#5


我的两个bank的SDRAM,第一个bank除了内核部分外,其余部分以RAM的形式在config.bib文件中声明(类型为RAM);第2个bank在OEMGetExtensionDRAM函数中声明:
BOOL OEMGetExtensionDRAM(LPDWORD lpMemStart, LPDWORD lpMemLen)
{
    /*  This is called by the Kernel so see if there is any DRAM beyond
         what is reported through Config.bib
    */         
    //blue add
    *lpMemStart = 0x94200000;
    *lpMemLen = 0x04000000;
     return TRUE; 
    //return FALSE;   // no extension DRAM
}

其中0x94200000就是第2个bank的虚拟起始地址(cached)。

我在eboot中读写第2个bank的前400个字节(从0xB4200000开始),数据读写不一致,且每次读出的都不一样。

#6


SDRAM的Controller是需要配置的。255支持4个SDRAM的#SDCS,每个都需要单独配置及打开。一般这个动作是在汇编部分,MMU打开之前做的。你仅仅在OEM程序中提交了地址是不够的。

#7


SDRAM的控制器我已经在EBOOT的汇编中设置好了。

两套一模一样的板子,一样的EBOOT(包含测试代码),一个板子上可以正常读写;另外一套板子就只有低64M(第1个bank)可以正常读写,高64M(第2个bank)就是读写不一致,且每次读出都不相同。

是不是板子上的SDRAM坏了呢?还是SDRAM本身没有问题,电路有问题?它们会导致读写不一致,且每次读出是随机的吗?

#8


引用 7 楼 daigua04 的回复:
SDRAM的控制器我已经在EBOOT的汇编中设置好了。 

两套一模一样的板子,一样的EBOOT(包含测试代码),一个板子上可以正常读写;另外一套板子就只有低64M(第1个bank)可以正常读写,高64M(第2个bank)就是读写不一致,且每次读出都不相同。 

是不是板子上的SDRAM坏了呢?还是SDRAM本身没有问题,电路有问题?它们会导致读写不一致,且每次读出是随机的吗?


估计是坏了。换个试试。内存比较用容易换。

#1


不好意思帮不上忙啊

#2


我觉得你的已经有一个内存读写正常。
另外一个不正常,这说明不是软件的问题,是你的接线没有接好。先和硬件工程师查找原因,看是否应该这样接。
——
没有ADS的东西,真不是那么好开发的。

#3


接线问题?两个bank的接线基本一样,区别就在于片选不一样。而且观察发现两个bank的片选信号波形不一致,差别挺大。

有没有可能我的数据没有写入SDRAM,而是写到CACHE里,所以数据读出是随机的?

#4


引用 3 楼 daigua04 的回复:
接线问题?两个bank的接线基本一样,区别就在于片选不一样。而且观察发现两个bank的片选信号波形不一致,差别挺大。 

有没有可能我的数据没有写入SDRAM,而是写到CACHE里,所以数据读出是随机的?


时钟等都要注意的。

你要仔细看内存控制器那章节,肯定会发现问题。

#5


我的两个bank的SDRAM,第一个bank除了内核部分外,其余部分以RAM的形式在config.bib文件中声明(类型为RAM);第2个bank在OEMGetExtensionDRAM函数中声明:
BOOL OEMGetExtensionDRAM(LPDWORD lpMemStart, LPDWORD lpMemLen)
{
    /*  This is called by the Kernel so see if there is any DRAM beyond
         what is reported through Config.bib
    */         
    //blue add
    *lpMemStart = 0x94200000;
    *lpMemLen = 0x04000000;
     return TRUE; 
    //return FALSE;   // no extension DRAM
}

其中0x94200000就是第2个bank的虚拟起始地址(cached)。

我在eboot中读写第2个bank的前400个字节(从0xB4200000开始),数据读写不一致,且每次读出的都不一样。

#6


SDRAM的Controller是需要配置的。255支持4个SDRAM的#SDCS,每个都需要单独配置及打开。一般这个动作是在汇编部分,MMU打开之前做的。你仅仅在OEM程序中提交了地址是不够的。

#7


SDRAM的控制器我已经在EBOOT的汇编中设置好了。

两套一模一样的板子,一样的EBOOT(包含测试代码),一个板子上可以正常读写;另外一套板子就只有低64M(第1个bank)可以正常读写,高64M(第2个bank)就是读写不一致,且每次读出都不相同。

是不是板子上的SDRAM坏了呢?还是SDRAM本身没有问题,电路有问题?它们会导致读写不一致,且每次读出是随机的吗?

#8


引用 7 楼 daigua04 的回复:
SDRAM的控制器我已经在EBOOT的汇编中设置好了。 

两套一模一样的板子,一样的EBOOT(包含测试代码),一个板子上可以正常读写;另外一套板子就只有低64M(第1个bank)可以正常读写,高64M(第2个bank)就是读写不一致,且每次读出都不相同。 

是不是板子上的SDRAM坏了呢?还是SDRAM本身没有问题,电路有问题?它们会导致读写不一致,且每次读出是随机的吗?


估计是坏了。换个试试。内存比较用容易换。