Например TDA7294

Форум РадиоКот • Просмотр темы - Error message from debugger back end: Error finishing flash
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб апр 27, 2024 19:16:55

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Error message from debugger back end: Error finishing flash
СообщениеДобавлено: Вс янв 15, 2023 17:11:12 
Родился
Аватар пользователя

Зарегистрирован: Вт ноя 29, 2022 12:17:58
Сообщений: 14
Откуда: Деревенский
Рейтинг сообщения: 0
Здравствуйте :shock: сам я нуб, работаю на STM32CubeIDE у меня проблема со стиранием секторов во внутренней Flash памяти МК STM32F429ZI (DISCO).
Пытался сделать разными способами, через HAL и напрямую регистрами, до появления в коде функции стирания Flash работает штатно.
Если в коде появляется стирание Flash заливка завершается с такой инф.:
Изображение
Код при этом работает, если заливался через отладку, то и отладка проходит штатно.
После этого при попытке записать изменения на МК через Cube появляется ошибка:
Цитата:
Error message from debugger back end: Error finishing flash

Изображение
При этом через STMUtility можно стереть Flas и биты. После стирания Flash (биты не влияют) можно снова работать из CubeIDE.
Переключение на OpenOCD не помогает...
Что только не нагуглил. Наиболее вменяемый вариант не устраивает.
https://kkmspb.ru/development/microcont ... 32F205.php
Т.к. ни другого программатора у меня нет, ни Keil'ом ни :solder: не владею... :dont_know:
Может кто сталкивался с проблемой и знает как решить?
Спойлер
Код:
  /* USER CODE BEGIN WHILE */

   uint32_t time = 0;
   uint32_t VarFlach = 0;
   HAL_StatusTypeDef flash_IS = HAL_ERROR;

   VarFlach = *(__IO uint32_t*)0x08000000;
// +**************************************************************Писать в Flash
   while (flash_IS != HAL_OK)
      flash_IS = HAL_FLASH_Unlock();
   flash_IS = HAL_ERROR;
   while (flash_IS != HAL_OK)
   {
      flash_IS = HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, 0x0800C000, 0x89ABCD);
   }
   flash_IS = HAL_ERROR;
   while (flash_IS != HAL_OK)
      flash_IS = HAL_FLASH_Lock();
   // +**************************************************************Закончить писать в Flash
   VarFlach = *(__IO uint32_t*)0x0800C000;
// +**************************************************************Стирать  Flash

    flash_IS = HAL_ERROR;
   while (flash_IS != HAL_OK)
   {
       flash_IS = HAL_FLASH_Unlock();
   }

   FLASH_EraseInitTypeDef strToErase;
   strToErase.Banks = FLASH_BANK_1;
   strToErase.Sector = FLASH_SECTOR_3;
   strToErase.NbSectors = 1;
   strToErase.TypeErase = FLASH_TYPEERASE_SECTORS;
   strToErase.VoltageRange = FLASH_VOLTAGE_RANGE_3;
   uint32_t sectorError = 0;
   //HAL_FLASHEx_Erase(&strToErase, &sectorError);                        //Вариант 1
   //HAL_FLASHEx_Erase_IT(&strToErase);                                 //Вариант 2
   //FLASH_Erase_Sector(FLASH_SECTOR_3, FLASH_VOLTAGE_RANGE_3);               //Вариант 3
   //if (FLASH_WaitForLastOperation((uint32_t)FLASH_TIMEOUT_VALUE)==HAL_OK)      //Вариант 3
   //      VarFlach = 0;                                          //Вариант 3

       CLEAR_BIT(FLASH->CR, FLASH_CR_PSIZE);                              //Вариант 4
     FLASH->CR |= FLASH_PSIZE_WORD;                                    //Вариант 4
     CLEAR_BIT(FLASH->CR, FLASH_CR_SNB);                              //Вариант 4
     FLASH->CR |= FLASH_CR_SER | (FLASH_SECTOR_3 << FLASH_CR_SNB_Pos);         //Вариант 4
     FLASH->CR |= FLASH_CR_STRT;                                    //Вариант 4

     while(__HAL_FLASH_GET_FLAG(FLASH_FLAG_BSY) != RESET)                  //Вариант 4
     {
        ;
     }

     /* If the erase operation is completed, disable the SER and SNB Bits */
             CLEAR_BIT(FLASH->CR, (FLASH_CR_SER | FLASH_CR_SNB));

   flash_IS = HAL_ERROR;
      while (flash_IS != HAL_OK)
         flash_IS = HAL_FLASH_Lock();
      // +**************************************************************Закончить стирать Flash
   VarFlach = *(__IO uint32_t*)0x0800C000;
   //VarFlach = FLASH->SR;


   HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);//set is On
   HAL_GPIO_WritePin(GPIOG, GPIO_PIN_14, GPIO_PIN_RESET);//set is Off

   while (1)
   {
      if (VarFlach==0x89ABCD)
        if ((HAL_GetTick()-time)>1000)
        {
            HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13 | GPIO_PIN_14);
            time = HAL_GetTick();
        }
    /* USER CODE END WHILE */

