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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Инициализация EEPROM в IAR STM32L1
Baser
сообщение Dec 14 2017, 15:20
Сообщение #1


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Как в IAR для STM32L1 сделать так, чтобы инициализированная структура, находящаяся в EEPROM, программировалась одним проходом с флеш памятью. То есть, чтобы данные попадали в hex файл прошивки.

Пока у меня это никак не получается, хотя все остальное, связанное с EEPROM, работает.
Причем если включить отладку в симуляторе, то эти данные грузятся в EEPROM симулятора,
а если включить отладку в плате через ST-LINK, то ничего нет. И hex файл без этих данных.

IAR EW ARM 7.50.1
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Dec 14 2017, 16:46
Сообщение #2


Гуру
******

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



Помнится, в ИАРе для AVR можно было вывести дополнительный HEX для области ЭСППЗУ. Может посмотреть в эту сторону? А уже потом склеить их вместе при помощи какой-либо сторонней вспомогательной программы.


--------------------
На любой вопрос даю любой ответ
"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
VladislavS
сообщение Dec 14 2017, 18:43
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



В ARM версии IAR вроде нет встроенных средств для работы с EEPROM. Что в map-файле видно? Сдаётся мне это проделки оптимизатора. Попробуйте volatile. После того как данные появятся в hex вижу проблему с flash loader, который может тоже не знать про eeprom, но это только догадки, так что пробуйте.
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 15 2017, 10:31
Сообщение #4


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Почитал, потыкался, и судя по всему IAR ARM не поддерживает у себя какую-либо работу с EEPROM.
- регион EEPROM в файле линкера такой-же как и для rw data.
- все что помещается в регион EEPROM компилятор считает за данные в ОЗУ и соответственно обыденно с ними и пытается работать.
- если эти данные делать __no_init, то все корректно.
- если попытаться им присвоить начальные значения, компилятор генерит секцию инициализации в стартапе как для ОЗУ.
как следствие, после старта приложения проходит попытка записи в EEPROM как в ОЗУ и взводятся флаги ошибок записи.
- дебаггер об особой области EEPROM знает, но сам записывать в нее не умеет (write failed (CPU data abort))

На сайте ИАРа нашел Tech Note "Initializing the eeprom at program download" для STM8, где иаровцы говорят, что это они пока не доделали, но обещают доделать. Два года уже прошло...
Просмотрел Release Notes на новые версии ИАРа, включая ноне последний 8.20, нигде упоминания слова eeprom нет.

Так что, пока в ИАРе нужно делать инициализацию самому на run-time стадии.

з.ы. может быть есть еще вариант, наподобие предложенного Сергеем, заставить линкер генерить отдельный файл прошивки для региона EEPROM, в ручную добавлять эти строки в общий файл прошивки и скармливать его нормальному программатору, типа STM32 ST-LINK Utility. Он точно умеет писать все.
Но исследовать не буду. Ключи от AVR линкер ARMа не понимает, а мне после размышлений, для моих задач, run-time инициализация сейчас нравиться даже больше.
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 15 2017, 10:55
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



В Keil для программирования flash выбирается алгоритм. Например, OTP запрограммировать - нужно добавить алгоритм для этого. Может, и для EEPROM нужен дополнительный алгоритм? Сам c процессорами с EEPROM в Keil не работал.
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 15 2017, 11:15
Сообщение #6


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(ViKo @ Dec 15 2017, 12:55) *
Может, и для EEPROM нужен дополнительный алгоритм?

Да, для записи в EEPROM STM32L1 нужна разблокировка защиты, отличная от разблокировки флеш. Вот ИАР ее и не поддерживает.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Dec 15 2017, 11:47
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



В конфигурации линкера всегда можно указать какие секции "initialize by copy", а какие "do not initialize". Во втором случае стартап не будет при старте пытаться перезаписать сегмент eeprom.

Разблокировать запись можно в макросе execUserFlashInit(), запускаемом перед прошивкой. Это как раз не трудно.


PS: А вообще, EEPROM конечно лучше в рантайме инициализировать и каждый раз проверять на корректность содержимого при старте. Мало ли кто там что прошил/наконфигурил или "само слетело"...
Go to the top of the page
 
+Quote Post
ViKo
сообщение Dec 15 2017, 11:57
Сообщение #8


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Baser @ Dec 15 2017, 14:15) *
Да, для записи в EEPROM STM32L1 нужна разблокировка защиты, отличная от разблокировки флеш. Вот ИАР ее и не поддерживает.

Имею в виду не свою программу, а выбираемый в настройках проекта Programming Algorithm. Может, что-то подобное и в IAR есть.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Dec 15 2017, 12:09
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(ViKo @ Dec 15 2017, 14:57) *
Имею в виду не свою программу, а выбираемый в настройках проекта Programming Algorithm. Может, что-то подобное и в IAR есть.


У IAR есть два механизма для этого.

1. Перед загрузкой данных запускаются макросы, в которых можно сконфигурировать чип для корректной загрузки. Проинициализировать генераторы, шины, разлочить запись и т.д.

2. Механизм Flash Loader. В память процессора загружаеются специальные функции инициализации/стирания/записи блоков данных, написанные пользователем и данные для прошивки. Управление передаётся этим функциям по мере загрузки новых данных. При таком подходе можно любые данные куда угодно прошивать.

Забыл сказать, эти два способа можно комбинировать sm.gif
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 15 2017, 12:53
Сообщение #10


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(VladislavS @ Dec 15 2017, 14:09) *
У IAR есть два механизма для этого.

1. Перед загрузкой данных запускаются макросы ...

2. Механизм Flash Loader. ...

Снимаю шляпу, если вы это все освоили и применяете a14.gif
Я так глубоко никогда не лез.

