реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> sam7 встроенная флеш память, непонятно как пишется
Neon_613
сообщение Mar 16 2012, 09:01
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 129
Регистрация: 19-09-10
Пользователь №: 59 574



Зравствуйте!
надо писать во встроенную 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вую? потому что все продолжает работать и после ресета.

Сообщение отредактировал IgorKossak - Mar 16 2012, 10:28
Причина редактирования: [code]
Go to the top of the page
 
+Quote Post
DmitryM
сообщение Mar 16 2012, 13:51
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 583
Регистрация: 7-06-06
Из: Таганрог
Пользователь №: 17 840



Цитата(Neon_613 @ Mar 16 2012, 12:01) *
где #define IFLASH ((unsigned int*)0x00100000)
почему туда ((unsigned int*)0x00100000)?
там же начало моей проги?
почему она еще работает? там временный буфер?

Правильно, буфер ремапится на диапазон внутренней флэш. Писать нужно именно по требуемому адресу, т.е. IFLASH[PageNumber*(256/4) + i>>2]
Go to the top of the page
 
+Quote Post
KRS
сообщение Mar 16 2012, 19:53
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



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

Совершенно не обязательно! Буфер один отмаплен на весь флешь, но реально старшие биты адреса не используются так что можно его заполнять в любой странице.
так что код правильный, реальная страница записи указывается при записи в MC0_FCR
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 19:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01352 секунд с 7
ELECTRONIX ©2004-2016