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

Как обеспечить целостность данных в EEPROM памяти и FLASH памяти с постраничным стиранием?

32 минуты назад, jcxz сказал:

У нас тоже подобное было.

Вот-вот. Поэтому автору топика следует подходить к решению проблемы комплексно, выбирая наиболее рациональный способ)

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


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

У меня, к сожалению, нет опыта поддержки-ремонта массовых изделий, потому плоховато представляю возможные варианты выхода из строя изделий.

Но, исходя из всего описанного выше, у меня тогда возникает некоторое замешательство...как же обеспечить устойчивую работу тех же устройств обработки и хранения информации если у меня в любой момент устройство может сброситься (от разряда или чего-то другого). У меня ж нет такого понятия как транзакции в БД, тут получается ситуация что я начал писать-менять какие-то данные и вдруг контроллер ребутнулся..

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

 

Возникает тогда вопрос в том что нужно:

- при запуске контроллера производить проверку своей внутренней флеши и лишь после этого запускаться,

- добавлять ко всем данным, хранящимся во внешней памяти, контрольные суммы и периодически производить их проверку (если данные хранятся структурами, то CRC к каждой структуре, если это массив данных, то CRC массива и т.д.).

 

Но тогда также получается что хочу я этого или нет, но мой сервер должен знать расположение данных внутри каждого контроллера с тем, что если вдруг "побьются" данные, то отдав серверу ID ячейки он мне должен вернуть данные, которые лежат в данной ячейке. То же касается и массивов данных (но учитывая что CRC есть только для всего массива, то перезаливать нужно весь массив чтобы не усложнять все).

 

Чтобы был меньше абстракций - это устройство контроля доступа. Соответственно данные - это номера карт, правила прохода, расписания и т.п. И этих данных много.

 

В данный момент у меня работает таким образом что изначально данных во внешней памяти нет, а при работе с сервера приходят разные команды (типа добавить для карты N, расписание и правила), в результате в процессе работы внутри девайса формируется своеобразная база данных с возможностями поиска и т.п. Но она довольно хрупкая если ячейки вдруг начнут "биться". Ладно еще если пострадает какая-то из структур, ее можно перезапросить с сервере. Но если пострадают какие-либо из ячеек, завязанных на структурирование данных для ускорения поиска, то эти данные я не могу восстановить, т.к. они есть только внутри контроллер и сервер не знает о них.

 

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

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

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

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


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

11 часов назад, User1285 сказал:

как же обеспечить устойчивую работу тех же устройств обработки и хранения информации если у меня в любой момент устройство может сброситься (от разряда или чего-то другого). У меня ж нет такого понятия как транзакции в БД, тут получается ситуация что я начал писать-менять какие-то данные и вдруг контроллер ребутнулся..

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

А с чего вдруг ребут должен повредить что-то в "других ячейках" флешь-памяти?

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

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


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

15 часов назад, User1285 сказал:

Но это уже получается совсем другая сложность самого контроллера.

Во-первых, поищите темы об отказоустойчивой записи данных на флешки. Таким тем на электрониксе точно было несколько за пару-тройку лет. Во-вторых. Где-то на хабре тоже была одна или две статейки. Ничего сложного там нет. При грамотной организации ничего теряться не будет, только если вы не напишите кривой драйвер флешки, который сам будет принудительно стирать что попало.

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


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

On 3/2/2021 at 5:44 PM, User1285 said:

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

добрый день, как выкрутились, поделитесь рецептами?!

спасибо

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


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

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

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

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

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

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

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

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

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

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