Как я могу преднамеренно сломать / повредить сектор на SD-карте?

22723
Gabe Krause

Мне нужно проверить устойчивость некоторого кода чтения / записи для некоторого встроенного оборудования. Как я могу пожертвовать несколькими SD-картами и разбить несколько известных секторов для контролируемого исследования?

Единственное, о чем я могу думать, это перезаписать один сектор несколько миллионов раз. Интересно, можно ли создать скрипт Linux badblocks для повторного выполнения своего разрушительного теста в одном секторе в течение нескольких часов.

138
Можете ли вы изменить низкоуровневый драйвер SD, чтобы притвориться, что там плохой блок, или это не может быть и речи? Mark Yisri 6 лет назад 20
@MarkYisri, я не думаю, что водитель очень доступен. Какой бы драйвер мы не использовали, он является ультра-элементарным, чтобы максимизировать распределение памяти для остальной части прошивки. Кроме того, если бы это было возможно, это, вероятно, было бы за пределами моих возможностей. Gabe Krause 6 лет назад 3
Можете ли вы построить эмулятор SD-карты? Заметьте, не самый простой проект. user20574 6 лет назад 3
С учетом поставленной цели вы можете купить несколько бывших в употреблении SD-карт за небольшие деньги, и вы можете легко получить неисправную или разместить объявление «ищу ...», чтобы специально искать неисправные карты. Или поиските на eBay дефектные карты. Затем вы проверяете карту и узнаете положение дефектных зон. FarO 6 лет назад 11
Предположительно, ваша функция чтения SD-карт обернута в слой абстракции? Если это так, вставьте несколько тестов в это Mawg 6 лет назад 0
Спросите любого профессионального фотографа. У них наверняка будет куча отрывочных SD-карт. J... 6 лет назад 28
Получить малиновый пи; они печально известны тем, что ломают SD-карты. Напишите сценарий, чтобы просто писать и удалять файлы снова и снова. 6 лет назад 1
Возможно, вы могли бы связаться с поставщиком SD-карты и спросить его, можете ли вы купить плохие SD-карты вместе с информацией о том, какие сектора плохие на каждой неисправной карте? Kevin 6 лет назад 2
У меня есть тот, который делает это сам постоянно. Хочу это? T.E.D. 6 лет назад 2
Я чувствую, что это [проблема XY] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) jkd 6 лет назад 2
@ Mehrdad На самом деле вы не так далеко. Не уверен, верно ли это для последних флеш-носителей, но раньше было так, что если вы отключите питание только в нужной точке (во время флэш-записи), вы потеряете весь блок стирания. Устройства промышленного класса должны иметь конденсатор, позволяющий завершать любую незавершенную запись при потере питания для защиты от этого режима отказа. Michael 6 лет назад 1
Самые дешевые безымянные от Амазонки обычно не длятся долго, если они вообще работают Mark K Cowan 6 лет назад 1
Ледоруб? Электростатический разряд? Тщательно нацеленная дрель? Что ты имеешь в виду, что это не тот разрыв, о котором ты думал? Kaithar 6 лет назад 0
Да, @ jakekimdsΨ, это определенно проблема XY. Что OP действительно нуждается в хорошей тестовой среде для их кода, что они думают, что они хотят, плохие SD-карты (которые есть много людей, предлагающих). OP собирается предоставить больше информации об их среде разработки, чтобы мы могли найти для них реальное решение. NH. 6 лет назад 1
Ты прав. Нам нужна лучшая тестовая среда. Но я никогда не просил плохие SD-карты, в общем. Случайно плохие карты не будут способствовать повторяющейся процедуре тестирования в разумные сроки. Мне нужно было протестировать ** известный плохой сектор **, который, как мы узнали, практически невозможен при встроенной балансировке износа SD. Правильный ответ (для меня), скорее всего, будет управляемый аппаратный интерфейс между SD и устройством для тестирования. Но я не решаюсь выбрать его в качестве _Right Answer_, потому что здесь есть несколько отличных решений для разных сред. Gabe Krause 6 лет назад 0

