Easyelectronics.ru

Электроника для всех
Текущее время: 22 сен 2018, 14:35

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: STM32L476 стереть из программы
СообщениеДобавлено: 12 июл 2018, 13:47 
Заглядывает иногда

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 89
Как быстро стереть всю программу . Я думаю ставить уровень защиты 1, а потом его обнулять . Кто ни будь делал так, может есть пример кода ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L476 стереть из программы
СообщениеДобавлено: 12 июл 2018, 14:06 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2263
Массовое стирание флеша. Есть такая команда в модуле флеша. Mass Erase. Стр.104 RM0351, 3.3.6 Flash main memory erase sequences, Bank 1, Bank 2 or both banks Mass erase


Последний раз редактировалось BusMaster 12 июл 2018, 14:13, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L476 стереть из программы
СообщениеДобавлено: 12 июл 2018, 14:10 
Старожил

Зарегистрирован: 01 фев 2013, 02:21
Сообщения: 237
EugenPKH писал(а):
Как быстро стереть всю программу . Я думаю ставить уровень защиты 1, а потом его обнулять . Кто ни будь делал так, может есть пример кода ?

можете показатт, что это не описано в референс мануале к данному микроконтроллеру в разделе FLASH?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L476 стереть из программы
СообщениеДобавлено: 07 авг 2018, 13:51 
Заглядывает иногда

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 89
Вопрос остался не решенный. Документация не помогает. Массовое стирание флеша - если пытаюсь стереть 2 банка, то процессор зависает и стирание не происходит . Если стираю банк 1 то 2 не стирается. если стираю банк 2 то первый не стирается. Если как думал изначально ставить Level 1, а затем Level 0 не работает . Точнее не так как надо работает. Одним заходом не получается сделать . Надо чтоб уже стоял Level1 и если поставить Level 0 процессор стирает всю память , но не перезагружается . Хоть в RM указывает , что должна быть перегрузка по команде OBL_LAUNCH, а ее нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L476 стереть из программы
СообщениеДобавлено: 07 авг 2018, 13:54 
Заглядывает иногда

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 89
Код:
<code>
{
      //level 0
        Flash_Unlock();
        Flash_Unlock_OB();

        /* 1. Check that no Flash memory operation is ongoing by checking the BSY bit in the FLASH_SR register */
        while((FLASH -> SR & FLASH_SR_BSY) == FLASH_SR_BSY)
        {
        };
        FLASH -> SR = FLASH_SR_EOP | FLASH_SR_OPERR | FLASH_SR_OPTVERR | FLASH_SR_RDERR | FLASH_SR_SIZERR |
                 FLASH_SR_PGSERR | FLASH_SR_MISERR | FLASH_SR_FASTERR  | FLASH_SR_WRPERR | FLASH_SR_PROGERR;
     
        Flash_Erase_Full();

        Flash_Lock_OB();
        Flash_Lock(); 
       
        NVIC_SystemReset();
}

void Flash_Erase_Full(void)
{

   
    FLASH -> ECCR =  FLASH_ECCR_ECCC | FLASH_ECCR_ECCD;
   
    /* 2. Set the MER1 bit or/and MER2 (depending on the bank)  */
    FLASH -> CR |=  FLASH_CR_MER1 | FLASH_CR_MER2 ; //
    __DSB();
   
    /* 4. Set the STRT bit in the FLASH_CR register (see below note) */
    FLASH -> CR |= FLASH_CR_STRT;

    /* Data synchronous Barrier (DSB) Just after the write operation */
    /* This will force the CPU to respect the sequence of instruction (no optimization). */
    __DSB();

    /* 5. Wait for the BSY bit to be cleared */
    while((FLASH -> SR & FLASH_SR_BSY) == FLASH_SR_BSY)
    {
    };

    /* cleared */
    FLASH -> CR &= ~(FLASH_CR_MER1 | FLASH_CR_MER2);
 
}




Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L476 стереть из программы
СообщениеДобавлено: 07 авг 2018, 14:01 
Старожил

Зарегистрирован: 19 окт 2012, 06:14
Сообщения: 230
если не работает адекватно код из флеша, можно запустить его из оперативки, но надо будет править скрипт линкера, чтобы он положил код в оперативку как и переменные, и запускал его оттуда же


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L476 стереть из программы
СообщениеДобавлено: 07 авг 2018, 14:15 
Заглядывает иногда

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 89
Вопрос кто то это делал ? И зачем из Sram запускать , если в доке про это не слово .


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: STM32L476 стереть из программы
СообщениеДобавлено: 07 авг 2018, 14:47 
Заглядывает иногда

Зарегистрирован: 25 сен 2017, 10:57
Сообщения: 55
Откуда: Украина
Так в доке и не написано откуда исполнение кода идет, также в доке написано - "While executing a program code from bank 1, it is possible to perform a mass erase
operation on bank 2." . Неспроста там 2 банка, пробуйте из ОЗУ запускать эту часть кода, может и можно это как-то обойти.


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

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


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

Сейчас этот форум просматривают: redixin2


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB