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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> cамопрограммирование, AVR Mega32 cамопрограммирование, кто плавал подскажите...
QuickWitted
сообщение Mar 31 2008, 04:29
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596



Решил прикрутить к своему девайсу самопрограммирование через RS232...
(RS232 уже реализован rx, tx, dsr)

Кто плавал подскажите как со стороны МК это более грамотно реализовать...
(Доки Атмела читал, но по данному вопросу другой информации не нашёл)

Какие грабли ждать?

Какой протокол (если есть готовый) использовать?
(или самому насочинять...)

Куда сместиться таблица прерываний?
(понимаю, что в зависимости от настройки фусов,
но када, сразу после бут области?)

По мимо всего прочего интересует вопрос сброса... ну предположим
по определённой команде программа перейдёт в бут область...
Как вариант - прерывания у меня отключены на время прогрева,
настройки бортовой (на МК) периферии и тестирования ОЗУ...
После этого проверить пришел какой либо заданный символ за это
время по рс 232? Если да - самопрограммирование... но вопрос
как реализовать после всего этого Софтовый резет?

Немного истории:

Когда я разрабатывал Book reader на AVR ATMega16
http://www.swordgreenline.narod.ru/BookReader.html
столкнулся с проблемой занятости SPI порта программатором.

Залил прошивку, вытащил программатор, воткнул в этот разъём ММС флэш,
перезапустил устройство, подтвердил вход (иначе был риск управлять
вместо флэши программатором), проверил нашёл ошибки (скорректировал
исходник), выключил устройство, вынул флэшку, воткнул программатор
и т.д. муторно и долго...

Теперь хочу сделать девайс на Mega32 с периферией:
SPI MMC флэш
RS232
LPT(мастер) на основной плате для подключения "стандартной" комповой периферии.
и 4х битная шина дисплея с МК опроса АТ клавиатуры на
вспомогательной...

и что бы
1) ускорить прошивку девайса (через LPT очень медленно)
2) не заниматься передёргиванием то флэши, то программатора в один SPI
хотелось бы прикрутить самопрограммирование...


--------------------
Сайт с разработками http://www.mindrunway.ru/
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 31 2008, 05:03
Сообщение #2


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Делаю так.
После сброса попадаем в область загрузчика (для чего программирую соответствующий FUSE).
Затем перемещаю таблицу векторов в область загрузчика.
Затем делаю тест целостности программы.
Если она повреждена записываю это в последнюю страницу FLASH и жду загрузочных пакетов. При этом отвечая на "вопросы" внешних устройств о моём состоянии "Мой софт разрушен. Жду загрузки софта. Софт загружен до ... -ого блока".
Внешнее устройство, которое будет передавать мне прошивку получив мой пакет начинает передавать мне прошивку блоками начиная с того пакета, который я указал.
В самом первом блоке FLASH храню номер версии прошивки.
А при передаче пакетов с программой я всегда указываю в пакете к какой версии софта относиться данная прошивка (поскольку в сети одновременно могут обновляться прошивки нескольких разных устройств)

Уф.. Пока хватит.. Хотя я не перечислил и 10-й части всех нюансов и тонкостей организации работы загрузчика...Итак много букв написал.. Если есть неясные моменты и более конкретные вопросы - задавайте

Сообщение отредактировал Дон Амброзио - Mar 31 2008, 05:09


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
QuickWitted
сообщение Mar 31 2008, 05:21
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596



Цитата(Дон Амброзио @ Mar 31 2008, 10:03) *
После сброса попадаем в область загрузчика (для чего программирую соответствующий FUSE).
Затем перемещаю таблицу векторов в область загрузчика.


если можно немного подробнее с этого места....
я ещё не совсем понял как разрулить прерывания...
ну предположим (хотя не обязательно) загрузчик будет пользоваться прерыванием рс232
но относительные адреса прерываний от версии прошивки к версии будут плавать?
(т.к. указывают на изменяемые во время перепрошивки блоки)

как реализовать выход из прошивки (без внешнего сброса)
если использовать внешний вход в эту область - это может быть не надёжным,
т.е. надо как то определиться при старте с перепрошивкой...

