📄 eval5500.c
字号:
if (ReturnStatus ==-1){
*ptr_to_b = OriginalByte;
}
}
/***************************************************************************************************/
/*************************SST Flash ID check*****************************************************/
if(ReturnStatus == -1){
ReturnStatus = 0;
ptr_to_b = (unsigned short int *)(0x7FF00000 | 0x00000000);
OriginalByte = *ptr_to_b; /* save the original memory contents */
*ptr_to_b = 0xFFFF; /* Setup command */
*ptr_to_b = 0x9090; /* write read_ident command */
ptr_to_b = (unsigned short int *)(0x7FF00000 | 0x00000000);
mfr_id = *ptr_to_b; /* read mfr_id */
ptr_to_b = (unsigned short int *)(0x7FF00000 | 0x00000002); /* address A0=1 */
dev_id = *ptr_to_b;
printf("\n 4 Manufacture ID[%d], Device ID [%d] ",mfr_id,dev_id);
if ((mfr_id == SST_ID) && (dev_id == SST_28SF040)){
meminfo = &used_flash[3];
meminfo->start_address = 0x7ff00000;
ReturnStatus = 0;
return 0;
}
else
ReturnStatus = -1;
if (ReturnStatus ==-1){
*ptr_to_b = OriginalByte;
}
}
/***************************************************************************************************/
/*************************MXIC Flash ID check*****************************************************/
if(ReturnStatus == -1)
{
ReturnStatus = 0;
ptr_to_b = (unsigned short int *)(START_ADDR_2M | 0x00000000);
OriginalByte = *ptr_to_b; /* save the original memory contents */
ptr_to_b[0x0555] = 0xAA;
ptr_to_b[0x02AA] = 0x55;
ptr_to_b[0x0555] = 0x90;
ram_task_delay(1);
ptr_to_b = (unsigned short int *)(START_ADDR_2M | 0x00000000); /* set up address to be C000:0000h */
mfr_id = *ptr_to_b; /* get first ID byte */
ptr_to_b = (unsigned short int *)(START_ADDR_2M | 0x00000002);
dev_id = *ptr_to_b; /* get first ID byte */
printf("\n 6 Manufacture ID[0x%x], Device ID [0x%x] ",mfr_id,dev_id);
if ((mfr_id == MXIC_ID) && (dev_id == MX29LV160AT))
{
printf("\n MXIC... MX29LV160AT flash....OK!\n");
meminfo = &used_flash[9];
meminfo->start_address = START_ADDR_2M;
ReturnStatus = 0;
ptr_to_b[0x5555] = 0xAA; //return reset mode
ptr_to_b[0x2AAA] = 0x55;
ptr_to_b[0x5555] = 0xF0;
return 0;
}
else
ReturnStatus = -1;
if (ReturnStatus ==-1){
*ptr_to_b = OriginalByte;
}
}
return 1;
}
// for intel
static int EraseBlock (int block) /* erase flashrom block */
{
volatile unsigned short *ptr_to_b; /* block_pointer def'n */
ptr_to_b = (unsigned short *)block; /* point to block_start_add for erase */
*ptr_to_b = 0x60;
*ptr_to_b = 0xd0;
*ptr_to_b = CLEAR_SREG; /* clear status_register command */
*ptr_to_b = ERASE_SETUP; /* write erase_setup command for block */
*ptr_to_b = ERASE_CONFIRM; /* write erase_confm command for block */
*ptr_to_b = READ_SREG; /* read status_register setup command */
while((*ptr_to_b & 0x80) != 0x80);
if((*ptr_to_b & 0x08) != 0x00){ /* test s_reg vpp_error_flag */
FULL_REP_MSG((printBuf, "Vpp failure\n"));
return 0;
}
if((*ptr_to_b & 0x10) != 0x00){ /* test s_reg comseq_error_flag */
FULL_REP_MSG((printBuf, "Sreg com-seq error\n")) ;
return 0;
}
if((*ptr_to_b & 0x20) != 0x00){ /* test s_reg erase_error_flag */
FULL_REP_MSG((printBuf, "Sreg erase error\n")) ;
return 0;
}
if((*ptr_to_b & 0x40) != 0x00){ /* test s_reg ers_suspend_flag */
FULL_REP_MSG((printBuf, "Sreg suspend error\n")) ;
return 0;
}
*ptr_to_b = 0x60;
*ptr_to_b = 0x01;
return 1;
}
int EraseFlash5500(void) {
volatile unsigned short int *ptr_to_m, SourceWord;
int i, Count;
char Continue,status;
unsigned short int *flashptr;
ESSENTIAL_REP_MSG("Erase Start\n") ;
if(mfr_id == AMD_ID){
ptr_to_m = (unsigned short int *)MEMBLOCK(BOOTBLK) /*BTBLK_TL*/; /* point to -TL flash base address */
printf("\n ---> %x ", ptr_to_m);
ptr_to_m[0x555] = 0xAA;
ptr_to_m[0x2AA] = 0x55;
ptr_to_m[0x555] = 0x80;
ptr_to_m[0x555] = 0xAA;
ptr_to_m[0x2AA] = 0x55;
ptr_to_m[0x555] = 0x10;
while ((status=flash_status(flashptr)) == STATUS_BUSY) {
};
if (status == STATUS_ERROR){ /* on errors.. */
printf("\nerase Error ");
exit(1); /* jump to end of process */
}
printf("ROMTOOL: Erasing ALL\n");
}
else if(mfr_id == MXIC_ID) { //RpG
if(dev_id == MX29LV160AT)
{
ptr_to_m = (volatile unsigned short int *)START_ADDR_2M;
printf("\n erase MX29LV160AT");
}
else
ptr_to_m = (volatile unsigned short int *)START_ADDR_1M;
ptr_to_m[0x555] = 0xAA;
ptr_to_m[0x2AA] = 0x55;
ptr_to_m[0x555] = 0x80;
ptr_to_m[0x555] = 0xAA;
ptr_to_m[0x2AA] = 0x55;
ptr_to_m[0x555] = 0x10;
Check_Toggle_Ready ((unsigned short int *)ptr_to_m);
printf("\n.");
//delay loop for completion of erasing operation
for(i=1; i<=15; i++)
{
ram_task_delay(1000*1000); //01 second
printf(".");
}
mxFlashReset();
for ( i=0; i<=0xFFFFF; i+= 1 )
{
if ( * ( ptr_to_m + i ) != 0xFFFF )
printf("\n ** Data Mismatch: addr [0x%x] value [0x%x] ", ( ptr_to_m + i ), *( ptr_to_m + i ));
}
printf("\nROMTOOL: Chip Erase .....OK!\n");
}
else if(mfr_id == SST_ID) {
printf("ROMTOOL: Erasing Blocks ...\n");
ptr_to_m = (unsigned short int *)0x7ff00000;
Continue = TRUE;
for (i = 0; i < 2048; i++) { /* 2048 * 256 = 1M */
*ptr_to_m = 0x2020; /* clear status_register command */
*ptr_to_m = 0xD0D0; /* read status_register setup command */
Check_Toggle_Ready(ptr_to_m); /* wait for Toggle bit ready */
Count = 0;
while ((Count < ROW_SIZE) && (Continue)) {
SourceWord = *ptr_to_m;
if (SourceWord == 0xFFFF)
Count++;
else{
printf("-=-=-09---==");
Continue = FALSE;
}
ptr_to_m ++;
}
if(!Continue) break;
}
if (!Continue) {
printf("ROMTOOL: ERRORS in FlashROM ERASE.\n");
exit(1); /* jump to end of process */
}
printf("ROMTOOL: ROM erased with no errors..\n");
/* =====================check array is erased================== */
printf("ROMTOOL: Checking array is fully erased..\n");
ptr_to_m = (unsigned short int *)meminfo->start_address; /* point to lowest _add in FlashROM */
for (ptr_to_m = (unsigned short int *)meminfo->start_address; /* point to flash_start and change type */
ptr_to_m < (unsigned short int *)0x80000000; /* point to flash_end and change type */
ptr_to_m++){ /* inc pointer */
if (*ptr_to_m != ALLBITS1) { /* check all bits are set to 1 */
printf("ROMTOOL: ERRORS in FlashROM ERASE.\n");
}
}
}
else if(mfr_id == INTEL_ID) {
ptr_to_m = (unsigned short int *)0x7ff00000; /* point to -TL flash base address */
*ptr_to_m = CLEAR_SREG; /* clear status_register command */
*ptr_to_m = READ_SREG; /* read status_register setup command */
*ptr_to_m = CLEAR_SREG; /* clear status_register command */
*ptr_to_m = READ_SREG; /* read status_register setup command */
printf("\nerase main block 1");
if(!EraseBlock(MEMBLOCK(MAINBLK1))) /* erase main_block1 */
return 0;
printf("\nerase main block 2");
if(!EraseBlock(MEMBLOCK(MAINBLK2))) /* erase main_block2 */
return 0;
printf("\nerase main block 3");
if(!EraseBlock(MEMBLOCK(MAINBLK3))) /* erase main_block3 */
return 0;
printf("\nerase main block 4");
if(!EraseBlock(MEMBLOCK(MAINBLK4))) /* erase main_block4 */
return 0;
printf("\nerase main block 5");
if(!EraseBlock(MEMBLOCK(MAINBLK5))) /* erase main_block4 */
return 0;
printf("\nerase main block 6");
if(!EraseBlock(MEMBLOCK(MAINBLK6))) /* erase main_block4 */
return 0;
printf("\nerase main block 7");
if(!EraseBlock(MEMBLOCK(MAINBLK7))) /* erase main_block4 */
return 0;
printf("\nerase main block 8");
if(!EraseBlock(MEMBLOCK(MAINBLK8))) /* erase main_block4 */
return 0;
printf("\nerase param block 1");
if(!EraseBlock(MEMBLOCK(PARAMBLK1))) /* erase para_block1 */
return 0;
printf("\nerase param block 2");
if(!EraseBlock(MEMBLOCK(PARAMBLK2))) /* erase para_block2 */
return 0;
printf("\nerase boot block 1");
if(!EraseBlock(MEMBLOCK(BOOTBLK))) /* erase boot_block */
return 0;
if(dev_id == INTEL_28F160C3_T){
printf("\nerase param block 3");
if(!EraseBlock(MEMBLOCK(PARAMBLK3))) /* erase para_block1 */
return 0;
printf("\nerase param block 4");
if(!EraseBlock(MEMBLOCK(PARAMBLK4))) /* erase para_block2 */
return 0;
printf("\nerase param block 5");
if(!EraseBlock(MEMBLOCK(PARAMBLK5))) /* erase para_block1 */
return 0;
printf("\nerase param block 6");
if(!EraseBlock(MEMBLOCK(PARAMBLK6))) /* erase para_block2 */
return 0;
printf("\nerase param block 7");
if(!EraseBlock(MEMBLOCK(PARAMBLK7))) /* erase para_block1 */
return 0;
printf("\nerase main block 9");
if(!EraseBlock(MEMBLOCK(MAINBLK9))) /* erase main_block4 */
return 0;
printf("\nerase main block 10");
if(!EraseBlock(MEMBLOCK(MAINBLK10))) /* erase main_block4 */
return 0;
printf("\nerase main block 11");
if(!EraseBlock(MEMBLOCK(MAINBLK11))) /* erase main_block1 */
return 0;
printf("\nerase main block 12");
if(!EraseBlock(MEMBLOCK(MAINBLK12))) /* erase main_block2 */
return 0;
printf("\nerase main block 13");
if(!EraseBlock(MEMBLOCK(MAINBLK13))) /* erase main_block3 */
return 0;
printf("\nerase main block 14");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -