Boot Loader

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Boot Loader

Сообщение zebrox »

Народ, подскажите начинающему, зачем эта фича нужна и как ею правильно пользоваться? (ATMega32)
Дата шит есть, но там столько всего......
Вобщем мне прошивку нужно в мк обновлять без программатора, я так понимаю это с помощью этой проги делается?

Убедительно прошу гнилыми помидорами не кидаться :)
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Сообщение mackerel »

Ну, без программатора-то без программатора, но как-то интерфейс с компьютером организовать всё равно нужно. По UART, например. С соответствующим аппаратным драйвером (уровни согласовать). А по сути, действительно, помещаете в загрузочный сектор код программы-загрузчика (вектора прерываний тоже туда перемещаете) - вот и всё... На пальцах, конечно... Описание всё равно прочитать придётся, увы...
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

я так понимаю, в мк будет храниться две программы? одна основная рабочая, а вторая в загрузочном секторе? а как передать управление той которая в загрузочном секторе находится?
_PM_
Нашел транзистор. Понюхал.
Сообщения: 161
Зарегистрирован: Ср апр 22, 2009 11:07:00

Сообщение _PM_ »

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

Или на жестком диске. В загрузочном секторе хранится запись МБР, которая запускается при старте. А она уже переключает в рабочую программу. Если МБР заменить бутлоадером типа grub. Аналогия будет еще полнее.
Аватара пользователя
ikarab
Опытный кот
Сообщения: 828
Зарегистрирован: Пн мар 16, 2009 21:40:57
Контактная информация:

Re: Boot Loader

Сообщение ikarab »

zebrox писал(а):Народ, подскажите начинающему, зачем эта фича нужна и как ею правильно пользоваться?


Взять конкретный бутлодер BootLoader для AVR, например в "Все о прошивании микроконтроллеров AVR" и помостреть как он работает в описании и в реале.
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Re: Boot Loader

Сообщение asteroid7 »

zebrox писал(а):...зачем эта фича нужна...

Очень полезна при удалённом обновлении прошивки и (или) при желании защититься от клонирования, используя шифрование.
zebrox писал(а):я так понимаю, в мк будет храниться две программы? одна основная рабочая, а вторая в загрузочном секторе? а как передать управление той которая в загрузочном секторе находится?
Да. Да. Установкой фузов при первой прошивке на старт программы из загрузочного сектора. Переход в основную JMP или GOTO. Таблица векторов переключается программно битом.
mackerel
Открыл глаза
Сообщения: 70
Зарегистрирован: Пт янв 30, 2009 18:02:40

Re: Boot Loader

Сообщение mackerel »

Да. Да. Установкой фузов при первой прошивке на старт программы из загрузочного сектора. Переход в основную JMP или GOTO. Таблица векторов переключается программно битом.

У меня в изделиях, например, осуществляется переход в основную программу, если в течении секунды после включения питания от компьютера не поступила первая команда программирования. (Т.е. upgrade изделия - а это некий "особый" режим - возможен только после включения питания)
Аватара пользователя
mr_smit
Вымогатель припоя
Сообщения: 651
Зарегистрирован: Пн мар 23, 2009 09:25:58
Откуда: Самара

Сообщение mr_smit »

Нельзя всё знать, достаточно понимать.
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

Народ, всем доброго времени суток!
Вот я сделал этот бутлодер, теперь у меня есть проект в кодвижн моего основного приложения для меги, и есть второй проект бутлодера для той-же меги. Теперь их нужно как-нить одновременно записать в МП. Если это делать поотдельности, то стирается та прога, которая была записана ранее.
Программатор пони прог использую.
Может нужно как-то проект "собрать" или "залинковать"?
Если кто знает, подкажите как?

Заранее спасибо!
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Сообщение smac »

zebrox писал(а):Народ, всем доброго времени суток!
Вот я сделал этот бутлодер, теперь у меня есть проект в кодвижн моего основного приложения для меги, и есть второй проект бутлодера для той-же меги. Теперь их нужно как-нить одновременно записать в МП. Если это делать поотдельности, то стирается та прога, которая была записана ранее.
Программатор пони прог использую.
Может нужно как-то проект "собрать" или "залинковать"?
Если кто знает, подкажите как?

Заранее спасибо!

