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

📄 flash_nor_amd.c

📁 OMAP1030 处理器的ARM 侧硬件测试代码 OMAP1030 是TI的双核处理器
💻 C
字号:
/******************************************************************************\
*           Copyright (C) 2005 COMMIT Incorporated.
*                           All Rights Reserved
*------------------------------------------------------------------------------
* Project................NEPTUNE Test 
* MODULE NAME............NEPTUNE Memory Test interface on Poseidon
* Confidential Level.....Test    
* FILENAME...............flash_nor_amd.c			
* 
* Department.............HW Circuit 
*------------------------------------------------------------------------------
* HISTORY:
* Oct 14st, 2005, created by Zhenghongying for Poseidon Memory Intel BR28F128L18T85 test module
\******************************************************************************/
#include "led_bootled.h"
#include "flash_nor_intel.H"

#define SIZE16 192

extern const UWORD16 DATA16[SIZE16] = { 0x2345, 0x12AB, 0x1300, 0x1412, 0x1617, 0x1817, 0x1410, 0x1910,
                                        0x1111,  0x2222,  0x3333,  0x4444,  0x5555,  0x6666,  0x7777,  0x8888,
					0x2645, 0x17AB, 0x1200, 0x1512, 0x1917, 0x1117, 0x1310, 0x1510,
                                        0x1131,  0x2232,  0x2333,  0x0000,  0x5555,  0x8765,  0x7777,  0x8888,
					0x1345, 0x125B, 0x1330, 0x1432, 0x1687, 0x1827, 0x1480, 0x1990,
                                        0x1111,  0x2222,  0x3333,  0x4444,  0x5555,  0x6666,  0x7777,  0x8888,
					0x1323, 0x1234, 0x1345, 0x1486, 0x1696, 0x1834, 0x1476, 0x1974,
                                        0x1011,  0x2202,  0x3330,  0x0444,  0x5055,  0x6606,  0x7770,  0x8ff8,
					0x2ff5, 0x1fA0, 0xf300, 0x1f12, 0x16f7, 0x181f, 0xf410, 0x0910,
                                        0x1311,  0x2242,  0x3335,  0x2444,  0x1555,  0x6646,  0x0377,  0x88f8,
					0x2045, 0x12A0, 0x130f, 0x141f, 0x161f, 0x1810, 0x141f, 0xf910,
                                        0x1011,  0x2202,  0x3330,  0x0444,  0xb055,  0x6606,  0x7270,  0x8058,
					0x23f5, 0x1fAB, 0x130f, 0xf412, 0x1f17, 0x181f, 0x14f0, 0x191f,
                                        0x1131,  0x2222,  0x3333,  0x4404,  0x555b,  0x6006,  0x7277,  0x8858,
					0x2355, 0x12AB, 0x1300, 0x1412, 0x1617, 0x1847, 0x1410, 0x1910,
                                        0x1101,  0x2222,  0x3333,  0xd444,  0x55b5,  0x0666,  0x7377,  0x8868,
					0x2945, 0x12AB, 0x1300, 0x1412, 0x1617, 0x1417, 0x1410, 0x1910,
                                        0x2311,  0x2222,  0x3333,  0x4d44,  0x5b55,  0x6660,  0x7477,  0x8588,
					0x2045, 0x12AB, 0x1300, 0x1412, 0x1617, 0x4817, 0x1410, 0x1910,
                                        0xffff,  0x2222,  0x3333,  0x44d4,  0x5550,  0x6606,  0x7577,  0x4888,
					0x0000, 0x12AB, 0x1300, 0x1412, 0x1617, 0x1814, 0x1410, 0x1910,
                                        0x3453,  0x2222,  0x3333,  0x444d,  0x5505,  0x6066,  0x7677,  0x3888,
					0x2234, 0x12AB, 0x1300, 0x1412, 0x1617, 0x1844, 0x1410, 0x1910,
                                        0x1456,  0x2222,  0x3333,  0x4d44,  0x5055,  0x0666,  0x7877,  0x2888 };
