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

 
 
 
Reply to this topicStart new topic
> STM32L151 запись 1/2 страницы Program Memory, Скорость записи
MiklPolikov
сообщение Jun 6 2016, 21:07
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Пытаюсь писать по алгоритму Program memory Half Page Write.
Что-то происходит не так:
1) на запись 0x10000 байт уходит 54с, то есть 100мс на половинку страницы, хотя по документации должно 4мс
2) бит PROG вообще не получается выставить.
Подскажите, что я делаю не так ? Заранее спасибо !

Program memory Half Page Write
This operation is used to write half a page to the program memory (32 words). To do so:
• Unlock the FLASH_PECR register
• Unlock the program memory
• Set the FPRG bit in the FLASH_PECR register (this configures FLASH_PECR to
perform a data buffer loading sequence)
• Set the PROG bit in the FLASH_PECR register to access the required program
memory page
• Wait for the BSY bit to be cleared
• Directly write half a page with 32 different words to the program memory address
space. The words must be written sequentially starting from word 0 and ending with
word 31


Код
    int i=0, j=0;
   unsigned int *p_data_to_save_32=(unsigned int*)0x08010000;
      unsigned int write_address= 0x08020000;
      unsigned int data_size_32 = 0x10000/4;
    unsigned int *p_flash_32;


    //память предварительно разблокирована и стёрта
    

    FLASH->PECR |= FLASH_PECR_FPRG;  //включаем режим записи 1/2 страницы

    FLASH->PECR &=~ FLASH_PECR_FTDW;  //отключаем предварительное стирание
        
    //если выставляю этот бит,  всё виснет !!!!!!
     //FLASH->PECR |= FLASH_PECR_PROG;  //работаем с Program Memory
        
      while((FLASH->SR & FLASH_SR_BSY)!=0) {}
        
      p_flash_32=(unsigned int*)write_address;
      i=0;
        
      while(i<data_size_32)
      {
         for(j=0;j<32; j++)  //записываем  половину страницы
        {
               *( p_flash_32+i ) =p_data_to_save_32[i];
                i++;    
         }    
         while((FLASH->SR & FLASH_SR_BSY)!=0) {}     
      }        

}


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jun 6 2016, 21:22
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



0x32 != 32
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jun 6 2016, 21:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(aaarrr @ Jun 7 2016, 00:22) *
0x32 != 32

Спасибо. Исправление этой ошибки нечего не изменило. Всё сказанное выше актуально.


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
SSerge
сообщение Jun 7 2016, 08:55
Сообщение #4


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата
Warning: Half Page Write is possible only from SRAM, from external
memory or from bank 1 to bank 2 and vice versa.

А это условие выполняется?
Банк у Вас всего один, внешней памяти скорее всего нет, следовательно нужно переместить код, выполняющий запись в RAM.
Да ещё и прерывания на время записи отключить (или переместить таблицу векторов и обработчики тоже в RAM).


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post

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

 


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


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