Странно однако, у Вас же бутлоадер - залейте его, а второй проект уже бутлоадером заливайте.
В приниципе "собрать" и "залинковать" можно копи-пастой, т. е. берете проект основного приложения и бутлоадера и компилиурете хекс-файлы отдельно для каждого. Затем берете хекс основного приложения, открываете в блокноте, удаляете последнюю строчку (:00000001FF), сохраняете. Теперь берете хекс бутлоадера, также открываете в блокноне, копируете все строки, добавляете к первому, сохраняете - все можно прошивать. Адреса бутлоадера и основного приложения по-идее не пересекаются, так что все должно получиться.
Аватара пользователя
asteroid7
Опытный кот
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Проще, создать бутлоадер пристёгивающимся файлом.
CVAVR я не знаю, но в нём обязана быть директива (#pragma ...) размещение кода c указанного адреса, которую прописываете в файле бутлоадера. Это подобие .ORG в ASMe. Поищите её в хелпе.
Потом, просто инклюдите его к основному проекту и у вас получается единый hex файл.
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

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

вот значит мой код:

Код: Выделить всё

void write_word()
{   
    //blink_led(100);
    //pokeb(30, cell_num);
    pokeb(1, buffer[2]);//в регистр R1 заношу первый байт
    pokeb(0, buffer[3]);//в регистр R0 заношу второй байт
    SPMCR = 1; //выставляю бит SPMEN = 1
    pokeb(30, cell_num);//в регистр R30 заношу адрес первого байта слова
    //SPMCR = 1;
    #asm ("SPM")//собсно запись во временный буфер
    cell_num++;
//делаю так пока не запишу 32 байта
    if(cell_num==32)
    {
        //blink_led(500);   
        cell_num=0;//обнуляю адрес ячеки
        //pokeb(30, page_num); 
        pokeb(30, page_num);//в регистр R30 заношу адрес стираемой страницы
        SPMCR = 3; //выставляю биты для стирания 00000011
        #asm ("SPM")//вот стираю
        //pokeb(30, page_num);
        SPMCR = 5;//выставляю биты для записи 00000101
        pokeb(30, page_num); );//в регистр R30 заношу адрес записываемой страницы
        #asm ("SPM") //записываю
        page_num=page_num+64;//перехожу к следующей странице
        if(page_num>=15872) return;
    }
//здесь просто смотрю в терминале что проц сюда дошел
    putchar('\r');
    putchar('\n');                         
    putchar('N');
    putchar('\r');
    putchar('\n');
}


подозреваю, что, т.к. код в большей части написан на С, то регистры 30 и 31 раньше времени перезаписыавются и команды записи и стирания не работают из-за этого. Отсюдова вопрос. Каким еще образом можно средствами языка С записать значение переменной в регистры 0, 1, 30, 31.
или вообще а правильно ли это все?
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

однако, в прошлом посте, ерунду написал....
то-то все молчат.
кажись теперь понял в чем суть.
для того что-бы стереть/записать страницу, нужно в регистровой паре Z в разряды Z7-Z14 записать адрес этой страницы.
для того что-бы записать слово во временный буффер, необходимо в разрядах Z1-Z6 записать адрес этого слова, само слово перед этим записать в регистры R0:R1.
Надеюсь правильно прочитал даташит по 32-й меге.
Теперь только не понятно как средствами языка Си реализовать побитный доступ к регистру Z?
Или с использованием Си это не возможно и нужно делать долько на ассемблере? А в нем я не особо силен, или даже особо не силен. :(
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

неужели никто не знает? :(
Trol
Родился
Сообщения: 2
Зарегистрирован: Вс май 17, 2009 00:16:51

Сообщение Trol »

Могу предложить компактный (256 байт) загрузчик для AVR /проверял только на меге8/, с исходниками: http://trol.nm.ru/soft/tboot/
Аватара пользователя
zebrox
Встал на лапы
Сообщения: 117
Зарегистрирован: Вс апр 12, 2009 22:40:37

Сообщение zebrox »

Trol писал(а):Могу предложить компактный (256 байт) загрузчик для AVR /проверял только на меге8/, с исходниками: http://trol.nm.ru/soft/tboot/


большое спасибо! буду изучать....
но сам факт как это самому сделать мне не дает покоя...
clawham
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса
Контактная информация:

Сообщение clawham »

Ребятки, скачал я вот этот загрузчик
http://avr_1_2_3.nm.ru/bootloader.rar
теперь у меня есть мега 32 с кварцем на 16 мегагерц....мне чтоб сдедать для себя бутлодер надо инклюднуть m32def.inc , потом сделать BUILD и полученный хекс залить в мегу?
А дальше уже свою прошивку можно будет сколько угодно раз через него прошивать?
И ещё я так понимаю он запускается если ногу порта д закоротить на массу при включении самого МК ? а переделать его сложно чтоб ждал при включении там ну пол секунды ответа по ком порту?или ещё как-нить...ну чтоб удаленно можно было...может у кого есть свои наработки подобные? шифрование не важно....лишь бы не надо было в коробку лезть и перемыкать ножки для перепрошивки...
А может можно было б эту ножку например на максу завести - там де ещё 1 приёмник и один передаччик свободный....и уже по КОМ порту опускать ногу и поднимать потом.......или вообще пускай мониторит ногу входа ком порта - она у меня не занята, подать туда 0 с компа и включаем МК, а потом уже передавать начинаем
Аватара пользователя
maglev
Потрогал лапой паяльник
Сообщения: 316
Зарегистрирован: Пт апр 17, 2009 22:45:42
Откуда: Minsk
Контактная информация:

Re: Boot Loader

Сообщение maglev »

_noise писал(а):1. Данные для бутлоадера как-то шифруете, или прям в открытом виде отдаёте пользователю в руки? Если шифруете - как? Более чем один способ имеет право на?

2. Функцию "выгрузить прошивку" в изделии делаете? Если нет - как готовите данные для загрузки? Если да - чем оно может быть плохо?


1. Шифруем. DES, AES.
2. Нет, смысла не видно. Делаем получение текущей версии. Какая связь (не)возможности выгрузки с подготовкой данных?
Закрыто

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