Работа с бутлоадером. Вопрос.

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
char
Родился
Сообщения: 5
Зарегистрирован: Пт сен 23, 2011 11:00:09

Работа с бутлоадером. Вопрос.

Сообщение char »

Ковыряю тему бутлоадера, решил использовать программную реализацию BootloadHID (http://www.obdev.at/products/vusb/prjdetail.php?pid=32).

В книге Евстифеева есть такой текст :
Сразу отмечу, что загрузчик может изменять содержимое обеих
секций. Это позволяет ему модифицировать собственный код и даже
удалять себя из памяти, если надобность в нем отпадет.
Не понятен механизм работы бутлоадера.. Каким образом он может себя затереть? Ведь в данный момент выполняется именно код из области NRWW, в которой он и расположен.. Объясните пжлста :) Если с примером - будет вообще замечательно :)

Заранее спасибо.
Реклама
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Работа с бутлоадером. Вопрос.

Сообщение md5sum »

При стирании/записи в NRWW CPU останавливается, до окончания операции.

То есть, к примеру pagesize 32 слова (64 байт), то можно, находясь в пределах страницы, затереть всю остальную область NRWW и последней командой затереть "свою" область.
После чего CPU вернется из останова в чистую флешь и сбросится на начало памяти

Только непонятно зачем это надо? Фьюзы ведь из бутлоадера не поменяешь и МК при каждом последующем запуске будет пытаться запуститься из секции bootloader.

А вот, если секция бутлоадера не залочена, то можно в основную память залить временный "прошивальщик" и затем с его помощью заменить основной bootloader. Один раз пришлось так изголяться - ISP выводы были физически не доступны, а в старом butloader-е была критическая ошибка...
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
char
Родился
Сообщения: 5
Зарегистрирован: Пт сен 23, 2011 11:00:09

Re: Работа с бутлоадером. Вопрос.

Сообщение char »

md5sum писал(а):При стирании/записи в NRWW CPU останавливается, до окончания операции.

То есть, к примеру pagesize 32 слова (64 байт), то можно, находясь в пределах страницы, затереть всю остальную область NRWW и последней командой затереть "свою" область.
После чего CPU вернется из останова в чистую флешь и сбросится на начало памяти
Т.е., правильно понимаю, что функция, которая будет затирать область NRWW, должна физически находиться в пределах одной страницы, т.е. в пределах 64 байт (для Атмеги8, в данном случае)?
md5sum писал(а): Только непонятно зачем это надо? Фьюзы ведь из бутлоадера не поменяешь и МК при каждом последующем запуске будет пытаться запуститься из секции bootloader.
В область бутлоадера можно попасть не только при запуске МК (и выставленном фьюзе BOOTRST), но и из кода прикладной программы, собственно, я так и собираюсь сделать. Переключение между прикладной программой и бутлоадером у меня получилось и стабильно работает. Обновление прикладной программы тоже получается, но есть еще мысль реализовать изменение области NRWW - в том числе и полностью эту область очистить. Пока получается стереть (и обновить) только одну страницу в области NRWW, и больше ничего - затереть вторую страницу не получается, ничего не происходит.

md5sum писал(а): А вот, если секция бутлоадера не залочена, то можно в основную память залить временный "прошивальщик" и затем с его помощью заменить основной bootloader. Один раз пришлось так изголяться - ISP выводы были физически не доступны, а в старом butloader-е была критическая ошибка...
А как такое возможно? Ведь функция, которая меняет данные в памяти программ (в обеих областях - RWW и NRWW), должна быть расположена в области NRWW?
Аватара пользователя
md5sum
Вымогатель припоя
Сообщения: 672
Зарегистрирован: Вт окт 27, 2009 22:39:19
Откуда: Москва

Re: Работа с бутлоадером. Вопрос.

Сообщение md5sum »

char писал(а):Т.е., правильно понимаю, что функция, которая будет затирать область NRWW, должна физически находиться в пределах одной страницы, т.е. в пределах 64 байт (для Атмеги8, в данном случае)?
Да, в пределах 64 и выравненная на 64 (влезать целиком в облать кратную 64). Только для того, чтоб саму себя не затереть до окончания работы.
char писал(а):А как такое возможно? Ведь функция, которая меняет данные в памяти программ (в обеих областях - RWW и NRWW), должна быть расположена в области NRWW?
Да, точно... вспомнил тот изврат:
мега32, бутлоадер ~2Кбайт, но расположен по 0x3800. После обнаружения бага пишется маленький (сильно урезанный) бутлоадер, который прошивается с помошью основного в облать 0x3E00. После чего в качестве основной программы зашивается что-то типа jmp 0x3e00. И уже с помощью нового - обновляется основной. :) Вот так, через ж... можно обновить бутлоадер. В том случае спасло то, что в NRWW влезло два бутлоадера, а то пришлось-бы вскрывать... Теперь они там оба сидят... :)))
— Не говорите мне что делать и я не скажу куда Вам идти...
Реклама
Эиком - электронные компоненты и радиодетали
char
Родился
Сообщения: 5
Зарегистрирован: Пт сен 23, 2011 11:00:09

Re: Работа с бутлоадером. Вопрос.

Сообщение char »

Спасибо, камрад, за разъяснения, буду ковырять дальше :)
Реклама
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»