extern const UWORD16 DATA16[];
extern const UWORD16 DATA16[];

extern const UWORD16 DATA1[SIZE16] = { 0xaaaa, 0xbbbb, 0xcccc, 0xdddd, 0xeeee, 0xffff, 0xaaaa, 0xaaaa,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0xbbbb,  0xcccc,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xdddd,  0xeeee,
					0xeeee, 0xeeee, 0xffff, 0xffff, 0xffff, 0xaaaa, 0x1480, 0x1990,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                       0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                       0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0xbbbb,  0xbbbb,  0xcccc,  0xcccc,  0xdddd,  0xdddd,  0xeeee,  0xeeee,
					0xffff, 0xffff, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa, 0xbbbb, 0xbbbb,
                                        0x1456,  0x2222,  0x3333,  0x4d44,  0x5055,  0x0666,  0x7877,  0x2888 };

#define SIZE32 (SIZE16/2)

#define STEP   1

#define AMD_FLASH_BLOCK_SIZE_64KW        0xffff    /* in Bytes */

int Test_non_array_access()
{
	UWORD16 * inCS3_ptr;
	UWORD16 * lv_ptr16_cmd0;
	UWORD16 * lv_ptr16_cmd1;
	UWORD16 * lv_ptr16_cmd2;
//	int CS3_BASE_ADDR_ARM;
	int temp;

//	CS3_BASE_ADDR_ARM = 0x0c000000;
   	inCS3_ptr = (UWORD16 *)(0x0c000000 );
	
	lv_ptr16_cmd0 = inCS3_ptr + 0x555;
	lv_ptr16_cmd1 = inCS3_ptr + 0x2AA;
	
	/*Manufacture ID*/
	*lv_ptr16_cmd0 = 0x00AA;

	*lv_ptr16_cmd1 = 0x0055;
	*lv_ptr16_cmd0 = 0x0090;
	
	/*read Manufacture ID*/
	//if(*(inCS3_ptr+2)==0x0001)
	if(*(inCS3_ptr)==0x0001)
	  {  temp = *(inCS3_ptr);
		 UART_Printf(UART2,"AMD Flash(S29PL127JBW000)Manufacture ID is  OK!,0X%x\n\r",temp );
		
	
				
		}
	else 
		UART_Printf(UART2,"AMD Flash(S29PL127JBW000)Manufacture ID is %x read ERROR!\n\r",temp);




	inCS3_ptr = (UWORD16*)(0x0C000000);
	lv_ptr16_cmd0 = inCS3_ptr + 0x555;
	lv_ptr16_cmd1 = inCS3_ptr + 0x2AA;
	lv_ptr16_cmd2 = inCS3_ptr + 0x07;
	
	/*Manufacture ID*/
	*lv_ptr16_cmd0 = 0x00AA;

	*lv_ptr16_cmd1 = 0x0055;
	*lv_ptr16_cmd0 = 0x0090;
	temp = *(lv_ptr16_cmd2);
	UART_Printf(UART2,"Sector Block Lock/Unlock Indicator is %x\n\r",temp);

	inCS3_ptr = (UWORD16*)(0x0C000000);
	lv_ptr16_cmd0 = inCS3_ptr + 0x555;
	lv_ptr16_cmd1 = inCS3_ptr + 0x2AA;
	lv_ptr16_cmd2 = inCS3_ptr + 0x02;
	
	/*Manufacture ID*/
	*lv_ptr16_cmd0 = 0x00AA;

	*lv_ptr16_cmd1 = 0x0055;
	*lv_ptr16_cmd0 = 0x0090;
	temp = *(lv_ptr16_cmd2);
	UART_Printf(UART2," Indicator Bit is %x\n\r",temp);

	///*Reset command */
	//*inCS3_ptr = 0x00F0;

	UART_Printf(UART2,"Please push anykey to return the top menu.\n\r");
	
	return;
}

