Jump to content

    
Sign in to follow this  
Sergey-Ufa

Bootloader и CVAVR

Recommended Posts

Доброго всем времени суток!

Никогда раньше не пользовался bootloader'ом, а тут заинтересовался и решил попробовать. Ничего сложного вроде бы нет, но на один вопрос пока ответа не нашел. Использую CVAVR версия 1.25.8. Каким образом при создании приложения (не загрузчика!) сообщить компилятору, что будет использоваться бут и какой объем флеши планируется под него задать? В закладке Project\Configure\C_Compiler\Program_Typ задается размер области бута, но только при создании собственно самого бута. Если установить здесь тип Boot Loader и скомпилировать любую программу, то CVAVR указывает в окне Information процент заполнения кодом именно области Boot Flash. Как же при создании приложения компилятор будет знать, что в такой то области памяти размещать код нельзя, так как она будет занята бутом? Установка фьюзов BOOSZ и BOOTRST происходит в программаторе и никакого влияния на компиляцию естественно не оказывает. Получается, что CVAVR вообще нельзя использовать для написания приложений, которые предполагается использовать совместно с загрузчиком? Или я что-то не так понимаю?

Share this post


Link to post
Share on other sites

Недавно делал загрузчик для LPC1778. Основные положения из своего опыта могу написать такие:

1. Бутлоадер и пользовательская программа пишутся независимо и расположены в разных местах флеш-памяти. Начало программы бутлоадера должно располагаться по адресу 0x0000, т.к. после рестарта контроллер начинает свою работу именно с этого адреса. Пользовательская программа может находиться по любому адресу, но не должна затирать код бутлоадера. Если бутлоадер не выходит за пределы области 0x0000 - 0x1000, то пользовательская программа должна начинаться с адреса 0x1000.

2. Компилятор не может знать, что в памяти есть ещё и загрузчик, но в его силах скомпилировать HEX для записи по конкретному адресу, например 0x1000 вместо 0x0000, используемого по умолчанию. Адрес для компиляции где-то в настройках указывается.

3. После аппаратного рестарта контроллер начинает выполнять программу с адреса 0x0000, но у нас начало программы сидит в адресе 0x1000, поэтому контроллер будет в недоумении и дальнейшее его поведение будет непредсказуемым.

4. Запускать пользовательский HEX должен именно бутлоадер (в общем случае командой JMP 0x1000, в моём случае пришлось помнить про указатель на таблицу векторов и про указатель стека)

5. Один из возможных алгоритмов работы бутлоадера:

- проверка некоего условия при включении питания (уровень на одной из ног МК или условие таймаута - если в течение какого-то времени после включения данные не начали поступать, то запустить пользовательскую программу; можно предварительно проверить наличие пользовательской программы в памяти по какому-либо критерию)

- приём данных по любому доступному интерфейсу с использованием любого алгоритма

- проверка правильности принятых данных с помощью пересчёта всяких контрольных сумм

- запись полученных данных во флеш

- запуск записанной программы с адреса 0x1000.

 

Запись пользовательской программы посредством бутлоадера выполняется с помощью такой же самопальной программы, которая имеет с ним общий язык, т.е. стандартная скачанная заливалка с самопальным загрузчиком работать не будет.

Edited by ДЕЙЛ

Share this post


Link to post
Share on other sites
Вот только ничего общего между LPC1778 и AVR в плане загрузчика нет.

думаю, что принцип работы загрузчика одинаков, но а AVR его не реализовывал

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this