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

 
 
> Эмуляция EEPROM в первых двух секторах STM32F4, Старт программы с предопределённого адреса
AlexUT4
сообщение Aug 28 2013, 04:48
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 2-05-11
Пользователь №: 64 731



Всем добрый день.
Для камня STM32F407 взял эмулятор EEPROM с сайта st. Вложил в свой проект с оригинальными настройками как в примере. Всё вроде как работает нормально. Но там EEPROM эмулируется во втором и третьем секторах FLASH памяти (которые по 16к). Я в своём проекте перенёс эмуляцию EEPROM в первые два сектора и соответственно сдвинул таблицу векторов прерывания на второй сектор:
Код
define symbol __ICFEDIT_intvec_start__ = 0x08008000; (в stm32f4xx_flash.icf)
#define VECT_TAB_OFFSET  0x8000 (в system_stm32f4xx.c)

Необходимые изменения внёс в eeprom.h.

В своём проекте в начале вставил пример записи трёх переменных в память. Всё как бы работает, НО только с отладчиком из IAR контроллер стартует как надо. Если сделать сброс кнопкой, то уже не стартует.
Я пока перенёс эмуляцию EEPROM в последние два сектора, но они по 128к и откусывать пол флеша как-то не охота. В такой конфигурации всё работает как надо.

Чувствую, что надо указать в прерывании сброса откуда стартовать программе. Помогите разобраться с проблемкой.
Спасибо.


--------------------
Александр, UT4UBL
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Rash
сообщение Oct 7 2014, 06:41
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 639
Регистрация: 5-09-05
Пользователь №: 8 231



Цитата(AlexUT4 @ Aug 28 2013, 22:40) *
Большое спасибо за наводку....


сделал по такому примеру, всё работает, но есть следующий вопрос:
При такой записи регион с дырой получается, но есть одно НО, вектора прерываний разместятся с адреса 0x08000000, а код весь будет размещён после выделенных регионом под EEPROM. Т.е. такой записи (где используются сектора 1 и 2) код разместится с адреса 0x0800c000, а если назначить для эмуляции EEPROM сектора 2 и 3, то код разместится уже по адресу 0x08010000. Т.о. получается, если делать дыру во флеши для EEPROM надо использовать всегда сектора начиная с 1-го иначе будет потеря секторов флеши. И также 0 сектор тоже практически будет потерян по памяти, т.к. в нём кроме таблицы прерываний ничего не размещается (т.е. для эмуляции EEPROM будут потеряны 3 сектора, 2 сектора на EEPROM, а один будет гулять практически пустым). Можно ли это как то обойти, может ещё нужно в линкере чего-то прописывать? Прибивать ф-ции или массивы констант по конкретным адресам желания нет.
В данном проект памяти хватает и потеря 3-х секторов по 16К не критична, но на будущее хочется уметь использовать всю память

Сообщение отредактировал IgorKossak - Oct 7 2014, 14:11
Причина редактирования: избыточное цитирование
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 7 2014, 09:34
Сообщение #3


Гуру
******

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



Цитата(Rash @ Oct 7 2014, 09:41) *
И также 0 сектор тоже практически будет потерян по памяти, т.к. в нём кроме таблицы прерываний ничего не размещается
Мне сейчас неохота рыть документацию, но у F1xx при включении защиты от чтения первые два сектора автоматически защищаются и от записи. И переписать их можно только стерев весь кристалл. Здесь нет чего-то подобного? Как бы не получилось, что включив защиту от чтения вы поломаете работу этой эмулированной ЭСППЗУ. А в целом я бы отдал нулевой сектор загрузчику и забыл про него, а программу размещал бы целым куском уже после секторов эмуляции ЭСППЗУ.


--------------------
На любой вопрос даю любой ответ
"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
adnega
сообщение Oct 7 2014, 09:48
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Сергей Борщ @ Oct 7 2014, 13:34) *
А в целом я бы отдал нулевой сектор загрузчику и забыл про него, а программу размещал бы целым куском уже после секторов эмуляции ЭСППЗУ.

+1. Собственно, с такой картой распределения секторов ничего лучше и не придумаешь.

Код
MEMORY
{
  RAM (xrw)  : ORIGIN = 0x20000000, LENGTH = 128K
  CCMRAM (xrw) : ORIGIN = 0x10000000, LENGTH = 64K
  BKPSRAM(rw!x): ORIGIN = 0x40024000, LENGTH = 4K
  
  BOOTLOADER (rx) : ORIGIN = 0x08000000, LENGTH = 16K
  EEPROM (rw!x) : ORIGIN = 0x08004000, LENGTH = 16K + 16K
  IMAGE (rw!x) : ORIGIN = 0x0800C000, LENGTH = 16K + 64K
  FLASH (rwx) : ORIGIN = 0x08020000, LENGTH = 128K
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- AlexUT4   Эмуляция EEPROM в первых двух секторах STM32F4   Aug 28 2013, 04:48
- - Сергей Борщ   QUOTE (AlexUT4 @ Aug 28 2013, 06:48) Чувс...   Aug 28 2013, 05:40
- - scifi   Цитата(AlexUT4 @ Aug 28 2013, 08:48) Но т...   Aug 28 2013, 07:02
- - AlexUT4   Цитата(Сергей Борщ @ Aug 28 2013, 08:40) ...   Aug 28 2013, 08:04
|- - scifi   Цитата(AlexUT4 @ Aug 28 2013, 12:04) есть...   Aug 28 2013, 08:56
|- - Сергей Борщ   QUOTE (AlexUT4 @ Aug 28 2013, 10:04) То е...   Aug 28 2013, 09:18
||- - scifi   Цитата(Сергей Борщ @ Aug 28 2013, 13:18) ...   Aug 28 2013, 09:33
|- - toweroff   Цитата(AlexUT4 @ Aug 28 2013, 12:04) есть...   Aug 28 2013, 09:26
- - AlexUT4   Цитата(Сергей Борщ @ Aug 28 2013, 12:18) ...   Aug 28 2013, 09:45
|- - scifi   Цитата(AlexUT4 @ Aug 28 2013, 13:45) Но к...   Aug 28 2013, 11:48
- - toweroff   Я с Кейлом бы помог, но наверняка Ваш линкер имеет...   Aug 28 2013, 10:11
- - AlexUT4   Цитата(scifi @ Aug 28 2013, 14:48) В ...   Aug 28 2013, 19:40
|- - scifi   Цитата(AlexUT4 @ Aug 28 2013, 23:40) Но т...   Aug 29 2013, 07:20
- - AlexUT4   Цитата(scifi @ Aug 29 2013, 10:20) Наверн...   Aug 29 2013, 08:16
- - vlad_new   Я тут то же ковырялся с дырой для флеша в кейле. Н...   Aug 30 2013, 10:18
|- - scifi   Цитата(vlad_new @ Aug 30 2013, 14:18) Я т...   Aug 30 2013, 12:03
- - A. Fig Lee   С огнем играете. Сколько там циклов перезаписи? У ...   Aug 30 2013, 10:39
||- - kolobok0   Цитата(Сергей Борщ @ Oct 7 2014, 13:34) ....   Oct 7 2014, 17:58
|- - scifi   Цитата(Rash @ Oct 7 2014, 10:41) Можно ли...   Oct 7 2014, 10:14
- - Rash   не много не по секторам, но про эмуляцию. Модерни...   Oct 8 2014, 14:17


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

 


RSS Текстовая версия Сейчас: 31st July 2025 - 13:56
Рейтинг@Mail.ru


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