This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Flash Erase Issue with Cygnal 33x

I am using the app note "AN029" and following the steps in the c8051f33x.pdf document regarding erasing the flash at 0x1a00. The lock byte has 0xFF in it. I am using the latest Cygnal drivers and the latest release of uVison2 (Keil).

All conditions are met but the bank is not set to 0xFF?


unsigned char xdata * pwrite; // pointer to FLASH used for writes
//unsigned char xdata * idata pwrite; // pointer to FLASH used for writes
// NOTE: this pointer must be located
// in <data> or <idata> space!

unsigned char *pread; // pointer to RAM used for reads
//unsigned char code *preadCode; // pointer to FLASH used for reads
char EA_save; // saves the current state of the
ushort idata mySize;
uchar idata myCheckSum = 0;

PCA0MD &= 0xBF; // disable the watchdog: WDTE

//pwrite = (unsigned char xdata *) 0x1DFF;
//*pwrite = 0xFF;

// interrupt enable bit.

// disable watchdog timer
//WDTCN = 0xde;
//WDTCN = 0xad;

//////////////////////////////////////////////////////////////
// PART A -- erase the FLASH page at SYSTEM_PARAMETERS address
// initialize write/erase pointer
pwrite = (unsigned char xdata *) SYSTEM_PARAMETERS;

EA_save = EA; // save interrupt status
EA = 0; // 1) disable interrupts (precautionary)

PSCTL |= 0x02; // 2) Set the PSEE bit (register PSCTL).
PSCTL |= 0x01; // 3) Set the PSWE bit (register PSCTL).

FLKEY = 0xA5; // 4) Write the first key code to FLKEY: 0xA5.
FLKEY = 0xF1; // 5) Write the second key code to FLKEY: 0xF1.
PET_THE_DOG;

*pwrite = 0xF5; // 6) Step 6. Using the MOVX instruction, write a data byte to any
// location within the 512-byte page to be erased

PET_THE_DOG;
PSCTL = 0; // 7) Clear the PSWE and PSEE bits.

// user software
EA = EA_save; // re-enable interrupts

0