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

    

SD-card: выход из строя, не определяется компьютером

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

 

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

в устройстве (интерфейс SDIO, софт на базе FatFs)- карточка детектируется, файлы с них считываются корректно, но при попытке записи выдает ошибку.

В компьютере- карточка вообще не детектируется. (проверено на разных компьютерах с разными ридерами).

 

Проблема точно не в железе устройства- это же железо с другим софтом используется долгое время, проблем нет. То есть проблема в моем новом софте.

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

 

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

 

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

Как проверить эту версию? Есть ли какие-то средства чтобы проверить внутреннее здоровье SD-карточки, вроде того как это на SSD делается?

 

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

 

Каким софтом их поковырять? я кроме WinHex и не помню ничего приличного для внутреннего ковыряния дисков.

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


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

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

А в чём плюс такого кольцевого буфера?

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

А в вашем случае - какой смысл? При создании/удалении файлов очевидно, что каждый раз будет писаться одно и то же место в FAT и в записи директории. Эти места будут быстро изнашиваться.

 

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

Если карта поддерживает wear leveling, то даже в вашем алгоритме не должно быть неравномерного износа. Но если нет: на месте FAT и месте записи директории будет дырка.

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


Ссылка на сообщение
Поделиться на другие сайты
А в чём плюс такого кольцевого буфера?

Данная структура используется не для оптимизации флешки, а для удобства работы с данными.

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

Если карта поддерживает wear leveling, то даже в вашем алгоритме не должно быть неравномерного износа. Но если нет: на месте FAT и месте записи директории будет дырка.

Ну, если SD вдруг не поддерживает внутри wear leveling то вообще все плохо с FAT. Но вот как узнать что и как оно там поддерживает? Карты Sandisk, вероятность того что не фейк очень большая (так как не я лично с территории завода-производителя вывозил, то 100% не могу дать, что не фейк, все возможно).

 

Нашел, кое-что, вот тут немного обсуждают про выравнивание, по аналогии можно попробовать найти материалы на современные карточки

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


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

Скажите пожалуйста, какие могут быть варианты для такого поведения:

- у меня в устройстве (использую SDIO) карточка читается нормально, но не может быть записана

- в компьютере карточка вообще не определяется и не детектируется. На андроиде(в телефоне)- тоже просто не видна, будто и не вставлена.

 

Если читать посекторно в моем устройстве- то все сектора на месте, не вижу разницы между "нормальной" и "мертвой" карточками.

 

читал регистры SD- карточки - тоже нет разницы между карточками.

 

Как такое может быть: оно есть и я могу доступиться до карточки (пусть и только по чтению), а операционки не могут даже ее наличие определить ???

 

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


Ссылка на сообщение
Поделиться на другие сайты
Как такое может быть: оно есть и я могу доступиться до карточки (пусть и только по чтению), а операционки не могут даже ее наличие определить ???

По всей видимости, есть отличия в процедуре инициализации. Например, карта отваливается после переключения в HS, а ваше устройство этого не делает. Или что-нибудь еще в таком же роде. Операционки, кстати, ни при чем: инициализацией они не занимаются (если только SD-интрефейс не нативный).

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


Ссылка на сообщение
Поделиться на другие сайты
Если читать посекторно в моем устройстве- то все сектора на месте, не вижу разницы между "нормальной" и "мертвой" карточками.

А запись этих секторов работает? Частоту понизить? По SPI обратиться?

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


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

Вообще, переход в read-only указывает на повреждение внутренних структур данных - тех, что отвечают за трансляцию адресов, выравнивание износа и т.п.

Возможные причины:

- низкое качество самих карт

- проблемы с питанием

- очень высокий износ из-за ошибок в софте МК

 

Случаются и совсем чудеса: был у меня лет 10 назад замечательный китайский кард-ридер, после общения с которым карты

совершенно разных производителей начинали жутко тормозить при записи (скорость падала примерно до ~25КБайт/с). Причина

так и осталась загадкой.

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


Ссылка на сообщение
Поделиться на другие сайты
Вообще, переход в read-only указывает на повреждение внутренних структур данных - тех, что отвечают за трансляцию адресов, выравнивание износа и т.п.

Возможные причины:

- низкое качество самих карт

- проблемы с питанием

- очень высокий износ из-за ошибок в софте МК

 

Спасибо всем!

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

 

Про низкое качество карточек- думаю стресс-тест провести (я их ем партиями по 100-200 штук, одну из партии всегда можно попробовать убить для тестов). Стресс-тест на запись прямо сейчас запущу, посмотрим сколько суток протянет (на писишке с USB3, чтоб побыстрее). (Upd: хороший тест еще поискать нужно, мда..)

 

Про питание- тоже возможно. Дело в том, что именно эти 10 приборов (из которых на многих SD карточка и "окирпичилась") питаются от одного общего внешнего блока питания (в других применениях устройства снабжены индивидуальными внешним БП). Через встроенный DCDC прибора в принципе много чего может пролезть короткого и злобного. Но опять же- это никак не сказалось на окружающей электронике на этой же плате, ни сбросов-зависаний процессора, ни каких-нибудь других проблем- только SD карточка.

 

