реклама на сайте
подробности

 
 
> Доступ к flash памяти STM32 из программы, Дописать незаписанный байт в слово
Eskimos
сообщение Feb 7 2017, 13:18
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 19-11-10
Пользователь №: 61 022



Добрый день!
Занимаюсь разработкой загрузчика для STM32F105R8T6.
Согласно документации на семейство микроконтроллеров запись во флеш память осуществляется 16-битными полусловами.
У меня появилась необходимость записать в ячейку памяти с четным адресом 1 байт, а затем(то есть не одновременно 2 байта, а 1 за 1, в общем случае между этими записями могут быть еще какие-то операции) с последующим нечетным адресом еще 1 байт. Перед записью все используемые ячейки памяти стерты. Поскольку писать можно только 16-битными полусловами, приходится сделать следующее для записи(привожу 2 варианта в разном порядке):
Код
    uint32_t address = 0x08006040;
    FLASH_ProgramWord_16(address,0xFF22);
    FLASH_ProgramWord_16(address,0x11FF);


Код
    uint32_t address = 0x08006040;
    FLASH_ProgramWord_16(address,0x11FF);
    FLASH_ProgramWord_16(address,0xFF22);


Сама процедура записи(но вряд ли дело в ней):
Код
void FLASH_ProgramWord_16_was(uint32_t Address, uint16_t Data)
{
   /*Разблокировать flash*/
   if((FLASH->CR & FLASH_CR_LOCK) != RESET)
   {
       FLASH->KEYR = (uint32_t)0x45670123;
       FLASH->KEYR = (uint32_t)0xCDEF89AB;
   }
    
   /* Ожидание последняя операция должна быть завершена */
   while (FLASH->SR & FLASH_SR_BSY);
   if (FLASH->SR & FLASH_SR_EOP)
   {
        FLASH->SR = FLASH_SR_EOP;
   }
    
   FLASH->CR |= FLASH_CR_PG;
   *(uint16_t*)Address = Data;
   while (FLASH->SR & FLASH_SR_BSY);
}


В 1 варианте получаю FF22, во втором 11FF, желанные 1122 получить не удается.
Возможно ли реализовать такую запись во флеш именно на таком микроконтроллере? И если возможно, то что я не так делаю? Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Feb 7 2017, 15:03
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Eskimos @ Feb 7 2017, 15:18) *
Возможно ли реализовать такую запись во флеш именно на таком микроконтроллере?
Нет, невозможно. Читайте документацию (PM0075, "STM32F10xxx Flash memory microcontrollers Programming manual"), там явно сказано: что угодно писать можно только в ячейку, в которой 0xFFFF. В ячейку, содержащую любое другое число можно записать только ноль. Если вы уже записали 0x11FF, то поверх вы можете записать только ноль.

QUOTE
FPEC preliminarily
reads the value at the addressed main Flash memory location and checks that it has been
erased. If not, the program operation is skipped and a warning is issued by the PGERR bit in
FLASH_SR register (the only exception to this is when 0x0000 is programmed. In this case,
the location is correctly programmed to 0x0000 and the PGERR bit is not set).


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Eskimos   Доступ к flash памяти STM32 из программы   Feb 7 2017, 13:18
- - ViKo   А если вторая команда будет КодFLASH_ProgramWord_1...   Feb 7 2017, 13:27
|- - Eskimos   Цитата(ViKo @ Feb 7 2017, 16:27) А если в...   Feb 7 2017, 13:32
|- - jcxz   Цитата(Сергей Борщ @ Feb 7 2017, 17:03) ч...   Feb 7 2017, 22:19
|- - ViKo   Цитата(jcxz @ Feb 8 2017, 01:19) А флешь-...   Feb 8 2017, 05:42
||- - makc   Цитата(ViKo @ Feb 8 2017, 08:42) А разве ...   Feb 8 2017, 06:04
||- - aaarrr   Цитата(ViKo @ Feb 8 2017, 08:42) А разве ...   Feb 8 2017, 07:08
||- - jcxz   Цитата(ViKo @ Feb 8 2017, 07:42) А разве ...   Feb 8 2017, 14:03
|- - Сергей Борщ   QUOTE (jcxz @ Feb 8 2017, 00:19) А флешь-...   Feb 8 2017, 06:56
- - KRS   Причем у LPC вообще на флешу шина 128 бит - так чт...   Feb 8 2017, 08:14
- - Eskimos   Спасибо за ответы. Видимо такая запись не осуществ...   Feb 8 2017, 08:19
|- - Сергей Борщ   QUOTE (Eskimos @ Feb 8 2017, 10:19) Видим...   Feb 8 2017, 09:53
- - Genadi Zawidowski   ЦитатаЗанимаюсь разработкой загрузчика для STM32F1...   Feb 8 2017, 21:12
|- - ViKo   Цитата(Genadi Zawidowski @ Feb 9 2017, 00...   Feb 9 2017, 04:59
- - Genadi Zawidowski   Встроенный flash 105-го не корректируется (DocID13...   Feb 9 2017, 09:46
|- - scifi   Цитата(Genadi Zawidowski @ Feb 9 2017, 12...   Feb 9 2017, 10:33
|- - Сергей Борщ   QUOTE (scifi @ Feb 9 2017, 12:33) Это сра...   Feb 9 2017, 10:40
|- - scifi   Цитата(Сергей Борщ @ Feb 9 2017, 13:40) и...   Feb 9 2017, 11:01
|- - Сергей Борщ   QUOTE (scifi @ Feb 9 2017, 13:01) Код ECC...   Feb 9 2017, 12:21
|- - scifi   Цитата(Сергей Борщ @ Feb 9 2017, 15:21) П...   Feb 9 2017, 12:49
- - Obam   Если мне не изменяет память, то (да, не F105) у L1...   Feb 9 2017, 10:49
- - ViKo   Вот что написано в datasheet Reference manual на у...   Feb 9 2017, 11:38
- - umup   а нельзя писать в 2 разных слова ? [CENSORED], или...   Feb 13 2017, 12:11
- - esaulenka   Цитата(umup @ Feb 13 2017, 15:11) а нельз...   Feb 14 2017, 07:14


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd August 2025 - 05:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01359 секунд с 7
ELECTRONIX ©2004-2016