Это все здорово, но в данном случае речь идет просто о не поддержке ИАРом в аппаратном отладчике записи в EEPROM.
Применение макросов и самописного Flash Loader - это чересчур трудоемкие костыли для исправления их недоработок.

Проще применить run-time инициализацию.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Dec 15 2017, 13:29
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Baser @ Dec 15 2017, 15:53) *
Снимаю шляпу, если вы это все освоили и применяете a14.gif

А как по другому? Это у AVR или там STM8 всё стандартно, а ARM-ов такой зоопарк, да ещё и схемы включения одного чипа могут быть разными.

Цитата(Baser @ Dec 15 2017, 15:53) *
Я так глубоко никогда не лез.

Да это в первый раз тяжело, а потом всё по шаблону... У меня на одном изделии Flash Loader на ЖКИ выводил информацию по процессу прошивки. Сначала ради отладки, потом просто для хохмы.

Цитата(Baser @ Dec 15 2017, 15:53) *
Это все здорово, но в данном случае речь идет просто о не поддержке ИАРом в аппаратном отладчике записи в EEPROM.

3-4 строки для разлочки записи в макросе и всё взлетит. Чутка документацию просто почитать надо.


Цитата(Baser @ Dec 15 2017, 15:53) *
Применение макросов и самописного Flash Loader - это чересчур трудоемкие костыли для исправления их недоработок.

Это не костыли!!! Это штатный механизм работы IAR. Просто для каких-то чипов в комплекте уже есть полноценные скрипты и flashloader, а для каких-то их надо сделать самому. Ну откуда знать разработчикам IAR на какой порт SPI и какого типа флэшку вы повисите в своём проекте? А шить её всё равно надо.

Цитата(Baser @ Dec 15 2017, 15:53) *
Проще применить run-time инициализацию.

В данном случае да, но инструмент которым вы работаете лучше знать получше sm.gif
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 15 2017, 13:53
Сообщение #12


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Абсолютно с вами согласен в том, что применяемый инструмент желательно знать в совершенстве.
Но лень-матушка и желание легких путей - это двигатель прогресса sm.gif

Цитата(VladislavS @ Dec 15 2017, 15:29) *
Это не костыли!!! Это штатный механизм работы IAR. Просто для каких-то чипов в комплекте уже есть полноценные скрипты и flashloader, а для каких-то их надо сделать самому.

Вот об этом я и говорю! Это и есть недоработки ИАРовцев. Это же не open-source проект IDE типа "сделай сам",
а чудо шведской частной компании, за которое положено платить приличные деньги.
Позиционируется как "купил-поставил-работаешь". Без недели плясок с бубном и дописывания поддержки нужного чипа.

Цитата
Ну откуда знать разработчикам IAR на какой порт SPI и какого типа флэшку вы повисите в своём проекте? А шить её всё равно надо.

С этой мыслью тоже не согласен, все это так только для процесса разработки.
Программировать чипы/платы на производстве никто ИАРом не будет.
Только специализированный программатор, куда можно грузить всю нужную конфигурацию и прошивки из сохраненного проекта.
Go to the top of the page
 
+Quote Post
Obam
сообщение Dec 15 2017, 16:46
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 756
Регистрация: 14-11-14
Пользователь №: 83 663



Сам первое включение осуществлял после "STM32 ST-LINK Utility" - то, что нужно было положить в EEPROM "не целованного" контроллера.

Цитата
Это же не open-source проект IDE типа "сделай сам", а чудо шведской частной компании, за которое положено платить приличные деньги.

Ну мы же их суппорт не теребим wink.gif

Шведской? Ж8-\

Цитата
Программировать чипы/платы на производстве никто ИАРом не будет.

Для производства "STM32 ST-LINK Utility" вполне себе инструмент.

PS: Оп-па, в натуре Ж8-/ "Headquarters: Uppsala, Sweden"
Я-то, думал, что "амеров" граблю wink.gif

Сообщение отредактировал Obam - Dec 15 2017, 16:49


--------------------
Пролетарий умственного труда.
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Dec 15 2017, 18:45
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Baser @ Dec 15 2017, 16:53) *
Только специализированный программатор

А это что за зверь такой, можно пример?

Цитата(Obam @ Dec 15 2017, 19:46) *
Для производства "STM32 ST-LINK Utility" вполне себе инструмент.

Хорошо вам там на STM, а остальным как быть?
Go to the top of the page
 
+Quote Post
Baser
сообщение Dec 15 2017, 22:13
Сообщение #15


Просто Che
*****

Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881



Цитата(VladislavS @ Dec 15 2017, 20:45) *
А это что за зверь такой, можно пример?

Дык, любой софт для конкретного МК, который реализует только функции программирования. Вы же не будете на производство для наладчиков покупать ИАР wink.gif
Он там дорог, избыточен и очень неудобен.

Для STM32, напр. уже упомянутый "STM32 ST-LINK Utility"
Для опытного и мелкосерийного производства можно применять его GUI вариант, хотя мне не нравиться его окно редактора, которое навязчиво активно.
Случайно мышью куда-нибудь щелкнешь, а он уже начинает без спроса флешь править - кто это только придумал wacko.gif
А для серийного производства - его CLI вариант - консольное приложение.
Задаешь батничек со всеми командами - оператор щелкает - и готово.
Если плата/блок сложнее и есть серийность, так вообще самопальный тестер делаем, который автоматом все программирует, тестирует и логи пишет.

Цитата
Хорошо вам там на STM, а остальным как быть?

Как всем. Для любого семейства МК есть или фирменный бесплатный или сторонний платный софт для программирования на производстве.
Вам то это не знать sm.gif

Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 1st August 2025 - 20:24
Рейтинг@Mail.ru


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