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

 
 
> Обновление прошивки STR91X через внешний интерфейс (UART)
Zandy
сообщение Aug 11 2010, 09:57
Сообщение #1


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

Группа: Свой
Сообщений: 153
Регистрация: 5-03-05
Из: Москва
Пользователь №: 3 098



Я столкнулся с проблемой написания программы (бутлодера) для обновления софта на контроллере STR91X. Прошерстив форумы ST и Keil и перебробовав массу вариатов, угробив массу времени, в сухом остатке только нерабочие проекты. Я не детализирую свои вопросы (их очень много), т. к. хотелось бы знать, кто-нибудь делал такие рабочие проекты именно для STR91X?
Очень надеюсь на помощь.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
gregory812
сообщение Aug 12 2010, 10:40
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 72
Регистрация: 23-11-06
Из: Odessa
Пользователь №: 22 646



Делал загрузчик для STM32 по USART, все работало. Посмотрел документацию, у STR9X все тоже самое. Для STR9X все команды управления подробно расписаны здесь (включая блок-схемы) http://www.st.com/stonline/products/literature/anp/12951.pdf. Расскажите подробней, что вы делаете и где не работает.
Go to the top of the page
 
+Quote Post
Zandy
сообщение Aug 14 2010, 16:19
Сообщение #3


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

Группа: Свой
Сообщений: 153
Регистрация: 5-03-05
Из: Москва
Пользователь №: 3 098



Все вопросы свелись к одному единственному вопросу.
ПОСЛЕ УСПЕШНОЙ ЗАПИСИ В БАНК_0, НЕ ХОЧЕТ СТАРТОВАТЬ ОСНОВНАЯ ПРОГРАММА!!!

Вот функция старта приложения (Александр, ваша функция!)

Код
typedef void(*pFunction)(void);


void Start_application(void)
{
  pFunction Jump_To_Application;
  /* -------------------------------------------------------------------------- */
  /*                Configure bank 0 as 512KB and bank 1 as 32KB                */
  /*       Remap bank 0 at address 0x0 and bank 1 at address 0x80000            */
  /* -------------------------------------------------------------------------- */
  __disable_irq();
  __disable_fiq();

//  FMI->BBSR   = 0x1;
//  FMI->NBBSR  = 0x6;
//  FMI->CR     = 0;
  FMI->BBADR  = 0x80000 >> 2;
  FMI->NBBADR = 0x0;
//  FMI->CR     = BIT(4) + BIT(3);

  /* Jump to the user application and execute it */
  Jump_To_Application = (pFunction) 0x00;
  Jump_To_Application();

}


Я и до этого делал точно также. Не понимаю, в чем тут тонкость? Банки ремапятся, идем по нулевому адресу банка0, где и находится мое приложение. Оно там точно находится. Я с помощью SEGGERовской утилиты менял бит из конфигурационного регистра (тот, который заведует, с какого банка грузиться) на 0. Все в порядке - приложение работает как часы. А вот из бутлоадера (после его отработки) - хрен! Бутлоадер конечно грузится из банка 1. Здесь все чисто.

Александр, тут еще вопросик наверное к вам. Функция, приведенная выше, должна выполняться из RAM. Я это делаю просто. В кейле, в опциях файла, где лежит эта функция, выбираю IRAM1 [0x4000000-0x4017FFF]. Вот тут у меня сомнения. Правильно ли я делаю? В вашем пректе я такого не нашел. Где вы указываете, что функция должна выполняться из RAM?

Сообщение отредактировал rezident - Aug 14 2010, 17:25
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post



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

 


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


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