писал я Firmware updater для C8051F125-го тоже основывался на апнотах от силабса. есть на силабс.ру тоже кое какие материалы и ссылки (типа
http://userxp.zabeg.info/index.php?cat=5). была у меня одна проблема, но стирание работало. как оказалось код из флэшбанка-3 вызывал функцию из флэшбанка-1, которая уже была стерта. к тому же стирание кода программы сводило с ума jtag и кейл просто вылетал из режима отладки.
сейчас апдейтер работает в полевых условиях. может у тебя с переключением банков чего или собака мешает?
SFRPAGE = LEGACY_PAGE;
PSBANK = 0x03; // erase flash-BANK #0
FLSCL = 0x01; // enable FLASH write/erase
PSCTL = 0x03; // MOVX erases FLASH
SFRPAGE = 0x01;
pagePointer = (unsigned char xdata*)0x001;
for (cntr = 63; cntr; cntr--)
{
while(FLBUSY); // Wait if FLASH-page is being erased now
*pagePointer = 0xFF; // ---"---
pagePointer += 0x0400; // Erase next page
}
SFRPAGE = LEGACY_PAGE;
PSCTL = 0x00; // MOVX writes target XRAM
FLSCL = 0x00; // disable FLASH write/erase
answer_buf[1] = FLASH_ERASED;
uart0_out(answer_buf, 2);
answer_buf[1] = Receive_Code();
uart0_out(answer_buf, 2);
if (answer_buf[1] == FIRMWARE_UPDATE_SUCCESS) RSTSRC = 0x10; // reset the device