Boot Loader

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

Сообщение zebrox »

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

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

Сообщение mackerel »

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

Сообщение zebrox »

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

Сообщение _PM_ »

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

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

Сообщение ikarab »

zebrox писал(а):Народ, подскажите начинающему, зачем эта фича нужна и как ею правильно пользоваться?
Взять конкретный бутлодер BootLoader для AVR, например в "Все о прошивании микроконтроллеров AVR" и помостреть как он работает в описании и в реале.
Контактная информация:
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

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

Сообщение mackerel »

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

Сообщение mr_smit »

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

Сообщение zebrox »

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

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

Сообщение smac »

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

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

Сообщение asteroid7 »

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

Сообщение zebrox »

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

Сообщение zebrox »

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

Сообщение Trol »

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

Сообщение zebrox »

Trol писал(а):Могу предложить компактный (256 байт) загрузчик для AVR /проверял только на меге8/, с исходниками: http://trol.nm.ru/soft/tboot/
большое спасибо! буду изучать....
но сам факт как это самому сделать мне не дает покоя...
Поставщик валерьянки для Кота
Сообщения: 1957
Зарегистрирован: Пт окт 31, 2008 09:38:55
Откуда: Одесса

Сообщение clawham »

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

Сообщение maglev »

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

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

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