реклама на сайте
подробности

 
 
> bootloader для Atmega48
piz2383
сообщение Jun 27 2009, 21:47
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
piz2383
сообщение Jun 28 2009, 06:24
Сообщение #2


Участник
*

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



Ещё вот такой вопрос. У нас нет фуза для перехода при сбросе в секцию бутлоадера. И может возникнуть ситуация, я начал менять память, не успел поменять до конца и тут выключили свет. Прошивка основной программы не корректная. Теперь она не пройдет по пустой памяти выполняя опкод 0xFFFF. Есть хоть какие-то решения какие обезопасивают хоть минимально от этого случая?
Go to the top of the page
 
+Quote Post
smac
сообщение Jun 28 2009, 13:29
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(piz2383 @ Jun 28 2009, 10:24) *
Ещё вот такой вопрос ... Есть хоть какие-то решения какие обезопасивают хоть минимально от этого случая?

Наверное, лучше будет в нулевом адресе ПЗУ сразу поместить переход на бутлоадер, который по каким-либо признакам будет определять правильность прошивки, и затем либо передавать управление ей, либо сигнализировать о неправильной прошивке и ждать загрузки новой программы. Однако, размещение подобного перехода нельзя считать абсолютной панацеей, плюс нужно будет сделать так, чтобы при загрузке новой программы бутлоадер не перезаписывал вектор сброса, т. е. не заменял переход на бутлоадер.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 00:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01291 секунд с 7
ELECTRONIX ©2004-2016