_________________
_____
Поделиться рецептом можно в ЛС


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Error message from debugger back end: Error finishing fl
СообщениеДобавлено: Пн янв 16, 2023 08:58:40 
Родился
Аватар пользователя

Зарегистрирован: Вт ноя 29, 2022 12:17:58
Сообщений: 14
Откуда: Деревенский
Рейтинг сообщения: 0
Думаю вопрос снят.
Для таких-же с отмороженным мозгом как я сообщаю, что если код очистки Flash вызывать в бесконечном цикле по условию, то ошибки не случается и после стирания(даже нескольких раз последовательно) ошибки не возникает.
Спойлер
Код:
while (1)
   {
      if (VarFlach==0x89ABCD)
        if ((HAL_GetTick()-time)>1000)
        {
            HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_13 | GPIO_PIN_14);
            time = HAL_GetTick();
        }
      if ((HAL_GPIO_ReadPin (GPIOA, GPIO_PIN_0) == GPIO_PIN_SET) ) //&& ((HAL_GetTick() - zaderjka) > 5000)
      {
         flash_IS = HAL_ERROR;
            while (flash_IS != HAL_OK)
            {
                flash_IS = HAL_FLASH_Unlock();
            }
            HAL_FLASHEx_Erase(&strToErase, &sectorError);
            flash_IS = HAL_ERROR;
                  while (flash_IS != HAL_OK)
                     flash_IS = HAL_FLASH_Lock();
         zaderjka = HAL_GetTick();
         HAL_GPIO_WritePin(GPIOG, GPIO_PIN_13, GPIO_PIN_SET);//set is On
      }
      VarFlach = *(__IO uint32_t*)0x0800C000;
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
  }

_________________
_____
Поделиться рецептом можно в ЛС


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Error message from debugger back end: Error finishing fl
СообщениеДобавлено: Пн янв 16, 2023 09:06:32 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
The_Blind_WatchMaker, лучше бы хал выкинуть, а для стирания флеша и записи в него ничего сложного делать не нужно, только документацию внимательно почитать.
Я себе вот такое написал. Бинарный поиск позволяет найти нужную запись достаточно быстро (скажем, для поиска среди 4096 возможных записей понадобится лишь 12-13 сравнений, а в линейном случае это число потенциально равно 4096!). При большом размере "хранилища" может целая секунда пройти с момента старта, пока линейно найдешь последние настройки! Нельзя так делать.
P.S. А называть переменную 'zaderjka' ну никуда не годится! Только русскому или близкому к нашему языку, возможно, станет понятно, что "задерйка" - это "задержка". А 99.99% населения Шарика вообще ничего не поймет. Есть международный язык - английский, вот им и нужно пользоваться при именовании переменных, функций и написании комментариев.

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y