Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader - с чего начать
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Aleks17
bootloader - как начать.

Есть у меня несколько устройств в CAN сети и есть желание обновлять их ПО в этой же сети. То есть нужно написать bootloader. На сейчас собираюсь взять Atmel- овские библиотеки для записи/чтения FLASH, добавить свою обертку для CAN протокола и всяких опций и сваять эту радость на IAR C/C++.

Вопросы такие: как в IAR указать другие адреса памяти для линковки? (или надо править xcl файл).

Как описать и организовать прервывания в области загрузчика? Как это прошивать ? (т.е. как я понимаю я прошиваю по JTAG-у Bootloader а уже с его помощью шью программу, или всё таки они (программа и bootloader) компонуются и шьются совместно)

Т.е. просьба поделиться опытом.
maegg
Править XCL нужно. У меня такая строчка
/* Code memory */
-Z(CODE)INTVEC=1FC00-(_..X_INTVEC_SIZE-1+1FC00)
Затем написал ассемблерную функцию по мотивам атмеловского апнота.
Затем заполняю буфер и вызываю Do_spm_all( buf )
Это мой усеченный вариант, а видел и продвинутые см. bootexa, не знаю автора.
Aleks17
Дак а где такая строчка, в XCL как я понимаю?

Или в options?
IgorKossak
Цитата(Aleks17 @ Feb 21 2006, 14:44) *
Как описать и организовать прервывания в области загрузчика? Как это прошивать ? (т.е. как я понимаю я прошиваю по JTAG-у Bootloader а уже с его помощью шью программу, или всё таки они (программа и bootloader) компонуются и шьются совместно)

Я делаю два проекта в одном workspace - бутлоадер и приложение.
Связывает их только положение границы адресного пространства между ними и необходимая общая периферия (UART например).
Зашивать бутлоадер по JTAG можно, но если потребуется зашитить программу, то это придётся делать из бутлоадера.
Я зашиваю бутлоадер и fuse-биты и lock-биты через ISP за один проход.
Aleks17
Вот родилось ещё два вопроса:

1) По поводу xcl файлов. Как подключать нестандартный я знаю (options/linker/config/ovveride default). А вот как процессор выбирает стандартные. Пристальный взгляд на каталог template и работу линковщица показал, что линковщик использует два файла (cfgcan128.xcl и cfg3s.xcl), на каком основании он их взял? И можно ли создать свою конфигурацию из набора стандартных.

2) По поводу запуска программы. Я хочу реализвать следующую схему: стартуем в бутлоадере, проверяем флаг записи - если true то переходим к режиму записи, false - в режим работы. Устанавливать флаг я хочу по сути в рабочем режиме (по получении команды на запись перехожу к bootloader-у), сбрасывать его по окончании загрузки (т.е. в варианте пропадание питания у меня недозакачанная программа запускаться не должна, только загрузчик). Собственно вопрос: где лучше разместить этот флаг с тем, чтобы можно было его читать/писать из bootloader-а.
defunct
Цитата(Aleks17 @ Feb 22 2006, 05:52) *
2) .... Собственно вопрос: где лучше разместить этот флаг с тем, чтобы можно было его читать/писать из bootloader-а.


в EEPROM, например, в последнюю ячейку..
в основной программе пишем флаг, после чего устанавливаем WDT и зацикливаемся.. После сброса попадаем в bootloader читаем флаг и ...
IgorKossak
Для проверки недозакачанности да и вообще целостности программы хорошо применять контрольные суммы.
ИАР позволяет это автоматизировать (см. опции линкера).
Aleks17
Цитата(IgorKossak @ Feb 22 2006, 14:41) *
Для проверки недозакачанности да и вообще целостности программы хорошо применять контрольные суммы.
ИАР позволяет это автоматизировать (см. опции линкера).


Ну наверное тоже вариант - при запуске бутлоадера проверять контрольную сумму FLASH. Но это довольно большая задержка при включении (порядка 0.1 - 0.5 с). И опять же надо где-то хранить справочную сумму, наверное резонно в том же FLASH.

Может стоит её считать один раз при выходе из режима загрузки?

В-общем ответ немного не по теме. Я спрашивал "где", а вы говорите "что".
IgorKossak
Ну если уж строго по вопросу, то флаг перехода на бутлоадер\программу надёжнее хранить в ЕЕПРОМ, выделив для него отдельный сегмент в обоих проектах.
В том же сегменте полезно держать также счётчик перезаписей (уж извините за отвлечение от вопроса wink.gif ).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.