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

Хранение данных на NOR flash (Кольцевой буфер)

20 минут назад, turnon сказал:

потерять 1 сектор - не так критично как потерять весь объем фоеша из-за порчи местоположения головы.

Спорное утверждение. Почему - писал выше.

Цитата

Там как раз все потерять нельзя, потому как все сектора равнозначны, нет какого-то специфичного, как в Вашем алгоритме.

Откуда вы знаете как оно обстоит там? У вас есть описание алгоритма?

А раз описания нет, то предполагаем худшее: там при каждом внезапном выключении питания теряются данные. Можете доказать обратное? Нет? Значит теряются при каждом выключении. Точка.

 

Ответьте на простой вопрос: x больше 0 или нет?

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


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

27 minutes ago, jcxz said:

Откуда вы знаете как оно обстоит там? У вас есть описание алгоритма?

Я же давал ссылку на описение - Piconomix FW Library, там и исходники есть, все можно посмотреть. Как есть я ее не использую, использую заложенные принципы работы - нарастающий индекс в хидере каждого сектора. В Вашей тоже много интересного - COBS, маскирующий 0xFF и разделитель записей в виде байта 0xFF, "двухфазное" стирание.

Остюда еще думаю задействовать побитовую запись статусного байта.

Отсюда - принцип посекторного сжатия данных.

 

27 minutes ago, jcxz said:

А раз описания нет, то предполагаем худшее: там при каждом внезапном выключении питания теряются данные.

Теряются не больще чем в Вашем алгоритме при сбоях питания. И намного меньше терятеся в случае проблем с чтением сектора-дырки.

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


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

33 минуты назад, turnon сказал:

Я же давал ссылку на описение - Piconomix FW Library, там и исходники есть, все можно посмотреть.

Алгоритма работы нет. А восстанавливать его по исходникам - желания нет.

Цитата

Теряются не больще чем в Вашем алгоритме при сбоях питания.

В моём вообще не теряются. Я говорю об уже записанных на носитель данных.

А случаи отказа оборудования - вообще не рассматриваю. Если сектор не читается - устройство неисправно. Нет смысла говорить о каких-то чтениях данных при этом.

Цитата

И намного меньше терятеся в случае проблем с чтением сектора-дырки.

Вы так и не ответили на мой вопрос:

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

Ответьте на простой вопрос: x больше 0 или нет?

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


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

18 minutes ago, jcxz said:

А случаи отказа оборудования - вообще не рассматриваю. Если сектор не читается - устройство неисправно. Нет смысла говорить о каких-то чтениях данных при этом.

А я рассматриваю.

 

18 minutes ago, jcxz said:

Вы так и не ответили на мой вопрос:

Какой х?

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


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

12.01.2022 в 15:57, turnon сказал:

А я рассматриваю.

Хорошо, допустим рассмотрим:

Данная система хранения у меня применяется для хранения конфига устройства. Объём конфига = несколько сотен байт. Размер сектора = 256КБ. Т.е. - в сектор влазит до ~1000 конфигов. Допустим головной сектор перестал читаться Хотя Вы так и не раскрыли значение этого термина: что значит "не читается?". Предположим, что в результате отказа чипа флешь, из него стал читаться мусор. Вы предлагаете (как я понял) в этом случае прочитать последнюю доступную конфигурацию и её использовать? Т.е. - конфигурацию которая была в устройстве несколько сотен итераций изменения конфига назад???  :shok:

Это не только крайне спорный совет, но даже вредный. Потому как несколько сотен итераций назад совершенно неизвестно, что содержалось в конфиге. Пускай даже он был совместим с текущей версией прошивки. Это ещё хуже! У меня это устройство - инвертор для управления двигателем. Конфиг соответственно хранит настройки под конкретный подключенный сейчас двигатель и набор датчиков (тока, температуры и т.п.). Если ранее (много реконфигов назад) к инвертору был подключен другой двигатель, и просто взять и применить настройки от него к текущему двигателю, то это может привести не только к неверной работе, но даже к выходу устройства из строя.

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

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

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

 

