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

📄 l1_testflash.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
字号:
#include "general.h"
#include "main.h"

UCHAR L2_TestFlash(UCHAR FlashType, USHORT Size, UCHAR PageSize)
{

    UCHAR  error;
//	USHORT page;
	USHORT pagesize;
	ULONG  block,blocksize;
//    UCHAR  ECCData[12];
	UCHAR  Ready;
//	UCHAR  Detect;
    UCHAR  ByteData;
//	USHORT WordData;
//	USHORT tmp;
	UCHAR  tmp0;

    XBYTE[0x2401] = 0x01;
    XBYTE[0x2405] = 0x01;
// NAND test ///////////////////////////////////////////////////////////////////////
  if(FlashType == 1)
	{
    if(PageSize == 0)      { blocksize = Size<<12; pagesize = 256;}
	else if(PageSize == 1) { blocksize = Size<<11; pagesize = 512;}
	else                   { blocksize = Size<<10; pagesize =1024;}

// READ ID command 
    L2_FlashMode(1,3,1);
    L2_NANDInit(1,1);
    L2_NANDSendCmd(0x90);
    L2_NANDSendAddr(1,0);
    L2_NANDCheckRdy(&Ready);
    L2_NANDReadPort(&ByteData);
	L2_NANDReadPort(&ByteData);
    L2_NANDCompleteOperation();
// READ ID command 

// READ Bad Block
    //PRINT_L1("blocksize=%lx",blocksize);
    error = 0;
    L2_NANDSendCmd(0x50);
    L2_NANDSendAddr(3,0);
    L2_NANDCheckRdy(&Ready);
    L2_NANDSendAddr(1,0);
    if(Size < 16)
      L2_NANDSendAddr(2,1);
    else
      L2_NANDSendAddr(3,1);
    for(block=1;block<blocksize;block++)
	   {
	   P1 = block;
	   error = 0;
	   for(tmp0=0;tmp0<8;tmp0++)
	     {
	     L2_NANDReadPort(&ByteData);
         if(ByteData!=0xff) {error = 1; //PRINT_L1("error block %lx \n",block); }
		 }
	   }
	 L2_NANDCheckRdy(&Ready);
	 L2_NANDCompleteOperation();
 	 if(error == 1)
         {
                //PRINT_L1("error block");
         }
	 else
         {
                //PRINT_L1("good block");
         }
/*
       L2_NANDSendCmd(0x00);
       L2_NANDSendAddr(3,0);
	   L2_NANDCheckRdy(&Ready);
	   L2_NANDSendAddr(1,0);
	   if(Size < 16)
         L2_NANDSendAddr(2,block);
	   else
	     L2_NANDSendAddr(3,block);

       for(page=0;page<(pagesize+8);page++)
	      {
          L2_NANDReadPort(&ByteData);
		  if(ByteData!=0xff) error = 1;
		  }

       L2_NANDCompleteOperation();
        if(error == 1)
        {
                PRINT_L1("error block %lx \n",block);
        }
	   }
   	   if(error == 1)
           {
                PRINT_L1("error block");
           }
	   else
           {
                PRINT_L1("good block");
           }
*/
// READ Bad Block


   
/*
// ERASE BLOCK command 
    error = L2_NANDSendCmd(0x60);
    error = L2_NANDSendAddr(2,0);
    error = L2_NANDSendCmd(0xd0);
    L2_NANDCheckRdy(&Ready);
    error = L2_NANDSendCmd(0x70);
    L2_NANDReadPort(&ByteData);
    L2_NANDCompleteOperation();
// ERASE Block command 

// PREPARE Data in CPU 4K SRAM
//  error = L2_DownloadROM(0,0,256);   // 256 bytes

    tmp0 = XBYTE[0x2C00]; 
    XBYTE[0x2C00] = tmp0 & 0x1d;
    XBYTE[0x2C11] = 0x06;
    XBYTE[0x2C11] = 0x01;
    XBYTE[0x2C00] = tmp0 | 0x02;  
	XBYTE[0x2C10] = 0x00;
    XBYTE[0x2C10] = 0x00;
	XBYTE[0x2C10] = 0x00;   
    for(tmp = 3; tmp<256 ; tmp++)
       {
       XBYTE[0x2C10] = tmp;
	   }    
// PREPARE Data in CPU 4K SRAM

// WRITE One Page command 
    error = L2_NANDSendCmd(0x80);
    error = L2_NANDSendAddr(3,0);
	L2_ECCMode(0);  
    L2_ClearECC();
	error = L2_SetSRAMDMA(0);

//  DMA
	error = L2_DoDMA(1,2,256,0,1);        
	error = L2_ReadECC(3,ECCData);
    L2_NANDWritePort(ECCData[0]);
    L2_NANDWritePort(ECCData[1]);
	L2_NANDWritePort(ECCData[2]);
	L2_NANDWritePort(0);
	L2_NANDWritePort(0);
	L2_NANDWritePort(0);
	L2_NANDWritePort(0);
	L2_NANDWritePort(0);
    error = L2_NANDSendCmd(0x10);
    L2_NANDCheckRdy(&Ready);
    error = L2_NANDSendCmd(0x70);
    L2_NANDReadPort(&ByteData);
    L2_NANDCompleteOperation();
        //PRINT_L1("(ECC0,ECC1,ECC2)=8'h%x,8'h%x,8'h%x\n",(USHORT)ECCData[0],(USHORT)ECCData[1],(USHORT)ECCData[2]);
// WRITE One Page command 

// Read One Page command 
    error = L2_NANDSendCmd(0x00);
    error = L2_NANDSendAddr(3,0);
	L2_ECCMode(0);
    L2_ClearECC();
	L2_NANDCheckRdy(&Ready);
	error = L2_SetSRAMDMA(256);
	error = L2_DoDMA(2,1,256,0,0);
//	error = L2_SearchPattern(0,1,0,0x7f7e,&FirstMatchAddr,&MatchCount);  // FAT16
//  error = L2_SearchPattern(0,1,1,0x0838,&FirstMatchAddr,&MatchCount);  // FAT12

	L2_ECCMode(1);  // disable ECC generator   
	error = L2_ReadECC(3,ECCData);
	error = 0;
    L2_NANDReadPort(&ByteData);
	if(ByteData != ECCData[0]) error = 1;
    L2_NANDReadPort(&ByteData);
	if(ByteData != ECCData[1]) error = 1;
	L2_NANDReadPort(&ByteData);
	if(ByteData != ECCData[2]) error = 1;
	L2_NANDReadPort(&ByteData);
	L2_NANDReadPort(&ByteData);
	L2_NANDReadPort(&ByteData);
	L2_NANDReadPort(&ByteData);
	L2_NANDReadPort(&ByteData);
    L2_NANDCompleteOperation();
        //PRINT_L1("(ECC0,ECC1,ECC2)=8'h%x,8'h%x,8'h%x\n",(USHORT)ECCData[0],(USHORT)ECCData[1],(USHORT)ECCData[2]);
    //PRINT_L1("ECC error = 8'h%x (1 for error,0 for correct)\n",(USHORT)error);
// Read One Page command 
// NAND test ///////////////////////////////////////////////////////////////////////
*/
   }

  return 0x00;
}

⌨️ 快捷键说明

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