реклама на сайте
подробности

 
 
> SD-card: выход из строя, не определяется компьютером, Выработан ресурс? как проверить?
Ruslan1
сообщение May 24 2018, 09:08
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Здравствуйте!

В одном из устройств произошел массовый выход из строя SD-карточек (8 из 10 тестируемых), причем странно себя ведут:
в устройстве (интерфейс SDIO, софт на базе FatFs)- карточка детектируется, файлы с них считываются корректно, но при попытке записи выдает ошибку.
В компьютере- карточка вообще не детектируется. (проверено на разных компьютерах с разными ридерами).

Проблема точно не в железе устройства- это же железо с другим софтом используется долгое время, проблем нет. То есть проблема в моем новом софте.
Есть поток данных, записываемых на карточку, примерно 25 килобайт в секунду. Данные пишутся в 15-минутные файлы, файлы старее пары суток удаляются. То есть получается кольцевой буфер данных.

Главный вопрос: как можно загнать карточку в такое "окирпичивание?"

Похоже на выработку ресурса: проблемы на всех карточках начались практически одновременно с разницей в 1-2 дня, после примерно 2 месяцев работы.
Как проверить эту версию? Есть ли какие-то средства чтобы проверить внутреннее здоровье SD-карточки, вроде того как это на SSD делается?

Ну и еще вопрос: Почему в устройстве эти SD карточки читаются (но не пишуться), а в компьютере даже не детектируется?

Каким софтом их поковырять? я кроме WinHex и не помню ничего приличного для внутреннего ковыряния дисков.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
k155la3
сообщение May 30 2018, 10:22
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Маловероятно, конечно, но.
- Нет ли "просадки" питания на карту в момент записи и не находится ли оно на пороге работоспособности по напряжению.
- Соблюдаются ли временные диаграммы (если таковые имеются) при записи.
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение May 31 2018, 08:48
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Я понимаю, что внутренние используемые механизмы в карточке могут значительно увеличить время жизни карточки. Но мне нужно понять на что минимально рассчитывать, как это оценить.


Вопрос №1
как можно посчитать степень износа, если предположить что :
размер стираемого блока-128К
размер используемого диска- 16GB, то есть 125К блоков
время жизни блока - 1000 стираний

Тогда в худшем случае (на каждое обновление переносится целый блок):
количество обновлений = 125К блоков * 1000 стираний = 125M = 125e6

при количестве обновлений 1 в секунду: получаем время жизни карточки 125e6 секунд, это 1446 дней.

Это правильная оценка?
-------------------------------------------

Вопрос: №2
Что именно я должен считать обновлением, чтобы определить насколько сильно я изнашиваю эту карту?

Ведь нельзя считать таким обновлением просто добавление информации на то место сектора/страницы/блока, которое до этого было 0xFF ?

Я считаю, что обновление- это изменение, которое требует стирания блока. Я прав?
(Хороший пример такого обновления- это запись в FAT при изменении файла)
-------------------------------------------

Вопрос №3:
А как контроллер Флеш поймет, что данные в хвосте блока это мусор, а не данные, которые нужно переносить? Видимо, никак. И тогда получается, что на каждую запись сектора карточка будет тащить целый новый блок?
Как этого можно избежать? Почистить неиспользуемые сектора в FF? Дать команду стирания чего-нибудь там?
Есть какой-то способ помочь карточке, иначе ведь совсем катастрофа с ресурсом?

У меня, кстати, получается именно эта проблема: я писал по 40 секторов в секунду. Если предположить что контроллер карточки каждый раз занимался переносом блоков, то получаю ресурс 36 дней, что очень похоже на мой случай (у меня вышло немного больше, но может и ресурс блока немного больше чем 1К стираний).
-------------------------------------------

Вопрос №4:
Кэширование и запись на карточку большими кусками, скажем, 128К, поможет?
Upd: поиск помог найти вот это, буду копать туда:
Цитата
Alex11, Jul 14 2014, 22:27
Мы довольно много экспериментировали с SD в разных режимах. Во-первых, там есть команда мультисекторной записи. При этом небольшая пауза возникает только после записи многих секторов (но не факт, что после всех, запрошенных в команде). Кроме того, особенно при работе с не свежеформатированной карточкой, у нее возникают паузы до 0.5 сек на внутренние нужды - стирание блоков и переписывание частично заполненных. Реально помогает только запись блоками по 64 - 128 кБ в зависимости от карты.
Go to the top of the page
 
+Quote Post
controller_m30
сообщение May 31 2018, 17:13
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 356
Регистрация: 24-02-09
Пользователь №: 45 309



