Jump to content

    
pokk

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

Recommended Posts

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

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

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

Цитата

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

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

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

 

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

Share this post


Link to post
Share on other sites
27 minutes ago, jcxz said:

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

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

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

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

 

27 minutes ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites
33 минуты назад, turnon сказал:

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

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

Цитата

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

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

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

Цитата

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

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

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

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

Share this post


Link to post
Share on other sites
18 minutes ago, jcxz said:

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

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

 

18 minutes ago, jcxz said:

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

Какой х?

Share this post


Link to post
Share on other sites
12.01.2022 в 15:57, turnon сказал:

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

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

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

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

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

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

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

 

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

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

 

Цитата

Какой х?

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

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

Share this post


Link to post
Share on other sites
4 hours ago, jcxz said:

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

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

 

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

 

4 hours ago, jcxz said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.