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

 
 
 
Reply to this topicStart new topic
> Загрузчик str9, как обойти недоделку str9
OsipovD
сообщение Dec 11 2007, 17:54
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 29-10-07
Пользователь №: 31 848



Здравствуйте, проблема в следующем:

Хочу иметь загрузчик контроллера str9. Чтобы при включении питания сначала исполнялся код загрузчика (расположен в маленькой флеш контроллера bank1) , если не происходит определённого события ( к примеру нажатие кнопки на отладочной плате), стартует основная программа ( из флеш bank0), если событие происходит, то можно загрузить по СОМ-порту новую основную программа.

Есть пример от ST IAP dtriver. Но в этом примере по нажатию кнопки ресет на плате, ресета не происходит. Связано это с тем, что не все регистры принимают свои reset value при resete, в частности FMI. Т.е по ресету контроллер хочет на нулевой адрес, но флеш с которой он грузится с нулевого адреса не начинается ( мы сделали remap перед jump(ом) на основную программу) и ему не остаётся ничего кроме как зависнуть...

А ресет в основной программе очень нужен. Не удавалось ли кому-нибудь перебороть эту проблему каким-нибудь способом? Буду признателен за любую помощь
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Dec 12 2007, 06:53
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Что бы STR9 стартовал с маленькой памяти его нужно превельно законфигурировать, эти биты конфигурации доступны только через JTAG !!!

Ну а дальше это ваша программа....
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение Dec 12 2007, 15:07
Сообщение #3


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Просто ремап не надо делать и все отдично работает.
Именно так делаю в дивайсах на STR91x.
Область векторов совместно используют и загрузчик и программа.
Этаж область то все равно одинаковая, зачем из-за нее делать ремапинг?

Цитата(OsipovD @ Dec 11 2007, 22:24) *
Здравствуйте, проблема в следующем:

Хочу иметь загрузчик контроллера str9. Чтобы при включении питания сначала исполнялся код загрузчика (расположен в маленькой флеш контроллера bank1) , если не происходит определённого события ( к примеру нажатие кнопки на отладочной плате), стартует основная программа ( из флеш bank0), если событие происходит, то можно загрузить по СОМ-порту новую основную программа.

Есть пример от ST IAP dtriver. Но в этом примере по нажатию кнопки ресет на плате, ресета не происходит. Связано это с тем, что не все регистры принимают свои reset value при resete, в частности FMI. Т.е по ресету контроллер хочет на нулевой адрес, но флеш с которой он грузится с нулевого адреса не начинается ( мы сделали remap перед jump(ом) на основную программу) и ему не остаётся ничего кроме как зависнуть...

А ресет в основной программе очень нужен. Не удавалось ли кому-нибудь перебороть эту проблему каким-нибудь способом? Буду признателен за любую помощь
Go to the top of the page
 
+Quote Post
OsipovD
сообщение Dec 12 2007, 18:19
Сообщение #4





Группа: Участник
Сообщений: 13
Регистрация: 29-10-07
Пользователь №: 31 848



Цитата(AlexandrY @ Dec 12 2007, 18:07) *
Просто ремап не надо делать и все отдично работает.
Именно так делаю в дивайсах на STR91x.
Область векторов совместно используют и загрузчик и программа.
Этаж область то все равно одинаковая, зачем из-за нее делать ремапинг?

Получился загрузчик с ремапом, причем решение вышло довольно странное:
В программе загрузчике настраиваю FMI - маленькая flash bank1 на адресе 0x00, доступны обе flash (FMI->CR=0x018). Дальше забавнее - перед jump(ом) оставляю всё так же как и в примере IAP -
FMI->BBSR = 0x0;
FMI->NBBSR = 0x6;
//FMI->BBADR = 0x80000 >> 2;
FMI->NBBADR = 0x0 ;
Только вот строку, где маленькой flash присваивается новый адрес, закомментирую. Т.е имею две flash c нулевыми адресами. Если теперь сделать jump на нулевой адрес, то загрузчик начинает вечно крутиться, но если запретить использование маленькой flash:

FMI->CR = 0x010;
То после jump(a) начинает исполняться программа из большой flash, по нажатию клавиши reset снова запускается загрузчик.
Только вот если в основной программе ( большая flash) я "трогаю" регистры FMI, программа перестаёт запускаться ( в IAP было тоже самое). А задачка как раз в том, что бы загрузчик запускал основную программу, безо всяких изменений её кода.
Go to the top of the page
 
+Quote Post
Bosicc
сообщение Dec 26 2007, 13:23
Сообщение #5


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

Группа: Свой
Сообщений: 93
Регистрация: 5-03-06
Из: Украина, Киев
Пользователь №: 14 970



Цитата(AlexandrY @ Dec 12 2007, 17:07) *
Просто ремап не надо делать и все отдично работает.
Именно так делаю в дивайсах на STR91x.
Область векторов совместно используют и загрузчик и программа.
Этаж область то все равно одинаковая, зачем из-за нее делать ремапинг?


Можно поподробней рассказать про совместное использование области под вектора? Меня интересует вектора заданы в загрузчике и как в главной программе?

Просто у меня возникла проблема. Когда я полностью загрузил главную программу в Банк 0 и хочу сделать ДЖАМП на нею, у меня программа слетает. Я так понимаю, есть пару причин:
1. Не срабатывает Ремап ( FMI->CR сбрасывается в значение 0х8 ( взято отсюда ) )
2. Не правильно вызываю функцию jump();

Если Вам будет не сложно, могли бы вы более подробно описать процесс переключения между банками. И если есть тестовый примерчик под Кейл, поделитесь пожалуйста smile.gif

Буду очень благодарен за советы.
Go to the top of the page
 
+Quote Post

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

 


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


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