Перейти к содержанию

Удаленное Программирование Мк (по Радиоканалу)


Рекомендуемые сообщения

Приблизительно решение я вижу так. Есть "главный" МК, который надо удалённо программировать. Есть "программирующий" МК, в который зашивается (не удалённо) программирующая программа, которая при поступлении команды по радиоканалу выполняет следующие действия:

1) переводит главный МК в режим программирования

2) "захватывает" радиомодуль

3) настраивает радиомодуль (выставляет минимальную скорость)

4) принимает по радиоканалу код программы, проверяет контрольную сумму

5) прошивает главный МК

6) отправляет сообщение об успешной прошивке

7) переводит главный МК в обычный режим

Главный чип - atmega128.

Программирующий - atmega48 (?).

Но не понятно, как это реализовать. Есть где-нибудь готовый код для такого "встроенного" программатора? Чтобы один чип запрограммировал другой?

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Это реализуется в контроллерах, которые имеют режим программного доступа к самой памяти программ с возможностью ее стирания и записи.

Для этого в целевой контроллер записывают специальную программу - Загрузчик (Бутлоадер), который может быть удаленно запущен обычным методом. После передачи управления Загрузчику, он используя один из последовательных интерфейсов (УСАРТ, ЮСБ) начинает подгружать блоки прошиваемого кода в буфер и осуществлять запись в программный флеш. По завершении записи и верификации Загрузчик возвращает управление основному коду.

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

ЗЫ. Идея программировать по радиоканалу не сильно хороша, потому как срыв связи фатален для процесса. Загрузчик может быть запущен лишь из основного тела и при сбое устройство становится "мертвым кирпичиком". Перепрошить его можно будет только обычным образом.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Если хорошо всё продумать, то можно сделать надёжно.

Мой бывший сотрудник рассказывал о подобном варианте замены прошивки, только через телефонную линию. Это делалось ещё в 90-е годы 20-го века.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Да можно конечно сделать. Например так, как автор и пишет. Т.е. имея два контроллера. Один независимо осуществляет связь и является внешним программатором для другого. Собственно для этого и выдумывать ничего не нужно - берем готовый программатор и делаем ему радиоканал с управляющим контроллером. А целевой и знать не знает о том, что его программируют удаленно... Только это очень громоздкое решение... Некрасиво... Тогда уж проще взять Техасский Пикколо и грузить ему программу в ОЗУ. Это ведь не гарвардский камень - он так может...

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Только подумай еще внимательней насчет пунктов 4) и 5) как я полагаю, программировать контроллер нельзя если контрольная сумма не совпадет ... но вот незадача - ведь пока не примешь ВСЮ программу, проверить контрольную сумму нельзя ... интересно, а куда поместится до 16кб загружаемой программы в програмирующий контроллер?

Вообще-то в меге 128 должен быть бут-лоадер, который и выполняет эти функции - выполняется при сбросе контроллера и имеет доступ ко всей памяти программ в режиме записи, даже если выставлена защита кода.

И все-таки прийдется ввести поблочную контрольную сумму, чтобы проверять можно было сразу небольшие блоки по 16 байт к примеру. принял проверил, отослал сигнал "принято" в ожидании следующего блока, или "повтор" в случае искажения контрольной суммы. так же в ЕЕПРОМ сохранять одну ячейку для индикации успешного программирования - в начале процесса сбросить и выставить только когда проверена общая контрольная сумма, это позволит защитить устройство от внезапного отключения напряжения во время программирвоания - бут-блок увидит что стоит признак неоконченного процесса и не допустит выполнения недогруженной программы(это нужно будет реализовать программно!).

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

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

Ставим дополнительную память, куда сгружаем получаемую программу. Например EEPROM  с I2C интерфейсом.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

ЗЫ. Идея программировать по радиоканалу не сильно хороша, потому как срыв связи фатален для процесса. Загрузчик может быть запущен лишь из основного тела и при сбое устройство становится "мертвым кирпичиком". Перепрошить его можно будет только обычным образом.

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

Ссылка на комментарий
Поделиться на другие сайты

А есть ли смысл грузить весь код сразу? Меги шьются по-странично. Для 128-й это будет блок в 128 слов. Вот и надо подсчитывать КС блока(страницы). А для аппаратной защиты от "случайностей" использовать в качестве радиомодулей RXQ2.

Ссылка на комментарий
Поделиться на другие сайты

Ставим дополнительную память, куда сгружаем получаемую программу.

Это неоправданно удорожает готовое устройство. Память используется лишь один раз, при перепрошивке и лежит мертвым грузом все остальное время.

А для аппаратной защиты от "случайностей"

