Перейти к содержанию
    

Инициализация EEPROM в IAR STM32L1

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

 

Пока у меня это никак не получается, хотя все остальное, связанное с EEPROM, работает.

Причем если включить отладку в симуляторе, то эти данные грузятся в EEPROM симулятора,

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

 

IAR EW ARM 7.50.1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В ARM версии IAR вроде нет встроенных средств для работы с EEPROM. Что в map-файле видно? Сдаётся мне это проделки оптимизатора. Попробуйте volatile. После того как данные появятся в hex вижу проблему с flash loader, который может тоже не знать про eeprom, но это только догадки, так что пробуйте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почитал, потыкался, и судя по всему 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 инициализация сейчас нравиться даже больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В Keil для программирования flash выбирается алгоритм. Например, OTP запрограммировать - нужно добавить алгоритм для этого. Может, и для EEPROM нужен дополнительный алгоритм? Сам c процессорами с EEPROM в Keil не работал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может, и для EEPROM нужен дополнительный алгоритм?

Да, для записи в EEPROM STM32L1 нужна разблокировка защиты, отличная от разблокировки флеш. Вот ИАР ее и не поддерживает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

 

PS: А вообще, EEPROM конечно лучше в рантайме инициализировать и каждый раз проверять на корректность содержимого при старте. Мало ли кто там что прошил/наконфигурил или "само слетело"...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, для записи в EEPROM STM32L1 нужна разблокировка защиты, отличная от разблокировки флеш. Вот ИАР ее и не поддерживает.

Имею в виду не свою программу, а выбираемый в настройках проекта Programming Algorithm. Может, что-то подобное и в IAR есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Имею в виду не свою программу, а выбираемый в настройках проекта Programming Algorithm. Может, что-то подобное и в IAR есть.

 

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

 

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

 

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

 

Забыл сказать, эти два способа можно комбинировать :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

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

Снимаю шляпу, если вы это все освоили и применяете :a14:

Я так глубоко никогда не лез.

 

Это все здорово, но в данном случае речь идет просто о не поддержке ИАРом в аппаратном отладчике записи в EEPROM.

Применение макросов и самописного Flash Loader - это чересчур трудоемкие костыли для исправления их недоработок.

 

Проще применить run-time инициализацию.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Снимаю шляпу, если вы это все освоили и применяете :a14:

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

 

Я так глубоко никогда не лез.

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

 

Это все здорово, но в данном случае речь идет просто о не поддержке ИАРом в аппаратном отладчике записи в EEPROM.

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

 

 

Применение макросов и самописного Flash Loader - это чересчур трудоемкие костыли для исправления их недоработок.

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

 

Проще применить run-time инициализацию.

В данном случае да, но инструмент которым вы работаете лучше знать получше :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Абсолютно с вами согласен в том, что применяемый инструмент желательно знать в совершенстве.

Но лень-матушка и желание легких путей - это двигатель прогресса :)

 

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

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

а чудо шведской частной компании, за которое положено платить приличные деньги.

Позиционируется как "купил-поставил-работаешь". Без недели плясок с бубном и дописывания поддержки нужного чипа.

 

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

С этой мыслью тоже не согласен, все это так только для процесса разработки.

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

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ну мы же их суппорт не теребим ;)

 

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

 

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

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

 

PS: Оп-па, в натуре Ж8-/ "Headquarters: Uppsala, Sweden"

Я-то, думал, что "амеров" граблю ;)

Изменено пользователем Obam

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Только специализированный программатор

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

 

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Он там дорог, избыточен и очень неудобен.

 

Для STM32, напр. уже упомянутый "STM32 ST-LINK Utility"

Для опытного и мелкосерийного производства можно применять его GUI вариант, хотя мне не нравиться его окно редактора, которое навязчиво активно.

Случайно мышью куда-нибудь щелкнешь, а он уже начинает без спроса флешь править - кто это только придумал :wacko:

А для серийного производства - его CLI вариант - консольное приложение.

Задаешь батничек со всеми командами - оператор щелкает - и готово.

Если плата/блок сложнее и есть серийность, так вообще самопальный тестер делаем, который автоматом все программирует, тестирует и логи пишет.

 

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

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

Вам то это не знать :)

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...