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

📄 memorytest.c

📁 FreeScale imx21开发板Nand flash烧写程序
💻 C
字号:
#include <stdio.h>
#include "common.h"

#define _PRINTF_OUT_

// #define _PRINT_OUT_

U8 _gMSG_OUT=0;

U32 _gErrorMemoryU8;
U32 _gErrorMemoryU16;
U32 _gErrorMemoryU32;
U32 _gErrorMemoryAddress;

U32 MemoryErrorU8(U32 Address)
{
   #ifdef _PRINTF_OUT_
     printf("\nMemory Access Error at Address=0x%08x", Address);
   #endif
   
   _gErrorMemoryU8=1;
   return Address;
}

U32 MemoryErrorU16(U32 Address)
{
   #ifdef _PRINTF_OUT_
     printf("\nMemory Access Error at Address=0x%08x", Address);
   #endif

   _gErrorMemoryU16=1;
   return Address;
}

U32 MemoryErrorU32(U32 Address)
{
   #ifdef _PRINTF_OUT_
     printf("\nMemory Access Error at Address=0x%08x", Address);
   #endif

   _gErrorMemoryU32=1;
   return Address;
}

U32 MemoryErrorAddress(U32 Address)
{
   #ifdef _PRINTF_OUT_
     printf("\nMemory Access Error at Address=0x%08x", Address);
   #endif
   
   _gErrorMemoryAddress=1;
   return Address;
}

void MemoryFillU8(U32 StartAddress, U32 ByteSize, U8 Pattern)
{
    U32 i;

	for(i=0; i<ByteSize; i++)
	{
	   *(volatile P_U8)(StartAddress+i)=Pattern;

       if((i&0xFFFFF)==0)
         printf("F");
	}
}

void MemoryWriteU8(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
    U32 i, j, k;
    U8 TempRead;

    i=StartAddress;
    k=0;
    j=StartNumber;
 
    while(i<(StartAddress+ByteSize))
    {
//        TempRead=(*(P_U8)(0x8000000)); // Read Access to SDRAM
 
    	*(volatile P_U8)(i)=j;

   #ifdef _PRINTF_OUT_
    	if((i&0x000FFFFF)==0)
           printf("W");
   #endif
    		
  	    k++;
	    j++;
        i++;	
        
        if(k>=PageSizeByte)
	    {  	k=0;
   		    j=StartNumber;
	    }	
   }
}

U32 MemoryReadU8(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
    U32 i, j, k;
    U8 tmp;
    U8 TempRead;

	_gErrorMemoryU8=0;

    i=StartAddress;
    k=0;
    j=StartNumber;
 
    while(i<(StartAddress+ByteSize))
    {
//        TempRead=(*(P_U8)(0x8000000)); // Read Access to SDRAM

    	tmp=(*(volatile P_U8)(i));

   #ifdef _PRINTF_OUT_
    	if((i&0x000FFFFF)==0)
           printf("R");
   #endif
   
        if(tmp != ((U8)j))
          MemoryErrorU8(i);
    		
	    k++;
	    j++;
        i++;	
        
        if(k>=PageSizeByte)
	    {  	k=0;
   		    j=StartNumber;
	    }	
   }
   
   return _gErrorMemoryU8;
}

U32 MemoryTestU8(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
  _gErrorMemoryU8 = 0;

  MemoryWriteU8(StartAddress, ByteSize, StartNumber, PageSizeByte);
  MemoryReadU8(StartAddress, ByteSize, StartNumber, PageSizeByte);

  return _gErrorMemoryU8;
}

void MemoryWriteU16(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
    U32 i, j, k;

    i=StartAddress;
    k=0;
    j=StartNumber;
 
    while(i<(StartAddress+ByteSize))
    {
    	*(P_U16)(i)=j;
    		
		k+=2;
		j++;
        i+=2;	

    	if((i&0x000FFFFF)==0)
           printf("W");
        
        if(k>=PageSizeByte)
		{  	k=0;
   			j=StartNumber;
		}	
   }
}

void MemoryReadU16(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
    U32 i, j, k;
    U16 tmp;

    i=StartAddress;
    k=0;
    j=StartNumber;
 
    while(i<(StartAddress+ByteSize))
    {
    	tmp=(*(P_U16)(i));
    	if(tmp != j)
    	  MemoryErrorU16(i);
    		
	    k+=2;
	    j++;
        i+=2;	

    	if((i&0x000FFFFF)==0)
           printf("R");
       
        if(k>=PageSizeByte)
		{  	k=0;
   			j=StartNumber;
		}	
   }
}

U32 MemoryTestU16(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
  _gErrorMemoryU16=0;
  
  MemoryWriteU16(StartAddress, ByteSize, StartNumber, PageSizeByte);
  MemoryReadU16(StartAddress, ByteSize, StartNumber, PageSizeByte);

  return _gErrorMemoryU16;
}

void MemoryWriteU32(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
    U32 i, j, k;

    i=StartAddress;
    k=0;
    j=StartNumber;
 
    while(i<(StartAddress+ByteSize))
    {
    	*(P_U32)(i)=j;
    		
	k+=4;
	j++;
        i+=4;	

    	if((i&0x000FFFFF)==0)
           printf("W");
        
        if(k>=PageSizeByte)
	{  	k=0;
   		j=StartNumber;
	}	
   }
}

void MemoryReadU32(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
    U32 i, j, k;
    U32 tmp;

    i=StartAddress;
    k=0;
    j=StartNumber;
 
    while(i<(StartAddress+ByteSize))
    {
    	tmp=(*(P_U32)(i));
    	if(tmp != j)
    	  MemoryErrorU32(i);
    		
	k+=4;
	j++;
        i+=4;	

    	if((i&0x000FFFFF)==0)
           printf("R");
        
        if(k>=PageSizeByte)
	{  	k=0;
   		j=StartNumber;
	}	
   }
}

U32 MemoryTestU32(U32 StartAddress, U32 ByteSize, U32 StartNumber, U32 PageSizeByte)
{
  _gErrorMemoryU32=0;

  MemoryWriteU32(StartAddress, ByteSize, StartNumber, PageSizeByte);
  MemoryReadU32(StartAddress, ByteSize, StartNumber, PageSizeByte);

  return _gErrorMemoryU32;
}

void MemoryWriteAddress(U32 StartAddress, U32 ByteSize)
{
   U32 i;

   i=StartAddress;

   while(i<(StartAddress+ByteSize))
   {
   	   *(volatile P_U32)(i)=i;
       i+=4;

       if((i&0xFFFFF)==0)
        printf("W");
   }
}

U32 MemoryReadAddress(U32 StartAddress, U32 ByteSize)
{
   U32 i;
   U32 tmp;

   i=StartAddress;

   while(i<(StartAddress+ByteSize))
   {
   	   tmp=(*(volatile P_U32)(i));
   	   if(tmp!=i)
   	      MemoryErrorAddress(i);

       i+=4;

       if((i&0xFFFFF)==0)
        printf("R");
   }
}

U32 MemoryTestAddress(U32 StartAddress, U32 ByteSize)
{
  _gErrorMemoryAddress=0;

  MemoryWriteAddress(StartAddress, ByteSize);
  MemoryReadAddress(StartAddress, ByteSize);

  return _gErrorMemoryAddress;
}

⌨️ 快捷键说明

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