От потери питания ничего не спасет ... (ИБП не в счет, иногда их использование не оправдано да и сама надежность ИБП под вопросом, ведь и сам бесперебойник может отказать во время прошивки).

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

ЗЫ. Идея программировать по радиоканалу не сильно хороша, потому как срыв связи фатален для процесса. Загрузчик может быть запущен лишь из основного тела и при сбое устройство становится "мертвым кирпичиком". Перепрошить его можно будет только обычным образом.

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

И где бутлоадер будет держать столько кода? В каком буфере? Флеш имеет размер в 8...64 кбайта, а ОЗУ максимум 2...4

Никто так не делает. Загрузчик шьет блоками по мере заполнения буфера. Процесс в случае ошибки вернуть назад нельзя. Именно так превращают телефоны в мертвые игрушки...

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

С двумя процами всё получается нормально. При старте прошивающий контроллер сравнивает прошивку во флешке и в еепромке, если несовпадение, то перешивает. Всё.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

Ведь существуют бутлоудеры которые берут код из радио :) Я точно видел как то.. Там принцып такой: БЛ(БутЛоудер) проверяет канал и если есть условия для загрузки - загружает первый пакет, считает КС (контрольную сумму) и если не совпадает с тем что должно быть в памяти - игнорирует и проверяет целую КС. если соответствует уложеной в ЕПРОМ - стартует главную програму - иначе просто тупо ждёт на дальшие пакеты..

Ссылка на комментарий
Поделиться на другие сайты

Ребята, вы не слишком сильно усложняете этот процесс?

От сбоев питания (Alexeyslav) не спасет ни самопрограммирование, ни программирование через доп. МК. Однако, в отличие от самопрограммирования, где крах в таком случае вполне допустим,  внешнее (принудительное) программирование (доп. МК) всегда может быть выполнено повторно, до получения положительного результата. Да и автор не обмолвился об управляющей программе, инициализирующей сам процесс прграммирования. Если это стандартный прошивальщик (PonyProg, CodeVision и др.), то система с двумя камнями, мне кажется, единственно возможная для данного уровня.

Ссылка на комментарий
Поделиться на другие сайты

на той стороне радио, будет явно не стандартный программатор. так что ... зачем ставить в устройство флешку которая будет использоваться редко, а стоит так же как и сам контроллер? нерационально. В контроллере есть бутлоадер, который и будет управлять процессом прошивки - и уж в ЛЮБОМ случае, контроллер изначально надо программировать на стационарном программаторе - занести сам бутлоадер, а дальше - что хочешь делай с контроллером через бутлоадер - он уже не сотрется при любых комбинациях(основаня память и область загрузчика стираются отдельно, соответственно стереть область загрузчика можно только через стационарный программатор).

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Сильно сомневаюсь в наличие нестандартного ПО и возможности написать свой Бут под такую задачу у автора топика. В любом случае при сбое питания, процесс требует повтора. А вот грамотно написать Бут, который при перезагрузке не только сможет вспомнить что произошло и на какой стадии, а еще и поддержать диалог с обратной стороной радиоканала, запросив повтор операции, думаю будет сложнова-то. Гораздо проще использовать стандартные модули, пусть это будет дороже на 50-100руб. аппаратного обеспечения.

А вообще с автора причитается большая информация по своей задумке. Иначе наши парни, с высоты своего полета, такого ему насоветуют, что он запутается окончательно. :)

Ссылка на комментарий
Поделиться на другие сайты

По поводу экономии на микросхеме памяти. Если для оживления устройства прийдётся ехать спецу на целый день километров за 200, то сразу станет видно что выгоднее.

Пока ты жив, надежда есть.

Ссылка на комментарий
Поделиться на другие сайты

> А вообще с автора причитается большая информация по своей задумке.

Задумка следующая. Имеется ноутбук и подключенная к нему (по USB) плата с радиомодулем. Имеется группа (10 штук) одинаковых устройств (роботов). Все это располагается на открытом полигоне.

В ходе испытаний часто хочется что-то поменять в прошивке роботов. Бегать за ними и программировать обычным программатором - глупо. Поэтому логично программировать их по радиоканалу.

Алгоритм следующий: управляющая программа (на ПК) посылает роботу (с таким-то ID) команду на прошивку. МК робота пеерводит радиомодуль на режим наименьшей скорости (для уменьшения вероятности ошибки) и передаёт управление загрузчику (или внешнему МК). Загрузчик передаёт ПК сообщение о готовности к приёму кода и постранично получает код, проверяя контрольную сумму. После чего прошивает себя.

Насчёт стоимости компонентов. Внешний контроллер тут нужен не самый мощный. Atmega48 сгодится - это около 100 рублей. Внешняя флэш-память у роботов будет порядка десятка мегабайт (для сохранения телеметрии) т.е. выделить 128 кб для временного хранения полученного кода не так сложно.