15 ответов на вопрос

166
Kamil Maciorowski

Альтернативный подход, который может быть полезен.

Если ваш код работает под Linux, то, возможно, вы сможете протестировать его с «неисправным» логическим устройством. dmsetupможет создавать устройства, которые возвращают ошибки ввода-вывода. Просто создайте свое устройство, используя errorи / или flakeyцель. От man 8 dmsetup:

error
Ошибки любого ввода / вывода, который идет в эту область. Полезно для тестирования или для создания устройств с отверстиями в них.

flakey
Создает сопоставление с linearцелью, но периодически проявляет ненадежное поведение. Полезно для моделирования неисправных устройств при тестировании.

Примечание: flakeyцелевое использование задокументировано здесь . Основной пример здесь .

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

Я ценю это нестандартное мышление! На уровне блоков мы взаимодействуем с SD через 80-МГц чип Atmel и никакой реальной ОС. Gabe Krause 6 лет назад 34
@GabeKrause В этом случае полезность этого ответа зависит от того, насколько API API блочного устройства Linux может быть похож на API вашего встроенного драйвера устройства. Qsigma 6 лет назад 1
Команда `dmsetup` для настройки устройства` error`, которое всегда возвращает ошибки чтения: https://stackoverflow.com/questions/1870696/simulate-a-faulty-block-device-with-read-errors Peter Cordes 6 лет назад 0
Я согласен, что это звучит как лучшее решение. Во-первых, вы можете копировать на любом оборудовании. А также вы можете моделировать различные режимы ошибок. Например, у меня есть флэш-накопитель USB на 16 ГБ, который отлично работает. Через некоторое время определенная область на нем начинает возвращать неверные данные. Там нет ошибки FS любого рода. Вы читаете файл, но содержание отличается. Некоторые сектора явно нестабильны. Но как поведет себя какое-то конкретное устройство, заранее неизвестно. akostadinov 6 лет назад 1
75
FarO

Этот парень взломал микроконтроллер на SD-картах, используемых для маркировки плохих блоков: https://www.bunniestudios.com/blog/?p=3554

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

Сегодня на компьютерном конгрессе Chaos (30C3) мы с Хобсом объявили, что некоторые SD-карты содержат уязвимости, которые допускают выполнение произвольного кода - на самой карте памяти. С другой стороны, выполнение кода на карте памяти обеспечивает класс атак MITM (человек посередине), когда карта ведет себя односторонним образом, но на самом деле она делает что-то другое. С другой стороны, это также дает возможность энтузиастам аппаратного обеспечения получить доступ к очень дешевому и вездесущему источнику микроконтроллеров.

,

Эти алгоритмы слишком сложны и слишком специфичны для устройства, чтобы запускаться на уровне приложения или ОС, и поэтому оказывается, что каждый диск флэш-памяти поставляется с достаточно мощным микроконтроллером для запуска собственного набора алгоритмов абстрагирования диска. Даже миниатюрная карта microSD содержит не одну, а, по крайней мере, две микросхемы - контроллер и, по крайней мере, одну флеш-микросхему (карты высокой плотности будут устанавливать несколько флеш-карт).

,

Встроенный микроконтроллер обычно представляет собой сильно модифицированный процессор 8051 или ARM. В современных реализациях микроконтроллер будет приближаться к уровням производительности 100 МГц, а также имеет несколько аппаратных ускорителей на кристалле. Удивительно, но стоимость добавления этих контроллеров к устройству, вероятно, составляет порядка 0,15-0,30 долл. США, особенно для компаний, которые могут использовать как флэш-память, так и контроллеры в пределах одного подразделения. Вероятно, дешевле добавить эти микроконтроллеры, чем тщательно тестировать и характеризовать каждый чип флэш-памяти, что объясняет, почему управляемые флэш-устройства могут быть дешевле на бит, чем необработанные чипы флэш-памяти, несмотря на включение микроконтроллера.

