|
|
  |
Организация USB перепрошивщика... |
|
|
|
Aug 24 2009, 16:52
|
Участник

Группа: Участник
Сообщений: 57
Регистрация: 3-09-08
Пользователь №: 39 972

|
Привет!
Значит нужно реализавать следующую штуку... Есть некий девайс в который пользователь вставляет флешку, выбирает функцию смены прошивки, девайс находит *.hex в roote и себя перешивает, причем он должен перешиваться полностью, вместе с лодером с помощью которого он перешиваеться (лодер также должен уметь сгружаться с флешки некие параметры для проги...)... это все на LPC2468...
Как я себе это представляю... в начале в память зашит лодер потом прога...
Как только юзер выбирает смену прошивки, происходит проверка на валидность прошивки, потом лодер копируеться в самый конец памяти и устанавливает старт контроллера на себя, запускаеться оттуда и начинает переписывать прошивку, как только она произведена успешно, лодер устанавливает старт на начало новой прошивки т.е. на новый лодер... в таком раскладе если запись прошивки произошла неудачно, к примеру питание упало, тогда прога стартует со старого лодера и сразу автоматом грузит новую прошивку, если прошивка записалась криво, будет возможность вернуться к стаарому работающему лодеру и повторить прошивку...
Но это все мои измышления, наверняка сея проблема распространена и есть какие либо классические решения... Может чего присоветуете?
П.С. Как можно програмно переустанавливать точки старта в LPC? Можно ли вообще?
|
|
|
|
|
Aug 24 2009, 17:15
|
Участник

Группа: Участник
Сообщений: 57
Регистрация: 3-09-08
Пользователь №: 39 972

|
Цитата(rezident @ Aug 24 2009, 20:59)  Основной принцип - начальный bootloader не перезаписывается никогда! Потому, что в противном случае есть очень большая вероятность получить полностью неработающее устройство. Если хочется модифицировать загрузчик: дополнить его шифрованием, поддержкой новых каналов/интерфейсов для загрузки и т.п., то с помощью основного bootloader загружается дополнительный bootloader, который и реализует все эти новые фичи. В таком случае у меня получаються 2 полностью одинаковых бутлодера просто с разными исполнительными параметрами... Еще один довод, к примеру у меня поддержка только FAT16 в будующем потребуеться что бы работал и с FAT32 и еще несколькимим ФС да и еще просто по USB, пользователю будет не очень удобно прошивать по нескольку раз сначала перешивать лодер лодера*)) потом сам лодер, потом прогу*)) А чем собсна мой вариант плох? всегда есть возможность бэкапа или релода!
|
|
|
|
|
Aug 25 2009, 04:44
|
Участник

Группа: Участник
Сообщений: 57
Регистрация: 3-09-08
Пользователь №: 39 972

|
Цитата(rezident @ Aug 24 2009, 22:39)  В том, что вектор сброса - один, а сбой в момент переназначения его являет из себя далеко ненулевую вероятность. Как там в законах Мерфи? "Если вероятность неприятности отлична от нуля, то она обязательно произойдет", как-то так примерно  Не думаю что этот вектор переписываеться дольше нескольких тактов, соответственно вероятность 1 к X миллионам, при условии что сбой происходит всегда при перепрошивки, однако еще надо учесть вероятность возникновение ситуации для сбоя, и это веротность далеко даже не 1\100! гораздо больше вероятность что мне попадеться чип с браком, или какой-нить компонент в схеме, помрет раньше срока... что так или иначе приведет к необходимости ремонта...
Сообщение отредактировал Gizma - Aug 25 2009, 05:14
|
|
|
|
|
Aug 27 2009, 03:50
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870

|
Цитата(Gizma @ Aug 25 2009, 08:44)  Не думаю что этот вектор переписываеться дольше нескольких тактов, соответственно вероятность 1 к X миллионам, при условии что сбой происходит всегда при перепрошивки, однако еще надо учесть вероятность возникновение ситуации для сбоя, и это веротность далеко даже не 1\100! гораздо больше вероятность что мне попадеться чип с браком, или какой-нить компонент в схеме, помрет раньше срока... что так или иначе приведет к необходимости ремонта... Все возможно... Пример такой. У меня загрузчик с SD карты работает. Загружается в память из основной программы, ремап... Программа переписывается. Но если вытащить карту при загрузке или просто контакт плохой или сбой питания, то программа не прописывается и соответственно пропадает возможность вновь запустить загрузчик с карты. Хорошо, что у меня есть Загрузчик через USB и он всегда во флэш.
|
|
|
|
|
Aug 27 2009, 14:14
|

