Новости. Сделал загрузчик. Долго с ним мучился. 2boot поддерживает только карты до 2 Гб и протокол STK500v1. Ни то, ни другое мне не подходило. Хотелось FAT32 и STK500v2, т.к. последний протокол поддерживает ATmega2560. Поэтому за основу взял пример из PetitFS и совместил его с кодом из avr/boot.h. Далее выковыривал каждый байт, чтобы уместиться в 4Кб флеш. Конечно реализация STK500v2 туда не вошла. Только минимум для чтения прошивки в виде bin файла и записи её во флеш. Что же касается второй части, то мне пришла в голову мысль: А почему бы также не прописывать в пользовательскую память любой загрузчик и передавать управление ему? Поэтому мой загрузчик может ниже себя поместить бинарик другого загрузчика и передать ему управление в зависимости от настроек в специальном конфигурационном файле на sd-карте. Таким образом я могу поддержать любой протокол загрузки, который поместится в дополнительные 4Кб (загрузчик имеет размер 4 Кб и ниже).16. Написать специальный загрузчик по типу 2boot, который имел бы несколько способов обновления прошивки.
Сейчас тестирую исходники доступных загрузчиков, поддерживающих STK500v2. Прежде всего это касается Arduino. К сожалению, удалось подружить (и то частично) второй загрузчик только с родной утилитой из AVR Studio. Считывание полной флеши соответствовало действительности. Но соединение сбрасывается часто по неизвестной пока причине.
Как результат. У меня есть свой загрузчик, который может обновлять прошивку с sd-карты с FAT32, поддерживающий дополнительную логику работы (конфигурируемый).
После того, как добью несколько вариантов вторичных загрузчиков, выложу бинарики (bin, hex) для желающих потестить. Фьюзы, настроенные для работы с моим загрузчиком, менять не надо при этом. Вторичный загрузчик работает как пользовательская программа, т.е. не из boot-секции.
Обновление с sd-карты нужно для удалённых объектов, где нет доступа к сети Интернет. Разные варианты загрузки нужны для разного использования платы, а не только как Arduino-совместимую.