Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: sam7 встроенная флеш память
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Neon_613
Зравствуйте!
надо писать во встроенную Flash

есть функция в оперативке

Код
unsigned char WritePage(unsigned char *data,unsigned short PageNumber)
{
unsigned int i;    

    *MC0_FMR &= ~(0xFF<<16);
    *MC0_FMR |=  (36<<16)|0<<FWS;      //количество периудов MCK в 1.5 микросекунде
    *MC0_FMR &= ~(0x1<<7);
    *MC0_FMR &=~( 0x1<<0 | 0x1<<2 | 0x1<<3);

    i = 0;
    do{IFLASH[i >> 2]=data[i]|(data[i+1]<<8)|(data[i+2]<<16)|(data[i + 3]<<24);i += 4;} while(i<IFLASH_PAGE_SIZE);
          
    *MC0_FCR = 0x5A<<KEY|(PageNumber<<PAGEN)|WP<<FCMD;
    
    while(!((i=*MC0_FSR)&FRDY));

    if((i&LOCKE)||(i&PROGE))return (1);

    return (0);
}


где #define IFLASH ((unsigned int*)0x00100000)

почему туда ((unsigned int*)0x00100000)?
там же начало моей проги?
почему она еще работает? там временный буфер?

(в даташите написано что все пишется через latch buffer но где этот буфер не написано)

получается я хочу записать в 30 страницу а пишу в 0вую а потом копируется?
а кто востановит 0вую? потому что все продолжает работать и после ресета.
DmitryM
Цитата(Neon_613 @ Mar 16 2012, 12:01) *
где #define IFLASH ((unsigned int*)0x00100000)
почему туда ((unsigned int*)0x00100000)?
там же начало моей проги?
почему она еще работает? там временный буфер?

Правильно, буфер ремапится на диапазон внутренней флэш. Писать нужно именно по требуемому адресу, т.е. IFLASH[PageNumber*(256/4) + i>>2]
KRS
Цитата(DmitryM @ Mar 16 2012, 17:51) *
Писать нужно именно по требуемому адресу, т.е. IFLASH[PageNumber*(256/4) + i>>2]

Совершенно не обязательно! Буфер один отмаплен на весь флешь, но реально старшие биты адреса не используются так что можно его заполнять в любой странице.
так что код правильный, реальная страница записи указывается при записи в MC0_FCR
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.