embedder
  
Группа: Свой
Сообщений: 264
Регистрация: 11-05-05
Из: Казань
Пользователь №: 4 911

|
Цитата(Step_ARM @ Aug 27 2009, 07:50)  Все возможно... Пример такой. У меня загрузчик с SD карты работает. Загружается в память из основной программы, ремап... Программа переписывается. Но если вытащить карту при загрузке или просто контакт плохой или сбой питания, то программа не прописывается и соответственно пропадает возможность вновь запустить загрузчик с карты. Хорошо, что у меня есть Загрузчик через USB и он всегда во флэш. Это сколько памяти надо на такую кучу загрузчиков-загрузчиков, неужели нельзя раз и навсегда отладить и использовать универсальный загрузчик?
--------------------
Мечты стареют куда быстрее мечтателей… Стивен Кинг. "Ловец снов"
|
|
|
|
Guest_@Ark_*
|
Aug 27 2009, 14:56
|
Guests

|
Цитата ...наверняка сея проблема распространена и есть какие либо классические решения... Классические решения есть - это загрузка операционных систем в PC с внешнего носителя (диска например). Всегда имеется аппаратный ("железный") загрузчик, которому передается управление после включения питания и успешной отработки тестов (POST-процедур). На самом деле он, конечно, программный по сути, но находится в BIOS и поэтому всегда изначально присутствует в памяти. Вся задача аппаратного загрузчика - считать с выбранного носителя начальный загрузчик. Про организацию носителя он ничего не знает (какая там FAT и пр.), просто читает начальную область носителя (512 байт), где должен находится начальный загрузчик, в фиксированную область памяти и передает ей управление. Начальный загрузчик тоже много сделать не может, так как должен укладываться в эти фиксированные 512 байт. Его задача - "вытащить" с диска основной загрузчик и передать ему управление. Вот тот уже может быть любого размера, умеет обращаться со структурой носителя, работать с файловой системой, загружать и выполнять программы и так далее... Вот, примерно так, в первом приближении...
|
|
|
|
|
Aug 28 2009, 04:19
|
Частый гость
 
Группа: Участник
Сообщений: 132
Регистрация: 11-07-08
Пользователь №: 38 870

|
Цитата(zksystem @ Aug 27 2009, 18:14)  Это сколько памяти надо на такую кучу загрузчиков-загрузчиков, неужели нельзя раз и навсегда отладить и использовать универсальный загрузчик? Почему куча? Всего два. Просто второй загрузчик находится на карте памяти и не жрет флэш. А USB загрузчик на флэш , потому что не у всех пользователей есть карта памяти. Если же их совместить, как Вы говорите, то размер съедаемой флэш несколько возрастает за счет драйвера SPI, ФАТ и необходимости увеличенного вывода на дисплей. Причем прилично. А камень-то не резиновый -- LPC2364. Конечно, при наличии у всех пользователей карты памяти, можно было сделать и как сказал Арк. Ну, напрмер, маленький модуль в начале флэш. При старте он загружает с карты памяти загрузчик в ОЗУ, а тот уже все остальное делает. Еще вариант -- использовать датафлэш и на ней держать основной загрузчик.
|
|
|
|
|
Aug 29 2009, 08:33
|

Местный
  
Группа: Свой
Сообщений: 414
Регистрация: 8-06-06
Пользователь №: 17 897

|
Цитата(Gizma @ Aug 24 2009, 20:52)  Привет!
Значит нужно реализавать следующую штуку... Есть некий девайс в который пользователь вставляет флешку, выбирает функцию смены прошивки, девайс находит *.hex в roote и себя перешивает, причем он должен перешиваться полностью, вместе с лодером с помощью которого он перешиваеться (лодер также должен уметь сгружаться с флешки некие параметры для проги...)... это все на LPC2468... Как всегда, всё уже изобретено до нас http://www.nxp.com/acrobat_download/applic...s/AN10711_2.pdf
--------------------
Курильщик даташитов со стажем
|
|
|
|
|
Oct 18 2009, 11:40
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 27-11-08
Пользователь №: 41 999

|
Цитата(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 секунд).
Сообщение отредактировал microsin - Oct 18 2009, 11:42
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|