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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Самопрограммирование AVR МК
KIG
сообщение Nov 28 2009, 13:12
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Здравствуйте!
Использую самопрограммирование МК через GSM модем. Часто обрывается канал связи и сбивается работа МК (прошивка МК портится). Подскажите, пожалуйста, как реализовать (где можно прочитать) самопрограммирование МК из внешней Flash памяти? Возможно ли хранить резервную копию прошивки МК в собственной Flash памяти МК (Как это сделать)? Заранее спасибо.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Nov 28 2009, 13:47
Сообщение #2


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

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(KIG @ Nov 28 2009, 17:12) *
Здравствуйте!
Использую самопрограммирование МК через GSM модем. Часто обрывается канал связи и сбивается работа МК (прошивка МК портится). Подскажите, пожалуйста, как реализовать (где можно прочитать) самопрограммирование МК из внешней Flash памяти? Возможно ли хранить резервную копию прошивки МК в собственной Flash памяти МК (Как это сделать)? Заранее спасибо.


А как у вас вообще организован процесс получения прошивки? Вы что в бутлоадере получаете на лету прошивку и сразу заливаете её во флеш?
Организуйте для начала пакетную передачу - сервер шлёт страницу памяти, мк её прошивает шлёт подтверждение, сервер фиксирует что такая страница уже была отправлена. Ну при обрыве связи сервер пусть передаёт начиная с последней успешно переданной страницы.

По поводу прошивки из внешней флеш - она отличается от прошивки по GSM только тем что данные будут браться из внешней флеш а не поступать с сервера. Вообще странный вопрос для человека написавшего фразу
Цитата
Использую самопрограммирование МК через GSM модем
которая подразумевает что вы уже научили ваш мк самопрограммироваться.

Я бы не рискнул хранить откат прошивки в самой флеш мк. Вдруг с какогото момента основная программа начнёт превышать по объёму половину от размера флеш минус секция бутлоадера.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 28 2009, 13:49
Сообщение #3


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(KIG @ Nov 28 2009, 16:12) *
Часто обрывается канал связи и сбивается работа МК (прошивка МК портится). Подскажите, пожалуйста, как реализовать (где можно прочитать) самопрограммирование МК из внешней Flash памяти? Возможно ли хранить резервную копию прошивки МК в собственной Flash памяти МК (Как это сделать)?

Надо не резервную копию хранить, а начинать перепрошивку не раньше, чем убедишься в том, что новая прошивка скачалась целиком и без ошибок.
Самый простой способ - взять МК с запасом собственной Flash. С таким расчетом, чтобы после прошивки оставалось не меньше половины свободного места. Тактика такая: новую прошивку прошиваем сначала на свободное место флэша - на верхние свободные адреса памяти. Тут мы ничем не рискуем, даже если связь по дороге оборвется или новая прошивка придет с ошибками. Когда загрузка новой прошивки будет завершена, приступаем к ее проверке - тут самое простое проверить по контрольной сумме. Убедившись, что новая прошивка хороша, переписываем новую провшику из верхних адресов флэш-памяти в нижние, чем и замещаем старую прошивку на новую. Код в верхних адресах стирать нет необходимости. Этот подход удобен еще и тем, что на время копирования из верхней памяти в нижную, можно заблокировать все прерывания, чтобы обезопасить процесс замещения. В то время как запись фрагментов новой прошивки в верхнюю память осуществляется в обычном режиме, т.к. работу МК повредить не может.
Go to the top of the page
 
+Quote Post
KIG
сообщение Nov 28 2009, 16:20
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Процесс замены прошивки организован с помощью программы из интернета с небольшими модификациями. МК выходит на связь с сервером из основной программы, затем получает страницу памяти, стирает область памяти и заливает новую информацию, при этом отправляется запрос на получение следующей страницы памяти. На сервере установлена программа в которой указываю путь к Hex файлу. Исходника серверной программы у меня нет, поэтому я не знаю как организовать поступление данных из внешней флэш, если подскажите буду благодарен! (Хотя бы где можно прочитать об этом).

Вариант с предварительной загрузкой программы на свободное место собственной флэш памяти (либо внешней флэш), проверкой контрольной суммы, а лишь затем заменой старой прошивки на новую мне подходит. Подскажите, пожалуйста, как переделать код моей программы-загрузчика для реализации данного алгоритма, либо где можно посмотреть похожие примеры (прочитать о самопрограммировании подробно). Спасибо.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Nov 28 2009, 17:17
Сообщение #5


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(KIG @ Nov 28 2009, 19:20) *
Вариант с предварительной загрузкой программы на свободное место собственной флэш памяти (либо внешней флэш), проверкой контрольной суммы, а лишь затем заменой старой прошивки на новую мне подходит. Подскажите, пожалуйста, как переделать код моей программы-загрузчика для реализации данного алгоритма, либо где можно посмотреть похожие примеры (прочитать о самопрограммировании подробно).


