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

 
 
4 страниц V  « < 2 3 4  
Reply to this topicStart new topic
> как работать с IAP?
HARMHARM
сообщение Mar 15 2009, 19:23
Сообщение #46


читатель даташитов
****

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



Цитата(vesago @ Mar 15 2009, 20:10) *
Я думал, что если начало прошивки сконфигурировано с адреса 0x2000, то и вектора там же. А как же она работает в обычном режиме? Там же сидит загрузчик как отдельное приложение. Получается для ремапа, мне нужно в начало рамы копирнуть область векторов с 0 флеши и задать ремап?

Да, этого достаточно.
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Mar 15 2009, 19:34
Сообщение #47


.
******

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



Цитата(vesago @ Mar 15 2009, 23:10) *
А как же она работает в обычном режиме? Там же сидит загрузчик как отдельное приложение.

В векторах программ чаще всего используется IRQ. Если по адресу 0x18 в нулевом секторе (загрузчике) стоит команда LDR PC,[PC,#-0xFF0], то этого достаточно чтобы IRQ прикладной программы нормально действовали. Для FIQ тоже можно сделать похожим образом. Ну а остальные вестора исключительных ситуаций обычно не возникают и для большинства программ не имеют значения. Обычно там вообще стоят заглушки типа зависона.


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
vesago
сообщение Mar 15 2009, 19:53
Сообщение #48


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



Спасибо, все понятно.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 16 2009, 02:31
Сообщение #49


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(cornflyer @ Jan 29 2009, 07:47) *
на форуме нет внятного описания как работать с IAP, нет рабочего кода, только какие-то танцы с бубном smile.gif
пробовал код с форума - то пишет, то не пишет... непонятно почему
в самой документации на lpc2148 - только пару строк
хотя я все делал как требуется:
выключал прерывания
вызывал функцию подготовки флеша
потом писал туда массив байт из RAM'а
выложи свой рабочий код, который пишет и читает внутреннюю FLASH через IAP smile.gif

Может вы не ту доку читали? Я пользовался LPC2478, в доке все внятно прописано более менее. Не пара строк. За пару часов запись удалось осуществить.
Go to the top of the page
 
+Quote Post
TanT
сообщение Mar 17 2009, 06:19
Сообщение #50


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 22-11-05
Из: Россия->Омск
Пользователь №: 11 210



Вопрос к etoja по поводу записи, точнее верификации.
Пишу себе спокойно по IAP, проверяю двумя способами: в лоб по рекомендации KRS и IAPовским сравнением. И нет такого момента, чтобы без ошибок обошлось на 32 кб записи 2-3 ошибки в среднем. Ну это ещё полбеды. Смотрю где ошибка - записанно всё что требуется (покрайней мере в том месте куда указывают функции сравнения). Ладно, думаю, по не опытности накосячил где-нить с указателями и не то сравниваю, однако, прошивка не запускается. Но стоит повторить целиком запись прошивки "поверх" старой, и - о чудо - всё работает и ошибок проверки не возникает. Чем это может быть обоснованно? Как всё таки достоверно сравнивать данные из ОЗУ и флеш?

P.S. Записывал массив одинаковых символов, смотрел глазками что вышло, всё в идеале, хотя ошибки всё равно лезут.
Прерывания естественно все отключены, даже пробовал модуль акселератора памяти отключать (МАМ), думалось может при обращении к флеш не-то читается - не помогло в общем.


--------------------
Если вы не можете объяснить что-то шестилетнему ребенку, значит, вы сами этого не понимаете.
Альберт Эйнштейн
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Mar 17 2009, 11:42
Сообщение #51


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



Цитата(TanT @ Mar 17 2009, 01:19) *
Вопрос к etoja по поводу записи, точнее верификации.
Пишу себе спокойно по IAP, проверяю двумя способами: в лоб по рекомендации KRS и IAPовским сравнением. И нет такого момента, чтобы без ошибок обошлось на 32 кб записи 2-3 ошибки в среднем. Ну это ещё полбеды. Смотрю где ошибка - записанно всё что требуется (покрайней мере в том месте

Не ту частоту передаете параметром в IAP. Flash не успевает прописаться надежно.
Go to the top of the page
 
+Quote Post
TanT
сообщение Mar 17 2009, 12:14
Сообщение #52


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 22-11-05
Из: Россия->Омск
Пользователь №: 11 210



а вы правы, ar__systems. частота стояла из старого проекта в 4 раза меньше требуемой.
Для надёжного прописывания флеш сколько времени требуется - то есть после записи, требуется провести проверку, что же там написанно. Паузы не требуется между записью блока и проверкой?


--------------------
Если вы не можете объяснить что-то шестилетнему ребенку, значит, вы сами этого не понимаете.
Альберт Эйнштейн
Go to the top of the page
 
+Quote Post
HARMHARM
сообщение Mar 17 2009, 12:16
Сообщение #53


читатель даташитов
****

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



Цитата(TanT @ Mar 17 2009, 14:14) *
а вы правы, ar__systems. частота стояла из старого проекта в 4 раза меньше требуемой.
Для надёжного прописывания флеш сколько времени требуется - то есть после записи, требуется провести проверку, что же там написанно. Паузы не требуется между записью блока и проверкой?

Паузы не требуется. Я вообще проверяю целиком всю записанную информацию - считаю CRC. Ни разу не было проблем с записью (только при пропадании питания мусор естественно).
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 17 2009, 12:17
Сообщение #54


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(TanT @ Mar 17 2009, 15:14) *
Паузы не требуется между записью блока и проверкой?

Не требуются, из IAP возвращается после того как запись полностью произойдет и флешь полностью можно исплоьзовать
Go to the top of the page
 
+Quote Post
Wano
сообщение Aug 3 2009, 09:32
Сообщение #55


Местный
***

Группа: Свой
Сообщений: 272
Регистрация: 3-06-06
Пользователь №: 17 737



Подскажите всё ли правильно делаю,чтобы зашить в LPC2134 число:
1) в кейле Options for Target задаю два раздела IROM1 от 0х0 до 0x17FFF IROM2 от 0х18000 до 0x20000, тоесть планирую писать в последний сектор,для этого создаю раздел IROM2.
2) в прогу определяю переменную как const unsigned int i __attribute__((at(0x18000)));
3) следующей функцией стираю последний сектор и записываю туда какой-то массив, в первом элементе которого хранится будущее значение i

