Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: bootloader at91sam7s ищу
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
sloth
Есть устройство на at91sam7s256 с SD картой и есть желание сделать обновление прошивки с SD карты.
Перепробовал кучу найденных на просторах сети вариаций линкер скриптов и стартапов, переделывал их в соответствии с различными рекомендациями - приложение запустить не удалось. Используемый компилятор - gcc. Уже тошно смотреть на эти стартапы, хотелось бы побыстрее закончить проект, да и сроки давно вышли (хотя проект больше для себя).
За столько лет существования МК наверняка же кто-то написал правильные и работающие скрипты для бутлоадера!? В общем, рассмотрю любые условия получения исходников.
aaarrr
Все это хорошо, вот только какое отношение "скрипты линкера и стартапы" имеют к поставленной задаче? Или вы хотите загнать bootloader с поддержкой SD и файловой системы непосредственно в стартап?
sloth
Цитата(aaarrr @ Feb 11 2010, 02:22) *
Все это хорошо, вот только какое отношение "скрипты линкера и стартапы" имеют к поставленной задаче? Или вы хотите загнать bootloader с поддержкой SD и файловой системы непосредственно в стартап?

Как какое? Написать программу, которая читает с флешки и записывает во флеш для меня не проблема, а вот правильно прыгнуть с бутлоадера на программу у меня не получается, а это делается в стартапе.
alexsl
Добрый день. У меня аналогичная проблема. И вроде бы на первый взгляд все правильно. После лнковке в .map файле видно что функция на которую прыгаю находится по адресу во флэше - 0x00100160:

.text 0x00100160 0x2a8 main.o
0x00100160 main

Однако, при выполнении команды LDR pc, =main программа переходит по адресу 0x160. Не пойму почему.

Использую gcc 4.4.2
aaarrr
Цитата(sloth @ Feb 11 2010, 07:28) *
...правильно прыгнуть с бутлоадера на программу у меня не получается, а это делается в стартапе.

Вовсе не обязательно это делать именно в стартапе. Перед прыжком нужно или вернуть процессор и периферию в безопасное состояние, или же учесть в основной программе, что процессор уже частично инициализирован. Особо обратить внимание на контроллер прерываний, ремап и перезапуск PLL - это основной набор граблей.
sonycman
Тоже планирую сделать обновление прошивки с SD карты, только на STM32.
Думаю загрузчик расположить в конце флешки контроллера, переходить на его адрес по вызову из прошивки (адрес ведь будет статический), а по окончании прошивки просто выполнять сброс контроллера.
Таким образом новая прошивка стартанёт безо всяких проблем.

Только вот не знаю, можно ли в STM32 вектора прерываний переместить в оперативку?
aaarrr
Цитата(sonycman @ Feb 11 2010, 11:37) *
Думаю загрузчик расположить в конце флешки контроллера, переходить на его адрес по вызову из прошивки (адрес ведь будет статический), а по окончании прошивки просто выполнять сброс контроллера.
Таким образом новая прошивка стартанёт безо всяких проблем.

А если вдруг не стартанет? Останетесь без загрузчика и без прошивки.

Цитата(sonycman @ Feb 11 2010, 11:37) *
Только вот не знаю, можно ли в STM32 вектора прерываний переместить в оперативку?

На Cortex-M3 можно где угодно.
prgjz
Для EWARM кусочек моего кода бутлодера, важно чтоб функция sysjump() __arm была.

__arm void sysjump(unsigned int addr)
{
void ( __arm *kernelstart)(void);
AT91C_BASE_AIC->AIC_IDCR = 0xFFFFFFFF; // disable all irq
kernelstart = (void (*)(void))addr; // load start address of app.
(*kernelstart)(); // jump to reset vector of app.
}


#define START_APP 0x4000 // reset vektor address of app.


sysjump(START_APP); //-- Never return
sloth
На словах все конечно красиво, но граблей там уж слишком много. Может, кто-нибудь, кто прошел все грабли, возьмется написать за вознаграждение?
prgjz
Цитата(sloth @ Feb 11 2010, 18:53) *
На словах все конечно красиво, но граблей там уж слишком много. Может, кто-нибудь, кто прошел все грабли, возьмется написать за вознаграждение?


Посмотрите на http://www.tnkernel.com/usb_fw_upgrader.html там Юрий очень хороший пример для выложил.
sloth
Цитата(prgjz @ Feb 12 2010, 16:17) *
Посмотрите на http://www.tnkernel.com/usb_fw_upgrader.html там Юрий очень хороший пример для выложил.

Спасибо огромное что еще раз напомнили про этот пример! Пример действительно очень хороший и доступный для понимания, а также реально работающий, и идеологически верный на мой взгляд.
Бутлоадер, сделанный с небольшими доработками данного примера работает. Ура! smile.gif Все большое спасибо за участие.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.