Форум РадиоКот https://radiokot.ru/forum/ |
|
BootLoader Atmega128 Atmel Studio https://radiokot.ru/forum/viewtopic.php?f=57&t=139522 |
Страница 1 из 1 |
Автор: | Tbrcat [ Пт дек 16, 2016 16:11:31 ] |
Заголовок сообщения: | BootLoader Atmega128 Atmel Studio |
Нужен BootLoader для Atmega128A для Atmel Studio Написал в последней версии 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". |
Автор: | Z_h_e [ Пт дек 16, 2016 16:51:30 ] |
Заголовок сообщения: | Re: BootLoader Atmega128 Atmel Studio |
viewtopic.php?p=2873909#p2873909 |
Автор: | Tbrcat [ Пт дек 16, 2016 17:39:48 ] | ||
Заголовок сообщения: | Re: BootLoader Atmega128 Atmel Studio | ||
Z_h_e писал(а): http://radiokot.ru/forum/viewtopic.php?p=2873909#p2873909 Добавил в alt -> Project -> Properties -> Toolchain -> AVR/GNU Linker -> Memory Settings ->FLASH segment Запись: ".bootmem=0xF000". В исходном коде пишу Код: void boot_program_page (uint32_t page, uint8_t *buf); __attribute__ ((section (".bootmem"))) либоКод: void boot_program_page (uint32_t page, uint8_t *buf){...} __attribute__ ((section (".bootmem"))) Открыл прошивку, действительно, часть программы сместилась к адресу :10E00000, но большая часть всё ещё в начале. Надо после каждой функции этот атрибут писать?
|
Автор: | Tbrcat [ Сб дек 17, 2016 09:44:21 ] |
Заголовок сообщения: | Re: BootLoader Atmega128 Atmel Studio |
Совет был неправильный, как и сотни других советов, которые я перелопатил в инете. Дельных советов в инете нет, поэтому напишу, как сделать Бутлоадер в Atmel Studio 7 на C++ для Atmega128. 1. Добавляем в alt -> Project -> Properties -> Toolchain -> AVR/GNU Linker -> Memory Settings ->FLASH segment Запись: ".text=0xF000". Теперь вся программа располагается с адреса 0x1E000. Совет использовать "__attribute__ ((section" на десятках форумов - подстава и пустая трата времени, он нужен, чтобы бутлоадер и основную программу писать в одном проекте. 2. Ставим фьюзы в alt -> Tools -> Device Programming -> Fuses BOOTSZ $F000 для загрузчика размером 8 килобайт. BOOTRST on, чтобы загрузка при включении начиналась с адреса 0xF000 words (0x1E000 bytes). 3. Добавляем Код: uint8_t temp=MCUCR; в самом начале программы. Тогда прерывания будут работать в бутлоадере. Другие модификации этого кода без temp не работают.MCUCR|=(1<<IVCE); MCUCR=temp|(1<<IVSEL); 4. Оптимизация -Os по умолчанию. 5. PSTR, memcmp_P и прочие _P не работают по умолчанию и их нет смысла использовать, так как оперативки полно. 6. Переход в основную прошивку можно делать любой из команд: Код: void* mainprog= (void *) 0; Если переходить сразу после прошивки, то придётся откручивать MCUCR обратно.goto *mainprog; ((void (*)())0x0000)(); asm("jmp 0x0000"); 7. Пример функции записи страницы в память есть в файле avr/boot.h, который всё равно придётся подключать. 8. На всякий случай к прошивке можно добавить пару сотен байт нулей или хотя бы до конца страницы памяти. Если бы я сразу встретил этот пост, то сэкономил бы часов 50 своего времени и много нервов на перерывание даташитов и испытания неработающих советов. |
Автор: | Alex_EXE [ Вт авг 22, 2017 03:29:25 ] |
Заголовок сообщения: | Re: BootLoader Atmega128 Atmel Studio |
Tbrcat Спасибо за комментарий, очень помог. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |