Страница 43 из 446
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 15:27:00
ut1wpr
HHIMERA писал(а):Да не всё так просто...
А Unlock кто будет делать?

И даже анлок не помогеть! Вдуть, подождать завершения операции вдутия - менингит тот еще. На мой взгляд ST очень мудро поступили - вам надо долгой и хорошей памяти - их есть у нас!

Юзайте внешнюю I2C и будет вам... И надежность, и долгие годы...
Автору вопроса для общего понимания:
http://easystm32.ru/for-beginners/38-flash-stm32
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 15:27:36
Citizen Kane
Satyr - не надо грубить. Это простой вопрос, и любой компоновщик умеет размещать нужные переменные в нужных сегментах памяти, вопрос в том, что я новичок в IAR, и не знал нужных препроцессорных директив.
ibiza11 - спасибо за отклик! Вы правильно сказали, но мне хотелось, чтобы компоновщик сам размещал все EEPROM-переменные в своей области (с адреса 0x08080000), без необходимости явного присвоения каждой из них своего адреса.
Впрочем, ответ я нашел, это выглядит так (может, кому-нибудь пригодится):
__root __no_init uint32_t eeprom_variable @".eeprom";
либо
#pragma location=".eeprom"
__root __no_init uint32_t eeprom_variable;
оба варианта рабочие.
(в скрипте линкера при этом должно быть определение .eeprom, как я написал в пред. посте)
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 15:33:25
Citizen Kane
Читать можно свободно. А вот с записью не получится. Области EEPROM и FLASH имеют защиту. При обращении к памяти в этой области ее необходимо предварительно снять. Учитывая это, механизм программной инициализации не может быть выражен путем VAR = VALUE. Запись во флеш и еепром имеет механизм, отличный от ОЗУ. Причем далеко не все STM32 имеют этот самый eeprom.
Это все понятно

, в случае записи там много нюансов, но прямая запись вида
переменная=значение и не требуется - нужно лишь удобное резервирование "именованных" областей памяти в EEPROM, без необходимости помнить абсолютные адреса.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 15:37:12
kolobok0
ut1wpr писал(а):...применяю третий, совмещенный - опрос в прерывании.

....
если Вы циклите в прерывании - это в консерватории хаос. тут либо потеря времени (прощай реал тайм), либо блокировка зацикливания и повторное вхождение(это усложнение общей логики - нафига, не понятно. наверное круто

). т.е. надо иметь весские основания чтоб так делать.
если опросом называете один запрос состоянии пинов - ну дык блин, речь не про это была. это собственно и есть один из двух способов.
надеюсь не осталось тёмных пятен?
ик
(круглый)
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 15:39:49
Citizen Kane
Спасибо за ссылку, но в статье описана работа с program flash, а не EEPROM, впрочем, вопрос был совершенно в другом, и ответ я нашел. Читать Programming manual я и сам умею, без подсказок с форума

Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 15:59:21
ibiza11
Похоже, что Вы правы! Нужно сначала разблокировать область для записи.
Качайте архив отсюда
http://www.st.com/web/catalog/tools/FM1 ... 3/PF257913
Это стандартная библиотека периферии STM32Lx. Там в файле
stsw-stm32077.zip\STM32L1xx_StdPeriph_Lib_V1.2.0\Libraries\STM32L1xx_StdPeriph_Driver\src\stm32l1xx_flash.c
ищите по тегу EEPROM
Добавлено: блин, прочел предыдущую страницу, а эту не заметил. тут уже столько всего понаписали))) В общем теперь и я буду знать.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 17:45:31
ut1wpr
Citizen Kane писал(а):
Спасибо за ссылку, но в статье описана работа с program flash, а не EEPROM, впрочем, вопрос был совершенно в другом, и ответ я нашел. Читать Programming manual я и сам умею, без подсказок с форума