,

Суть в том, что механизм загрузки и обновления прошивки практически обязателен, особенно для сторонних контроллеров. Конечные пользователи редко подвергаются этому процессу, поскольку все это происходит на заводе, но это не делает механизм менее реальным. В своих исследованиях рынков электроники в Китае я видел, как владельцы магазинов записывают прошивки на карты, которые «расширяют» емкость карты - другими словами, они загружают прошивку, которая сообщает, что емкость карты намного больше, чем фактическое доступное хранилище. Тот факт, что это возможно в точке продажи, означает, что, скорее всего, механизм обновления не обеспечен.

В нашем выступлении на 30C3 мы сообщаем о наших выводах, посвященных изучению конкретной марки микроконтроллеров, а именно Appotech и его предложений AX211 и AX215. Мы обнаруживаем простую последовательность «стука», передаваемую по зарезервированным производителем командам (а именно, CMD63, за которыми следуют «A», «P», «P», «O»), которые переводят контроллер в режим загрузки прошивки. В этот момент карта примет следующие 512 байт и запустит ее как код.

Из всех ответов этот, вероятно, наиболее близок к тому, что на самом деле требовал ФП. Cort Ammon 6 лет назад 10
Это было фантастическое чтение! Gabe Krause 6 лет назад 11
@ Твисти скопировал некоторые соответствующие части. FarO 6 лет назад 0
Я иду по кроличьей норе в мир архитектуры SD-карт. Tejas Kale 6 лет назад 2
38
amo-ej1

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

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

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

Разве это не будет работать, если SD-карта полностью заполнена данными, так что она не может переназначить много? Я не думаю, что у них есть много свободных скрытых секторов. Ruslan 6 лет назад 2
@Ruslan: Нет. Блочные устройства хранения обычно не знают, какие секторы заняты файлами, а какие «свободны». Исключение составляют устройства deviecs, которые поддерживают команду `TRIM`, которая используется дисками SATA, а не картами SD. MSalters 6 лет назад 0
@MSalters устройство должно знать, какие сектора заполнены чем-то иным, чем нули / FF, иначе это не устройство хранения. Ruslan 6 лет назад 0
@Ruslan Устройство не должно знать, заполнен ли сектор чем-либо. Нужно только знать содержимое каких секторов для доставки по запросу и каких секторов для записи по запросу. И затем может появиться некоторый уровень абстракции, заставляющий его использовать другую физическую память для представления этих секторов в соответствии с каким-то нераскрытым алгоритмом ... - И «полный» означает только «пороговое значение для достигнутых в данный момент заполняемых блоков», конечно. Alexander Kosubek 6 лет назад 2
@AlexanderKosubek в любом случае логика выравнивания износа должна знать о том, есть ли в секторе что-то, что легко сбрасывается, или нет, чтобы переназначить его. Ruslan 6 лет назад 0
@Ruslan Да, ему нужна информация о состоянии памяти, но не о содержании. Но я не понимаю, как это позволило бы «обмануть» выравнивание износа до использования определенного объема памяти до уровня фактического отказа. Alexander Kosubek 6 лет назад 0
@Ruslan: Даже если на устройстве есть данные, выравнивание износа все еще может быть эффективным: например, если сектор A был записан один раз, а сектор B был записан 1000 раз, то когда приходит еще одна запись для В секторе B карта может поменять местами данные для двух секторов, так что сектор A содержит данные сектора B (и, вероятно, будет перезаписываться много раз - но это нормально, потому что он свежий), а сектор B будет содержать данные сектора A (который будет надеюсь не сильно изменится). Очевидно, что устройство также должно хранить отображение того, какой сектор где хранится. psmears 6 лет назад 6
Мне любопытно, происходит ли выравнивание износа, когда мы читаем и пишем на уровне блоков. Например, если вы пишете на SD-карту с помощью шестнадцатеричного редактора, каждый сектор открыт. Если я пишу в определенный сектор, это плохо, SD перераспределяется, даже на этом необработанном уровне? Gabe Krause 6 лет назад 0
@GabeKrause да, это природа зверя. На самом низком уровне у вас есть либо nand, либо ни flash-чипы (сейчас все используют nand), а перед nand-чипом установлен интеллектуальный контроллер, который завершает шину (например, usb для флешки или mmc для sd-карты ), и этот чип отвечает за отображение / выравнивание износа и т. д., он отвлекает вспышку от вас. Если вы будете использовать nand во встроенном Linux, это то, что, например, ubifs сделает для вас. amo-ej1 6 лет назад 2
@psmears, а что если A -> один раз, B -> 1000, то A -> 1000? Контроллер поменяется местами после B -> 1000, думая, что если A был записан один раз, то, вероятно, он не будет легко перезаписан? frarugi87 6 лет назад 0
@ frarugi87: То, что я написал, было простым примером того, как контроллер может распределить нагрузку записи, даже если все устройство содержит данные. Реальные алгоритмы, которые используют контроллеры, более сложны (и часто запатентованы / запатентованы). В общем, это компромисс - замена блоков вокруг будет медленнее, и, как правило, потребует * больше * записей, но может продлить срок службы устройства, гарантируя, что ни один блок не получит столько блоков, сколько умирает, когда другие блоки едва записаны. psmears 6 лет назад 0
SD-карты имеют микроконтроллер, который реализует «уровень трансляции Flash» - запросы блоков преобразуются этим микроконтроллером в необработанные команды NAND. Некоторые SD-карты имеют скрытые команды для изменения / обновления микропрограммного обеспечения MCU, и на нем даже предпринимаются некоторые усилия по обратному проектированию. Большинство флэш-устройств хранения данных, кроме необработанного NAND (которое может появляться в некоторых случаях, например, на многих домашних маршрутизаторах), вероятно, имеют «избыточное выделение» - это означает, что на вашей SD-карте объемом 1 ГБ, вероятно, имеется что-то вроде 1024 МБ + 128 МБ свободного пространства NAND, чтобы покрыть выравнивание износа при заполнении а также щадящий сектор для плохих флеш-страниц. LawrenceC 6 лет назад 2
32
Pavlus