Переписывать вашу программу мне лениво, тем более отлаживать мне ее не на чем. Между тем причины, вызывающие у вас затруднения, мне непонятны. Ведь если вы уже умеете перезаписывать прошивку, начиная с нулевого адреса, то разве может возникнуть проблема загружать не нуля, а выше? Начинайте запись не с нулевой страницы, а с той, где у вас пустота начинается, - вот и вся разница.

Пример самопрограмирования обычно приводится в даташите, в разделе про boot-загрузчик. Конкретнее ответить не могу, т.к. вы не называете ни типа вашего МК, ни компилятор, которым пользуетесь.
Go to the top of the page
 
+Quote Post
Александр Куличо...
сообщение Nov 28 2009, 17:29
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017



Цитата
Исходника серверной программы у меня нет, поэтому я не знаю как организовать поступление данных из внешней флэш

"На городі бузина, а в Києві дядько".
Как вообще связана серверная программа с внешней флеш? Внешняя флеш находится максимум в 10-ти сантиметрах от Вашего контроллера и непосредственно связана с ним (а не с программой на сервере). Поэтому Вы, как разработчик, должны сами обеспечить связь с этой флешью. Или может наши понятия о "внешней флэш" не совпадают?
Цитата
МК выходит на связь с сервером из основной программы, затем получает страницу памяти, стирает область памяти и заливает новую информацию, при этом отправляется запрос на получение следующей страницы памяти.

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

Прочитать о самопрограммировании подробно и с примерами можно на сайте атмела,раздел Application notes. Искать по словам "self-programming","boot" Плюс раздел Boot Loader Support из даташита Вашего МК.
Go to the top of the page
 
+Quote Post
KIG
сообщение Dec 4 2009, 17:46
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Подскажите, пожалуйста, можно ли использовать прерывания в тексте программы бутлоадера? Мне необходимо использовать таймер и АЦП. Заранее спасибо.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Dec 4 2009, 19:35
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(KIG @ Dec 4 2009, 21:46) *
Подскажите, пожалуйста, можно ли использовать прерывания в тексте программы бутлоадера? Мне необходимо использовать таймер и АЦП. Заранее спасибо.

Естественно. Для этого требуется перенести вектора. В даташите всё детально описано.
Go to the top of the page
 
+Quote Post
KIG
сообщение Dec 5 2009, 12:32
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Компилирую программу загрузчика в ICC AVR.В настройках установил область памяти загрузчика в 1Кб по описанию меги644 это адреса flash памяти с FC00 до 7FFF. Однако после компиляции создается hex-файл в котором программа располагается в области с F800 до 7FFF. Такое впечатление, что компилятор неправильно воспринимает настройки. Подскажите, пожалуйста, что не так?
Go to the top of the page
 
+Quote Post
V_G
сообщение Dec 5 2009, 14:09
Сообщение #10


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

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



Цитата(KIG @ Dec 5 2009, 22:32) *
Компилирую программу загрузчика в ICC AVR.В настройках установил область памяти загрузчика в 1Кб по описанию меги644 это адреса flash памяти с FC00 до 7FFF.

Не понял, а почему конечный адрес меньше начального?
Go to the top of the page
 
+Quote Post
KIG
сообщение Dec 5 2009, 15:45
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Цитата
Не понял, а почему конечный адрес меньше начального?


Информация из Datasheet. Затрудняюсь ответить.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Dec 6 2009, 04:10
Сообщение #12


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(KIG @ Dec 5 2009, 15:32) *
В настройках установил область памяти загрузчика в 1Кб по описанию меги644 это адреса flash памяти с FC00 до 7FFF.
Если первое значение в байтах, а второе в словах, то тогда всё правильно.
Читайте еще раз внимательно раздел "ATmega644 Boot Loader Parameters" в datasheet'е.
А вот в ICC AVR выбираете в размере загрузчика, видимо, пункт с цифрой "1024" - только опять же слов, а не байт. Тогда это 2кБ, и начало кода как раз по адресу 0xF800 в байтах...
Go to the top of the page
 
+Quote Post
KIG
сообщение Dec 11 2009, 17:58
Сообщение #13


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



Опять к вопросу о прерываниях в режиме бутлоадера. Для проверки работы прерываний включил прерывание по приему символа, установил бит IVSEL (перенес таблицу векторов). Посылаю символ в МК и должен получить ответ (режим эхо), однако контроллер перезагружается. Подскажите, пожалуйста, что не так?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Dec 11 2009, 18:46
Сообщение #14


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(KIG @ Dec 11 2009, 20:58) *
...что не так?
Пошагайте в AvrStudio - многое поймёте.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
KIG
сообщение Dec 11 2009, 18:58
Сообщение #15


Частый гость
**

Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884



В AVRStudio прерывание от UARTa срабатывает, все нормально. А в МК нет.
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 - 16:50
Рейтинг@Mail.ru


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