This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Flash Erase Failure on 28035 sector EFGH

Other Parts Discussed in Thread: TMS320F28022

I use a sector H to store parameters.

I erase sector H every time:

Flash_Erase((SECTORH),&FlashStatus);

then program data:

Flash_ptr = (Uint16 *) 0x3F8000;

Length = 30;

Status = Flash_Program(Flash_ptr,MB_Data,Length,&FlashStatus);

I use this method in TMS320F28022,023,026,027and 28032. it work correctly(the" Flash_ptr" and "SECTORH" is modfiy correctly)。

But it fail in 28035:

Program data is success first time (because sector H is all 0xFFFF).

But can't erase H again by:Flash_Erase((SECTORH),&FlashStatus);

I test many times,get the result:

Sector E,F,G,H can erase only by:Flash_Erase((SECTORD),&FlashStatus);

that is erase D will erase D\E\F\G\H.

Please suggest!

jiucai.lai

  • Flash_Erase((SECTORE),&FlashStatus);

    Flash_Erase((SECTORF),&FlashStatus);

    Flash_Erase((SECTORG),&FlashStatus);

    Flash_Erase((SECTORG),&FlashStatus);

    return STATUS_SUCCESS。

    but don't erase sector actually。

  • It is a error when i set Flash_ptr = (Uint16 *) 0x3E8000;

    I use partID to decide what address should used.

    if((chiptype==PARTNO_28032PN)||(chiptype == PARTNO_28032PAG)
    ||(chiptype==PARTNO_28033PAG)||(chiptype==PARTNO_28033PN)){
    Flash_ptr_base=(Uint16 *)0x3F0000;
    }
    else{
    Flash_ptr_base =(Uint16 *) 0x3E8000;
    }

    I loss a "chiptype " in (chiptype == PARTNO_28032PAG),so I always read form (Uint16 *)0x3F0000.

    But I erase (Uint16 *)0x3E8000~0x3EA000; That is,i write sectorD,but erase H.

    so i can't write flash D again before erase D.