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

 
 
> 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
 
Start new topic
Ответов
Br.Misha
сообщение Dec 29 2009, 19:10
Сообщение #2


Местный
***

Группа: 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
Сергей Борщ
сообщение Dec 29 2009, 23:11
Сообщение #3


Гуру
******

Группа: Модераторы
Сообщений: 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 Текстовая версия Сейчас: 23rd July 2025 - 21:31
Рейтинг@Mail.ru


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