⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sdramtest.c

📁 S3c2440硬件测试程序
💻 C
字号:
/********************************************************
    Memory Test
    SDRAM Address:0x3000 0000~0x3400 0000     total:64MB
    Nand Falsh Address :0x00000000~0x0800000  total:64MB
    Communion space with DSP:0x18000000~0x18000400  total:1KB
*********************************************************/




#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h" 
#include "MemoryTest.h"

#include <stdarg.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>




//U8 Memory_Read_SD(U32 *addr);
//void Memory_Write_SD(U8 data,U32 *addr);


U8 Memory_Read_SD(U32 *addr)
{
  U8 data_get;
  data_get =    (*(volatile U32 *)addr);
  return data_get;
}

void Memory_Write_SD(U8 data,U32 *addr)//为什么32位数据不行
{  
   (*(volatile U32 *)addr) = data;
}



/*--------------------Test Memory---------------*/

void Memory_Test(U32 *startaddr,U32 *endaddr)
{
  U16  err_count = 0;
  U32  addr      = 0;
  //U32  *ADDR ,temp;
  U32   data_read1;// = 0x55555555;
  U32   data_read2 = 0;
  U32   total1 = 0;
  U32   total2 = 0;
  U8    MB_count = 0; 
  U32    memorysize;
  U32 memorysizeKb;
//  total1  = 0x4000000/0x100000; 
 //  total2 = 0x34000000-0x30000000;
  memorysize = (U32)(endaddr-startaddr);  //这一步有错误,0x34000000-0x30000000 = 0x1000000??
  memorysizeKb = 4*memorysize;
  memorysize = 4*memorysize/0x100000;
  
 
  
 // U32   data_write = 0;
  //total = (U32)((endaddr-startaddr)/1024/1024);  //nMB
  
  //temp = SDRAM_BASE_ADDR;
  //ADDR = (U32*)temp;  
  //U32  *ADDR ,temp;
  Uart_Printf("\n\n");
  Uart_Printf("Memory Size is :%d Byte\n",memorysizeKb);
  
 while(MB_count<memorysize){
 
 	data_read1 = (*(volatile U32 *)(addr+startaddr));    //读出数据,防止测试损坏原有数据
 	//Delay(1);
  	(*(volatile U32 *)(addr+startaddr)) = data_read1;
   // Delay(1);
    data_read2 = (*(volatile U32 *)(addr+startaddr));
       
    
    if(data_read1 != data_read2){
    	
    	Uart_Printf("ERR!!Error addrres    :%08x        \n",startaddr+4*addr);
    	Uart_Printf("Data:%08x        \n",data_read2);
        err_count++; 
    }	
    
    addr+=1;
    
    if(addr%(256*1024) == 0 && addr>0){
    	MB_count ++;
    	Uart_Printf("Complete   %d   MB   of %d MB\n",MB_count,memorysize);
    
     }
    
        
    }
   
   if(err_count != 0){
		Uart_Printf("Complete! Error number is %d\n",err_count);   
   }
   else{
   		Uart_Printf("Complete! No Error\n");
   }
   
   
   //Delay(50);
}

/***************************************************
   对NAND Flash 只能读。需要判断状态位?

***************************************************/
 void NF_Test()
{
  U32  *start,*end ,temp;
  
  temp = NF_BASE_ADDR;
  start = (U32*)temp;  
  
  temp = NF_END_ADDR;
  end = (U32*)temp; 
  
  Memory_Test(start,end);
}

/***************************************************
   对SDRAM读写有准备位吗?

***************************************************/
void SD_Test(void)
{
  U32  *start,*end ,temp;
  
/*  temp = 0x30000000;
  start = (U32*)temp;  
  
  temp = 0x30800000;
  end = (U32*)temp; 
  
  Memory_Test(start,end);
  
  temp = 0x30800000;
  start = (U32*)temp;  

  temp = 0x31000000;
  end = (U32*)temp;  
  Memory_Test(start,end); 

  temp = 0x31800000;
  start = (U32*)temp;  
  
  temp = 0x32000000;
  end = (U32*)temp;  
  Memory_Test(start,end); 
  
  temp = 0x32800000;
  start = (U32*)temp;  
  
  temp = 0x33000000;
  end = (U32*)temp;  
  Memory_Test(start,end);
  
  temp = 0x33000000;
  start = (U32*)temp;  
  
  temp = 0x33800000;
  end = (U32*)temp;  
  Memory_Test(start,end);*/
  
  temp = 0x30000000;
  start = (U32*)temp;  
  
  temp = 0x34000000;
  end = (U32*)temp;  
  Memory_Test(start,end);
}


void DSP_Test(void)
{
  U32  *start,*end ,temp;
  
  temp = DSP_BASE_ADDR;
  start = (U32*)temp;  
  
  temp = DSP_END_ADDR;
  end = (U32*)temp; 
  
  Memory_Test(start,end);
}

/*------------------Copy files from NF to Sdram Test-----------*/

/*void Copy_Test()
{
 U32 *NFstartaddr,*SDstartaddr,temp;
 U32 addr = 0;
 U8  total = 64;
 U8  NFdata = 0;
 U8  SDdata = 0;
 U32 err_count = 0;
 
 temp = SDRAM_BASE_ADDR;
 SDstartaddr = (U32*)temp;
 
 temp = NF_BASE_ADDR;
 NFstartaddr = (U32*)temp;  
 
 do{
  	Memory_Write_SD(addr%256,(NFstartaddr+addr));
    NFdata = Memory_Read_SD(NFstartaddr+addr);
    
    Memory_Write_SD(NFdata,(SDstartaddr+addr));
    SDdata = Memory_Read_SD(SDstartaddr+addr);
    
    if(SDdata != addr%256){
    	err_count++;
    	Uart_Printf("ERR!!Error addrres:%d\n",addr);
    	
    	if(NFdata != addr%256 )  Uart_Printf("Error! NF Read/Write Error \n ");
    	if(SDdata != NFdata)     Uart_Printf("Error! SD Read/Write Error \n ");
    	
    }	
    
    
    
    if(addr%(1024*1024) == 0)
    	Uart_Printf("Complete %d Mb of %dMB\n",(U32)(addr/(1024*1024)),total);
    
    addr++;
        
    }while(addr<=total*1024*1024);
   
   if(err_count != 0){
		Uart_Printf("Complete! Error number is %d\n",err_count);
	}

}*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -