|
bootloader для Atmega48 |
|
|
|
Jun 27 2009, 21:47
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Есть плата с Atmega48. Необходимо по приходу соответствующей команды из вне, в моем случае по SPI произвести обновление кода. В Atmega48 нет секции бутлоадера и нет фуза для перехода при сбросе в эту секцию, поэтому как я понимаю секцию в этом контроллере необходимо создавать искусственно программным путем. С этим я сталкиваюсь впервые. Я только, что перечитал апноуты, темы на нашем форуме и в голове у меня обрисовался общий алгоритм решения моей проблемы. Сейчас я озвучу его, а вы если вам не трудно укажите где я говорю не правильно, ну в целом выскажите любые замечания.
В общем "загрузчик" создаю отдельным проектом. В мейк-файле к этому проекту дописываю две строчки: BOOTLOADER_ADDRESS = 0x00С00 и LDFLAGS += -Wl,--section-start=.text=$(BOOTLOADER_ADDRESS)
Я правильно выбрал адрес? 0x00С00? Как я понял в атмеге48 4 килобайта памяти, поэтому под бутлоадер можно отнести килобайт в конце этой памяти.
Итак далее. Моя основная программа работает, и по интерфейсу SPI получает ту самую команду перепрошивки. Я в коде своей программы пишу следующее: void (*funboot)( void ) = 0x0C00; funboot();
так я попадаю в бутлоадер. В теле программы бутлоадера я принимаю данные по SPI и с помощью команд SPM перепрошиваю программу, параллельно проверяя чексум, если все хорошо, то допустим бутяю с помощью собаки или просто перехожу по нулевому адрес.
Тоесть первый раз, я проект бутлоадера прошиваю по адрессу 0xC00. Далее я прошиваю программатором первую версию моей программы по нулевому адресу, в которой заложен механизм перехода по адрессу бутлоадера. Затем новые прошивки которые будут поступать тоже будут с этим механизмом.
Вот так я вижу решение проблемы. Я правильно описал алгоритм? В чем и где именно я не прав? Какие будут замечания?
Заранее благодарен за помощь.
Сообщение отредактировал piz2383 - Jun 27 2009, 21:51
|
|
|
|
|
 |
Ответов
|
Jun 28 2009, 06:24
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 26-06-09
Пользователь №: 50 675

|
Ещё вот такой вопрос. У нас нет фуза для перехода при сбросе в секцию бутлоадера. И может возникнуть ситуация, я начал менять память, не успел поменять до конца и тут выключили свет. Прошивка основной программы не корректная. Теперь она не пройдет по пустой памяти выполняя опкод 0xFFFF. Есть хоть какие-то решения какие обезопасивают хоть минимально от этого случая?
|
|
|
|
|
Jun 28 2009, 13:29
|
Частый гость
 
Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003

|
Цитата(piz2383 @ Jun 28 2009, 10:24)  Ещё вот такой вопрос ... Есть хоть какие-то решения какие обезопасивают хоть минимально от этого случая? Наверное, лучше будет в нулевом адресе ПЗУ сразу поместить переход на бутлоадер, который по каким-либо признакам будет определять правильность прошивки, и затем либо передавать управление ей, либо сигнализировать о неправильной прошивке и ждать загрузки новой программы. Однако, размещение подобного перехода нельзя считать абсолютной панацеей, плюс нужно будет сделать так, чтобы при загрузке новой программы бутлоадер не перезаписывал вектор сброса, т. е. не заменял переход на бутлоадер.
|
|
|
|
Сообщений в этой теме
piz2383 bootloader для Atmega48 Jun 27 2009, 21:47 Сергей Борщ Да, все совершенно правильно. Первую рабочую прогр... Jun 27 2009, 23:32  head_sk Цитата(smac @ Jun 28 2009, 16:29) Наверно... Jul 6 2009, 05:43   Сергей Борщ Цитата(head_sk @ Jul 6 2009, 08:43) Мне в... Jul 6 2009, 07:19 piz2383 В общем начал реализовывать все выше сказанное... ... Jun 29 2009, 00:02 SysRq Цитата(piz2383 @ Jun 29 2009, 04:02) В по... Jun 29 2009, 08:14  piz2383 Цитата(SysRq @ Jun 29 2009, 11:14) Считай... Jun 29 2009, 09:35   dimka76 Цитата(piz2383 @ Jun 29 2009, 13:35) Код ... Jun 29 2009, 10:32   SysRq Цитата(piz2383 @ Jun 29 2009, 13:35) ...и... Jun 29 2009, 10:57 piz2383 В симуляторе все отлично. И главное если прошить д... Jun 29 2009, 10:55 dimka76 Цитата(piz2383 @ Jun 29 2009, 14:55) То в... Jun 30 2009, 04:55 head_sk А почему нельзя просто таблицу векторов прерывания... Jul 6 2009, 16:48 Сергей Борщ Цитата(head_sk @ Jul 6 2009, 19:48) А поч... Jul 6 2009, 18:25 piz2383 Спасибо всем, комментарии учтены. Буду реализовыва... Jul 6 2009, 20:18 Палыч Цитата(piz2383 @ Jul 6 2009, 23:18) А как... Jul 7 2009, 08:34  piz2383 Цитата(Палыч @ Jul 7 2009, 11:34) 1. Загр... Jul 7 2009, 09:08   Сергей Борщ Цитата(piz2383 @ Jul 7 2009, 12:08) А мне... Jul 7 2009, 09:45   Палыч BOOTLOADER_ADDRESS - это, как я понимаю, секция дл... Jul 7 2009, 09:45 XVR Подкрутить файл скрипта линкера (*.ld). Там настра... Jul 7 2009, 08:05
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|