Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перепрошивка контроллера с SD
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
vkle
Привет!

Возникла задача реализовать обновление прошивки контроллера LPC2378 с SD карты, а точнее из файла с карточки (т.е. нужна поддержка FAT16).

Я реализовал чтение файла с карточки и могу прочитать его по частям во внутреннюю RAM контроллера (при этом используются прерывания).
Дальше как я понимаю я должен записать эти данные во flash при помощи IAP.

Но тут начинается пока что непонятная для меня каша с переносом таблиц прерываний в RAM и т.д...

Подскажите пожалуйста правильно ли я представляю себе алгоритм "самоперепрошивки" контроллера?

1. Включается контроллер и попадает в стартап, и далее в main().
2. Я инициализирую SD и считываю оттуда версию файла прошивки, если она старая, то передаю управление программе по некоторому адресу ADDR.
3. Если прошивка новая, то я считываю максимально возможный ее кусок в RAM записываю этот кусок во flash по адресу ADDR при помощи IAP.
4. Выполняю п.3 до тех пор пока не считаю и не запишу весь файл в IAP.
5. Передаю управление по адресу ADDR.

Спасибо.
HARMHARM
Очень похоже на правду, но:
1а. Если на SD лежит бекап прошивки, восстанавливаю бекап.
2а. Если прошивка новая, сохраняю бекап старой чтоб потом откатиться если что.
Приложение должно вскоре после удачного запуска прибить бекап.
Так гораздо сложнее остаться с устройством без прошивки вообще. Может быть не слишком актуально, у меня FOTA вместо SD...
Nixon
В принципе все верно. Обратите только внимание на правильную генерацию новой прошивки. Там будут нюансы.
skripach
vkle Используйте поиск, всё необходимое для реализации подобных загрузчиков давно есть на форуме.
vkle
Цитата
В принципе все верно. Обратите только внимание на правильную генерацию новой прошивки. Там будут нюансы.

А что за нюансы? Можете подсказать где об этом почитать?

Цитата
Используйте поиск, всё необходимое для реализации подобных загрузчиков давно есть на форуме.

Я искал, но не нашел ясного изложения вопроса.

kovigor
Цитата(vkle @ Jan 11 2011, 00:25) *
Подскажите пожалуйста правильно ли я представляю себе алгоритм "самоперепрошивки" контроллера?


Примерно так. Не забывайте, что:

1. Все ваши функции, участвующие в прошивке Flash, константы и проч. должны вызываться из RAM и размещаться в RAM. В Кейле это настраивается парой нажатий кнопок. Про IAR не скажу ничего.
2. Прерывания на все время прошивки должны быть запрещены. Или же вам придется размещать обработчики прерываний и таблицу векторов в RAM.
3. По окончании прошивки контроллер можно перегрузить автоматически с помощью WDT.

Вот, кажется, и все особенности ...
Wano
Жизнь станет легче если залить один раз загрузчик в начало флэша. Он займёт там места не более , чем тот же код в основной прошивке.

1)Стартанул загрузчик из флэш - глянул надо ли шить ROM.
2)Если надо то скачиваем сектор(ы) положенного размера (согласно шиту на проц) с SD в RAM и зашиваем.

Плюсы перед тем, чтобы прога шила сама себя:
1)Пользуемся прерываниями на здоровье
2)В случае падения прошивки её можно перезалить ещё раз.
3)Стартовать можем и без WDT

p.s. Данный совет мне дал уважаемы aaarr.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.