Я сам склоняюсь к причине "очень высокий износ из-за ошибок в софте МК". Так как именно для этих 10 штук была разработана своя версия софта. Вроде бы не сильно отличается от стандартной применяемой в сотнях приборов, но все же.

 

Про "просто запланированный высокий износ":

Сделал счетчик записанных секторов- получилось что реально пишу около 41 сектора в секунду, это 3.5 миллиона секторов в сутки. Проверю точнее, но конкретно область FAT обновляю примерно раз в секунду.

 

Ну и риторический вопрос- имеет ли смысл следить, в какой сектор я пишу, или этот wear leveling все берет на себя?

Я так понимаю, при расчете нужно исходить от пустого пространства и ресурса на сектор?

У меня: примерно 10 гигабайт свободного пространства, и 2 гигабайта переписывается в сутки. Если выравнивание работает, то даже при ресурсе сектора "1 тысяча записей" должно продержаться 13 лет.

 

Конкретно у меня карточки микро-SD Сандиск 16G Ultra 10 класс (SDHC UHS-I)

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


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

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

 

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


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

...

У меня: примерно 10 гигабайт свободного пространства, и 2 гигабайта переписывается в сутки. Если выравнивание работает, то даже при ресурсе сектора "1 тысяча записей" должно продержаться 13 лет.

Нет такого понятия, как ресурс сектора. Флеш стирается блоками, а здесь все плохо: у карты 16G будет порядка 125 тысяч блоков,

а ресурс каждого - несколько тысяч записей.

 

Конкретно у меня карточки микро-SD Сандиск 16G Ultra 10 класс (SDHC UHS-I)

Я бы проверил на ПК скорость записи. У подделки она наверняка будет сильно занижена.

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


Ссылка на сообщение
Поделиться на другие сайты
Нет такого понятия, как ресурс сектора. Флеш стирается блоками, а здесь все плохо: у карты 16G будет порядка 125 тысяч блоков,

а ресурс каждого - несколько тысяч записей.

Тогда лучше отказаться от ФС, создать несколько кольцевых буферов блоков данных (по количеству значений времени жизни блока данных) и размер этих кольцевых буферов сделать разным. Например нужно иметь блок_данных_тип_1 (TTL=15мин), блок_данных_тип_2 (TTL=30мин), блок_данных_тип_3 (TTL=1час). Соответственно создаём:

очередь_1 = N*4 блоков_данных; очередь_2 = N*2 блоков_данных; очередь_3 = N блоков_данных. И число N подбираем таким, чтобы был занят весь объём карты.

Каждая очередь - выравнена на целое число блоков_стирания + 1 блок_стирания.

И если частота генерации разных типов блоков одинакова, то получим равномерный износ. Без закладывания на внутренние механизмы карты.

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


Ссылка на сообщение
Поделиться на другие сайты
Тогда лучше отказаться от ФС...

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

Правда тут есть грабли:

- Нужен большой объем ОЗУ

- "Народная" FatFS не имеет развитых механизмов кэширования и буферизации (но можно свою прослойку добавить между FatFS и картой)

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


Ссылка на сообщение
Поделиться на другие сайты
Про низкое качество карточек- думаю стресс-тест провести (я их ем партиями по 100-200 штук, одну из партии всегда можно попробовать убить для тестов). Стресс-тест на запись прямо сейчас запущу, посмотрим сколько суток протянет (на писишке с USB3, чтоб побыстрее). (Upd: хороший тест еще поискать нужно, мда..)

Зачем хороший тест, не лучше ли использовать ваш алгоритм записи.

Кстати, ускоренными тестами стоит острожнее пользоваться - может перегреваться чип и ускоренно умирать.

 

Конкретно у меня карточки микро-SD Сандиск 16G Ultra 10 класс (SDHC UHS-I)

Отправить в sandisk серийные номера, с целью проверки на контрафактность, не пробовали?

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


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

Точно. Сильно стормозил. Флеш-то про сектора не знает.

в Интернете говорят про размер страницы флеш в карточках 8-128 килобайт, ну и с другой стороны оно еще вдруг целыми кластерами переносит, а не посекторно, опять же ограничение.

 

Из 10 карточек нашлись некоторые, которые компьютер видит, но не может записать. То есть то что тут мне и говорили- карты перешли в read-only, но еще определяются работают. На вид- очень медленно, скорость чтения 15 килобайт/c, причем именно если с корневой директории копировать. если внутри директории работать- то все быстрее.

 

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

 

Ну и понятно куда копать. В первую очередь кэширование FAT.

 

Отправить в sandisk серийные номера, с целью проверки на контрафактность, не пробовали?

Не отправил, но собираюсь. Уже накопилось. Вдруг и ответят.

 

Хорошую статью нашел, там народ даже лез анализатором чтоб проверить как контроллер распихивает данные на трех флешках разных производителей. Речь про USB стики, но думаю что SD карточки не сильно другие.

Write Endurance in Flash Drives: Measurements and Analysis

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


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

Маловероятно, конечно, но.

- Нет ли "просадки" питания на карту в момент записи и не находится ли оно на пороге работоспособности по напряжению.

- Соблюдаются ли временные диаграммы (если таковые имеются) при записи.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация