Миландр
http://forum.milandr.ru/

Информационная память FLASH
http://forum.milandr.ru/viewtopic.php?f=33&t=293
Страница 1 из 1

Автор:  J [ 2011-янв-25 12:39 ]
Заголовок сообщения:  Информационная память FLASH

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

Автор:  Huckleberry Finn [ 2016-июл-04 16:54 ]
Заголовок сообщения:  Re: Информационная память FLASH

Поднимаю тему. Что это такая за информационная память?

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

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

Автор:  Huckleberry Finn [ 2016-июл-04 17:08 ]
Заголовок сообщения:  Re: Информационная память FLASH

О, нашёл, здесь же на форуме: viewtopic.php?f=33&t=1972

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

Автор:  prostoRoman [ 2016-июл-05 08:08 ]
Заголовок сообщения:  Re: Информационная память FLASH

Да, вполне себе работает вот такая конструкция
Код:
   __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 в ОЗУ.

Автор:  transformator [ 2017-ноя-14 15:42 ]
Заголовок сообщения:  Re: Информационная память FLASH

Столкнулся с проблемой чтения пользовательской памяти.
После чтения пользовательской памяти некоторые ячейки 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();
...

Автор:  Vasiliy [ 2017-ноя-16 09:21 ]
Заголовок сообщения:  Re: Информационная память FLASH

Поясните пожалуйста проблему, почему ячейки не могут быть сброшены?

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

Автор:  transformator [ 2017-ноя-17 10:55 ]
Заголовок сообщения:  Re: Информационная память FLASH

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


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

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/