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

Значит нужно реализавать следующую штуку...
Есть некий девайс в который пользователь вставляет флешку, выбирает функцию смены прошивки, девайс находит *.hex в roote и себя перешивает, причем он должен перешиваться полностью, вместе с лодером с помощью которого он перешиваеться (лодер также должен уметь сгружаться с флешки некие параметры для проги...)... это все на LPC2468...

Как я себе это представляю... в начале в память зашит лодер потом прога...

Как только юзер выбирает смену прошивки, происходит проверка на валидность прошивки, потом лодер копируеться в самый конец памяти и устанавливает старт контроллера на себя, запускаеться оттуда и начинает переписывать прошивку, как только она произведена успешно, лодер устанавливает старт на начало новой прошивки т.е. на новый лодер... в таком раскладе если запись прошивки произошла неудачно, к примеру питание упало, тогда прога стартует со старого лодера и сразу автоматом грузит новую прошивку, если прошивка записалась криво, будет возможность вернуться к стаарому работающему лодеру и повторить прошивку...

Но это все мои измышления, наверняка сея проблема распространена и есть какие либо классические решения...
Может чего присоветуете?

П.С. Как можно програмно переустанавливать точки старта в LPC? Можно ли вообще?
rezident
Основной принцип - начальный bootloader не перезаписывается никогда! Потому, что в противном случае есть очень большая вероятность получить полностью неработающее устройство.
Если хочется модифицировать загрузчик: дополнить его шифрованием, поддержкой новых каналов/интерфейсов для загрузки и т.п., то с помощью основного bootloader загружается дополнительный bootloader, который и реализует все эти новые фичи.
Gizma
Цитата(rezident @ Aug 24 2009, 20:59) *
Основной принцип - начальный bootloader не перезаписывается никогда! Потому, что в противном случае есть очень большая вероятность получить полностью неработающее устройство.
Если хочется модифицировать загрузчик: дополнить его шифрованием, поддержкой новых каналов/интерфейсов для загрузки и т.п., то с помощью основного bootloader загружается дополнительный bootloader, который и реализует все эти новые фичи.


В таком случае у меня получаються 2 полностью одинаковых бутлодера просто с разными исполнительными параметрами...

Еще один довод, к примеру у меня поддержка только FAT16 в будующем потребуеться что бы работал и с FAT32 и еще несколькимим ФС да и еще просто по USB, пользователю будет не очень удобно прошивать по нескольку раз сначала перешивать лодер лодера*)) потом сам лодер, потом прогу*))


А чем собсна мой вариант плох? всегда есть возможность бэкапа или релода!
rezident
Цитата(Gizma @ Aug 24 2009, 23:15) *
А чем собсна мой вариант плох? всегда есть возможность бэкапа или релода!
В том, что вектор сброса - один, а сбой в момент переназначения его являет из себя далеко ненулевую вероятность. Как там в законах Мерфи? "Если вероятность неприятности отлична от нуля, то она обязательно произойдет", как-то так примерно wink.gif
Gizma
Цитата(rezident @ Aug 24 2009, 22:39) *
В том, что вектор сброса - один, а сбой в момент переназначения его являет из себя далеко ненулевую вероятность. Как там в законах Мерфи? "Если вероятность неприятности отлична от нуля, то она обязательно произойдет", как-то так примерно wink.gif


Не думаю что этот вектор переписываеться дольше нескольких тактов, соответственно вероятность 1 к X миллионам, при условии что сбой происходит всегда при перепрошивки, однако еще надо учесть вероятность возникновение ситуации для сбоя, и это веротность далеко даже не 1\100!
гораздо больше вероятность что мне попадеться чип с браком, или какой-нить компонент в схеме, помрет раньше срока... что так или иначе приведет к необходимости ремонта...
Step_ARM
Цитата(Gizma @ Aug 25 2009, 08:44) *
Не думаю что этот вектор переписываеться дольше нескольких тактов, соответственно вероятность 1 к X миллионам, при условии что сбой происходит всегда при перепрошивки, однако еще надо учесть вероятность возникновение ситуации для сбоя, и это веротность далеко даже не 1\100!
гораздо больше вероятность что мне попадеться чип с браком, или какой-нить компонент в схеме, помрет раньше срока... что так или иначе приведет к необходимости ремонта...

