Эмулированный eeprom

C_D
Понедельник, 03 августа 2015 г., 20:12
Кто -нибудь здесь работал с эмулированным EEPROM на STM32?

Я работаю над приложением, где мне нужно сделать калибровку одной из них и сохранить несколько байтов данных. Они будут писать очень редко (возможно, только один раз) и часто читают.

Я видел в потоке RTC, что в памяти было несколько байт хранения, которые поддерживаются аккумулятором RTC, однако я бы предпочел, чтобы эти калибровочные данные были заменены, даже если аккумулятор RTC заменяется.

Похоже, ST предоставила приложение, подробно описывающую их стратегию «эмулированного EEPROM»: AN2594
И есть реализация этого для клена: клено-эпок-стимуляция

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

Martinayotte
Понедельник, 3 августа 2015 г., 20:24
Вы также можете использовать небольшой i2c eeprom, они дешевы, и вы можете получить довольно большие, такие как AT24C512.

Rogerclark
Понедельник, 3 августа 2015 г., 21:23
@C_d

Насколько я знал, библиотека EEPROM работает.

https: // github.com/rogerclarkmelbourne/ ... IES/EEPROM

Размер страницы на Maple Mini и т. Д. Составляет 1K, а на больших (устройствах высокой плотности) его 2K.

C_D
Понедельник, 3 августа 2015 г., 23:06
: шок:

STM32Duino никогда не перестает меня удивлять 8-)

Должен был проверить здесь первый...

Пабломуро
Чт 13 июля 2017 г. 2:15 утра
[Rogerclark - Пн, 03 августа 2015 г., 21:23] - @C_d

Насколько я знал, библиотека EEPROM работает.

https: // github.com/rogerclarkmelbourne/ ... IES/EEPROM

Размер страницы на Maple Mini и т. Д. Составляет 1K, а на больших (устройствах высокой плотности) его 2K.
G'day,
Я заметил в библиотеке "eeprom" отсутствие функции "eeprom.Обновление », так что я добавил в eeprom.CPP Функция:

Uint16 eepromclass :: update (адрес uint16, данные Uint16)
{
  If (eeprom.Читать (адрес)! = Данные)
   {
     Eeprom.написать (адрес, данные);
   }
   Uint16 status = ee_verifypagefullwritevariable (адрес, data);
Статус возврата;
}

А также добавлен в файл "eeprom.H "В разделе класса EepromClass:

Uint16 Обновление (Uint16 Adder, Uint16 Data);

Это правильно? Будет ли это работать?

Спасибо за замечательную работу "Arduino для STM32"

victor_pv
Чт 13 июля 2017 г., 2:30
[Пабломуро - Чт 13 июля 2017 г., 2:15 утра] -
G'day,
Я заметил в библиотеке "eeprom" отсутствие функции "eeprom.Обновление », так что я добавил в eeprom.CPP Функция:

Uint16 eepromclass :: update (адрес uint16, данные Uint16)
{
  If (eeprom.Читать (адрес)! = Данные)
   {
     Eeprom.написать (адрес, данные);
   }
   Uint16 status = ee_verifypagefullwritevariable (адрес, data);
Статус возврата;
}

А также добавлен в файл "eeprom.H "В разделе класса EepromClass:

Uint16 Обновление (Uint16 Adder, Uint16 Data);

Это правильно? Будет ли это работать?

Спасибо за замечательную работу "Arduino для STM32"
Функция записи уже включает в себя эту проверку:
Ee_verifypagefullWriteVariable (адрес, data);

Так что вам не нужна эта часть, и вы можете просто вернуть значение, возвращаемое write (). Такой как: stephen@i7:~/sketchbook/hardware/Arduino_STM32/tools/linux/dfu-util$ ./dfu-util bash: ./dfu-util: cannot execute binary file: Exec format error stephen@i7:~/sketchbook/hardware/Arduino_STM32/tools/linux/dfu-util$ stephen@i7:~/sketchbook/hardware$ ls -l ~/sketchbook lrwxrwxrwx 1 stephen stephen 17 Nov 9 17:04 /home/stephen/sketchbook -> sketchbook_stm32/ stephen@i7:~/sketchbook/hardware$ ls -l ~/sketchbook/hardware/ total 0 lrwxrwxrwx 1 stephen stephen 32 Nov 22 15:45 Arduino_STM32 -> ../../Arduino_STM32-201115-1325/ stephen@i7:~/sketchbook/hardware/Arduino_STM32/tools/src$ ./build_dfu-util.sh