int Test_DYB_access()
{
	UWORD16 * inCS3_ptr;
	UWORD16 * inCS3_ptr1;
	UWORD16 * lv_ptr16_cmd0;
	UWORD16 * lv_ptr16_cmd1;
	UWORD16 * lv_ptr16_cmd2;
//	int CS3_BASE_ADDR_ARM;
	int temp;
	long int i;

//	CS3_BASE_ADDR_ARM = 0x0c000000;
   	inCS3_ptr = (UWORD16 *)(0x0c000000 );
	inCS3_ptr1 = (UWORD16 *)(0x0c000000 );

	for (i=0;i<0x80000;i++)
	{
	lv_ptr16_cmd0 = inCS3_ptr + 0x555;
	lv_ptr16_cmd1 = inCS3_ptr + 0x2AA;
	
	/*Volatile Sector Protection Command Set Entry*/
	*lv_ptr16_cmd0 = 0x00AA;
	*lv_ptr16_cmd1 = 0x0055;
	*lv_ptr16_cmd0 = 0x00E0;

	/*DYB Status Read*/
//	temp = * inCS3_ptr;
//	UART_Printf(UART2," DYB Status Read is %x\n\r",temp);
 
	/*DYB clear*/
	* (inCS3_ptr) = 0xA0;
	* (inCS3_ptr+i) = 0x01;

	/*DYB Status Read*/
	temp = * (inCS3_ptr+i);
//	UART_Printf(UART2,"After Clear, DYB Status Read is %x\n\r",temp);

	/* Volatile Sector Protection Command Set Exit*/
	* inCS3_ptr = 0x90;
	* inCS3_ptr = 0x00;
	}
	
//	/*Reset command */
//	*inCS3_ptr = 0x00F0;
	UART_Printf(UART2,"Please push anykey to return the top menu.\n\r");
	return;

}

int Test_erase_access()
{
	UWORD16 eraseNum;
	UWORD16 * inErasePtr;
	UWORD16 * lv_ptr16_cmd0;
	UWORD16 * lv_ptr16_cmd1;
	UWORD16 i;
	
	inErasePtr =  (UWORD16 *)(0x0c000000 );
        lv_ptr16_cmd0 = inErasePtr + 0x555;
        lv_ptr16_cmd1 = inErasePtr + 0x2AA;
         
        /* Erase all blocks */
        for(eraseNum=0;eraseNum<256;eraseNum++)
        {
        	* lv_ptr16_cmd0 = 0XAA;
        	* lv_ptr16_cmd1 = 0X55;
        	* lv_ptr16_cmd0 = 0X80;
        	* lv_ptr16_cmd0 = 0XAA;
        	* lv_ptr16_cmd1 = 0X55;
        	* inErasePtr = 0x30;
        	inErasePtr += AMD_FLASH_BLOCK_SIZE_64KW;
			for(i=0;i<1000;i++);
        }
        
    //	 /*Reset command */
	*inErasePtr = 0x00F0;
	   
	UART_Printf(UART2,"Erase finish.\n\r");

	UART_Printf(UART2,"Please push anykey to return the top menu.\n\r");
    return;

}

