📄 sdramtest.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 + -