Вы можете увеличить износ транзистора, увеличив рабочую температуру. Используйте циклы записи-стирания на нагретый чип (70-120 ° C); это будет носить быстрее.

Чрезмерная температура хранения также наносит ущерб, поэтому может быть более практичным «готовить» чип при температуре 120 ° C (или даже больше) в течение некоторого времени, а затем проверять наличие дефектов. Dmitry Grigoryev 6 лет назад 18
Небольшое перенапряжение на источнике питания карты также может быть возможным, и аналогичным образом потребуются эксперименты. Chris H 6 лет назад 2
Пониженное напряжение также может привести к разным видам дефектов, например к блокировке контроллера. user20574 6 лет назад 0
18
Eric Johnson

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

SD-карта имеет несколько вариантов ввода / вывода, но ее можно контролировать через SPI. Если вы возьмете SD-карту и измените ее так, чтобы вы могли прикрепить контакты к микроконтроллеру (например, Arduino), вы можете сделать так, чтобы Arduino имитировал SD-карту и был прозрачен для устройства, считывающего SD-карту. Ваш код на микроконтроллере может преднамеренно возвращать неверные данные при необходимости. Кроме того, вы можете поместить SD-карту в микроконтроллер, чтобы показания могли проходить через микроконтроллер к SD-карте, чтобы обеспечить гигабайты тестирования.