Код
typedef void (*IAP)(unsigned int *in, unsigned int *result);
#define iap_entry ((IAP) 0x7FFFFFF1)

unsigned int program (unsigned int * data)  {
  unsigned int command[5];
  unsigned int result[5];
  unsigned int save_VicInt;                

  save_VicInt = VICIntEnable;              
  VICIntEnClr = 0xFFFFFFFF; //запрет прерываний            

  command[0] = 50;//подготовка                            
  command[1] = 10;                                             
  command[2] = 10;                                           
  iap_entry (command, result);                    
  if (result[0])goto exit;

  command[0] = 52;//стирание                            
  command[1] = 10; // начало
  command[2] = 10;// конец
  command[3] = 60000;// частота проца
  iap_entry (command, result);
  if (result[0])goto exit;

  command[0] = 50;//подготовка
  command[1] = 10;
  command[2] = 10;                                     
  iap_entry (command, result);
  if (result[0])goto exit;

  command[0] = 51;//запись
  command[1] = (unsigned int) 0x0018000;  // куда пишется
  command[2] = (unsigned int) data;//что пишется              
  command[3] = 256;// число байт
  command[4] = 60000;
  iap_entry (command, result);
  if (result[0])goto exit;

exit:

  VICIntEnable = save_VicInt;
  return (result[0]);
}


Проблема состоит в том, что в таком случае на команде стирания проц вылетает в PAbt_Handler. Если не объявлять раздел IROM2,тогда всё нормально проходит,но тогда как проконтролировать не залезет ли прога в область,где предполагается перезапись.
Go to the top of the page
 
+Quote Post
IgorMarx
сообщение Aug 27 2009, 19:57
Сообщение #56


Участник
*

Группа: Участник
Сообщений: 61
Регистрация: 5-10-05
Из: Зеленоград
Пользователь №: 9 268



Цитата(GetSmart @ Mar 15 2009, 23:34) *
В векторах программ чаще всего используется IRQ. Если по адресу 0x18 в нулевом секторе (загрузчике) стоит команда LDR PC,[PC,#-0xFF0], то этого достаточно чтобы IRQ прикладной программы нормально действовали. Для FIQ тоже можно сделать похожим образом. Ну а остальные вестора исключительных ситуаций обычно не возникают и для большинства программ не имеют значения. Обычно там вообще стоят заглушки типа зависона.


Это отличное решение для IRQ (главное не забыть запрограммировать VICDefVectAddr, иначе при spurious interrupt поимеем переход на нулевой адрес). Но я не уверен что для FIQ такой номер прокатит. Если мне не изменяет память, то инструкция LDR PC,[PC,#-0xFF0] загружает в PC значение, считанное по адресу PC,#-0xFF0, то есть VICVectAddr, и это хорошо подходит для векторных прерываний. FIQ к ним не относится. Могу ошибаться, поправьте, если я не прав (сам не пробовал). Но вряд ли FIQ понадобятся самому бутлоадеру, можно сделать обычный переход в нужную страницу.
Go to the top of the page
 
+Quote Post

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

 


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


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