Так что ваше "потерять 1 сектор - не так критично как потерять весь объем флеша" - это неверный и даже вредный совет.

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

 

Цитата

Какой х?

А почему Вы спрашиваете? x - это неизвестная. Выше Вас совершенно не смущало, что сравниваете неизвестный алгоритм с известным. Тогда должны ответить и тут: x больше 0 или нет?

При оценке надёжности какой-то системы, компонент с неизвестной надёжностью всегда заведомо считается менее надёжным чем компонент с известной надёжностью.. А значит моя система хранения заведомо надёжнее чем та, на которую Вы ссылаетесь. Если про указанную систему не известно каким образом обеспечивается её устойчивость к сбоям питания, то следует считать что она к ним неустойчива. И может потерять все данные при любом сбое питания. :unknw:

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


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

4 hours ago, jcxz said:

Так что ваше "потерять 1 сектор - не так критично как потерять весь объем флеша" - это неверный и даже вредный совет.

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

 

Почему сектор не читается - я не знаю, нигде нет информации о том, как именно выходит их строя NOR-флеш. Но предполагаю, что с износом ячеек они не могут установиться в 0xFF при очистке сектора. И износ разных секторов может быть неравномерным несмотря на равномерную перезапись.

 

4 hours ago, jcxz said:

Если про указанную систему не известно каким образом обеспечивается её устойчивость к сбоям питания, то следует считать что она к ним неустойчива. И может потерять все данные при любом сбое питания. :unknw:

Обеспечивается точно также как и в Вашей. Вся разница - у вас признак головы в виде сектора-дырки, в моем случае (точнее piconomix) - в виде максимального индекса в хидере сектора. Все.

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


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

On 3/19/2020 at 8:32 AM, jcxz said:

Это примерный алгоритм. Есть ещё детали.

Заинтересовал Ваш алгоритм. Позвольте полюбопытствовать о деталях, ведь в них, как говорится, дьявол.

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


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

On 5/24/2022 at 9:20 AM, celsio said:

Заинтересовал Ваш алгоритм. Позвольте полюбопытствовать о деталях, ведь в них, как говорится, дьявол.

А разве головы, листа А4 и ручки не достаточно ?

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


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

4 hours ago, jcxz said:

Что именно интересно? Конкретно.

Ну какие еще детали, которые не изложены в общем описании алгоритма. Что так еще в заголовке, кроме признака стертости сектора и т.д.

 

55 minutes ago, x893 said:

А разве головы, листа А4 и ручки не достаточно ?

Мне нет. Если вам достаточно - поделитесь соображениями по теме.

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

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


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

Да какие могут быть соображения ?

Надо было пакеты по 64 байта (8 байт для кольца) логировать.

Посидел пару дней и сделал.

На STM32 и на EFM32. Память MX25... какая то.

 

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


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

2 hours ago, x893 said:

Да какие могут быть соображения ?

Надо было пакеты по 64 байта (8 байт для кольца) логировать.

Посидел пару дней и сделал.

На STM32 и на EFM32. Память MX25... какая то.

Так поделитесь подробностями. #jcxz вон как подробно все описал.
Ну и если про тип памяти, тот в этой теме речь о NOR, а на каком МК и что за модель флеш - это без разницы.

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

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


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

19 минут назад, celsio сказал:

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

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

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


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

21 minutes ago, celsio said:

Так поделитесь подробностями. @jcxz вон как подробно все описал.

Вот пусть @jcxz и пишет. Я не писатель.

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


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

13 minutes ago, x893 said:

Вот пусть @jcxz и пишет. Я не писатель.

Так а вы для чего это написали про пару дней и лист A4? Похвастаться?

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


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

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

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

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

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

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

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

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

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

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