原来是如此检测SDRAM的

今天看了bootloaderC语言部分,学习了测试SDRAM的方法,同时回想起了一位朋友问的问题,如何测试RAM里的每个单元是否完好?当时我想是不是通过读取电位值来判断呢,呵呵,这下明白了。原理就是遍历该RAM的每个单元,对单元进行写数据然后再读出来,通过判断写入的是否等于读出的就能得知该RAM是否存在坏单元。

int main()

{

    U32 * chkPt1, *chkBs;

    U32 WT = 0, RD;

    for(chkBs=(_RAM_STARTADDRESS);chkBs<(_RAM_SIZE);chkBs += 0x4, WT++)

    {  //_RAM_STARTADDRESS SDRAM的起始地址,_RAM_SIZE是SDRAM的容量

        * chkBs = WT;    //写数据

        RD = * chkBs;     //读数据

        if( RD == WT )     //读出的数据和写入的一样

            Led_Display(0);

        else                //读出的数据和写入的不一致

            Led_Display(WT);

    }

    return 0;

}

投 票

觉得本文不错,投一票   

评 论

  • 嵌入式在线网友  2008-3-27 23:35:17
  • 嵌入式在线网友
    嘿嘿,亲自动手做了就明白了
  • 嵌入式在线网友  2008-3-28 12:38:03
  • 嵌入式在线网友
    请问,U32是什么?这段程序在运行的时候又是放在那呢?不会说是放在RAM中吧?要是RAM是坏的怎么办。
    楼主能否详说一下实验过程,万分感谢。
  • 湛蓝思微  2008-3-28 16:55:22
  • 湛蓝思微
    呵呵,不错。。
  • 洲_仔  2008-3-28 20:41:30
  • 洲_仔
    这位网友问得很深入,呵呵
    首先,u8、u16、u32是这样定义的unsigned char u8 、unsigned short int u16 、unsigned long int u32。
    其次,这段程序出自bootloader,而bootloader是存放在flash里直接执行的,所以这段测试SDRAM的程序也是在flash里直接运行而不需要拷贝到RAM中才执行。
    对于flash而言可以分为两类,nand和nor,其中nor里程序可以直接跑起来的。
  • 嵌入式在线网友  2008-4-9 15:37:09
  • 嵌入式在线网友
    flash也能运行程序?第一次听说过。。。
  • 嵌入式在线网友  2008-6-23 22:53:54
  • 嵌入式在线网友
    flash也能运行程序?我也是第一次听说过
    还请楼主在仔细谈谈》》
  • 洲_仔  2008-7-2 10:40:43
  • 洲_仔
    比如我们的PC主板里自检程序是保存在ROM里的,启动PC时候自检程序在ROM里直接运行,负责检测各硬件设备(包括检测RAM)。在嵌入式开发板中也一样,bootloader是保存在nor flash里,而这个nor flash是ROM的一种类型。而nand flash就不同了,它属于外存,存储在其里面的代码不能脱离RAM单独运行。


验证码: 看不清?换一张