Easyelectronics.ru

Электроника для всех
Текущее время: 16 ноя 2018, 12:54

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



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

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

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


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

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 2450
Массовое стирание флеша. Есть такая команда в модуле флеша. 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
Сообщения: 263
EugenPKH писал(а):
Как быстро стереть всю программу . Я думаю ставить уровень защиты 1, а потом его обнулять . Кто ни будь делал так, может есть пример кода ?

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


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

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


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

Зарегистрирован: 22 авг 2014, 12:29
Сообщения: 117
Код:
<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
Сообщения: 233
если не работает адекватно код из флеша, можно запустить его из оперативки, но надо будет править скрипт линкера, чтобы он положил код в оперативку как и переменные, и запускал его оттуда же


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

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


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

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


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

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


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

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


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

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

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