реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Пришла пора помощи попросить, LPC2134/01 и IAP
starmos
сообщение Sep 11 2009, 05:10
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-10-04
Из: Челябинск
Пользователь №: 769



Суть проблемы заключается в том, что не удается стереть сектор встроенной флеш средствами 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 - тоже самое только медленно smile.gif.
Больше идей нет sad.gif

Все что относится:

#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; // погасить светодиод - добавил для отладки, реально не гаснет
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 11 2009, 05:54
Сообщение #2


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Мне кажется, все это

должно выполняться из RAM
Причина редактирования: Бездумное цитирование


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
starmos
сообщение Sep 11 2009, 06:12
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-10-04
Из: Челябинск
Пользователь №: 769



Почему из RAM? Где-то есть в документации? Я по английски плохо, мог пропустить. Но команда записи то работает.
Go to the top of the page
 
+Quote Post
dimka76
сообщение Sep 11 2009, 07:05
Сообщение #4


developer
****

Группа: Свой
Сообщений: 902
Регистрация: 12-04-06
Из: Казань
Пользователь №: 16 032



Цитата(starmos @ Sep 11 2009, 10:12) *
Почему из RAM?

чтобы ваша программа сама себя не затерла

Цитата(starmos @ Sep 11 2009, 10:12) *
Я по английски плохо

по-русски тоже wink.gif


--------------------
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Sep 11 2009, 07:09
Сообщение #5


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(starmos @ Sep 11 2009, 12:12) *
Почему из RAM? Где-то есть в документации? Я по английски плохо, мог пропустить. Но команда записи то работает.

Прога не в первом секторе? Прерывания запрещены?

Сообщение отредактировал GetSmart - Sep 11 2009, 07:10


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Sep 11 2009, 08:45
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



У меня в 2138 загрузчик живёт в первом секторе (в ОЗУ не копируется), всё нормально стирается. Первый сектор стирать не пробовал smile.gif

Вы, случаем, команду Prepare for write не пропустили?


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
adnega
сообщение Sep 11 2009, 13:31
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Вроде, сектор подготавливать надо...
Go to the top of the page
 
+Quote Post
starmos
сообщение Sep 11 2009, 16:16
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-10-04
Из: Челябинск
Пользователь №: 769



Прерывания запрещены. Сама программа не в 1 секторе - весь сектор объявлен как массив констант по заданному адресу. Про загрузчик в 1 секторе слышу впервые, до этого читал что он в последнем и еще что в 7-м, но не вникал, т.к. пробовал стирать 1 и 5. Завтра попробую скажем 4 для чистоты эксперимента. Но после зависания и сброса основная программа работает нормально, пока снова не попытаюсь записать во флеш.
Prepare for write не пропустил, она нормально работает, а в приведенном коде она на месте последнего многоточия.
Go to the top of the page
 
+Quote Post
starmos
сообщение Sep 14 2009, 07:49
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 174
Регистрация: 4-10-04
Из: Челябинск
Пользователь №: 769



Вроде разобрался. Как обычно оказалось - "сам дурак". Но всем спасибо за помощь.
Суть проблемы - хотя функции запрета прерываний присутствовали, но контроллер работал в User режиме, поэтому прерывания не запрещались фактически.
Т.е. я еще когда переделывал под себя стандартный стартовый файл - забыл изменить режим.
Бывает.
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Sep 15 2009, 11:55
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Цитата(esaulenka @ Sep 11 2009, 12:45) *
Первый сектор стирать не пробовал smile.gif

Докладываю:
на LPC2366 замечательно проходит команда стереть сектора 0..14 (т.е. все), при этом загрузчик расположен в секторе 0.
Рапортовать об успешном завершении, правда, не получается, но не очень-то и хотелось - фича заложена "на всякий случай".


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016