Цитата(Ruslan1 @ May 31 2018, 11:48) *
Вопрос №1
как можно посчитать степень износа, если предположить что :
размер стираемого блока-128К
размер используемого диска- 16GB, то есть 125К блоков
время жизни блока - 1000 стираний

Тогда в худшем случае (на каждое обновление переносится целый блок):
количество обновлений = 125К блоков * 1000 стираний = 125M = 125e6

при количестве обновлений 1 в секунду: получаем время жизни карточки 125e6 секунд, это 1446 дней.

Полностью проверить это допущение займёт всё те же 1446 дней - а это долго.

Можно сделать тест на износ только одного блока 128К, но при разных условиях. Понадобится две карты.
Тест 1.
Однократно заполнить все сектора карты данными, чтобы отнять у встроенного контроллера ресурс для перестановки блоков. И "протереть дырку" в каком-либо блоке 128К. Подсчитать количество перезаписей до отказа карты.
Тест по идее получится коротким - около 1000 перезаписей.

Тест 2.
Сделать то же самое, но с новой, неформатированной картой, где у контроллера имеется огромный ресурс для перестановок. И попробовать "протереть дырку" теперь.
Предположительно, "дырка протрётся" либо после 125К перезаписей, либо после 125К х 1000. Это будет зависеть от "понимания" контроллером карты что такое резервный блок: тот который просто не писался ни разу (тогда ресурс 125К), или тот который не писался ни разу пользователем (тогда ресурс 125К х 1000).
Возможен ещё вариант - просто 1000 записей. Будет означать, что контроллер не умеет переставлять блоки.

В зависимости от результатов можно будет предложить разные варианты использования карты. Например, если будет результат 125Кх1000, то достаточно будет отформатировать карту 16Гб, как будто она 8Гб, а оставшиеся нетронутыми блоки отдать контроллеру для перестановок. В этом случае не придётся вообще ничего менять в ПО.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 31 2018, 18:14
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(controller_m30 @ May 31 2018, 20:13) *
Однократно заполнить все сектора карты данными, чтобы отнять у встроенного контроллера ресурс для перестановки блоков.

Думаете, можно отнять? Сложно предположить, что такая ситуация не предусмотрена логикой работы
контроллера. Полный физический объем носителя пользователю недоступен.

ИМХО, можно, конечно, провести исследовательскую работу, как в приведенной выше статье,
но логичнее потратить это время на оптимизацию работы собственного ПО для снижения нагрузки.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 31 2018, 19:42
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(aaarrr @ May 31 2018, 21:14) *
но логичнее потратить это время на оптимизацию работы собственного ПО для снижения нагрузки.

Вот именно!
А может у ТС какой-то косяк в алгоритме записи? О котором он не подозревает.
Например: в процессе записи 15-минутного файла многократно открывается/закрывается файл? Или ещё как-то делается обновление записи директории о файле? И вместо одной модификации FAT получается много. Или файл пишется порциями, некратными размеру кластера, со сбросом буферов на диск между порциями?
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Jun 1 2018, 09:18
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(jcxz @ May 31 2018, 21:42) *
А может у ТС какой-то косяк в алгоритме записи? О котором он не подозревает.
Например: в процессе записи 15-минутного файла многократно открывается/закрывается файл? Или ещё как-то делается обновление записи директории о файле? И вместо одной модификации FAT получается много. Или файл пишется порциями, некратными размеру кластера, со сбросом буферов на диск между порциями?

Я говорил про 40 записей в секунду- это я завел счетчик записанного функцией disk_write(), так что я точно уверен что в DMA попадает очередь именно на это количество секторов.

Про то что мой косяк- только на это и надежда, свои косяки можно исправить sm.gif
Действительно косяки конечно есть, например самый грубый: практически всегда в SD-карточку из моего кода идет команда записать данные только длиной в один сектор. Хотя внутри все сделано универсально, с использованием CMD25.

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

Цитата(aaarrr @ May 31 2018, 22:02) *
Кстати, первым делом стоит сократить число копий FAT до одной, если их по старинке две.

Да, спасибо за напоминание, у меня их две, по дефолту. Не спасало, млин, ни разу sm.gif
Это хороший и простой метод уменьшить число записей, да и ускорение неплохое.

Цитата(aaarrr @ May 31 2018, 20:14) *
ИМХО, можно, конечно, провести исследовательскую работу, как в приведенной выше статье,
но логичнее потратить это время на оптимизацию работы собственного ПО для снижения нагрузки.

Я только попробую потестировать насколько быстро убьется карточка если я буду на нее писать:
1) короткими блоками, по 1 сектору (близко к тому что сейчас имею)
2) блоками по 16 килобайт (удобный для меня вариант)
3) блоками по 128 килобайт (максимально возможный, еще приемлемый вариант)

Буду писать как можно быстрее. Если увижу разницу между результатами- это значит есть за что бороться.