Пабломуро
Чт 13 июля 2017 г. 3:13 утра
Спасибо, я скачаю последнюю версию, конечно, будет лучше.

Максиан
Солнце 12 ноября 2017 г. 13:48
Английский вариант:
Помоги мне! Каналы, приведенные после отключения мощности постоянного тока, не сохраняются. После подключения питания при чтении данных eEPROM = 0. Что я не так?
Я использую Arduino Ide с ядром STM32Duino
код: Sketch uses 11,324 bytes (9%) of program storage space. Maximum is 122,880 bytes. Global variables use 2,560 bytes of dynamic memory. Failed to open serial device. dfu-util: Invalid DFU suffix signature dfu-util: A valid DFU suffix will be required in a future dfu-util release!!! dfu-util: No DFU capable USB device available dfu-util 0.8 Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc. Copyright 2010-2014 Tormod Volden and Stefan Schmidt This program is Free Software and has ABSOLUTELY NO WARRANTY Please report bugs to [email protected]

Пито
Солнце 12 ноября 2017 г. 14:21
Вы смешиваете if (buttonNumber == 0 && buttonState != 1) // TURN OFF RED LIGH ON POWER { digitalWrite(io_led[11], HIGH); } if (buttonNumber == 0 && buttonState != 0) // TURN ON RED LIGH ON POWER { digitalWrite(io_led[11], LOW); }

Максиан
Солнце 12 ноября 2017 г. 15:15
[Пито - Солнце 12 ноября 2017 г. 14:21] - Вы смешиваете Serial.println(Serial(F("Teste"))); <= This doesn't WORK

Кбахи
Сб 21 апреля 2018 г. 12:06
Я запускаю этот пример для эмуляции EEPROM на черной таблетке STM32F103C8T6.

Когда я выбираю 3, прочитайте/записываю тест, я иногда получаю ошибку 81 (вне хранилища), а иногда (без действительной страницы).
Попытки 2K работали один раз (статус возвращен 0), но вернул AB или последующие попытки.

Эмуляция eeprom поддерживается на черных таблетках и синих таблетках?
Если нет, то какой способ сделать это? Всегда есть at24cxx i2c eeproms, но это означает дополнительную сложность и меньше штучек.

электрический
Сб 21 апреля 2018 г., 3:02
Я использую эмуляцию EEPROM с синей таблеткой и клоном Maple Mini уже несколько недель. У меня не было никаких проблем.

Rogerclark
Сб 21 апреля 2018 г., 3:55
Отлично работает и для меня.


Важный.

Это просто эмуляция. Если вы относитесь к нему как к настоящему EEPROM и выпустите тысячи циклов стирания / записи, вы будете носить вспышку памяти, очень быстро, поскольку у него всего 10 000 циклов переписывания - следовательно, она не очень полезна для регистрации данных.


Однако это хорошо для хранения настроек, которые не меняются очень часто

Кбахи
SAT 21 апреля 2018 г. 16:41
Это не для сбора данных. Это для сохранения настроек. Когда определенные настройки изменятся по умолчанию, они будут написаны. Всего лишь горстка в неделю.

Обратите внимание, что приложение (контроллер телескопа) использует API Arduino, который использует 8 -битные аргументы, а затем строки 2 или 4 из них для 16 и 32 -битных значений.

Код обертки здесь: https: // github.com/hjd1964/onstep/blob/alpha/nv.час

Это работает для Arduino Mega 2560 и Teensy 3.х.

Тогда он хранит такие вещи:
const int io_led[18] = {PC6, PG6, PG8, PG5, PG7, PD13, PD15, PD12, PD14, PG4, PG3, PC7, PG2, PB12, PD11, PD10, PB14, PB13};

Rogerclark
Сб 21 апреля 2018 г., 20:56
Основные функции для хранения данных в Flash (около верхней части удобного пространства) работают ОК

Я нахожу библиотеку EEPROM очень ограниченной.

Мы, вероятно, должны сделать, так это сделать новый либарарий с некоторыми лучшими функциями, так как действительно процесс..

Читать страницу в ram
Обновить оперативную память с новыми данными в некоторых местах
Проверьте, действительно ли данные изменились
Если данные изменились....

Разблокировать страницу в Flash
Стереть страницу в Flash
Напишите оператив
Блокировка вспышка

ВХОД & ВЫХОД