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