изобретать систему команд званого, или есть готовые или хотябы описание их набора?
(я про CRC16 и проверки)
Планирую использовать алгоритм CRC16 от флэшки MMC раз он у меня уже написан...

Сообщение отредактировал QuickWitted - Mar 31 2008, 05:23


--------------------
Сайт с разработками http://www.mindrunway.ru/
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 31 2008, 05:35
Сообщение #4


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(QuickWitted @ Mar 31 2008, 08:21) *
я ещё не совсем понял как разрулить прерывания...
ну предположим (хотя не обязательно) загрузчик будет пользоваться прерыванием рс232
но относительные адреса прерываний от версии прошивки к версии будут плавать?

Вектора прерываний в загрузчике должны указывать на обработчики, находящиеся в загрузчике. А под загрузчик я всегда использую всю секцию NRWW флэши.

А эти обработчики могут либо всегда сами обрабатывать прерывания(т.е. они не будут меняться от прошивки к прошивке). Либо можно грузить адрес перехода из ОЗУ. Либо в загружаемой программе можно сделать свою таблицу векторов которая будет использована после окончания загрузки и переключения на таблицу, расположенную в RWW.

Цитата(QuickWitted @ Mar 31 2008, 08:21) *
т.е. надо как то определиться при старте с перепрошивкой...

Я сначала проверяю целостность прошивки. Затем смотрю содержимое служебной области FLASH или EEPROM(не поступали ли команды извне на перезаливку софта). И по результатам перехожу либо на сброс в RWW(т.е. передаю управление приложению) либо перехожу в режим загрузчика.

Сообщение отредактировал Дон Амброзио - Mar 31 2008, 05:38


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
QuickWitted
сообщение Mar 31 2008, 05:59
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596



Цитата(Дон Амброзио @ Mar 31 2008, 10:35) *
И по результатам перехожу либо на сброс в RWW(т.е. передаю управление приложению) либо перехожу в режим загрузчика.


Перезагружаться из программы то как?
Прыгнуть на начало? Заново залить указатель стека и забыть о том что
находишься в какой то вложенности? или как?

Ps to All
вопросы по программированию протокола не снимаются
изобретать всё заново и вслепую искать грабли (наступая на них)
или кто уже делал?


--------------------
Сайт с разработками http://www.mindrunway.ru/
Go to the top of the page
 
+Quote Post
_Sam_
сообщение Mar 31 2008, 06:41
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 278
Регистрация: 18-01-05
Из: Санкт-Петербург
Пользователь №: 2 031



Цитата
если можно немного подробнее с этого места....
я ещё не совсем понял как разрулить прерывания...

В мегах давно уже есть бит IVSEL который позволяет перемещать вектора прерываний в начало Boot области.

Цитата
Перезагружаться из программы то как?
Прыгнуть на начало? Заново залить указатель стека и забыть о том что
находишься в какой то вложенности? или как?


((void (*)())0x0000)();
только если пользовались IVSEL не забываем его перенастроить на App область
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 31 2008, 07:09
Сообщение #7


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Для начала посмотрите AVR-109.pdf и AVR-109.zip, все довольно просто и работает со стандартным АВРПрогом.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
QuickWitted
сообщение Mar 31 2008, 07:56
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 322
Регистрация: 21-06-07
Из: СНГ
Пользователь №: 28 596



Цитата(GDI @ Mar 31 2008, 12:09) *
Для начала посмотрите AVR109, все довольно просто и работает со стандартным АВРПрогом.


Спасибо конечно, но:
1) Я это уже читал.
2) Работаю я на асме
3) Хотелось бы без переделки аппаратной части... (нет свободных пинов)
4) причём пунк 3 не основной, в идеале хочу получить нажал мышкой - прошивка залилась...
(а тут надо думать о резете и замыкать пин...) на рс232 это не вешать библиотека на хардовый
режим настроена



Цитата(_Sam_ @ Mar 31 2008, 11:41) *
В мегах давно уже есть бит IVSEL который позволяет перемещать вектора прерываний в начало Boot области.


Я к сожалению не знаю всех тонкостей работы с фусами...
На данный момент запускаю фусы так
http://palmavr.sourceforge.net/cgi-bin/fc....amp;B_BOOTSZ0=P

