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

 
 
> Не получается прошить AES бутлодером, Пример из AVR231
alux
сообщение Jul 16 2007, 10:51
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Решил сделать бутлодер для Mega32L. Сделал все, по-моему, как описано в AVR231:
1)Линкеру указал линкерный файл в рабочей директории;
2)В опциях поставил установки для M32, как указано в table 3-4 (avr231);
3)Создал Config.txt:
PAGE_SIZE = 128
MEM_SIZE = 28672
CRC_ENABLE = YES
KEY1 = 0AF5EBEB3E7A77644FDC460048CF80690CEC
KEY2 = 56CFDB56AB33230816
KEY3 = FAFDA97243B3050D21
INITIAL_VECTOR = 4D5EDB8A7B5B8DB381059CA39B3AB955
SIGNATURE = A9E4781E
4)Создал BootLdr.h, AESKeys.inc :
create -c Config.txt -h BootLdr.h -k AESKeys.inc
5)Скомпилировал проект bootldr32 с подключенными файлами BootLdr.h, AESKeys.inc
Кварц 8 МГц, UBRRL = 25; // 19200 baud @ 8MHz, error 0.2%
6)Прошил в Mega32L bootldr32.hex с запрограммированными фьюзами BOOTSZ=0, BOOTRST=0, BLB1=0, BLB0=3, -L2 (LB2:LB1 -> 0 0);
5)Закодировал программный файл (~9k):
create -c Config.txt -f pribor.hex -o Update.enc -l BLB11 BLB12
6)При нажатой кнопке PROG осуществил сброс контроллера, чтобы запустить программу загрузчика:
if (!(PINA & (1 << PROG))) // Key pressed? Yes -> run the loader routine
Загрузил полученный файл Update.enc в контроллер:
update Update.enc -COM1 -19200
7)В итоге передача успешно завершилась.
А в ответ тишина... В смысле программа не работает. Работоспособность проверяю пищалкой. В начале программы после инициализации портов вставил секундное пищание. Если загрузить напрямую (без бутлодера) , все работает. Какие будут соображения?
P.S. Вообще, мне удавалось добиться работоспособности программы (по крайней мере пищания) зашифрованной программы. Но не могу добиться устойчивой работы бутлодера. Иногда после прошивки (AES-бутлодером) и после сброса программа никак не реагирует. Иногда вдруг начинает пищать спустя некоторое время . Смущает эта неопределенность. Бывало и так, что все работало сразу после загрузки. Затем повторяю те же действия (hex->encoding->update) и опять тишина.
java script:emoticon(':07:', 'smid_5')
Может быть причина в кварце? В апноте есть замечание по этому поводу установки скорости USART. Имеет ли смысл заменить кварц на 7,3728Мгц?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Jul 16 2007, 14:28
Сообщение #2


Гуру
******

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



Цитата(alux @ Jul 16 2007, 13:51) *
Если загрузить напрямую (без бутлодера) , все работает. Какие будут соображения?
Загрузите программу напрямую. Считайте ее обратно программатором, сохраните файл. Зашейте загрузчик без установки битов защиты. (не указывайте -L2). Зашейте с его помощью рабочую программу. Считайте память процессора программатором. Сравните файлы. Если прошивка действительно записалась, загрузите последний .hex в AVRStudio, пройдите по шагам, убедитесь, что загрузчик считает контрольную сумму прошивки и передает ей управление.
Цитата(alux @ Jul 16 2007, 13:51) *
Может быть причина в кварце? В апноте есть замечание по этому поводу установки скорости USART. Имеет ли смысл заменить кварц на 7,3728Мгц?
Если бы проблема была в кварце - у вас были бы сбои в обмене и процесс заливки заканчивался бы сообщением об ошибке.
А есть ли у вас внешняя подтяжка на кнопке PROG? Возможно просто не хватает внутренней подтяжки и вместо вашего приложения вы иногда принудительно попадаете в загрузчик? Опять же Watchdog в вашей программе используется?