int Test_write_access()
{
	 UWORD16 * lvptr16_cmd0;
  	 UWORD16 * lvptr16_cmd1;
  	 UWORD16 * lvAddr; 
  	 UWORD8    lvStatusReg;
  	 UWORD16   lvDatum;
  	 UWORD16 lvCounter;
  	 UWORD16 temp;
  	 UWORD16 Counter=0;
  	 int i;
  	 UWORD16 * inWritePtr;
	 UWORD16 * inCS3_ptr;

   	inWritePtr = (UWORD16 *)(0x0c020000 );
  	 /*Program command sequence */
	 lvptr16_cmd0 = inWritePtr + 0x555;
	 lvptr16_cmd1 = inWritePtr + 0x2AA;

	

	 for (lvCounter = 0;lvCounter<SIZE16;lvCounter++)
	 {
	 	/*Data to write*/
	 //	lvDatum = DATA16[lvCounter];
	 	lvDatum = DATA1[lvCounter];
	 	/* Address to write to*/
	 	lvAddr = inWritePtr + lvCounter;
	 	
	 	/*Program command sequence */

		*lvptr16_cmd0 = 0x00AA;
	 	*lvptr16_cmd1 = 0x0055;
	 	*lvptr16_cmd0 = 0x00A0;
	 	/* Write data*/
	 	*lvAddr = lvDatum;
		temp = *lvAddr;
		for(i=0;i<1000;i++);
		}
	 	
		for(i=0;i<100;i++);
	 
	 for (lvCounter = 0;lvCounter<SIZE16;lvCounter++)
	 {
	 	lvDatum = DATA1[lvCounter];
	 	lvAddr = inWritePtr + lvCounter;
	 	temp = *lvAddr;
	 	if (temp != lvDatum)
	 	{
	 		Counter++;
	 	}
	 }
	 if(Counter==0)
	 {
	 UART_Printf(UART2,"Flash_Write - OK!\n\r");
	 UART_Printf(UART2,"You write at %x is %x.\n\r",inWritePtr,DATA16[0]);
	 }
	 else
	 UART_Printf(UART2,"Flash_Write - ERROR!\n\r");
	 
//	 /*Reset command */
	*inWritePtr = 0x00F0;
	
	UART_Printf(UART2,"Please push anykey to return the top menu.\n\r");
	


	return;	 
}

void Copy_code()
{
	long i,j,tmp;
	UWORD16 * lvptr16_cmd0;
  	UWORD16 * lvptr16_cmd1;
	UWORD16 * inWritePtr;
	inWritePtr = (UWORD16 *)(0x0c000000 );
	  	
	  	 /*Program command sequence */
	 lvptr16_cmd0 = inWritePtr + 0x555;
	 lvptr16_cmd1 = inWritePtr + 0x2AA;
	
		
	for(i=0;i<0x10000;i++)
	{

		*lvptr16_cmd0 = 0x00AA;
	 	*lvptr16_cmd1 = 0x0055;
	 	*lvptr16_cmd0 = 0x00A0;
	 	/* Write data*/
		*(unsigned long int * )(0x0c000000 + i) = *(unsigned long int *)(0x00000000 + i);
		for(j=0;j<1000;j++);
	}

//	/*Reset command */
//	*inWritePtr = 0x00F0;
	
	UART_Printf(UART2,"Please push anykey to return the top menu.\n\r");
	return;
}



void AMD_FLASH_TEST()
{
	UWORD16 Restult_Test = 0;
	int option;
	
	*(unsigned int*)0xfffecc1c = 0x7fc044f8;
	*(unsigned int*)0xfffecc5c = 0x00000018;
	
	UART_Printf(UART2,"==================================================\n");
  	UART_Printf(UART2,"=       AMD NOR  Flash TEST             =\n");
  	UART_Printf(UART2,"==================================================\n");      
  
    UART_Printf(UART2,"S29NS128 is DYB protect after power on ,\n\r");            
    UART_Printf(UART2,"User must unprotect DYB firstly.\n\r");
    UART_Printf(UART2," 0:DYB Configuration\n\r");
	UART_Printf(UART2," 1: Read ID\n\r");
	UART_Printf(UART2," 2: ERASE TEST.\n\r");
	UART_Printf(UART2," 3: Program A BLOCK.\n\r ");
	UART_Printf(UART2," 4: WRITE A PARTITION.\n\r ");
	UART_Printf(UART2," 5: Copy DDR to flash\n\r");


	UART_Printf(UART2," Your choice : \n\r");

        option=UART_GetNum(UART2);
        
        switch(option)
        {
		case 0:
		 Test_DYB_access();
		 break;

        case 1:
         UART_Printf(UART2,"Read ID:\n\r");
         Test_non_array_access();
        break;
        
        case 2:
         Test_erase_access();
        break;
        
        case 3:
         Test_write_access();
        break;
        
        case 4:
        
        break;

		case 5:
		 Copy_code();
		break;
        
        default:
        break;
        }
//	UART_Printf(UART2); 

}









⌨️ 快捷键说明

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