Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-июн-17 13:33

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Информационная память FLASH
СообщениеДобавлено: 2011-янв-25 12:39 
Не в сети

Зарегистрирован: 2010-фев-24 21:35
Сообщения: 20
Скажите, пожалуйста, используется ли вами информационная память FLASHа или её можно использовать в приложениях? Вот, например, у STMов туда производителем записывается загрузчик, и делать с этой памятью какие-то действия прямо запрещается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2016-июл-04 16:54 
Не в сети
Аватара пользователя

Зарегистрирован: 2015-ноя-11 13:42
Сообщения: 11
Поднимаю тему. Что это такая за информационная память?

Читаю документацию на 1986ВЕ9Х...
Есть основная память от 0х08000000 до +32 страницы (128Кб)
И есть некая информационная память от 0х08000000 до +1 страница (4 Кб)

То есть фактически 1-ая страница основной памяти и информационной памяти абсолютно пересекаются в адресном пространстве. Это как так?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2016-июл-04 17:08 
Не в сети
Аватара пользователя

Зарегистрирован: 2015-ноя-11 13:42
Сообщения: 11
О, нашёл, здесь же на форуме: viewtopic.php?f=33&t=1972

Вобщем, информационная память доступна на чтение и запись только в режиме программирования. А в режим программирования можно войти только исполняя код из ОЗУ.
Следовательно, можно использовать эту информационную память, как место для хранения каких-то значений. Причем, если хотим прочитать или стереть значение, то надо делать это через функции выполняемые в ОЗУ.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2016-июл-05 08:08 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1284
Откуда: Тула
Да, вполне себе работает вот такая конструкция
Код:
   __disable_irq();
   EEPROM_ErasePage(0x08000000, EEPROM_Info_Bank_Select);
   for(i=0; i<4096; i+=4) {
      uint32_t data = .......;
      EEPROM_ProgramWord( i+0x08000000, EEPROM_Info_Bank_Select, data);
   }
   __enable_irq();

Функции из SPL. Только указать размещение файла/ф-ций из файла MDR32F9Qx_eeprom.c в ОЗУ.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2017-ноя-14 15:42 
Не в сети

Зарегистрирован: 2014-сен-09 07:21
Сообщения: 23
Столкнулся с проблемой чтения пользовательской памяти.
После чтения пользовательской памяти некоторые ячейки EE_Data в сброшены (0xFFFFFFFF).

Код:
#define EEPROM_PAGE_SIZE   (4*1024)
#define MAIN_EEPAGE            0
#define INIT_EE_ADDRESS      (0x08000000 + MAIN_EEPAGE * EEPROM_PAGE_SIZE)


Код:
uint32_t EE_Address = 0;
uint32_t EE_BankSelector = 0;
uint32_t EE_Data[1024];


