Ремонт флэшек на контроллере SMIПришлось реально и практически столкнуться с данным вопросом на примере одной из моих флэшек. Ей оказалась Corsair Voyager GT 16Gb - та, что в резиновом корпусе и с красными вставками. В эксплуатации она была недолго - около полугода, и то в малоактивной (в сравнении с другими флэшками, кои я использую совместно для хранения разного вида данных), тем не менее она оказалась первой «вышедшей из строя» и похоронившей в себе данные (остальные, причем намного более старые флэшки безглючно работают до сих пор). Брался сей Корсар не только из-за прикольного резинового корпуса и разумной цены за данный объем, но и в первую очередь за обещанную высокую скорость его работы. Небольшое лирическое отступление. Надо понимать, что в изготовлении любой флэшки принимают участие компоненты разных производителей. В целом можно выделить три основные части:
Понять на каком железе реально собрана флэшка, на вскидку - не просто. Программные методы не всегда дают достоверные результаты, единственный точный - разобрать и посмотреть... Это зачастую является нетривиальной задачей. Корпуса часто сделаны так, что защелкнув их раз, расцепить их без повреждений уже просто невозможно. И так рассмотрим подробнее, из чего состоит любая флэшка. А устройство незамысловато, ведь действительно, размер то не велик. Основными компонентами являются контроллер и массив флэш-памяти, помимо всякой несущественной рассыпухи еще можно отметить стабилизатор напряжения (из 5В с USB-порта получающий порядка 3В, в зависимости от модели контроллера и памяти) и кварцевый резонатор (хотя это уже мелочь). Контроллеры, как и микросхемы памяти, выпускаются совершенно разными производителями - вопросом подборки «пары» занимается сборщик (см. п.2). В нашем случае речь пойдет о компании Silicon Motion Inc и ее передовом контроллере SMI-324, примененном во флэшке Corsair Voyager GT. Надо сказать, что после случая, подвившего меня на описанные ниже исследовательские работы и написание данного документа, мое отношение к продукции SMI упало ниже плинтуса - что не говори, а контроллеры Alcor намного более надежны и предсказуемы. Но вернемся к теме. Какие функции выполняет контроллер флэшки - думаю понятно. Что представляет из себя контроллер, с какого боку он доступен конечному пользователю, оснащенному инженерным подходом к технике (не секрет, что для «домохозяйки» флэшка - это просто «черный ящик» - и все)? На просторах интернета удалось найти такую вот схему:
Разработчик контроллера, разумеется, позаботился о «гибкости» своего устройства, обеспечив возможность обновления firmware («прошивки»). Прошивка хранится в специально отведенной для этого флэш-памяти контроллера, хотя не исключены возможности применения для этого, как отдельной маленькой (8-ми ногой) микросхемки памяти, так и использования части основного массива флэш-памяти. Кроме прошивки существует блок конфигурации, который также может храниться в различных местах (см. выше). Прошивкой, видимо, определяется поддержка различных микросхем памяти, режимы их работы, возможно общие алгоритмы функционирования устройства. Блок конфигурации хранит информацию о конкретной модели использования флэшки как таковой (тип эмулируемого накопителя, тип и режим работы микросхем массива памяти, размер и количество разделов данных и их тип, наличиеbad-блоков и их расположение, прочие параметры работы контроллера, «эстетическая» информация об устройстве и его изготовителе). Использование флэшки на уровне «домохозяйки» не предусматривает, наверное, даже ее форматирования. Для пользователя есть, например такие утилиты как «HP USB Disk Storage Format Tool» позволяющие отформатировать накопитель в любую, доступную операционной системе, файловую систему (FAT,FAT32,exFAT,NTFS). Для «продвинутых» пользователей, зачастую на идущем в комплекте к флэшке CD-диске, есть утилиты по «разбивке» флэшки на несколько (как правило два) разделов (на уровне контроллера флэшки, а не на уровне операционной системы), причем часто имеется возможность защитить один из них паролем. В подобных утилитах иногда встречается функция «низкоуровневого» форматирования (с проверкой на исправность «поверхности диска» - ячеек массива данных). Но есть утилиты еще более «низкого» - сервисного уровня работы с контроллером флэшки. Наиболее полную коллекцию утилит подобного рода и для разных контроллеров содержит сайт flashboot.ru, который их, видимо, собирает, в том числе, с мембер-зон тематических китайских форумов (другие места их расположения гуглу не известны). Документацию на большинство контроллеров найти практически не реально, зато можно найти информацию о микросхемах памяти. Ну вот мы наконец и приблизились к практической части описания. Мне, как инженеру, всегда интересно «покопаться» в настройках любого девайса, не только с целью их оптимизации, но и с целью понимания принципа его функционирования (в нюансах). Наткнувшись как-то на сайт flashboot.ru я непременно скачал сервисные утилиты для всех имеющихся у меня флэшек, и по возможности «примерил» каждую. Corsair Voyager GT не стала исключением. Оказалось, что прошивка идущая в комплекте с очередной версией утилиты (а на flashboot.ru обновления появляются регулярно) была новее той что во флэшке - разумеется, было произведено успешное обновление. Правда «погоды» никакой я от этого не заметил. Если честно, то обновляться потянуло не просто так. Как я уже говорил, флэшка Corsair Voyager в целом, и GT в частности, была выбрана в основном из-за высокой обещанной скорости - до 20Мбайт/с на запись и до 30Мбайт/с на чтение. На практике все оказалось намного скромнее, хотя и с лихвой превосходило показатели иных флэшек. Все бы ничего да со временем скорость все снижалась и снижалась. Я экспериментировал и с форматированием различными утилитами и файловыми системами, и с размером кластера - результат сильно не менялся (начальной скорости новой флэшки уже не было). Обновили прошивку - скорость чуток возросла, но ненадолго ... Сервисная утилита тоже не смогла мне дать ответа на этот вопрос - на этом я тему и закрыл. Скорость Корсара упала настолько, что стала сопоставима со скоростью любой другой флэшки среднего уровня. А «облом» произошел, как обычно внезапно, не предупредив о необходимости создания резервной копии. К сожалению, никаких рекомендаций по избеганию подобного впредь дать не могу - ибо ничего нештатного с флэшкой не происходило, эксплуатировалась она рядом с другими. Просто при очередном включении обнаружилось, что диск «не читается», а вся «видимая» информация о производителе и устройстве (информационные строчки) сбилась к некому «стандартному виду» (информация о контроллере). Объем диска нулевой ... и все ... Первое, что пришло в голову - обновить слетевшую конфигурацию и для верности прошивку, благо профиль для сервисной программы у меня сохранился. Что и было сделано - результат нулевой. Все по-старому. Тогда чуток почесав репу, вспомнив теорию и прежние исследования в этой области были подправлены настройки, хочу заметить что тогда я еще рассчитывал «вытянуть» потерянные данные и все галочки, намекающие на их очистку, снимал. Но положительного результата не было. Между тем в ходе очередного цикла реконфигурирования и прошивки утилита виснет, а флэшка ... дохнет. Теперь уже при ее подключении в системе появлялось лишь «неизвестное устройство» - ведь идентификаторы vid и pid сообщались нулевые. Опять поиск и серфинг по инету в целом и по flashboot.ru в частности. Хотя в данной теме flashboot.ru стоит большей части всего интернета. Информации не много - но в тему, и масса-масса бестолковых комментарием и реплик на 20 с лишним страниц, в которых толку ни на грош. А полезной оказалась инфа о переводе контроллера флэшки в «сервисный режим» путем замыкания линий шины данных массива памяти (http://flashboot.ru/index.php?name=News&op=article&sid=24). Но для этого требовалось разбирать корпус, что как говорилось выше - процесс не обратимый ... Оценив все за и против, а также то каким образом резиновый корпус мог крепится на флэшке, я пришел к выводу что маловероятно то, что резина заливалась поверх уже готового устройства. Также маловероятным казался и факт того, что корпус склеен из двух резиновых половинок. Значит вывод один - нужно осторожно его стягивать (как колпачок). Я не ошибся - внутри для прочности удержания платы в резиновом корпусе было применено нечто вроде силиконового герметика (намного менее прочное и вязкое вещество, чем клей), который легко и без следов оттирается как с платы, так и с внутренностей резинки. Короче я был удивлен столь легкому и изящному исходу операции и главное возможности собрать флэшку обратно без улик вскрытия. Далее часть техническая. Первой и удачной попыткой стало замыкание контактов 29-30 на чипе памяти со стороны резонатора (контроллер и второй чип - с обратной стороны). В итоге в системе появилось устройство с идентификаторами отличными от нуля. А ввиду того, что в ходе предыдущих плясок дрова для сервисного режима контроллера уже стояли - они сразу и «подцепились», проявив флэшку в виде «SMI Factory Driver». Для этого драйвера и режима предусмотрена отдельная «галка» в сервисной программе. Полегчало, сервисная программа опять стала видеть флэшку. По информации об устройстве и дампу текущей прошивки стало видно, что память прошивки полностью обнулена, казалось бы - залить новую и т.п. Ан нет, ошибки стали меня преследовать при любой попытке что-либо записать на флэшку (прошивку, конфиг, тестовый шаблон). Перепробовал многое, и разные версии сервисных утилит (остановившись все же на последней - I0414), и пытался засунуть прошивку для иного контроллера, и сконфигурить на разные микросхемы памяти - результат одинаков - изменения не сохраняются, а контроллер «без иголки» так и отписывается нулями. Перепробовал разные компьютеры и режимы USB (1.0/2.0). Интересным моментом стало, что один из компов даже с проинсталленым драйвером «SMI Factory Driver» определял флэшку как накопитель (с именем контроллера и нулевым размером) - соответственно в программе галку нужно было снимать, но сути это не изменило. Решающим моментом оказалось инфа о пароле входа в режим Debug в сервисной программе, который открывает еще более широкие возможности, чем ее штатные функции. Манипуляциями в окошке Debug удалось (почти случайно - т.к. не с первого раза) добиться того, что «сервисный режим» флэшка стала хватать и без «иголки». Ну а далее в нее успешно легла и прошивка и конфигурация. А далее дело техники - закатали в нее правильные идентификаторы (плюс прочие настройки, подобранные мной для данной флэшки), форматнули для верности и вперед. УРА! Работает. Конечно, о восстановлении данных речи не идет - хотя с другой стороны не ясно следующее: все манипуляции с прошивкой, конфигурацией и прочим происходят очень быстро - за это время не реально очистить весь массив памяти (последовательной записью) - но массив реально чист! (все нули). С другой стороны если у микросхем памяти есть опция стирания большими блоками - то возможность быстрого обнуления есть ... в противном случае стоит предполагать о наличие таблицы использования блоков массива, и если блок помечен неиспользованным, то он просто транслируется нулями, а не читается. Подробнее про мой экземпляр флэшки, определяемый не совсем так, что представляет собой на самом деле (сравнение по результатам вскрытия):
Лицевая сторона корпуса и платы:
Оборотная сторона корпуса и платы:
Иное определение типа памяти, видимо, связано с тем, что первые цифры идентификаторов по базе из файла flash_324BC.dbf у них одинаковые, отражается название то, что первое в списке (а вот что реально шьется при конфигурировании - неизвестно, так что лучше тут не грешить - для надежности). Теперь что связано с утилитой. Сначала, вкратце, опишем алгоритм взаимодействия и структуру окон. И, самое главное - для доступа к странице «Setting» используется пароль «320», к странице «Debug» - «1111».
Не лишним будет сразу установить драйвер сервисного режима контроллера, запустив для этого инсталлятор из папки, соответствующей вашей операционке (например: .\UFD_MP\FactoryDriver\WinXP). Первая кнопочка устанавливает драйвер сервисного режима контроллера флэшки, вторая удаляет его, третья - ничего не делает. Пара кнопок внизу активирует или деактивирует некую фишку, для нашего контроллера (SMI 324BC) неприменимую. Базовое окно программы выглядит следующим или подобным образом:
Тут самое основное чтобы прога увидела вашу флэшку на одном из виртуальных портов в центральной части окна, а также панельке внизу - для этого нужно потыркать кнопочку «Scan USB», не забываем, что в случае использования сервисного драйвера «SMI Factory Driver» (когда контакты коротили иголкой) ставить галку «Factory Driver and HUB». Если попытки тщетны, несмотря на то, что в диспетчере устройств все путем, драйвера установлены и функционируют корректно, то выбираем из меню раздел «Config HUB» и видим следующее:
Тут нужно давить на «Scan USB (Automatic)» до появления нолика на панельке порта. После чего жмем «Ok» и в базовом окне еще раз давим «Scan USB». Не исключен случай, когда устройство будет видеться на нескольких портах сразу - в этом случае можно попробовать использовать первое из них. Двойным кликом по строке или одинарным по панельке с инфой об обнаруженной флэшке можно вызвать окно с детальной информацией по данной флэшке:
Тут целесообразно кнопками «Save ...» сохранить разную информацию о вашей флэшке, наиболее актуально сохранение текущей прошивки - «Save ISP», если она, конечно, присутствует, а не убита напрочь. Текущая версия прошивки отображается в поле «ISP Version». Вернемся к базовому окну. Нажатие на кнопку «Setting» и ввод пароля «320» позволяет произвести настройки, предварительно загрузив некоторые (или предварительно сохраненные) из любого файла настроек. На основании данных из которого, будет отображена некоторая конфигурация:
Если выбран конкретный нужный файл - то можно ничего не настраивать, а просто нажать на «Ok». Если вы поменяли настройки, то можете их сохранить в файл («Save to file»), или продолжить их использование без сохранения («Ok») - рекомендуется для удобства сохранять. Далее в базовом окне кликом выбираем строку с нашей флэшкой и жмем «Start» для выполнения заказанных действий. Чуток подробнее о настройках в данном окошке (хотя оно интуитивно понятно):
Остальные параметры окна «Setting» не существенны в целом, любо не применимы для данного контроллера в частности и по этой причине мной здесь не описываются. Кстати, в меню, правым пунктом «Others Setting» вызывается окно управления «аппаратными» разделами на флэшке (создание запароленных разделов, эмуляция iso-образов и т.п.) - в силу достаточного объема этой тематики, а также того, что данная статья посвящена в большей степени восстановлению накопителей - рассмотрение этого пункта выходит за рамки данной статьи. Кнопка «Debug» и ввод пароля «1111» вызывает соответствующие окно, в котором можно сделать еще много чего интересного... Все операции, в отличие от окошка «Setting», производятся сразу!
У человека, имеющего представление о микроконтроллерах и прочей микропроцессорной технике назначение кнопочек в окошке «Debug» не должно вызвать существенных вопросов, и он найдет тут много интересного. Всем остальным нет необходимости вникать в назначение всех кнопок. Скажу лишь, что для восстановления флэшки с убитой прошивкой (отдает все нули в обоих идентификаторах, и распознается только в сервисном режиме после замыкания контактов) - нужно выполнить следующую последовательность действий:
Вот вроде и все. (C) MiGeRA. Октябрь 2009. Распространяется свободно, но без права внесения изменений. При копировании и публикации сохранение копирайта обязательно! | ||||||||||