Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader for ATmega16/32
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Br.Misha
Здраствуйте!
Мне надо сделать девайс, в котором обновление прошивки не составило бы труда обычному пользователю, то есть надо Bootloader.
Кто может посоветовать программу для ПК и для МК чтобы можно было загружать прошивку через СОМ порт в шифрованом виде, ну или хотя бы в обычном через AVRProg?

Заранее спасибо!
Br.Misha
сори, просто я с украины и общаюсь на укр языке. А с чего именно видно что у меня такой акцент?
VladimirYU
Цитата(Br.Misha @ Dec 21 2009, 16:36) *
сори, просто я с украины и общаюсь на укр языке. А с чего именно видно что у меня такой акцент?

Сейчас не видно biggrin.gif а апноуты все же посмотрите, там был вариант лоадера под мегу 16, если память мне не изменяет.
V_G
AvrProg'у по барабану, какой файл передавать в проц, шифрованный или нет. Так что шифруйте hex-файл на здоровье, а в бутлоадере перед записью расшифровывайте.
doomer#gp
Готовый код вряд ли кто вам выложит. Читаем документацию на МК и пишем. Вообщем загрузчик должен распологаться в верхней boot секции, иметь собственную таблицу прерываний и собственный протокол.
Делал такой (с шифованием прошивки) для ATmega 48, 88, 168. Для получения криптованной прошивки берем bin-файл и криптуем все что до boot секции. Можно обвернуть потом в свой формат.
V_G
Цитата(doomer#gp @ Dec 22 2009, 01:46) *
иметь собственную таблицу прерываний

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

recchar:
LDS r16,USARTC1_STATUS
ANDI r16,USART_RXCIF_bm
BREQ recchar
LDS r16,USARTC1_DATA
RET

Константы использованы от xmega
Polaris
Цитата(V_G @ Dec 22 2009, 02:02) *
Я лично предпочитаю в бутлоадере обходиться без прерываний. В нем не так много функций, особых требований по быстродействию нет, а прерывания в бутлоадере - дополнительный головняк.
Всего-то достаточно ожидать символа с компорта:

Присоединяюсь. С таблицей прерывания, расположенной в начале устройства, и бут-областью в конце (а из другого места писать флэш еще более для AVR затруднительно), с прерываниями лучше не связываться. Я лично их не использую (смысл?), делаю таким же циклическим опросом. Для контроллеров с таблицей прерываний в конце памяти может и есть смысл.
У Атмела есть документ по поводу такого загрузчика с исходниками всего, включая PC-часть: http://www.atmel.com/dyn/resources/prod_do...nts/doc2589.pdf. Шифрование по AES. Думаю, вполне хватит для данной задачи.
Br.Misha
Здрствуйте!
Мне нада сделать несколько девайсов и каждый с них должен иметь бутлоадер(загрузка прошивки через UART с помощью AVRProg) и ID (5-10 символов).
Когда в МК будет залит бутлоадер то будут установлены фузы для запрета чтения FLASH и EEPROM после чего прошивать МК можна будет через UART.
Вобщем ID я хочу записывать в сам бутлоадер(там 80 байт свобные), тоесть в исходном коде бутлоадера мне нада записать в определенные адреса эти 8-10 байт и потом считать их основной программой(тоесть той, которая будет залита через UART). Вопрос: как можна записать байты в определенные адреса и потом считать их оттуда и можно ли вообще считывать основной программой FLASH в которой записан бутлоалер?
Пишу на Си в WinAVR.


Thanks)))
Polaris
Br.Misha
Флэш у АВР стирается/пишется только постранично. Для Mega128 размер страницы - 256 байт, писать туда номер устройства - не самый лучший способ. Мало ли что случится, можно и бутлоадер убить. Самый оптимальный способ хранения номера устройства - EEPROM, по фиксированному адресу где-нибудь в самом конце, установив на всякий случай фуз сохранения содержимого EEPROM при полном стирании чипа.
Сергей Борщ
Цитата(Br.Misha @ Dec 29 2009, 21:10) *
Вопрос: как можна записать байты в определенные адреса и потом считать их оттуда и можно ли вообще считывать основной программой 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 по каким-то причинам не устраивает - можно написать програмку, подставляющую серийник в нужном виде прямо в файл прошивки.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.