Код:
void EE_Configure(void)
{
   uint16_t i;
   RST_CLK_PCLKcmd(RST_CLK_PCLK_EEPROM, ENABLE);
   EE_Address = INIT_EE_ADDRESS;
   EE_BankSelector = EEPROM_Info_Bank_Select;

   __disable_irq();
   
   for (i = 0; i < EEPROM_PAGE_SIZE; i += 4)
      EE_Data[i>>2] = EEPROM_ReadWord (EE_Address+i, EE_BankSelector);
...


Код:
int main(void)
{   
   Clock_Configure();
   IO_Configure();
   EE_Configure();
...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2017-ноя-16 09:21 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 352
Откуда: ПКК "Миландр"
Поясните пожалуйста проблему, почему ячейки не могут быть сброшены?

При стирании страницы или всей памяти, ячейки памяти становятся равны 0хFF. Последующая процедура записи записывает необходимые нули. Если в память ничего не писалось, то она сохраняет значение 0хFF.

_________________
Отдел технической поддержки support@milandr.ru


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2017-ноя-17 10:55 
Не в сети

Зарегистрирован: 2014-сен-09 07:21
Сообщения: 23
В функции EE_Configure() после считывания страницы пользовательской памяти я проверяю: если ячейки сброшены, то я стираю страницу (EEPROM_ErasePage) и записываю туда некие значения:
Код:
// Write the data
   for (i = 0; i < EEPROM_PAGE_SIZE; i += 4)
      EEPROM_ProgramWord(Address + i, BankSelector, *src++);   


После этого иногда при подаче питания на микроконтроллер некоторые (не все) ячейки пользовательской памяти оказывались стертыми.
Я предполагаю, что после подачи питания во время выполнения EE_Configure() происходил провал напряжения питания и микроконтроллер сбрасывался, что приводило к потере данных.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2018-май-24 12:29 
Не в сети

Зарегистрирован: 2013-дек-17 14:14
Сообщения: 1
Добрый день? Была ли определена причина стирания памяти?
Тоже столкнулись с этой ситуацией


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2019-мар-01 10:40 
Не в сети

Зарегистрирован: 2018-дек-06 12:14
Сообщения: 18
Здравствуйте.
Можно ли хранить в информационной памяти 4 значения по секторам и стирать/писать в них независимо от других секторов, либо же обязательно нужно стирать все сектора чтобы перезаписать какое-либо значение? т.е информационная панель будет использоваться для одного значения.
Открыть из даташита
Стирание одного сектора страницы памяти возможно только в режиме
программирования. Для стирания страницы памяти надо установить необходимое значение в бит IFREN (1 - для информационной памяти и 0 - для основной памяти), затем установить адрес стираемой страницы в регистре EEPROM_ADR[16:12] и номер сектора EEPROM_ADR[3:2] (00 – Sector_A, 01 – Sector_B, 10 – Secotor_C и 11 – Sector_D) и установить биты XE и ERASE в единицу
Закрыть


Последний раз редактировалось kobaltiz7 2019-мар-04 10:33, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2019-мар-01 11:01 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 436
Можно работать с отдельными секторами.
Стирание - запись одного сектора не влияют на сохранность данных в других секторах.
Используем такой подход во всех проектах.
Функция чтения данных должна учитывать, что данные смещаются не на 1 слово а на 4.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2019-мар-01 12:01 
Не в сети

Зарегистрирован: 2018-дек-06 12:14
Сообщения: 18
редактор писал(а):
Можно работать с отдельными секторами...

Спасибо за информацию. Ибо не понятно было, т.к в стандартных библиотеках стирают целую страницу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Информационная память FLASH
СообщениеДобавлено: 2019-мар-04 11:22 
Не в сети

Зарегистрирован: 2018-дек-06 12:14
Сообщения: 18
Функция стирания сектора для информационной памяти. Получается стерев цикл из EEPROM_ErasePage. Не знаю, работает она для основной памяти, либо нет. В Address передается адрес начала сектора, т.е для:
Sector_A = 0x0800_0000;
Sector_B = 0x0800_0004;
Sector_C = 0x0800_0008;
Sector_D = 0x0800_000С;
Открыть код стирания сектора для информационной памяти
Код:
__RAMFUNC void EEPROM_EraseSector(uint32_t Address, uint32_t BankSelector)
{
  uint32_t Command;
//  uint32_t Offset;

  assert_param(IS_EEPROM_BANK_SELECTOR(BankSelector));
 
  MDR_EEPROM->KEY = EEPROM_REG_ACCESS_KEY;
  Command = (MDR_EEPROM->CMD & EEPROM_CMD_DELAY_Msk) | EEPROM_CMD_CON;
 
  Command |= (BankSelector == EEPROM_Info_Bank_Select) ? EEPROM_CMD_IFREN : 0;
 
  MDR_EEPROM->CMD = Command;

//  for (Offset = 0; Offset < (4 << 2); Offset += 4)
//  {
    MDR_EEPROM->ADR = Address;// + Offset;             /* Page Address */
    MDR_EEPROM->DI = 0;
    Command |= EEPROM_CMD_XE | EEPROM_CMD_ERASE;
    MDR_EEPROM->CMD = Command;
    ProgramDelay(GET_US_LOOPS(5));              /* Wait for 5 us */
    Command |= EEPROM_CMD_NVSTR;
    MDR_EEPROM->CMD = Command;
    ProgramDelay(GET_US_LOOPS(40000));          /* Wait for 40 ms */
    Command &= ~EEPROM_CMD_ERASE;
    MDR_EEPROM->CMD = Command;
    ProgramDelay(GET_US_LOOPS(5));              /* Wait for 5 us */
    Command &= ~(EEPROM_CMD_XE | EEPROM_CMD_NVSTR);
    MDR_EEPROM->CMD = Command;
    ProgramDelay(GET_US_LOOPS(1));              /* Wait for 1 us */
//  }
  Command &= EEPROM_CMD_DELAY_Msk;
  MDR_EEPROM->CMD = Command;
  MDR_EEPROM->KEY = 0;
}
Закрыть


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB