Гость do_not_know_Linux 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба Здрасьте... Удалось общими усилиями записать во flash значение по определенному адресу. А теперь переписать это значение я не могу. Оно просто остается прежним. Производил разные действия по стиранию как одной страницы, так и всего флеш вцелом, относительно конечно же. Скажите, есть ли какой-нибудь способ записать и переписать значение в один и тот же адрес во флаш, допустим в 0x08001000 научите ,как перезаписать уже имеющееся значение по этому адресу? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirG 0 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба if (FLASH->CR & FLASH_CR_LOCK_Msk){ FLASH->KEYR = FLASH_KEY1; FLASH->KEYR = FLASH_KEY2; } Потом стереть страницу, далее записать новое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба 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 может и так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirG 0 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба Всегда, для записи нового значения, нужно выполнять процедуру стирания. Просто перезаписать значение нельзя. Алгоритм простой, разблокировка памяти, стирание страницы, запись страницы или байта в этой странице. 6 minutes ago, do_not_know_Linux said: Или st-flash может и так? Может. Полное стирание снимает все блокировки и защиты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба Just now, VladimirG said: Может. Полное стирание снимает все блокировки и защиты. Научите пожалуйста как ее сделать Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirG 0 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба st-flash erase Так же можно кубом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба 53 минуты назад, VladimirG сказал: Всегда, для записи нового значения, нужно выполнять процедуру стирания. Просто перезаписать значение нельзя. Обычно можно дописывать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба 27 минут назад, jcxz сказал: Обычно можно дописывать. В STM32 не совсем так - дописать туда можно только 0x0 (сбросив все биты слова). Контроллер памяти проверяет стертость Flash - если стерта - перезапишет, если нет - выставит ошибку (исключение - значение 0x0 для записи). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба 32 минуты назад, Arlleex сказал: В STM32 не совсем так - дописать туда можно только 0x0 (сбросив все биты слова). Контроллер памяти проверяет стертость Flash - если стерта - перезапишет, если нет - выставит ошибку (исключение - значение 0x0 для записи). Я имел в виду: дописать в соседний элемент минимальной дозаписи flash. В XMC например минимальный элемент стирания - физ.сектор = 64кБ; размер страницы записи = 256 байт; а размер минимального элемента дозаписи = 32 байта. Т.е. - дописывать в тот же 32-байтовый элемент не получится (иначе получим мусор и ошибку ECC). Но записать в соседний, стёртый - можно. Вроде в STM32 такое тоже должно быть. Не знаю только размер этого элемента. Или в STM32 это всё-таки не работает? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 177 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба 32 минуты назад, jcxz сказал: Или в STM32 это всё-таки не работает? В некоторых более-менее "жирных" есть, насколько помню. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladimirG 0 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба 1 hour ago, jcxz said: Обычно можно дописывать. Да, но вопрос стоял о перезаписи. А так да, можно по словно дописывать. А вобще есть документ AN2594 советую почитать топик стартеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба 3 минуты назад, VladimirG сказал: Да, но вопрос стоял о перезаписи. А так да, можно по словно дописывать. "Пословно" обычно нельзя. Дописывать обычно можно с дискретностью = размеру элемента ECC-контроля флешь. См. выше. Там где он есть.... Ну если только в каких-то МК размер ECC-контроля == слову. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 1 10 января, 2022 Опубликовано 10 января, 2022 · Жалоба Нормально в STM32 "дозапись" работает, именно на этом и основана эмуляция EEPROM во флеш. У меня обычно килобайт под 100 свободных во флеше остается - с размахом хватает, чтобы какие-нибудь настройки записывать (даже если размер структуры с настройками под 256 байт, это получается аж 400 записей вплоть до необходимости заново стирать все страницы). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 11 января, 2022 Опубликовано 11 января, 2022 (изменено) · Жалоба А можете еще подсказать по таймерам? есть ли какой-нибудь способ, правильный способ, чтобы таймер отработал только, допустим, три цикла? можно это как-то сделать в настройках таймера? или это можно получить только если один таймер будет тактироваться от другого? Изменено 11 января, 2022 пользователем do_not_know_Linux Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость do_not_know_Linux 11 января, 2022 Опубликовано 11 января, 2022 · Жалоба 15 hours ago, Eddy_Em said: Скажите пожалуйста, хотелось бы не городить огороды, а как-то правильно сделать чтобы таймер, допустим три раза отсчитал, три раза не значит до трех, а отсчитал три раза до нуля от определенног значения(тоесть отработал три цикла), а после прекратил работу. Можно ли это как-то сделать в настройках таймера stm32f103 микроконтроллера? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться