Ксения (12.06.2017 17:13 - 17:17, просмотров: 310) ответил AlexG на Ваяю бутлоадер для Хмеги с заимствованием части кода из апликейшн ноты AVR1605 и что-то у меня функция SP_LoadFlashWord ничего во флэш не записывает. Никто случайно не сталкивался? Чего ей может не хватать?
На счет Хмеги не знаю, т.к. не пробовала программно ей писать во флеш, но у обычных Мег работает жесткое правило - писать во флеш можно только из области загрузчика. Вот и пришлось тогда мне создать отдельный сегмент кода, разместив его в загрузочной области, и поместить туда функцию, которая страницу из буфера во флеш загружала. И вот этой функцией пользовалась, вызывая ее с нужными мне параметрами из нижней части программного кода. Возможно, что и у Хмеги есть защита такого же типа.
Это код для моей обычной Меги, но привожу его для иллюстрации идеи (компилятор IAR):
#pragma location="BOOT"
void PageLoader( unsigned int flash_address, unsigned char *buffer)
{
int i;
_WAIT_FOR_SPM();
_SPM_ERASE( flash_address);
_WAIT_FOR_SPM();
_ENABLE_RWW_SECTION();
for( i=0; i < 128; i++)
_SPM_FILLTEMP( i << 1, ((int*)buffer)[i]);
_WAIT_FOR_SPM();
_SPM_PAGEWRITE( flash_address);
_WAIT_FOR_SPM();
_ENABLE_RWW_SECTION();
}