Перейти к содержанию
    

Bootloader for ATmega16/32

Гость Br.Misha

Здраствуйте!

Мне надо сделать девайс, в котором обновление прошивки не составило бы труда обычному пользователю, то есть надо Bootloader.

Кто может посоветовать программу для ПК и для МК чтобы можно было загружать прошивку через СОМ порт в шифрованом виде, ну или хотя бы в обычном через AVRProg?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Сейчас не видно :biggrin: а апноуты все же посмотрите, там был вариант лоадера под мегу 16, если память мне не изменяет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

AvrProg'у по барабану, какой файл передавать в проц, шифрованный или нет. Так что шифруйте hex-файл на здоровье, а в бутлоадере перед записью расшифровывайте.

Изменено пользователем V_G

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Готовый код вряд ли кто вам выложит. Читаем документацию на МК и пишем. Вообщем загрузчик должен распологаться в верхней boot секции, иметь собственную таблицу прерываний и собственный протокол.

Делал такой (с шифованием прошивки) для ATmega 48, 88, 168. Для получения криптованной прошивки берем bin-файл и криптуем все что до boot секции. Можно обвернуть потом в свой формат.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

иметь собственную таблицу прерываний

Я лично предпочитаю в бутлоадере обходиться без прерываний. В нем не так много функций, особых требований по быстродействию нет, а прерывания в бутлоадере - дополнительный головняк.

Всего-то достаточно ожидать символа с компорта:

 

recchar:

LDS r16,USARTC1_STATUS

ANDI r16,USART_RXCIF_bm

BREQ recchar

LDS r16,USARTC1_DATA

RET

 

Константы использованы от xmega

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я лично предпочитаю в бутлоадере обходиться без прерываний. В нем не так много функций, особых требований по быстродействию нет, а прерывания в бутлоадере - дополнительный головняк.

Всего-то достаточно ожидать символа с компорта:

Присоединяюсь. С таблицей прерывания, расположенной в начале устройства, и бут-областью в конце (а из другого места писать флэш еще более для AVR затруднительно), с прерываниями лучше не связываться. Я лично их не использую (смысл?), делаю таким же циклическим опросом. Для контроллеров с таблицей прерываний в конце памяти может и есть смысл.

У Атмела есть документ по поводу такого загрузчика с исходниками всего, включая PC-часть: http://www.atmel.com/dyn/resources/prod_do...nts/doc2589.pdf. Шифрование по AES. Думаю, вполне хватит для данной задачи.

Изменено пользователем rezident
Излишнее цитирование.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость Br.Misha

Здрствуйте!

Мне нада сделать несколько девайсов и каждый с них должен иметь бутлоадер(загрузка прошивки через UART с помощью AVRProg) и ID (5-10 символов).

Когда в МК будет залит бутлоадер то будут установлены фузы для запрета чтения FLASH и EEPROM после чего прошивать МК можна будет через UART.

Вобщем ID я хочу записывать в сам бутлоадер(там 80 байт свобные), тоесть в исходном коде бутлоадера мне нада записать в определенные адреса эти 8-10 байт и потом считать их основной программой(тоесть той, которая будет залита через UART). Вопрос: как можна записать байты в определенные адреса и потом считать их оттуда и можно ли вообще считывать основной программой FLASH в которой записан бутлоалер?

Пишу на Си в WinAVR.

 

 

Thanks)))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Br.Misha

Флэш у АВР стирается/пишется только постранично. Для Mega128 размер страницы - 256 байт, писать туда номер устройства - не самый лучший способ. Мало ли что случится, можно и бутлоадер убить. Самый оптимальный способ хранения номера устройства - EEPROM, по фиксированному адресу где-нибудь в самом конце, установив на всякий случай фуз сохранения содержимого EEPROM при полном стирании чипа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вопрос: как можна записать байты в определенные адреса и потом считать их оттуда и можно ли вообще считывать основной программой FLASH в которой записан бутлоалер?
Сначала ответ на последний вопрос - зависит от того, как зашиты фузы BLB. Если в 00, то чтение запрещено. Но есть довольно простой обход: в области загрузчика по фиксированному адресу (я располагаю в самых последних адресах), располагается функция, примерно такая:
uint32_t get_serial()
{
    return 0;
}

Она компилится в простой код:

  54                   .global    _Z6serialv
  56                   _Z6serialv:
  57                   .LFB32:
  58                   .LSM2:
  59                   /* prologue: frame size=0 */
  60                   /* prologue end (size=0) */
  61                   .LSM3:
  62 0000 60E0              ldi r22,lo8(0)
  63 0002 70E0              ldi r23,hi8(0)
  64 0004 80E0              ldi r24,hlo8(0)
  65 0006 90E0              ldi r25,hhi8(0)
  66                   /* epilogue: frame size=0 */
  67 0008 0895              ret

Вызвав эту функцию из области приложения, получаем серийный номер в регистрах независимо от состояния битов BLB.

Теперь первый вопрос: прописать на место этих фиктивных команд команды LDI с серийным номером (и самостоятельно увеличить его после успешной прошивки) умеет AVReal. Если AVReal по каким-то причинам не устраивает - можно написать програмку, подставляющую серийник в нужном виде прямо в файл прошивки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...