Форум РадиоКот https://radiokot.ru/forum/ |
|
STM32L запись в EEPROM при компиляции https://radiokot.ru/forum/viewtopic.php?f=59&t=171597 |
Страница 1 из 1 |
Автор: | Alex-Elektron [ Ср июл 01, 2020 13:23:05 ] |
Заголовок сообщения: | STM32L запись в EEPROM при компиляции |
Доброго времени суток! Ранее для записи переменной по конкретному адресу во Flash при компиляции использовал такую конструкцию: MyVariable[] __attribute__((at(0x08002000)))={0, 4, 3, 55, 32}; Вопрос, можно ли с использованием подобной директивы записать массив данных/переменную в область EEPROM при компиляции? |
Автор: | VladislavS [ Ср июл 01, 2020 17:48:41 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
При компиляции ничего в микроконтроллер не пишется. |
Автор: | BlackKilkennyCat [ Ср июл 01, 2020 18:25:54 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
А еще прочитайте http://www.keil.com/support/man/docs/ar ... 981140.htm, а то создается впечатление, что MyVariable[] __attribute__((at(0x08002000)))={0, 4, 3, 55, 32}; - это просто от балды. |
Автор: | YS [ Чт июл 02, 2020 14:07:06 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
В STM32 нет как таковой EEPROM, это просто выделенная область FLASH. Так что может быть и да. Надо посмотреть, как указаны границы FLASH в файле линкера. Если область EEPROM туда входит, то должно получиться. Можно попробовать завести отдельный сегмент для EEPROM и располагать переменные там. Главное чтобы линкер положил данные куда надо, и софт для программирования это правильно понял. Но я бы просто из программы записывал при первом старте, тем более, что механизм возврата к настройкам по-умолчанию всегда полезен. |
Автор: | NStorm [ Чт июл 02, 2020 14:09:20 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
В STM32 нет как таковой EEPROM, это просто выделенная область FLASH. Вообще-то в серии L есть именно EEPROM. |
Автор: | Alex-Elektron [ Чт июл 02, 2020 14:20:03 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
В STM32 нет как таковой EEPROM, это просто выделенная область FLASH. Так что может быть и да. Надо посмотреть, как указаны границы FLASH в файле линкера. Если область EEPROM туда входит, то должно получиться. Можно попробовать завести отдельный сегмент для EEPROM и располагать переменные там. Главное чтобы линкер положил данные куда надо, и софт для программирования это правильно понял. Но я бы просто из программы записывал при первом старте, тем более, что механизм возврата к настройкам по-умолчанию всегда полезен. EEPROM конечно же есть в L-серии. Но я посмотрел на размер секторов FLASH, они довольно мелкие, выделил пару для хранения данных и забил на EEPROM. BlackKilkennyCat писал(а): А еще прочитайте http://www.keil.com/support/man/docs/ar ... 981140.htm, а то создается впечатление, что MyVariable[] __attribute__((at(0x08002000)))={0, 4, 3, 55, 32}; - это просто от балды. То, что вы не пробовали так делать, не значит, что эта конструкция не работает. |
Автор: | YS [ Чт июл 02, 2020 14:37:00 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
Цитата: Вообще-то в серии L есть именно EEPROM. Ну, они просто так пишут. ![]() Эта так называемая EEPROM расположена непосредственно за FLASH, управляется тем же контроллером и стирать ее можно не менее чем по слову за раз (ну хорошо хоть не по 4 кБ). Один байт стереть и перезаписать нельзя, что явно говорит о том, что это не настоящая EEPROM. ![]() Есть у меня подозрения, что из этой так называемой EERPOM и код запустить можно. ![]() |
Автор: | BlackKilkennyCat [ Чт июл 02, 2020 15:02:24 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
То, что вы не пробовали так делать, не значит, что эта конструкция не работает. Вы сделали странный и глупый вывод. |
Автор: | Мурик [ Чт июл 02, 2020 15:32:14 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
YS писал(а): стирать ее можно не менее чем по слову за раз Значит память 32-ух битная (неудивительно учитывая разрядность ядра).YS писал(а): Один байт стереть и перезаписать нельзя, что явно говорит о том, что это не настоящая EEPROM. Это ни о чем не говорит. Память 32-ух битная, а не 8-ми битная. |
Автор: | Питание [ Пн июл 20, 2020 20:12:28 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
При компиляции разумеется ничего в МК не пишется. Пишется при загрузке. Но! Есть такая гадость, что EEPROM после сброса залочена и в нее нельзя писать сразу. Да, не эмуляция, а самая настоящая EEPROM есть в некоторых из "элек". Она сделана на той же флеши, но с отдельными адресами и с большим гарантированным числом перезаписей. Ее можно писать без стирания, хоть побайтно, хоть пословно, без разницы. Она работает именно как EEPROM. Чтобы при прошивке записать в EEPROM, придется в скрипте дебагера предварительно разблокировать запись двумя командами: set *0x40023c0c = 0x89ABCDEF set *0x40023c0c = 0x02030405 |
Автор: | BlackKilkennyCat [ Пн июл 20, 2020 22:03:46 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
Если она сделана на той же флеши, то она такая же. У нее не может быть иная физика. Подобная гадость с блокировкой не является свойством мк, а лишь кривого инструментария. |
Автор: | Питание [ Вт июл 21, 2020 06:40:38 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
Почему? В референс-мануале четко и однозначно написано: Unlocking the Data EEPROM block and the FLASH_PECR register After reset, Data EEPROM block and the Program/erase control register (FLASH_PECR) are not accessible in write mode and the PELOCK bit in FLASH_PECR is set. The same unlocking sequence unprotects them both at the same time. The following sequence is used to unlock the Data EEPROM block and FLASH_PECR register: • Write PEKEY1= 0x89ABCDEF to the Program/erase key register (FLASH_PEKEYR) • Write PEKEY2= 0x02030405 to the Program/erase key register (FLASH_PEKEYR) И "физика" там немного другая. Можно писать даже побайтно без стирания. Да и гарантированное число перезаписей указано в 300 тыс. против 10 тыс у программного флеша. То есть, в принципе, очень даже годная штука для энергонезависимого хранения настроек и прочего изменяемого контента. Тут дело немного в другом. Чтобы записать данные в EEPROM вместе с прошивкой программной памяти, нужно писать скрипт для External Loader. Я пока что еще не разбирался с этим, а готовых скриптов вроде как нету. Ограничился пока что тем, что прописал в стартап-скрипте строчки, указанные в предыдущем посте. Писать их нужно до команды load. Работает кривовато, но грузит нормально. |
Автор: | jcxz [ Ср авг 05, 2020 11:16:05 ] |
Заголовок сообщения: | Re: STM32L запись в EEPROM при компиляции |
При компиляции ничего в микроконтроллер не пишется. Не факт. Может компиляция происходит на этом же самом МК? ![]() |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |