Перейти к содержанию
    

Гость do_not_know_Linux

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

 

0x08001000

научите ,как перезаписать уже имеющееся значение по этому адресу?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


 
    if (FLASH->CR & FLASH_CR_LOCK_Msk){
        FLASH->KEYR = FLASH_KEY1;
        FLASH->KEYR = FLASH_KEY2;
    }

Потом стереть страницу, далее записать новое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость do_not_know_Linux
2 hours ago, VladimirG said:


 

    if (FLASH->CR & FLASH_CR_LOCK_Msk){
        FLASH->KEYR = FLASH_KEY1;
        FLASH->KEYR = FLASH_KEY2;
    }

Потом стереть страницу, далее записать новое.

Та все так и делаю...  по этим адресам помещаю значения

0x40022004 в этот адрес помещаю этот ключ KEY(0x45670123)
0x40022004 и  этот ключ KEY(0xCDEF89AB)

и в этот адрес
0x40022008 помещаю ключ  KEY(0x45670123)
0x40022008 и этот ключ  KEY(0xCDEF89AB)
 
 

проверяю что память разблокирована то , устанавливаю бит  PER в регистре   FLASH_CR, помещаю адрес страницы в регистр FLASH_AR, и после включаю бит start в регистре  FLASH_CR. Потом   начинаю процедуру программирования,  но значение по данному адресу не перезаписывается.  в другие адреса в которые не знаносил значение, все ок, но если пытаюсь перезаписать, то ошибки не выходят, все отрабатывает, но значение не перезаписывается, значение остается прежним.  не знаю можно ли как-нибудь стереть утилитой st-flash,  память же заблокирована, сначала надо снять LOCK.  Или st-flash может и так?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всегда, для записи нового значения, нужно выполнять процедуру стирания.

Просто перезаписать значение нельзя.

Алгоритм простой, разблокировка памяти, стирание страницы, запись страницы или байта в этой странице.

6 minutes ago, do_not_know_Linux said:

Или st-flash может и так?

Может. Полное стирание снимает все блокировки и защиты.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость do_not_know_Linux
Just now, VladimirG said:

Может. Полное стирание снимает все блокировки и защиты.

Научите пожалуйста как ее сделать

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

53 минуты назад, VladimirG сказал:

Всегда, для записи нового значения, нужно выполнять процедуру стирания.

Просто перезаписать значение нельзя.

Обычно можно дописывать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 минут назад, jcxz сказал:

Обычно можно дописывать.

В STM32 не совсем так - дописать туда можно только 0x0 (сбросив все биты слова).
Контроллер памяти проверяет стертость Flash - если стерта - перезапишет, если нет - выставит ошибку (исключение - значение 0x0 для записи).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 минуты назад, Arlleex сказал:

В STM32 не совсем так - дописать туда можно только 0x0 (сбросив все биты слова).
Контроллер памяти проверяет стертость Flash - если стерта - перезапишет, если нет - выставит ошибку (исключение - значение 0x0 для записи).

Я имел в виду: дописать в соседний элемент минимальной дозаписи flash.

В XMC например минимальный элемент стирания - физ.сектор = 64кБ;

размер страницы записи = 256 байт;

а размер минимального элемента дозаписи = 32 байта.

Т.е. - дописывать в тот же 32-байтовый элемент не получится (иначе получим мусор и ошибку ECC). Но записать в соседний, стёртый - можно.

 

Вроде в STM32 такое тоже должно быть. Не знаю только размер этого элемента. Или в STM32 это всё-таки не работает?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

32 минуты назад, jcxz сказал:

Или в STM32 это всё-таки не работает?

В некоторых более-менее "жирных" есть, насколько помню.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, jcxz said:

Обычно можно дописывать.

Да, но вопрос стоял о перезаписи.

А так да, можно по словно дописывать.

А вобще есть документ AN2594 советую почитать топик стартеру.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 минуты назад, VladimirG сказал:

Да, но вопрос стоял о перезаписи.

А так да, можно по словно дописывать.

"Пословно" обычно нельзя. Дописывать обычно можно с дискретностью = размеру элемента ECC-контроля флешь. См. выше. Там где он есть....

Ну если только в каких-то МК размер ECC-контроля == слову.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нормально в STM32 "дозапись" работает, именно на этом и основана эмуляция EEPROM во флеш. У меня обычно килобайт под 100 свободных во флеше остается - с размахом хватает, чтобы какие-нибудь настройки записывать (даже если размер структуры с настройками под 256 байт, это получается аж 400 записей вплоть до необходимости заново стирать все страницы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость do_not_know_Linux

А можете еще подсказать по таймерам? есть ли какой-нибудь способ, правильный способ, чтобы таймер отработал только, допустим, три цикла?  можно это как-то сделать в настройках таймера? или это можно получить только если один таймер будет тактироваться от другого?

Изменено пользователем do_not_know_Linux

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость do_not_know_Linux
15 hours ago, Eddy_Em said:

 

Скажите пожалуйста, хотелось бы не городить огороды, а как-то правильно сделать чтобы таймер, допустим три раза отсчитал, три раза не значит до трех,  а отсчитал три раза до нуля от определенног значения(тоесть отработал три цикла), а после прекратил работу.  Можно ли это как-то сделать в настройках таймера stm32f103 микроконтроллера?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...