Большинство высокоскоростных устройств (включая устройства чтения карт ПК) просто откажутся работать с картой, которая не поддерживает четырехбитную SD-карту. Dmitry Grigoryev 6 лет назад 3
ОП сказал, что это была встроенная система, которая будет использовать карту, что повысит вероятность поддержки SPI для SD-карт. Eric Johnson 6 лет назад 1
Вариантом этого, но более сложной работы, было бы найти SD-карту, для которой вы можете [перепрошить прошивку] (https://www.bunniestudios.com/blog/?p=3554). Peter Taylor 6 лет назад 3
Это супер интересно! Наша встроенная система выполняет ввод-вывод через SPI. Я не уверен, есть ли у меня пропускная способность для модификации нашего оборудования, чтобы выполнить такое добавление, но я думаю, что это блестящее мышление. Gabe Krause 6 лет назад 2
Получение информации о динамическом выравнивании износа приводит меня к убеждению, что стратегически создать «плохую» SD-карту с известными поврежденными секторами гораздо сложнее (или невозможно), чем я надеялся, задавая вопрос. Хотя в настоящее время это выходит за рамки моих возможностей, это, кажется, наиболее контролируемый и технически многообещающий подход, за которым, возможно, следует @Olafm. Настройка промежуточного оборудования для перехвата и «повреждения» данных в любом заранее определенном месте сектора во время передачи данных кажется хорошим подходом. Gabe Krause 6 лет назад 2
Если модификация оборудования выходит за рамки, вы также можете увидеть, поддерживает ли ваш драйвер SPI обратную петлю, чтобы встроенная система также «отправляла» данные, не требуя ничего на физической шине SPI. Eric Johnson 6 лет назад 0
15
GuzZzt

Я пошел бы на ebay / aliexpress и купил бы самую дешевую SD-карту, которую я могу найти из Китая, ту, которая "слишком хороша, чтобы быть правдой". Они часто поставляются с неисправными секторами или имеют в программном обеспечении гораздо больше, чем есть на самом деле. В любом случае, вы должны получить неисправную SD-карту для тестирования.

Интересный подход, но как бы вы записали в плохие области, чтобы проверить влияние плохих блоков на хранимый код? fixer1234 6 лет назад 0
@ fixer1234, у меня была одна из этих SD-карт, которая сказала, что это было 32 ГБ, но на самом деле это было только 128 МБ. Я поместил его в свою камеру и мог делать фотографии, превышающие 128 МБ, но только первые фотографии можно было прочитать обратно. Остальные были перечислены, но были прочитаны как сломанные. Думаю, именно так они и хотят, чтобы вы сначала заметили проблемы с картой, когда уже слишком поздно жаловаться ... GuzZzt 6 лет назад 0
11
CubicleSoft

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

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

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

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

Вы выпустили эту утилиту онлайн? Это было бы здорово добавить в мой арсенал. Ploni 6 лет назад 2
На данный момент он, вероятно, даже не будет работать должным образом, учитывая прогресс технологии (может даже не компилироваться) и системные вызовы низкого уровня, которые я использовал. Существует также несколько современных инструментов клонирования криминалистических устройств и накопителей с открытым исходным кодом, которые я бы предпочел использовать в первую очередь, чем пытаться вытащить свое старое программное обеспечение из нафталиновых шариков. CubicleSoft 6 лет назад 1
Я ожидаю, что вы, вероятно, можете просто дать некоторые параметры `dd`, чтобы заставить его вести себя аналогично этому, в настоящее время. Я не уверен, хотя. wizzwizz4 6 лет назад 0
@ wizzwizz4, посмотри на ddrescue. hildred 6 лет назад 0
«Кроме того, инструменты судебной экспертизы тогда стоили целое состояние». Я уверен, что они все еще делают. jpmc26 6 лет назад 0
В настоящее время существует множество инструментов для анализа данных с открытым исходным кодом для различных платформ. CubicleSoft 6 лет назад 0
5
Dennis Jaheruddin

Этот ответ является дополнением к комментарию @Ruslan

  1. Заполните SD-карту примерно до 99,9%
  2. Постоянно переписывать содержимое оставшихся 0,1% (Записать A-удалить-записать B-delete - Записать A ...)
  3. Проверьте (периодически), если вы уже сломали карту

Возможная альтернатива:

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

Заполнение карты до 99% не поможет, так как основная цель выравнивания износа состоит в том, чтобы предотвратить именно этот вид преждевременного повреждения. Физическое повреждение карты почти наверняка приведет к тому, что карта больше не будет инициализироваться. Dmitry Grigoryev 6 лет назад 6
@DmitryGrigoryev Как может помочь выравнивание при ношении одежды (в данном случае это препятствие), если карта не имеет _самого_ большего объема памяти, чем ее официальная емкость? ispiro 6 лет назад 2
@ispiro Например, в следующий раз, когда сектор с большим количеством записей будет перезаписан, его содержимое может поменяться с сектором с низким количеством записей. Dmitry Grigoryev 6 лет назад 12
@DmitryGrigoryev Если я правильно интерпретирую этот ответ, должны быть SD-карты, которые не носят lvling: https://electronics.stackexchange.com/a/27626/16104 Dennis Jaheruddin 6 лет назад 1
@DennisJaheruddin Да, старшая карта не делает этого. с этими картами достаточно многократно создавать / удалять пустой файл, пока не изнашивается сектор в таблице размещения. Dmitry Grigoryev 6 лет назад 1
@DmitryGrigoryev: я присоединяюсь к людям, которые ставят под сомнение ваши первые два комментария. Как я понимаю, выравнивание износа (и, как вы сами говорите), это метод, при котором смарт-карты внутри SD-карты (или другого устройства флэш-памяти / SSD) переключаются на разные физические сектора (или страницы), когда компьютер (или другой клиент) повторно пишет по тому же адресу. ISTM: заполнение устройства до емкости 99,9% уменьшает количество свободных страниц на три порядка и вынуждает устройство начать повторное использование одних и тех же физических страниц в 1000 раз раньше, чем на пустом устройстве. Как нивелирование выравнивания победит эту атаку? Scott 6 лет назад 0
@ Скотт Почему вы думаете, что только свободные страницы могут быть использованы для выравнивания износа? Любая страница с низким количеством записей может быть стерта и повторно использована для контента, который постоянно обновляется. Dmitry Grigoryev 6 лет назад 0
@DmitryGrigoryev: Что заставляет меня так думать? Глупое представление о том, что запоминающее устройство, которое перезаписывает сохраненную информацию, которую пользователь не хочет перезаписывать, не является функционирующим запоминающим устройством. Если он перезаписывает * несвободную * страницу, разве ему не придется копировать данные с этой страницы куда-то еще, вызывая каскад? Что мне не хватает? Scott 6 лет назад 0
@Scott Да, он будет копировать редко измененные данные со страницы с низким количеством записей на страницу с высоким числом записей в первую очередь. Страница с большим количеством записей, по-видимому, в любом случае стирается, поэтому каскада не будет. Dmitry Grigoryev 6 лет назад 0
3
PCARR

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

Я знаю, что распространенная ошибка семейства устройств - это сильная корреляция между повреждением SD-карты и прерывистым контактом батареи.

3
rackandboneman

Некоторые старые SD-карты малой емкости (16 МБ) используют флэш-чипы в пакетах в стиле TSOP / TSSOP. Мастерская, способная к доработке SMT (если вы выполняете встроенную работу, возможно, у вас есть этот навык, в противном случае проверьте, есть ли небольшие компании, занимающиеся ремонтом телефона / ноутбука на уровне платы), можно было бы отделить и заново прикрепить этот чип, чтобы его можно было читать и записывать raw (включая коды ECC) с программатором устройства.

Тем не менее, имейте в виду, что вы будете в основном тестировать:

  • Как ваше устройство будет обрабатывать возможные временные аберрации / икоты, вызванные внутренним исправлением ошибок

и в худшем случае

  • как ваше устройство обрабатывает окончательно сбойную SD-карту.

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

SD-карты с окончательным выходом из строя не генерируют «электрический шум», они просто возвращают коды ошибок для операций записи. Dmitry Grigoryev 6 лет назад 0