Написал в последней версии Atmel Studio 4-килобайтную программу на С++, которая умеет через USART вытягивать шифрованные 120 килобайт данных, CRC сходятся, на экранчике проценты прошивки выводятся, переключение между бутлоадером и программой через джампер придумано и т.д. Фьюзы BOOTSZ 4096 words, BOOTRST вкл.
Но возникли проблемы:
1. Как записать программу в последние 4 килобайта прошивки? "-Wl,--section-start=.boot=0xF000" не компилируется.
2. Как записать во флеш 256 байт (размер страницы памяти)?
В #include <avr/boot.h> есть пример функции boot_program_page (uint32_t page, uint8_t *buf)
Я в него запихиваю любой адрес, массив, функция исполняется, но данные никуда не записывает.
Аналоги из чужих исходников типа static inline uint16_t writeFlashPage(uint16_t waddr, pagebuf_t size)
тоже не работают. Может дело в том, что программа расположена в секции программы, а не бутлоадера?
3. Что ещё надо сделать, чтобы получился полноценный бутлоадер. Как фьюзами закрыться и т.д.
В инете вообще исходники бутлоадера в Atmel Studio не находятся. На форуме тоже ничего не нашёл.
Кратко говоря, надо исходник на C++ для Atmega128 в Atmel Studio 7, который прошьёт себя в секцию бутлоадера и запишет по 0 адресу: "Hello World".