--------------------
На любой вопрос даю любой ответ
"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
alux
сообщение Jul 16 2007, 16:25
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(Сергей Борщ @ Jul 16 2007, 17:28) *
А есть ли у вас внешняя подтяжка на кнопке PROG? Возможно просто не хватает внутренней подтяжки и вместо вашего приложения вы иногда принудительно попадаете в загрузчик? Опять же Watchdog в вашей программе используется?

Да! Действительно нет внешней подтяжки! Забыл про это. В бутлодере на кнопке PROG нет даже внутренней подтяжки. А достаточно ли внутренней подтяжки для бутлодера? Можно ли повредить порт микроконтроллера, закорачивая его на землю без подтяжки?
По-моему, в оригинальном loader.c содержится ошибка:
#if !defined(WDTCR) && !defined(__IOM8_H)
#define WDTCR WDTCSR
#endif
#if defined(__IOM16_H) || defined(__IOM32_H)
WDTCR = (7 << WDP0) | (1 << WDE);
#else
#if defined(__IOM8_H)
>>>> WDTCR = (1 << WDTOE) | (1 << WDE);
#else
>>>> WDTCR = (1 << WDCE) | (1 << WDE);
#endif
WDTCR = (7 << WDP0) | (1 << WDE);
#endif
...У меги8 нет бита WDTOE. Т.е. отмеченные строки следовало бы поменять местами. Кстати, если попытаться откомпилировать оригинальный bootldr32 компилятор (IAR 4.12A) выдаст ошибку:
Error[Pe020]: identifier "WDTCSR" is undefined D:\...\AVR231\Source Code\IAR\loader.c 137
Поэтому, я просто закомментировал кусок
// #if !defined(WDTCR) && !defined(__IOM8_H)
// #define WDTCR WDTCSR
// #endif

В основной программе WatchDog не используется. А надо ли?

Только что обратил внимание, AES bootloader занимает:
1 902 bytes of CODE memory
2 048 bytes of DATA memory (+ 9 absolute ) <<<<
Может в этом проблема?

В бутлодере в начале main функции добавил:
PORTA = (1<<PA7); // Pull-Up on the PROG
... Безрезультатно sad.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 16 2007, 20:07
Сообщение #4


Гуру
******

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



Цитата(alux @ Jul 16 2007, 19:25) *
Да! Действительно нет внешней подтяжки! Забыл про это. В бутлодере на кнопке PROG нет даже внутренней подтяжки.
Возможно в описании сказано, что предполагается внешняя?
Цитата(alux @ Jul 16 2007, 19:25) *
А достаточно ли внутренней подтяжки для бутлодера?
Я бы на это не надеялся.
Цитата(alux @ Jul 16 2007, 19:25) *
Можно ли повредить порт микроконтроллера, закорачивая его на землю без подтяжки?
Если он настроен на вывод - можно. И подтяжка при этом совсем не при чем.
Цитата(alux @ Jul 16 2007, 19:25) *
По-моему, в оригинальном loader.c содержится ошибка:
Возможно в вашей версии заголовочного файла этот регистр и(или) бит называется иначе. Мне кажется я тоже наталкивался на эту ошибку.
Цитата(alux @ Jul 16 2007, 19:25) *
В основной программе WatchDog не используется. А надо ли?
Это уже вам решать. Но если не используете - проверьте фузы, вдруг он включен - тогда его надо сбрасывать, иначе сбросит он.
Цитата(alux @ Jul 16 2007, 19:25) *
2 048 bytes of DATA memory (+ 9 absolute ) <<<<
Может в этом проблема?
не вижу тут криминала. Сколько ОЗУ у вашей меге32? 2 К. вот они и заняты. И 9 SFR (указатель стека, SPMCR, PORTA, DDRA и т.д.)
Цитата(alux @ Jul 16 2007, 19:25) *
В бутлодере в начале main функции добавил:
PORTA = (1<<PA7); // Pull-Up on the PROG
... Безрезультатно sad.gif
Ну, телепатически лечить вашу систему вряд ли получится. Добавьте махание ногами в разные места программы - где она пошла на принудительный запуск загрузчика, где она пошла считать контрольную сумму, где сумма совпала и пошел запуск приложения, где сумма не совпала - и таким образом поймите, каким путем пошла программа. Если неожиданным - думайте почему, перемещайте контрольные точки


