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

 
 
> Контроллер Флеш-памяти
binom
сообщение Jun 13 2005, 17:30
Сообщение #1





Группа: Новичок
Сообщений: 11
Регистрация: 27-04-05
Пользователь №: 4 550



Работаю с msp430f149.
Согласно документации есть возможность 1)масового стирания сегментов основной памяти и 2)массового стирания сегментов основной и информационной памяти.
Соответственно (MERAS = 1 ERASE = 0)- это 1), (MERAS = 1 ERASE = 1) -это 2)
по идее при массовом стирании исполняемый код тоже должен стереться.


в IARе описываю 1-ю ситуацию(стирание инициируется не из ОЗУ а из Флеш) - код не стирается хотя он распольжен начиная с адреса 0х1100.

описываю 2-ю ситуацию(стирание инициируется не из ОЗУ а из Флеш) - код стирается содержимое всей памяти 0xff.
Вопрос: Чё за косяк?

Еще одно наблюдение: при записи в режиме байт/слово можно последовательно записать несколько слов. Т.е. корректно произойдет запись с помощью следующего кода:

int *memory1 = (int*)0x1000;
int *memory2 = (int*)0x1080;

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer

//записываем слово в режиме не блочной записи
asm("dint");
FCTL1 = FWKEY + WRT;
FCTL2 = FWKEY + FSSEL_2 + FN0;
FCTL3 = FWKEY;
*memory1 = 0x1234;//записываем в 1-ый инф. сегмент
*memory2 = 0x5678;//записываем во 2-ой инф. сегмент
while( (FCTL3 & BUSY) );
FCTL3 = FWKEY + LOCK;
asm("eint");
//

А вот стирание 2-х сегментов таким образом не пройдет. Бит ERASE аппаратно сбрасывается после первой команды фиктивной записи, и генерится прерывание ACCVIFG.

int *memory1 = (int*)0x1000;
int *memory2 = (int*)0x1080;

WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer


//стираем сегмент
asm("dint");
FCTL1 = FWKEY + MERAS + ERASE;
FCTL2 = FWKEY + FSSEL_2 + FN0;
FCTL3 = FWKEY;
*memory1 = 0x1234;//ПОСЛЕ ЭТОЙ КОМАНДЫ ERASE = 0
*memory2 = 0x5678;//ПОСЛЕ ЭТОЙ КОМАНДЫ ACCVIFG = 1(косяк)
while( (FCTL3 & BUSY) );
FCTL3 = FWKEY + LOCK;
asm("eint");
//
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
rezident
сообщение Jun 13 2005, 18:56
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(binom @ Jun 13 2005, 23:30)
в IARе описываю 1-ю ситуацию(стирание инициируется не из ОЗУ а из Флеш) - код не стирается хотя он распольжен начиная с адреса 0х1100.

описываю 2-ю ситуацию(стирание инициируется не из ОЗУ а из Флеш) - код стирается содержимое всей памяти 0xff.
Вопрос: Чё за косяк?

Вы ассемблерный код, который сгенерировал IAR, смотрели? Может компилятор там чего-то такого соптимизировал.
Цитата(binom @ Jun 13 2005, 23:30)
Еще одно наблюдение: при записи в режиме байт/слово можно последовательно записать несколько слов.

Цитата(binom @ Jun 13 2005, 23:30)
А вот стирание 2-х сегментов таким образом не пройдет. Бит ERASE аппаратно сбрасывается после первой команды фиктивной записи, и генерится прерывание ACCVIFG.
*

Ну что тут сказать? Так и должно быть. Точнее так задумано. RTFM smile.gif
Цитата
Бит BUSY устанавливается немедленно после фиктивной записи и остается установленным в течение всего цикла стирания. Биты BUSY, MERAS и ERASE автоматически очищаются, когда цикл завершен.
Go to the top of the page
 
+Quote Post
kilgor
сообщение Jun 15 2005, 09:36
Сообщение #3


Участник
*

Группа: Свой
Сообщений: 38
Регистрация: 3-06-05
Пользователь №: 5 699



Цитата(binom @ Jun 13 2005, 20:30)
в IARе описываю 1-ю ситуацию(стирание инициируется не из ОЗУ а из Флеш) - код не стирается хотя он распольжен начиная с адреса 0х1100.
*


Конечно все зависит от задачи, но по-моему лучше будет сделать процедуру стирания (точнее запуск стирания и например полинг ее окончания, если и прерыванием по окончанию не хочется работать) расположенную в ОЗУ (подгружамую в озу). С relocatable кодом это вообще не проблема, если конечно дружите с асмом. Кстати - не пробывали стирать из озу эффект с сегментами остается?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 12:48
Рейтинг@Mail.ru


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