Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Bootloader и радиоканал ->
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Буратино
Есть вот такая конфигурация: ПК, который по УСБ подключен к микросхеме моста USB-UART, далее процессор AVR (назовем его "X1"), к которому по шине SPI подключен трансивер CC1101 ("Х2"). На расстоянии 100 метров есть другой процессор AVR ("Y1") к которому подключен по SPI трансивер ("Y2").
Как с компьютера обновить прошивку на процессоре "Y1"?


PC -> USB-UART -> X1 ->X2 ............................................... Y2 -> Y1

Трансиверы работают в пакетном режиме, время от времени выпадают (принимаются с ошибкой) пакеты. приходится на уровне протокола "просить" их передать повторно. То есть канал "рваный"..
Спасибо!
V_G
Заливать прошивку в буферную память (ОЗУ), подключенную к Y1. Когда всю залили, проверить целостность данных и инициировать перенос из ОЗУ в память программ проца.
Придется потратиться на внешнее ОЗУ. Можно, конечно, заливать в свободную память программ Y1, но мне такой способ не нравится. Если нет ОЗУ с SPI, можно заливать во флэш с SPI
Буратино
Цитата(V_G @ Jun 4 2011, 16:21) *
Заливать прошивку в буферную память (ОЗУ), подключенную к Y1. Когда всю залили, проверить целостность данных и инициировать перенос из ОЗУ в память программ проца.
Придется потратиться на внешнее ОЗУ. Можно, конечно, заливать в свободную память программ Y1, но мне такой способ не нравится. Если нет ОЗУ с SPI, можно заливать во флэш с SPI


Такой процесс должен будет апдейтить прошивку в двух группах устройств: одна группа состоит из сотен однотипных устройств, где важна стоимость каждой детали, а другая это группа где можно хоть и два процессора поставить это не поменяет картину, так как это прибор в комплекте один. Другими словами желательно конечно с минимальными мат. затратами все это реализовать.
V_G
За сервис надо платить. Либо вы берете процессор с бОльшим объемом памяти, чтобы в нем накапливать принятые программные блоки, либо организуете эту память снаружи.

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

Если же вы начали накопление новой прошивки не в основной программной памяти (по первым двум вариантам), и произошел крах системы связи, вы вполне можете (по таймауту) вернуться к выполнению всех функций на старой прошивке. Или вообще продолжать выполнение основных функций во время накопления новой прошивки. Т.е. в этом (более дорогом) варианте имеете более надежно функционирующую систему. Выбирайте.
skripach
Цитата
Заливать прошивку в буферную память (ОЗУ)

Тогда уж в ПЗУ, но лучше чтобы у Y загрузчик поддерживал радио интерфейс.
Sergey_Aleksandrovi4
У AVR объём ПЗУ и ОЗУ очень сильно отличается, поэтому в оличие от каких-нибудь ARM невозможно положить принятую прошивку в буфер внутренней SRAM целиком, проверить её целостность и потом зашить во Flash. Тут либо как сказали выше ставить внешнюю память, либо пойти по другому пути. Например как я делал с обновлением прошивки через Wiznet W5100 (который по SPI к контроллеру прицеплен). Принимаемые данные пишутся напрямую во флэш (я их бил на пакеты равные объёму страницы памяти). Проверку целостности пакетов и потери пакетов при этом не проводил. На управляющей стороне по завершению прошивки ПО генерировала пакет "активация прошивки", сопровождаемый CRC всей области памяти приложений. Контроллер этот пакет принимал, считал CRC памяти, сверял с полученной и в случае удачи отсылал ответ "Всё ОК, перепрошивка удалась". Если CRC не совпадали, отсылал ответ "Прошивка повреждена, требуется повторная перепрошивка".
Плюсы: не надо дополнительных корпусов под буфера; можно шить сразу несколько устройств разом.
Минус: Область бутлодера крайне мала, а в неё надо втиснуть загрузчик, софт обслуживания канала данных, калькулятор CRC. Я свой Wiznet в Mega328 только на максимальном уровне оптимизации по объёму смог впихнуть.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.