📄 flash_nor_intel_br28f128l18t85.c
字号:
WORD16 flash_intel_28f256l18top_erase_test_a9(void)
{
WORD16 Result = 0;
UWORD32 flash_size_in_bytes;
Result = flash_erase_test_a9_zhy(0x3fff);
if (!Result)
UART_Printf(UART2,"\n\r Intel Strata Flash Linear test on all block succeed\n\r");
else
UART_Printf(UART2,"\n\r NOR FLASH ERASE FAILED.\n\r");
return(Result);
}
//NOR FLASH MAIN ENTRY function
void FLASH_TEST()
{
int option;
while(option)
{
UART_Printf(UART2,"==================================================\n");
UART_Printf(UART2,"= NOR Flash TEST =\n");
UART_Printf(UART2,"==================================================\n");
UART_Printf(UART2," 0: Upper Menu\n\r");
UART_Printf(UART2," 1: INTEL Flash\n\r");
UART_Printf(UART2," 2: AMD FLASH.\n\r");
UART_Printf(UART2," Your choice : \n\r");
option=UART_GetNum(UART2);
switch (option)
{
case 0:
break;
case 1 :
Intel_Flash();
break ;
case 2:
//AMD_Flash();
AMD_FLASH_TEST();
break ;
default:
break;
}
}
// UART_GetNum(UART2);
}
void AMD_Flash()
{
unsigned short manu, device;
UWORD16 Result_Test = 0;
int option,ID,data;
// *(unsigned long*)0xFFFECC1C = 0x00408239; /* EMIFS CS3 Configuration Register : A/D Multiplexed, 8 RWS, 0 WWS, WELEN = 4, 1 BT WST, Asynchronous Read mode & Ref_Clk = TC_Clock */
// *(unsigned long*)0xFFFECC5C = 0x00000008;
// EMIFS_CS_CFG_3_REG = 0x0040408B;
// (*(int*)0xFFFECC1C) = 0x0040428B; /* EMIFS CS3 Configuration Register : A/D Multiplexed, 8 RWS, 0 WWS, WELEN = 4, 1 BT WST, Asynchronous Read mode & Ref_Clk = TC_Clock */
// (*(int*)0xFFFECC5C) = 0x00000103;
// *(unsigned int*)0xfffecc0c = 0x00000001;
while(option)
{
UART_Printf(UART2,"==================================================\n");
UART_Printf(UART2,"= AMD NOR Flash TEST =\n");
UART_Printf(UART2,"==================================================\n");
UART_Printf(UART2," 0: Upper Menu\n\r");
UART_Printf(UART2," 1: Read ID\n\r");
UART_Printf(UART2," 2: EARSE TEST.\n\r");
UART_Printf(UART2," 3: Program A BLOCK.\n\r ");
UART_Printf(UART2," 4: WRITE A PARTION.\n\r ");
UART_Printf(UART2," Your choice : \n\r");
option=UART_GetNum(UART2);
switch (option)
{
case 0 :
break;
case 1 :
UART_Printf(UART2,"Read ID:\n\r");
flashdrv_amd_id_read(&manu,&device);
/* Display Manufacture Id */
UART_Printf(UART2,"0X%x\n\r",manu);
/* Display Device Id */
UART_Printf(UART2,"0X%x\n\r",device);
break ;
case 2:
UART_Printf(UART2,"Erase NOR FLASH D1 in mode 3 ...\n\r");
flashdrv_amd_erase_end();
break ;
case 3:
// Result_Test=Flash_WriteOneBlock( 0x0e000000 );
// if ( Result_Test==0 )
write_test();
UART_Printf( UART2, " WR OK.\n\r " );
break;
case 4:
flashdrv_amd_write((void *)0x0c000000,flashdata,sizeof(flashdata));
break;
case 5:
//flashdrv_amd_init();
//flashdrv_amd_id_read(&manu,&device);
//flashdrv_amd_id_read(&manu,&device);
//write_test();
//flashdrv_amd_erase_end();
//flashdrv_amd_write((void *)0x0c000000,flashdata,sizeof(flashdata));
// flash_amd_s29pl127j_write();
break;
default:
break;
}
}
// UART_GetNum(UART2);
}
void Intel_Flash()
{
unsigned short manu, device;
UWORD16 Result_Test = 0;
int option,ID,data;
// EMIFS_CS_CFG_3_REG = 0x0040408B;
*(unsigned int*)0xfffecc1c = 0x7fc044fa;
*(unsigned int*)0xfffecc5c = 0x00000018;
*(unsigned int*)0xfffecc0c = 0x00000001;
// *(unsigned long*)0xFFFECC1C = 0x00408239; /* EMIFS CS3 Configuration Register : A/D Multiplexed, 8 RWS, 0 WWS, WELEN = 4, 1 BT WST, Asynchronous Read mode & Ref_Clk = TC_Clock */
// *(unsigned long*)0xFFFECC5C = 0x00000008;
// EMIFS_CS_CFG_3_REG = 0x0040408B;
// (*(int*)0xFFFECC1C) = 0x0040428B; /* EMIFS CS3 Configuration Register : A/D Multiplexed, 8 RWS, 0 WWS, WELEN = 4, 1 BT WST, Asynchronous Read mode & Ref_Clk = TC_Clock */
// (*(int*)0xFFFECC5C) = 0x00000103;
// *(unsigned int*)0xfffecc0c = 0x00000001;
UART_Printf(UART2,"==================================================\n");
UART_Printf(UART2,"= Intel NOR Flash TEST =\n");
UART_Printf(UART2,"==================================================\n");
UART_Printf(UART2," 0: Upper Menu\n\r");
UART_Printf(UART2," 1: Read ID\n\r");
UART_Printf(UART2," 2: EARSE TEST.\n\r");
UART_Printf(UART2," 3: Program A BLOCK.\n\r ");
UART_Printf(UART2," 4: WRITE A PARTION.\n\r ");
UART_Printf(UART2," Your choice : \n\r");
option=UART_GetNum(UART2);
switch (option)
{
case 1 :
UART_Printf(UART2,"Read ID:\n\r");
flash_intel_28f256l18top_display_id_a9();
break ;
case 2:
UART_Printf(UART2,"Erase NOR FLASH D1 in mode 3 ...\n\r");
flash_intel_28f256l18top_erase_test_a9();
break ;
case 3:
Result_Test=Flash_WriteOneBlock( 0x0e000000 );
if ( Result_Test==0 )
UART_Printf( UART2, " WR OK.\n\r " );
break;
case 4:
Flash_WriteOnePartion( 0x0e000000 );
break;
default:
break;
}
UART_GetNum(UART2);
}
void flash_amd_s29pl127j_read_id()
{
unsigned short i;
unsigned long manuid;
volatile unsigned short *fladdr = (volatile unsigned short *) 0x0c000000;
*(unsigned short*)0x0c000555 = 0xaa;
*(unsigned short*)0x0c0002aa = 0x55;
*(unsigned short*)0x0c000555 = 0x90;
manuid = *fladdr;
manuid = *fladdr;
UART_Printf(UART2,"manu_id: 0X%x\n\r",manuid);
}
void flash_amd_s29pl127j_read_device_id()
{
unsigned short i,j,l,m;
*(unsigned short *)( 0x0c000000)= 0xf0;
*(unsigned short *)( 0x0c000AAA)= 0xaa;
*(unsigned short *)( 0x0c000554)= 0x55;
*(unsigned short *)( 0x0c000AAA)= 0x90;
i= *(unsigned short *)( 0x0c000000);
j= *(unsigned short *)( 0x0c000001);
l= *(unsigned short *)( 0x0c00000e);
m= *(unsigned short *)( 0x0c00000f);
UART_Printf(UART2,"manu_id: 0X%x\n\r",i);
UART_Printf(UART2,"id1: 0X%x\n\r",j);
UART_Printf(UART2,"id2: 0X%x\n\r",l);
UART_Printf(UART2,"id3: 0X%x\n\r",m);
*(unsigned short *)( 0x0c000000)= 0xf0;
*(unsigned short *)( 0x0c000555)= 0xaa;
*(unsigned short *)( 0x0c0002aa)= 0x55;
*(unsigned short *)( 0x0c000555)= 0xa0;
*(unsigned short *)( 0x0c000000)= 0x12;
}
void flash_amd_s29pl127j_write()
{
unsigned int i,j,m,t;
m=0;
*(unsigned short*)(0x08000001) = 0x1234;
i= *(unsigned short*)(0x08000001);
while(1)
{
for(i=0;i<1000;i++)
{
*(unsigned short*)(0x08000000+2*i) = 0x5555;
// *(unsigned short*)(0x08000002+2*i) = 0xaaaa;
t= *(unsigned short*)(0x08000000+2*i);
// j=*(unsigned short*)(0x08000002+2*i);
if(t!=0x5555)
{m++;}
*(unsigned short*)(0x08000000+2*i) = 0xaaaa;
// *(unsigned short*)(0x08000002+2*i) = 0xaaaa;
t= *(unsigned short*)(0x08000000+2*i);
// j=*(unsigned short*)(0x08000002+2*i);
if(t!=0xaaaa)
{m++;}
// if(j!=0xaaaa)
// {m++;}
i++;
}
}
*(unsigned short*)(0x08001ffe) = 0x5555;
*(unsigned short*)(0x08001fff) = 0x5555;
*(unsigned short*)(0x08003ffc) = 0x1234;
*(unsigned short*)(0x08003ffe) = 0xa0a0;
}void WriteFlashRegister_I(UWORD32 Address1, UWORD16 Data1, UWORD32 Address2, UWORD16 Data2)
{
*(unsigned int*)(Address1)= Data1;
*(unsigned int*)(Address2)= Data2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -