В общем надо записывать флэш.
Определения:
Код
#define IAP_LOCATION 0x7FFFFFF1
typedef void (*IAP)(unsigned int [], unsigned int []);
#define iap_entry ((IAP) IAP_LOCATION)
unsigned int command[5];
unsigned int result[2];
Собственно функция стирания секторов:
Код
unsigned int erase (unsigned int start, unsigned int end)
{
command[0]= IAP_PREPARE_SECTOR; // IAP Command: Prepare Sectors for Write (50)
command[1] = 3;//Get_sector(start); // Start Sector
command[2] = 3; //Get_sector(end-1); // End Sector
iap_entry(command, result); // Call IAP Function
if (result[0]==0)
{
u0putstr("Preparing sector`s ok. Erasing...\r\n");
command[0] = IAP_ERASE_SECTOR; // IAP Command: Erase Flash (52)
command[1] = Get_sector (start); // Start Sector
command[2] = Get_sector (end-1); // End Sector
command[3] = PCLK/1000; // CPU Clock
iap_entry(command,result); // Call IAP Function
}
}
При вызове IAP_PREPARE_SECTOR возвращает ошибку 7: INVALID_SECTOR. Я уже по всякому и объявлять пытался и т.п. - ни в какую. И номера секторов ручками пишу и по всякому. Результат один.
массив команд заполнен вроде как верно. Примеры смотрел, документацию читал. Все вроде как там. И не работает.
Камень LPC2106, LPC2103. PLL и т.п. отключены. Кварц 14.7456
Может гитьки какие есть? Если когда-то была установлена защита - она стирается при полнеом стирании флэша? И влияет ли она на эти процедуры?