проще спрошу что надо выставить и куда при этом уйдут вектора прерываний...
(на данный момент мне было бы удобнее что бы вектора прерываний шли сразу после бут области
и переписывались каждый раз...)

И смежный с этим вопрос как пояснить студии что в коде появилась бут область
(я пишу в блокноте, компилирую батником и иногда отлаживаю на студии)


--------------------
Сайт с разработками http://www.mindrunway.ru/
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 31 2008, 08:52
Сообщение #9


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(QuickWitted @ Mar 31 2008, 08:59) *
Перезагружаться из программы то как?

Я делал по Watchdog-таймеру... Правда не в AVR32, а в ATmega-х. Также перезагрузку каждую минуту делал если девайс находился в режиме загрузчика, а пакеты загрузки не приходили


Цитата(QuickWitted @ Mar 31 2008, 08:59) *
вопросы по программированию протокола не снимаются изобретать всё заново и вслепую искать грабли (наступая на них)
или кто уже делал?

Ну это уже другая тема к загрузчику НИКАК не относящаяся, поскольку протокол приёма/передачи пакетов не зависит загрузчик у Вас или не загрузчик - что в пакет положите, то и передадите. Создайте отдельную тему "Реализация стека протоколов"

Цитата(QuickWitted @ Mar 31 2008, 10:56) *
проще спрошу что надо выставить и куда при этом уйдут вектора прерываний...

Положение таблицы векторов задаётся не ФУСАМИ, а программированием соответствующего регистра статуса и управления.. Курите даташифт


Цитата(QuickWitted @ Mar 31 2008, 10:56) *
И смежный с этим вопрос как пояснить студии что в коде появилась бут область
(я пишу в блокноте, компилирую батником и иногда отлаживаю на студии)

Надо просто задать с помощью директивы .ORG положение кода загрузчика.

А при прогоне проги в симуляторе, чтобы у Вас прога стартовала в NRWW надо поставить галку Debug/Simulator Option/Enable Boot Reset


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 31 2008, 09:20
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(QuickWitted @ Mar 31 2008, 08:59) *
Ps to All
вопросы по программированию протокола не снимаются
изобретать всё заново и вслепую искать грабли (наступая на них)
или кто уже делал?


Передавайте в пакете строку Hex-файла, ну а для ответа достаточно одного байта -
продолжить / повторить / продолжить с задержкой (жгу страницу) / закончил


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 31 2008, 09:36
Сообщение #11


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Dog Pawlowa @ Mar 31 2008, 12:20) *
Передавайте в пакете строку Hex-файла

Слишком большая избыточность кодирования. Коэффициент аж 2. Скорость заливки будет низкая. Лучше в бинарном формате передавать, а не в ASCII


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 31 2008, 09:46
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Дон Амброзио @ Mar 31 2008, 12:36) *
Слишком большая избыточность кодирования. Коэффициент аж 2. Скорость заливки будет низкая. Лучше в бинарном формате передавать, а не в ASCII

Доктор, Вы как крупный специалист в области протоколов, какой протокол посоветуете?


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 31 2008, 09:56
Сообщение #13


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Dog Pawlowa @ Mar 31 2008, 12:46) *
Доктор, Вы как крупный специалист в области протоколов, какой протокол посоветуете?

А Вы не согласны, что передавать в ASCII слишком накладно, т.к. скорость заливки упадёт в 2 раза..А?


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Mar 31 2008, 10:04
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Дон Амброзио @ Mar 31 2008, 12:56) *
А Вы не согласны, что передавать в ASCII слишком накладно, т.к. скорость заливки упадёт в 2 раза..А?

Вы можете посоветовать протокол или не можете? Не можете - так и скажите.
А на попытку начать флуд я не ведусь.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Дон Амброзио
сообщение Mar 31 2008, 10:28
Сообщение #15


Местный
***

Группа: Участник*
Сообщений: 323
Регистрация: 11-02-08
Пользователь №: 34 947



Цитата(Dog Pawlowa @ Mar 31 2008, 13:04) *
А на попытку начать флуд я не ведусь.

Аналогично. Тоже не ведусь на Ваши попытки. Засим дискуссию с Вами я прекращаю.


--------------------
После устранения бага в программе она стала работать....хуже
Go to the top of the page
 
+Quote Post

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

 


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


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