--------------------
На любой вопрос даю любой ответ
"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
alux
сообщение Jul 17 2007, 11:43
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 589
Регистрация: 24-04-05
Пользователь №: 4 447



Цитата(Сергей Борщ @ Jul 16 2007, 23:07) *
Но если не используете - проверьте фузы, вдруг он включен - тогда его надо сбрасывать, иначе сбросит он.

У Меги32 нет фузов, отвечающих за включение WatchDog. Нужно ли принудительно выключать WD в основной программе ?
Цитата(Сергей Борщ @ Jul 16 2007, 17:28) *
Загрузите программу напрямую. Считайте ее обратно программатором, сохраните файл. Зашейте загрузчик без установки битов защиты. (не указывайте -L2). Зашейте с его помощью рабочую программу. Считайте память процессора программатором. Сравните файлы. Если прошивка действительно записалась, загрузите последний .hex в AVRStudio, пройдите по шагам, убедитесь, что загрузчик считает контрольную сумму прошивки и передает ей управление.

Программа прошивается, считывается программатором. И что мне с ним делать? hex-файл - зашифрованный.
...Третий день топчусь на месте sad.gif IgorKossak и СергейБорщ, вы говорили, что AES-bootloader (avr231) -рабочий. У меня большие сомнения по этому поводу. Я все сделал как написано в апноте... Но безрезультатно. Не понял , как можно использовать AES-bootloader без ключей(просто как загрузчик без кодирования)? При попытке создания BootLdr.h команда:
create -c Config.txt -h BootLdr.h
выдает ощибку:
KEY parity error in 010101010101010101

java script:emoticon(':help:', 'smid_14')
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 17 2007, 12:20
Сообщение #6


Гуру
******

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



Цитата(alux @ Jul 17 2007, 14:43) *
У Меги32 нет фузов, отвечающих за включение WatchDog. Нужно ли принудительно выключать WD в основной программе ?
Действительно нет. Значит не нужно - по умолчанию он выключен.
Цитата(alux @ Jul 17 2007, 14:43) *
Программа прошивается, считывается программатором. И что мне с ним делать? hex-файл - зашифрованный.
Раз он зашифрованный - разберитесь почему. Он должен расшифроваться в процессе "заливки" и программатором вы должны считать его уже в расшифрованном виде.
Цитата(alux @ Jul 17 2007, 14:43) *
...Третий день топчусь на месте sad.gif IgorKossak и СергейБорщ, вы говорили, что AES-bootloader (avr231) -рабочий. У меня большие сомнения по этому поводу.
Сомневаться вы можете. Заходите в гости - покажу примерно 6 устройств на меге8 в которых он работает и несколько на AT91SAM7S64, LPC2214. Вы выяснили чем занимается ваш контроллер? Т.е. он передает управление вашей программе или уходит в загрузку из-за несовпавшей CRC или уходит в загрузку потому что кнопка PROG работает или обрабатывается неправильно?
Цитата(alux @ Jul 17 2007, 14:43) *
Не понял , как можно использовать AES-bootloader без ключей(просто как загрузчик без кодирования)?
Это не знаю, не было необходимости использовать его в таком режиме.


--------------------
На любой вопрос даю любой ответ
"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 Текстовая версия Сейчас: 22nd July 2025 - 11:58
Рейтинг@Mail.ru


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