Все возможно... Пример такой. У меня загрузчик с SD карты работает. Загружается в память из основной программы, ремап... Программа переписывается. Но если вытащить карту при загрузке или просто контакт плохой или сбой питания, то программа не прописывается и соответственно пропадает возможность вновь запустить загрузчик с карты. Хорошо, что у меня есть Загрузчик через USB и он всегда во флэш.
zksystem
Цитата(Step_ARM @ Aug 27 2009, 07:50) *
Все возможно... Пример такой. У меня загрузчик с SD карты работает. Загружается в память из основной программы, ремап... Программа переписывается. Но если вытащить карту при загрузке или просто контакт плохой или сбой питания, то программа не прописывается и соответственно пропадает возможность вновь запустить загрузчик с карты. Хорошо, что у меня есть Загрузчик через USB и он всегда во флэш.

Это сколько памяти надо на такую кучу загрузчиков-загрузчиков, неужели нельзя раз и навсегда отладить и использовать универсальный загрузчик?
@Ark
Цитата
...наверняка сея проблема распространена и есть какие либо классические решения...


Классические решения есть - это загрузка операционных систем в PC с внешнего носителя (диска например).
Всегда имеется аппаратный ("железный") загрузчик, которому передается управление после включения питания и успешной отработки тестов (POST-процедур). На самом деле он, конечно, программный по сути, но находится в BIOS и поэтому всегда изначально присутствует в памяти.
Вся задача аппаратного загрузчика - считать с выбранного носителя начальный загрузчик. Про организацию носителя он ничего не знает (какая там FAT и пр.), просто читает начальную область носителя (512 байт), где должен находится начальный загрузчик, в фиксированную область памяти и передает ей управление. Начальный загрузчик тоже много сделать не может, так как должен укладываться в эти фиксированные 512 байт. Его задача - "вытащить" с диска основной загрузчик и передать ему управление. Вот тот уже может быть любого размера, умеет обращаться со структурой носителя, работать с файловой системой, загружать и выполнять программы и так далее... Вот, примерно так, в первом приближении...
Step_ARM
Цитата(zksystem @ Aug 27 2009, 18:14) *
Это сколько памяти надо на такую кучу загрузчиков-загрузчиков, неужели нельзя раз и навсегда отладить и использовать универсальный загрузчик?

Почему куча? Всего два. Просто второй загрузчик находится на карте памяти и не жрет флэш.
А USB загрузчик на флэш , потому что не у всех пользователей есть карта памяти.
Если же их совместить, как Вы говорите, то размер съедаемой флэш несколько возрастает за счет драйвера SPI, ФАТ и необходимости увеличенного вывода на дисплей. Причем прилично. А камень-то не резиновый -- LPC2364.
Конечно, при наличии у всех пользователей карты памяти, можно было сделать и как сказал Арк.
Ну, напрмер, маленький модуль в начале флэш. При старте он загружает с карты памяти загрузчик в ОЗУ, а тот уже все остальное делает.
Еще вариант -- использовать датафлэш и на ней держать основной загрузчик.
InsolentS
Цитата(Gizma @ Aug 24 2009, 20:52) *
Привет!

Значит нужно реализавать следующую штуку...
Есть некий девайс в который пользователь вставляет флешку, выбирает функцию смены прошивки, девайс находит *.hex в roote и себя перешивает, причем он должен перешиваться полностью, вместе с лодером с помощью которого он перешиваеться (лодер также должен уметь сгружаться с флешки некие параметры для проги...)... это все на LPC2468...

Как всегда, всё уже изобретено до нас http://www.nxp.com/acrobat_download/applic...s/AN10711_2.pdf
Step_ARM
Цитата(InsolentS @ Aug 29 2009, 12:33) *
Как всегда, всё уже изобретено до нас http://www.nxp.com/acrobat_download/applic...s/AN10711_2.pdf

Вы хоть пробовали читать посты и этот документ?
microsin
Цитата(rezident @ Aug 24 2009, 19:59) *
Основной принцип - начальный bootloader не перезаписывается никогда!

Это не всегда так. Bootloader можно восстановить простым ISP-программатором (например для чипа AT90USB162 см. http://microsin.ru/content/view/685/). Кроме того, есть чипы с "неудаляемыми" bootloader-ами, например AT91SAM7X256 (http://microsin.ru/content/view/779/44/). В этом чипе bootloader восстановится автоматически, стоит стереть чип (установка перемычки ERASE на 10 секунд).
aaarrr
Цитата(microsin @ Oct 18 2009, 15:40) *
Кроме того, есть чипы с "неудаляемыми" bootloader-ами, например AT91SAM7X256 (тут была реклама). В этом чипе bootloader восстановится автоматически, стоит стереть чип (установка перемычки ERASE на 10 секунд).

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