Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
savdm0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 34
1

Работа с EEPROM (логика записи данных, чтение и защита)

09.04.2015, 03:03. Просмотров 2972. Ответов 11
Метки нет (Все метки)

Здравствуйте, подскажите алгоритм или код чтения и записи в EEPROM с равномерным истиранием ячеек, и с возможностью защиты данных на случай какого-то сбоя в записи. Честно скажу есть сомнения в моем варианте: первая ячейка примет 0 три последующие значения параметров, следующая 1. Если данные изменились то после 1 цы пишем три новых, меняем 1 на ноль и после закрываем 1 ой. При чтении ищем 1 цу три значения и ноль. Читаем при запуске.
Нужно записывать значения двух переменных int например числа 20 и 30 и переменную long число соответствующее например: 30 минут = 1 800 000 (можно и 30 если не хватит ячейки)
Слежу за темой, буду благодарен за помощь.
Планируется изменять значения во время работы и соответственно сохранять изменения.

 Комментарий модератора 
Используйте поиск по форуму:

Сохранение структур в EEPROM AT90CAN128 (CVAVR 1.25)
Методы тестирования EEPROM. Тестер
Работа с EEPROM (ATMel Studio)
Atmel Studio 6.1. AVR240, работа с EEPROM
Работа с EEPROM Attiny2313
Работа с EEPROM (ATMega16)
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2015, 03:03
Ответы с готовыми решениями:

Инкремент адреса при записи данных в EEPROM
Приветствую всех! Какое есть решение для такой задачи: есть три кнопки. Нажимаю в произвольном...

Чтение из EEPROM
Преамбула: В программе есть несколько строк (строковых констант), которые используются только для...

Запись/чтение EEPROM
Первый раз столкнулся со встроенным еепромом, немного погуглил, понял что есть 3 пути работы с ним...

ATmega32. Чтение EEPROM
Всем привет Кто поможет с программой которая передает текст из Flash памяти программ в...

Работа в Internet c виртуальной машины - 100% защита Ваших данных
Я считаю, что безопасность компьютера обеспечивает грамотная работа с программой виртуальная...

11
Voland_
1699 / 1043 / 98
Регистрация: 04.01.2010
Сообщений: 3,534
09.04.2015, 09:03 2
посмотрите библиотеки эмуляции EEPROM для контроллеров 8051 и/или STM8 в их SDK. Там есть алгоритмы, которые пишут не в EEPROM а в FLASH с постраничным стиранием. Алгоритм там немного сложнее, чем вы предлагаете (ваш вполне пригоден, кстати, только надо придумать момент зацикливания и возможной ошибке при неполной записи. То есть что-то типа чексуммы). Там каждая переменная (например для STM8) имеет свой ID и размер. Вычитывается последняя записанная копия этой переменной, из многих, находящихся в памяти. Но чтобы переделать алгоритм под свою задачу желательно понять, как пишутся данные во FLASH.
1
savdm0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 34
09.04.2015, 12:34  [ТС] 3
Voland_, да, с чексумм будет интересно, нужно заполнить пробел знаний по этому воппросу
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
09.04.2015, 14:19 4
ИМХО:
1. Если EEPROM планируется очень часто перезаписывать, то лучше взять микросхему ОЗУ с ионистором. EEPROM имеет ограниченное число циклов записи.
2. Некоторые серии МК имеют врожденный дефект, при снижении питания скачут по коду и если есть процедура записи в EEPROM обязательно в неё попадают (нее реально попадают ) с произвольной модификацией содержимого, поэтому внешний супервизор из "роскоши" переходит в разряд обязательно должен быть.
2
09.04.2015, 14:19
savdm0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 34
09.04.2015, 15:23  [ТС] 5
Витальич, думаю, что пару раз в год максимум, память только для запуска с предустановленными параметрами, чтобы они не сбрасывались при потери питания.
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
09.04.2015, 15:42 6
Если место позволяет, то пишите в два, три итд места при считывании, ну тут много вариантов можно придумать.
0
savdm0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 34
09.04.2015, 23:23  [ТС] 7
Думаю ее решить в лоб, тем более все значения из массива определенных, будет выбираться, и перестраховаться записывая в две - три ячейки каждое значение. То есть на запись потребуется от 8 до 11 ячеек
0
Витальич
1274 / 1184 / 174
Регистрация: 02.12.2013
Сообщений: 4,886
09.04.2015, 23:30 8
А какой МК планируете использовать?
0
savdm0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 34
10.04.2015, 00:34  [ТС] 9
Витальич, Attiny84 уже вовсю тестирую на готовом образце, остается только с EEPROM разобраться.
0
Voland_
1699 / 1043 / 98
Регистрация: 04.01.2010
Сообщений: 3,534
10.04.2015, 10:20 10
Цитата Сообщение от savdm0 Посмотреть сообщение
Attiny84
Самый редкий образец, который я когда-либо встречал среди AVR...
0
ValeryS
Модератор
7523 / 5700 / 736
Регистрация: 14.02.2011
Сообщений: 19,509
Завершенные тесты: 1
13.04.2015, 22:19 11
Цитата Сообщение от savdm0 Посмотреть сообщение
Честно скажу есть сомнения в моем варианте: первая ячейка примет 0 три последующие значения параметров, следующая 1.
Я бы записывал структуру
типа
C
1
2
3
4
5
6
7
8
int offset
struct Save
{
byte val1;
byte val1;
byte val2;
byte val3;
}
при первой записи offset равен FFFE при второй FFFC при третьей FFF8 ну и так далее
количество нулей это смешение-1 структуры
почему ноль, потому что все известные мне ПЗУ после стирания записывают в свои ячейки 1, и запрограммировать из 1 в 0 очень просто, обратно только через стирание
как искать куда записывать?
C
1
2
3
4
5
6
7
8
9
10
11
12
int i=0;
int tmp=offset;
if(tmp==0)
 //записи закончились, стирать сегмент и начинать заново
while(tmp%2==0)
   {
    i++;
    tmp/=2;
   }
int offsetSave=(i-1)*sizeof(Save);
SaveByte(-1*i,&offset)
SaveBloc(offsetSave,sizeof(Save));
это только идея, для нормальной работы требуется доработать напильником
1
savdm0
0 / 0 / 0
Регистрация: 20.02.2015
Сообщений: 34
14.04.2015, 16:26  [ТС] 12
ValeryS, спасибо вам, буду смотреть и разбираться.
0
14.04.2015, 16:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2015, 16:26

Ошибка записи eeprom
Есть микруха памяти eeprom ST 95640. Надо считать, поправить, и обратно залить. Собрал Понипрог....

Ошибка записи при препрошивке биоса (Защита от записи)
Добрый день всем!!! Имеется материнская плата Biostar G31 M7 - TE. Срок службы уже 2 года. ...

[РЕШЕНО] Проблемы записи EEPROM
Коллеги! Доброго времени суток! Кто может подтвердить наличие/отсутствие т.н. «мертвой зоны» в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru