|
|
  |
LPC2478 IAP problem |
|
|
|
Apr 3 2009, 16:25
|

читатель даташитов
   
Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999

|
Цитата(ar__systems @ Apr 3 2009, 19:12)  Проверил, передаю 72000 (x Khz). Хм, если у вас контроллер работает на 72 МГц, даже не знаю что и посоветовать... Разве что проверить типы данных. Приведите код...
|
|
|
|
|
Apr 3 2009, 16:34
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Цитата(HARMHARM @ Apr 3 2009, 11:25)  Хм, если у вас контроллер работает на 72 МГц, даже не знаю что и посоветовать... Разве что проверить типы данных. Приведите код... Код скопировал из даташит. DISABLE/ENABLE INTs добавил только что, правда. Сейчас с ними проверяю. Код typedef void (*IAP)(unsigned int [],unsigned int[]); #define IAP_LOCATION 0x7ffffff1
#define MAX_ERASE_ATTEMPT 10
int WriteToFlash(void * ptr, int Size) { // const IAP iap_entry = (IAP) IAP_LOCATION; unsigned long command[5]; unsigned long result[3] = {0xFF,0xFF,0xFF};
for ( int EraseCount = 0; EraseCount < MAX_ERASE_ATTEMPT; EraseCount++ ) { //======================================================== // Prepare Sector for Write command[0] = 50; command[1] = 0x1B; command[2] = 0x1B; DISABLE_INTERRUPTS; iap_entry(command,result); ENABLE_INTERRUPTS; if ( result[0] != 0 ) return result[0]; //========================================================= // Erase uart1Puts("Erasing...\n\r");
DISABLE_INTERRUPTS; command[0] = 52; command[1] = 0x1B; command[2] = 0x1B; command[4] = 72000; //150000; iap_entry(command,result); ENABLE_INTERRUPTS; if ( result[0] != 0 ) return result[0];
//========================================================= // BlankCheck command[0] = 53; command[1] = 0x1B; command[2] = 0x1B; command[4] = 72000; // 150000; iap_entry(command,result); if ( result[0] == 0 ) break; uart1Puts("Blank Check failed...\n\r"); };
if ( result[0] != 0 ) return result[0];
//========================================================= // Prepare Sector for Write
command[0] = 50; command[1] = 0x1B; command[2] = 0x1B; iap_entry(command,result); if ( result[0] != 0 ) return result[0];
//========================================================= // Copy RAM to FLASH command[0] = 51; command[1] = (unsigned long) PersistentData; command[2] = (unsigned long) ptr; command[3] = PersistBlockSize; command[4] = 72000;
result[0] = result[1] = result[2] = 0xFF; iap_entry(command,result); return result[0]; };
|
|
|
|
|
Apr 3 2009, 17:07
|

читатель даташитов
   
Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999

|
Цитата(ar__systems @ Apr 3 2009, 19:34)  Код скопировал из даташит. DISABLE/ENABLE INTs добавил только что, правда. Сейчас с ними проверяю. Прерывания принципиально могут работать из RAM. Разница в моём коде только в том, что неиспользуемые параметры command обнуляю. Ну и прерывания надо запрещать при всех вызовах IAP  Кстати, из User Mode прерывания не выключатся. Могу только посоветовать проверить инициализацию источников тактирования PLL и т.п. Попробуйте дать меньшее значение частоты в функцию, имхо при стирании оно используется лишь для вычисления задержки. Померяйте время, которое занимает функция стирания - должно быть около 400 мс. Увы, идей больше нету. Приложил сборник идей по IAP, надерганных неизвестно откуда, посмотрите  У меня работает железно, каждый раз, не видел ни единого сбоя.
Прикрепленные файлы
iap.txt ( 9.52 килобайт )
Кол-во скачиваний: 306
|
|
|
|
|
Apr 3 2009, 19:17
|
self made
   
Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795

|
Damn it! Частота процессора не в то поле была записана. Убил два дня!  Кстати, а откуда время 400mS, из какого документа? Я смотрю UM10237 и еще один, без номера, там такого параметра нет. Код // Erase uart1Puts("Erasing...\n\r");
DISABLE_INTERRUPTS; command[0] = 52; command[1] = 0x1B; command[2] = 0x1B; command[ 4 ] = 72000; //150000;
Сообщение отредактировал ar__systems - Apr 3 2009, 19:17
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|