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

Все это хорошо, вот только какое отношение "скрипты линкера и стартапы" имеют к поставленной задаче? Или вы хотите загнать bootloader с поддержкой SD и файловой системы непосредственно в стартап?
Как какое? Написать программу, которая читает с флешки и записывает во флеш для меня не проблема, а вот правильно прыгнуть с бутлоадера на программу у меня не получается, а это делается в стартапе.
alexsl
Feb 11 2010, 05:44
Добрый день. У меня аналогичная проблема. И вроде бы на первый взгляд все правильно. После лнковке в .map файле видно что функция на которую прыгаю находится по адресу во флэше - 0x00100160:
.text 0x00100160 0x2a8 main.o
0x00100160 main
Однако, при выполнении команды LDR pc, =main программа переходит по адресу 0x160. Не пойму почему.
Использую gcc 4.4.2
aaarrr
Feb 11 2010, 08:22
Цитата(sloth @ Feb 11 2010, 07:28)

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

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

Только вот не знаю, можно ли в STM32 вектора прерываний переместить в оперативку?
На Cortex-M3 можно где угодно.
Для 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 @ Feb 11 2010, 18:53)

На словах все конечно красиво, но граблей там уж слишком много. Может, кто-нибудь, кто прошел все грабли, возьмется написать за вознаграждение?
Посмотрите на
http://www.tnkernel.com/usb_fw_upgrader.html там Юрий очень хороший пример для выложил.
Цитата(prgjz @ Feb 12 2010, 16:17)

Посмотрите на
http://www.tnkernel.com/usb_fw_upgrader.html там Юрий очень хороший пример для выложил.
Спасибо огромное что еще раз напомнили про этот пример! Пример действительно очень хороший и доступный для понимания, а также реально работающий, и идеологически верный на мой взгляд.
Бутлоадер, сделанный с небольшими доработками данного примера работает. Ура!

Все большое спасибо за участие.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.