Отличается только областью разблокировки. Удобнее всего работать с SPL. Проблема еще и в том, что в STM32 eeprom есть далеко не во всех линейках.
Можно использовать и флеш в качестве eeprom, не знаю, как в 32, но в 8 было однозначно сказано, что endurance при этом резко снижается. Плюс еще такая неприятная мелочь, как необходимость очистки перед записью, а очистка выполняется только постранично. Ну, это все описано в документации, просто напоминаю.
http://www.st.com/web/en/resource/techn ... 165693.pdf
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 19:41:44
Satyr
ibiza11 писал(а):
Но мне кажется в данном случае Вы заблуждаетесь. в STM32L EEPROM отображается в общее адресное пространство на адреса начиная с 0x08080000.
Следовательно переменную можно разместить там явно, указав ее адрес.
Если оно так, то, с придираясь к тонкой игре слов, "разместить" ее там нельзя (нельзя ж туда записать чтото просто сказав *(uint8_t *) 0x08080000 = 1 ?), можно только объяснить линкеру, что неким чудным образом переменная там есть.
в случае IAR'а:
__no_init char var1 @ 0x08080000;
__root, если переменная используется, не нужен. это инструкция линкеру не выкидывать переменную, даже если в коде ее никто не использует.
но надо понимать, что на запись переменная так работать не будет. В отличии от атмел авр студио, где несмотря на какбе си, есть механизм, схожий с плюсовым переопределенным оператором-функцией, которой записывает значение в еепром.
флеш то он тоже напрямую адресуется, только с записью те же грабли -))
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 21:08:48
HHIMERA
Удобнее всего работать с SPL.
Не вижу разницы!!!
Плюс еще такая неприятная мелочь, как необходимость очистки перед записью, а очистка выполняется только постранично.
Пишется EEPROM и без стирания...
__no_init char var1 @ 0x08080000;
но надо понимать, что на запись переменная так работать не будет.
Это почему??? Всё работает!!!
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 21:48:14
Citizen Kane
HHIMERA писал(а):Это почему??? Всё работает!!!
Все же есть нюансы (кроме необходимости разблокировки памяти): например, в MD-контроллерах STM32L нельзя записать нулевой байт или half-word (16 битное полуслово), иначе контроллер зависает:
STM32L152 Programming manual писал(а):The Fast Byte Write, Fast Half Word Write, Byte Write and Half Word Write can be used only to write a NON NULL byte/half word.
В SPL это реализовано следующим образом:
stm32l1xx_flash.c писал(а):
Код: Выделить всё
if(Data != (uint8_t) 0x00)
{
*(__IO uint8_t *)Address = Data;
status = FLASH_WaitForLastOperation(FLASH_ER_PRG_TIMEOUT);
}
else
{
tmpaddr = Address & 0xFFFFFFFC;
tmp = * (__IO uint32_t *) tmpaddr;
tmpaddr = 0xFF << ((uint32_t) (0x8 * (Address & 0x3)));
tmp &= ~tmpaddr;
status = DATA_EEPROM_EraseWord(Address & 0xFFFFFFFC);
status = DATA_EEPROM_FastProgramWord((Address & 0xFFFFFFFC), tmp);
}
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 21:53:53
Citizen Kane
Сам SPL стараюсь не юзать, ибо смысла в ней не увидел, но изучить исходники для более быстрого ознакомления с предметной областью (а также examples оттуда же) - бывает весьма полезно.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 22:04:30
Satyr
ut1wpr писал(а):
Можно использовать и флеш в качестве eeprom, не знаю, как в 32, но в 8 было однозначно сказано, что endurance при этом резко снижается. Плюс еще такая неприятная мелочь, как необходимость очистки перед записью, а очистка выполняется только постранично. Ну, это все описано в документации, просто напоминаю.
http://www.st.com/web/en/resource/techn ... 165693.pdf
Использовал эту чтуку, правда изрядно модернизированную.
Насчет ресурса - сильно зависит от алгоритма и места, выделенного под хранилища.
В пределе (при нуле оверхеда формата хранения) ресурс стремится к <ресурс страницы> * <объем памяти, выделенные под хранилище> / <объем эмулируемого eeprom>
Т.е. если надо съэмулировать EEPROM на 256 байт, а отдать под него 3 страницы по 16Кб (флеша нынче дофига) и при среднем ресурсе 100.000 как всреднем по рынку (что собсно и эквивалентно указываемом СТ гарантированном минимуме 10000 в полном диапазоне температур и напряжений), то имеем 100000 * 49152 / 256 = 19.200.000
Что даже больше, чем для настоящиз EEPROMов, у которых ресурс, как правило, 1~10 млн перезаписей.
Re: STM32 новичку в ARM что к чему
Добавлено: Чт июн 20, 2013 22:25:03
Satyr
Citizen Kane писал(а):Сам SPL стараюсь не юзать, ибо смысла в ней не увидел
Смысл огромный - отсутствие необходимости изобретать велосипед.
Конечно, ошибок и недоделок там хватает и многое сделано чисто академически - простор для оптимизации огромный.
Однако того, от чего зависит скорость твоей программы и надо доработать напильником, чтоб достичь 99% от возможной эффективности - 1% исходников.
Re: STM32 новичку в ARM что к чему
Добавлено: Пт июн 21, 2013 05:46:57
k000858
размещение во флэш переменной в кейле
const uint8_t variable[6] __attribute__((at(0x08010000))) = {0xF1,0xF0,0x82,0x02,0,0};
Re: STM32 новичку в ARM что к чему
Добавлено: Пт июн 21, 2013 07:20:41
ut1wpr
k000858 писал(а):размещение во флэш переменной в кейле
const uint8_t variable[6] __attribute__((at(0x08010000))) = {0xF1,0xF0,0x82,0x02,0,0};
А если так:
Где разместит Кейл массив при такой записи? Мне кажется, тоже
во флеш.
Re: STM32 новичку в ARM что к чему
Добавлено: Пт июн 21, 2013 07:39:31
menzoda
ut1wpr писал(а):Где разместит Кейл массив при такой записи? Мне кажется, тоже во флеш.
Да, по умолчанию разместит во flash-памяти.
Re: STM32 новичку в ARM что к чему
Добавлено: Пт июн 21, 2013 07:51:20
k000858
в моем случае кейл разместит переменную по четко указанному адресу во флэш
затем по этому адресу можно читать значение. удобно юзать, если используется загрузчик.
Re: STM32 новичку в ARM что к чему
Добавлено: Пт июн 21, 2013 08:39:11
ut1wpr
menzoda писал(а):ut1wpr писал(а):Где разместит Кейл массив при такой записи? Мне кажется, тоже во флеш.
Да, по умолчанию разместит во flash-памяти.
Так и я ж об этом...

Но вообще-то изначально разговор зашел про eeprom. И про то, что делать, если его нет как такового в МК. Я для себя давно принял решение. Мне было просто интересно, кто и как выкручивается.
Re: STM32 новичку в ARM что к чему
Добавлено: Пт июн 21, 2013 08:43:57
k000858
ut1wpr писал(а):menzoda писал(а):
Да, по умолчанию разместит во flash-памяти.
Так и я ж об этом...

Но вообще-то изначально разговор зашел про eeprom. И про то, что делать, если его нет как такового в МК. Я для себя давно принял решение. Мне было просто интересно, кто и как выкручивается.
Есть апноут как сэмулировать EEPROM во флэш. оч удобно пользоваться
гуглите AN3969 (это для F4). для остальных есть тоже самое
Re: STM32 новичку в ARM что к чему
Добавлено: Пт июн 21, 2013 16:07:16
menzoda
k000858 писал(а):Есть апноут как сэмулировать EEPROM во флэш. оч удобно пользоваться
При записи во Flash-память, ей нельзя пользоваться, что впрочем логично. Нужно отключать все прерывания на время записи, или копировать код прерываний в SRAM. Ни то ни другое мне не нравиться, поэтому я бы предпочел внешнюю FRAM, ну или EEPROM.