Карточка будет предварительно полностью забитая данными. С пустой только что отформатированной карточкой любопытно, но непрактично: какой бы результат не был, он мне мало поможет.

А "оптимизация работы собственного ПО для снижения нагрузки" уже идет. Хвала Святому Гиту, несколько бранчей позволяют обойтись без каши в коде sm.gif
Go to the top of the page
 
+Quote Post
jcxz
сообщение Jun 1 2018, 09:47
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Ruslan1 @ Jun 1 2018, 12:18) *
Действительно косяки конечно есть, например самый грубый: практически всегда в SD-карточку из моего кода идет команда записать данные только длиной в один сектор. Хотя внутри все сделано универсально, с использованием CMD25.

У меня ещё вот какая версия возникла:
Вот мы говорим, что карта имеет wear leveling. Ok - имеет. А как он реализован? Очевидно, что должна быть некая таблица переназначения логических секторов на физические. Когда карта работает (питание подано) эта таблица может находиться (и модифицироваться) в ОЗУ. Но она также должна сохраняться/восстанавливаться при выкл/вкл питания. А в какой памяти её хранить тогда? По размеру она небольшая (таблица), можно в карту включить что-то типа FRAM.
А если она внутри пишется не во FRAM, а во флешь (для экономии)? Тогда можно наверное зарезервировать под это дело много секторов обычной флешь (кольцевой буфер секторов) и, при переназначении очередного сектора, дописывать некую запись. А при восстановлении питания, строить таблицу в ОЗУ на основании этих записей о модификации.
А может быть вся таблица по сигналу "сбой питания" быстро скидывается в какой-то один блок флешь. Но тогда если например карта будет работать так: записали 1 сектор, включили/выключили питание, записали следующий сектор, опять включили/выключили питание, и т.д. И так этот блок флешь быстро протрётся.
Я думаю, что у разных производителей карт, алгоритм работы системы wear leveling может быть построен по-разному и иметь разные преимущества и недостатки для разных режимов работы.
И тогда на одной карте такой режим: запись сектора и вкл./выкл. питания - получится ресурс карты такой же как и без выключений питания, а на другой - ресурс будет значительно меньше.
Поэтому и есть отличия, что дохнут только определённые карты.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ruslan1   SD-card: выход из строя, не определяется компьютером   May 24 2018, 09:08
- - jcxz   Цитата(Ruslan1 @ May 24 2018, 12:08) Есть...   May 24 2018, 11:17
|- - Ruslan1   Цитата(jcxz @ May 24 2018, 13:17) А в чём...   May 24 2018, 13:49
|- - Ruslan1   Скажите пожалуйста, какие могут быть варианты для ...   May 29 2018, 15:56
|- - aaarrr   Цитата(Ruslan1 @ May 29 2018, 18:56) Как ...   May 29 2018, 16:25
|- - jcxz   Цитата(Ruslan1 @ May 29 2018, 18:56) Если...   May 29 2018, 20:07
- - aaarrr   Цитата(Ruslan1 @ May 24 2018, 12:08) Глав...   May 29 2018, 20:46
|- - Ruslan1   Цитата(aaarrr @ May 29 2018, 22:46) Вообщ...   May 30 2018, 07:52
|- - aaarrr   Цитата(Ruslan1 @ May 30 2018, 10:52) Сдел...   May 30 2018, 08:22
||- - jcxz   Цитата(aaarrr @ May 30 2018, 11:22) Нет т...   May 30 2018, 08:43
||- - aaarrr   Цитата(jcxz @ May 30 2018, 11:43) Тогда л...   May 30 2018, 08:53
||- - Ruslan1   Точно. Сильно стормозил. Флеш-то про сектора не зн...   May 30 2018, 09:30
|- - HardEgor   Цитата(Ruslan1 @ May 30 2018, 14:52) Про ...   May 30 2018, 09:16
- - Alex11   У современных карточек снаружи не нужно следить за...   May 30 2018, 08:19
- - jcxz   Цитата(Ruslan1 @ May 31 2018, 11:48) (Хор...   May 31 2018, 11:29
|- - Ruslan1   Цитата(jcxz @ May 31 2018, 13:29) Почему ...   May 31 2018, 12:04
|- - aaarrr   Цитата(jcxz @ May 31 2018, 22:42) ...вмес...   May 31 2018, 20:02
|- - controller_m30   Цитата(Ruslan1 @ Jun 1 2018, 12:18) С пус...   Jun 1 2018, 12:20
- - controller_m30   Цитата(aaarrr @ May 31 2018, 21:14) Думае...   May 31 2018, 21:25


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th August 2025 - 16:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01469 секунд с 7
ELECTRONIX ©2004-2016