реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Bootloader for ATmega16/32
Br.Misha
сообщение Dec 21 2009, 13:02
Сообщение #1


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



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

Заранее спасибо!
Причина редактирования: Исправление ошибок
Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Dec 21 2009, 13:36
Сообщение #2


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



сори, просто я с украины и общаюсь на укр языке. А с чего именно видно что у меня такой акцент?
Go to the top of the page
 
+Quote Post
VladimirYU
сообщение Dec 21 2009, 13:47
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782



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

Сейчас не видно biggrin.gif а апноуты все же посмотрите, там был вариант лоадера под мегу 16, если память мне не изменяет.
Go to the top of the page
 
+Quote Post
V_G
сообщение Dec 21 2009, 14:05
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



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

Сообщение отредактировал V_G - Dec 21 2009, 14:06
Go to the top of the page
 
+Quote Post
doomer#gp
сообщение Dec 21 2009, 15:46
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 382
Регистрация: 10-03-05
Из: USA
Пользователь №: 3 234



Готовый код вряд ли кто вам выложит. Читаем документацию на МК и пишем. Вообщем загрузчик должен распологаться в верхней boot секции, иметь собственную таблицу прерываний и собственный протокол.
Делал такой (с шифованием прошивки) для ATmega 48, 88, 168. Для получения криптованной прошивки берем bin-файл и криптуем все что до boot секции. Можно обвернуть потом в свой формат.
Go to the top of the page
 
+Quote Post
V_G
сообщение Dec 22 2009, 00:02
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955



Цитата(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
Go to the top of the page
 
+Quote Post
Polaris
сообщение Dec 25 2009, 21:00
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



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

Присоединяюсь. С таблицей прерывания, расположенной в начале устройства, и бут-областью в конце (а из другого места писать флэш еще более для AVR затруднительно), с прерываниями лучше не связываться. Я лично их не использую (смысл?), делаю таким же циклическим опросом. Для контроллеров с таблицей прерываний в конце памяти может и есть смысл.
У Атмела есть документ по поводу такого загрузчика с исходниками всего, включая PC-часть: http://www.atmel.com/dyn/resources/prod_do...nts/doc2589.pdf. Шифрование по AES. Думаю, вполне хватит для данной задачи.

Сообщение отредактировал rezident - Dec 25 2009, 21:50
Причина редактирования: Излишнее цитирование.
Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Dec 29 2009, 19:10
Сообщение #8


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



Здрствуйте!
Мне нада сделать несколько девайсов и каждый с них должен иметь бутлоадер(загрузка прошивки через UART с помощью AVRProg) и ID (5-10 символов).
Когда в МК будет залит бутлоадер то будут установлены фузы для запрета чтения FLASH и EEPROM после чего прошивать МК можна будет через UART.
Вобщем ID я хочу записывать в сам бутлоадер(там 80 байт свобные), тоесть в исходном коде бутлоадера мне нада записать в определенные адреса эти 8-10 байт и потом считать их основной программой(тоесть той, которая будет залита через UART). Вопрос: как можна записать байты в определенные адреса и потом считать их оттуда и можно ли вообще считывать основной программой FLASH в которой записан бутлоалер?
Пишу на Си в WinAVR.


Thanks)))
Go to the top of the page
 
+Quote Post
Polaris
сообщение Dec 29 2009, 19:52
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Br.Misha
Флэш у АВР стирается/пишется только постранично. Для Mega128 размер страницы - 256 байт, писать туда номер устройства - не самый лучший способ. Мало ли что случится, можно и бутлоадер убить. Самый оптимальный способ хранения номера устройства - EEPROM, по фиксированному адресу где-нибудь в самом конце, установив на всякий случай фуз сохранения содержимого EEPROM при полном стирании чипа.
Причина редактирования: Избыточное цитирование
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 29 2009, 23:11
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(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 по каким-то причинам не устраивает - можно написать програмку, подставляющую серийник в нужном виде прямо в файл прошивки.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 17th July 2025 - 22:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01432 секунд с 7
ELECTRONIX ©2004-2016