Ссылка на комментарий
Поделиться на другие сайты

По поводу экономии на микросхеме памяти. Если для оживления устройства прийдётся ехать спецу на целый день километров за 200, то сразу станет видно что выгоднее.

Что верно, то верно. Только спец - он и в Африке спец, а пользователь - там же, все тот же пользователь. Сначала сделают вызов, а когда приедешь (иногда до 2000км), только еще соизволят инструкцию открыть и прочитать.

Судя по описанию, 200км автору не грозят, но и проект "не игрушечный". Тут лучше использовать bootloader (правильно парни говорили) и самопрограммирование с поблочной загрузкой. 

Ссылка на комментарий
Поделиться на другие сайты

Да, но флешка-то подключена к основному контроллеру... Поэтому НЕ ПОНИМАЮ, зачем еще один контроллер? Этой задачей может справится сам контроллер - а именно его бутлоадер. Нужно только выставить признак команды "программирвоания" и аппаратно сбросить контроллер чтобы запустился бутлоадер и стартовал программу прошивки. Радиомодули двунаправленные? тогда вообще проблем быть не должно ... даже переводить на медленный режим не нужно, просто проверять уровень сигнала - его минимальное значение и ввести простейшие коды позволяющие обнаруживать и восстанавливать ошибки. Судя по тому что сам делаешь прошивки для роботов, с этим проблем не будет.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Вот поэтому я и рекомендовал модули RXQ-2 (433, 866). Программируемый адрес устр-ва, возможность связи точка-точка, точка-все точки, КС-пакета (кажись имеется аппаратная), двусторонняя связь. Вобщем вещь довольно продвинутая (нужно внимательно даташит прочитать), правда дальность связи, заявленная производителем до 200м. Но при проверке, связь была уверенная, не был потерян ни один байт. 

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ну вот, пока готовил эскиз, на все вопросы ответили :-) Действительно, в 3D моделях DipTrace нет (или не нашёл) модели корпуса ТО220 с распайкой с нижней стороны и креплением к радиатору - по этому и получился такой 3D-портрет платы. Задуманная конструкция выглядит примерно так:  По факту, для наладки, сейчас подключаю транзисторы, закрепленные на радиаторе, проводами.
    • Чтобы потом не допиливать паровоз до истребителя. Заводские варианты схемотехники куда более предсказуемы. Из "вольностей" в первую очередь как-то решать проблему коммутации, подходящий переключатель для режимов искать история долгая и грустная. Что-то там с реле. На диапазоны 6п4н вроде же ?  пг2 хрен найдёшь, п2г тугое неудобство(  Рассыпушный ацп делать, боже упаси. Ну разве что был грешен, побаловался когда-то пнч-ацп. С 1108пп1 и 155 серией
    • Но зачем повторять 1в1? Там дана просто топология   Но не совсем же с нуля. Маловероятно, что вы найдете расширение диапазона 7135 до 200мВ по тому же методу, что это реализовано в В7-38, тем не менее, это вполне реализуемо. А вот до 20мВ я спустить диапазон не смог Что-то предусилитель интегратора отказывается вести себя хорошо   Для сравнения, та же точка (вход интегратора) при 200мв пределе, усиление х10   Ну и 2В Госпаде боже лтц2400, на этой штуке можно и 6 разрядник собрать, лютый АЦП, какие 4.5 разряда Цена на него сейчас конечно негуманная кстати.
    • Что то не нашёл примеров такой реализации замены. С нуля целесообразность подобного действа под вопросом. Тут мои полномочия всё) Как бы почему смотрю на hm8011-3, возможность реализации +/- норм настольного мультиметра без всякой там жести в виде кодинга и микро-мелких современных элементов. Для калибровки валяется где-то в1-12 и прецизионных резисторов если моих не хватит, есть где заказать.  На данный момент разве что качественного файла нет, пытался там всякими улучшайками чего сделать, увы. Пойду через впн лазить по уголочкам всяким, вдруг всплывёт чего. ------------- 8012, 80c32 + 27c512. Чертежи плат есть, осталось hex раздобыть 
    • Вот на этом фото? Я думал  тут радиатор будет под ними, и они к нему "пузом" будут прикручиваться, а дырочки - для отвёртки. У @asng60 транзисторы в наружную сторону "мордой" смотрят. "Пузом" на плату ложатся. Плата так разведена. Вот и непонятно, как их "пузом" к радиатору прикручивать.
    • Что касаемо модели Парафина, я бы порекомендовал товарищу Джексону проверить ток покоя выходного каскада, это первым делом, и вторым делом- проверить модель ОУ. Ибо в ОМ нет никаких оу а в парафине- есть. 
×
×
  • Создать...