|
Самопрограммирование AVR МК |
|
|
|
Nov 28 2009, 13:47
|

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

|
Цитата(KIG @ Nov 28 2009, 17:12)  Здравствуйте! Использую самопрограммирование МК через GSM модем. Часто обрывается канал связи и сбивается работа МК (прошивка МК портится). Подскажите, пожалуйста, как реализовать (где можно прочитать) самопрограммирование МК из внешней Flash памяти? Возможно ли хранить резервную копию прошивки МК в собственной Flash памяти МК (Как это сделать)? Заранее спасибо. А как у вас вообще организован процесс получения прошивки? Вы что в бутлоадере получаете на лету прошивку и сразу заливаете её во флеш? Организуйте для начала пакетную передачу - сервер шлёт страницу памяти, мк её прошивает шлёт подтверждение, сервер фиксирует что такая страница уже была отправлена. Ну при обрыве связи сервер пусть передаёт начиная с последней успешно переданной страницы. По поводу прошивки из внешней флеш - она отличается от прошивки по GSM только тем что данные будут браться из внешней флеш а не поступать с сервера. Вообще странный вопрос для человека написавшего фразу Цитата Использую самопрограммирование МК через GSM модем которая подразумевает что вы уже научили ваш мк самопрограммироваться. Я бы не рискнул хранить откат прошивки в самой флеш мк. Вдруг с какогото момента основная программа начнёт превышать по объёму половину от размера флеш минус секция бутлоадера.
|
|
|
|
|
Nov 28 2009, 13:49
|

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

|
Цитата(KIG @ Nov 28 2009, 16:12)  Часто обрывается канал связи и сбивается работа МК (прошивка МК портится). Подскажите, пожалуйста, как реализовать (где можно прочитать) самопрограммирование МК из внешней Flash памяти? Возможно ли хранить резервную копию прошивки МК в собственной Flash памяти МК (Как это сделать)? Надо не резервную копию хранить, а начинать перепрошивку не раньше, чем убедишься в том, что новая прошивка скачалась целиком и без ошибок. Самый простой способ - взять МК с запасом собственной Flash. С таким расчетом, чтобы после прошивки оставалось не меньше половины свободного места. Тактика такая: новую прошивку прошиваем сначала на свободное место флэша - на верхние свободные адреса памяти. Тут мы ничем не рискуем, даже если связь по дороге оборвется или новая прошивка придет с ошибками. Когда загрузка новой прошивки будет завершена, приступаем к ее проверке - тут самое простое проверить по контрольной сумме. Убедившись, что новая прошивка хороша, переписываем новую провшику из верхних адресов флэш-памяти в нижние, чем и замещаем старую прошивку на новую. Код в верхних адресах стирать нет необходимости. Этот подход удобен еще и тем, что на время копирования из верхней памяти в нижную, можно заблокировать все прерывания, чтобы обезопасить процесс замещения. В то время как запись фрагментов новой прошивки в верхнюю память осуществляется в обычном режиме, т.к. работу МК повредить не может.
|
|
|
|
|
Nov 28 2009, 16:20
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884

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

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

|
Цитата(KIG @ Nov 28 2009, 19:20)  Вариант с предварительной загрузкой программы на свободное место собственной флэш памяти (либо внешней флэш), проверкой контрольной суммы, а лишь затем заменой старой прошивки на новую мне подходит. Подскажите, пожалуйста, как переделать код моей программы-загрузчика для реализации данного алгоритма, либо где можно посмотреть похожие примеры (прочитать о самопрограммировании подробно). Переписывать вашу программу мне лениво, тем более отлаживать мне ее не на чем. Между тем причины, вызывающие у вас затруднения, мне непонятны. Ведь если вы уже умеете перезаписывать прошивку, начиная с нулевого адреса, то разве может возникнуть проблема загружать не нуля, а выше? Начинайте запись не с нулевой страницы, а с той, где у вас пустота начинается, - вот и вся разница. Пример самопрограмирования обычно приводится в даташите, в разделе про boot-загрузчик. Конкретнее ответить не могу, т.к. вы не называете ни типа вашего МК, ни компилятор, которым пользуетесь.
|
|
|
|
|
Nov 28 2009, 17:29
|
Местный
  
Группа: Свой
Сообщений: 256
Регистрация: 6-03-06
Из: Украина, г. Винница
Пользователь №: 15 017

|
Цитата Исходника серверной программы у меня нет, поэтому я не знаю как организовать поступление данных из внешней флэш "На городі бузина, а в Києві дядько". Как вообще связана серверная программа с внешней флеш? Внешняя флеш находится максимум в 10-ти сантиметрах от Вашего контроллера и непосредственно связана с ним (а не с программой на сервере). Поэтому Вы, как разработчик, должны сами обеспечить связь с этой флешью. Или может наши понятия о "внешней флэш" не совпадают? Цитата МК выходит на связь с сервером из основной программы, затем получает страницу памяти, стирает область памяти и заливает новую информацию, при этом отправляется запрос на получение следующей страницы памяти. Ну вот и "стирайте область памяти и заливайте новую информацию", только не во флешь контроллера, а во внешнюю флешь. А как получите все данные и проверите их целостность, тогда уже переписывайте из этой внешней флэши во внутреннюю флешь контроллера. Прочитать о самопрограммировании подробно и с примерами можно на сайте атмела,раздел Application notes. Искать по словам "self-programming","boot" Плюс раздел Boot Loader Support из даташита Вашего МК.
|
|
|
|
|
Dec 5 2009, 15:45
|
Частый гость
 
Группа: Участник
Сообщений: 115
Регистрация: 25-12-06
Пользователь №: 23 884

|
Цитата Не понял, а почему конечный адрес меньше начального? Информация из Datasheet. Затрудняюсь ответить.
|
|
|
|
|
Dec 6 2009, 04:10
|

Чайник, 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 в байтах...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|