Суть проблемы заключается в том, что не удается стереть сектор встроенной флеш средствами IAP.
Использую контроллер LPC2134/01, Keil и LPC2000 Flash Utility
Пытаюсь работать с сектором 1 (с 5 еще пробовал).
Средствами LPC2000 Flash Utility сектор стирается и программируется.
Средствами IAP только программируется, если предварительно утилитой стереть.
Все вызовы команд IAP - как в примерах в документации. Подготовка сектора и запись работают нормально. А при стирании команда IAP вызывается, но обратно не выходит. Что-то стирает, судя по тем константам что потом после перезапуска смотрю, но в текущем сеансе виснет.
Стек для IAP в верхней части ОЗУ (128 байт) предусмотрел. Может неправильно (?), задал массив по конкретному адресу, в программе своей его не использую -> unsigned char iap_sys[128] __at(0x40003F80);
Тактовую частоту в параметры IAP передаю в кГц. Причем шьет она и при 12000 и при 60000 - проверил эмпирически. Как правильно надо в итоге не понял, но не стирает в обоих случаях. Пробовал работать без PLL и MAM - тоже самое только медленно

.
Больше идей нет

Все что относится:
#define OSCILLATOR 12000 // тактовая частота микроконтроллера в кГц
#define IAP_LOCATE 0x7FFFFFF1 // точка входа в IAP
.........
typedef void (*IAP)(unsigned long int *cmd, unsigned long int *rez);
IAP iap_entry;
unsigned long int iap_command[5];
unsigned long int iap_result[3];
Вызов команды:
........
iap_entry = (IAP) IAP_LOCATE; // установить адрес входа в IAP
.....
iap_command[0] = 52; // стереть сектор
iap_command[1] = sector;
iap_command[2] = sector;
iap_command[3] = OSCILLATOR; // тактовая частота в кГц
iap_entry(iap_command, iap_result);
IO0CLR.bit.P0_18 = 1; // погасить светодиод - добавил для отладки, реально не гаснет