Ремонт флэшек на контроллере SMI

Пришлось реально и практически столкнуться с данным вопросом  на примере одной из моих флэшек. Ей оказалась Corsair Voyager GT 16Gb - та, что в резиновом корпусе и с красными вставками. В эксплуатации она была недолго - около полугода, и то в малоактивной (в сравнении с другими флэшками, кои я использую совместно для хранения разного вида данных), тем не менее она оказалась первой «вышедшей из строя» и похоронившей в себе данные (остальные, причем намного более старые флэшки безглючно работают до сих пор). Брался сей Корсар не только из-за прикольного резинового корпуса и разумной цены за данный объем, но и в первую очередь за обещанную высокую скорость его работы.

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

  1. «Интеллектуальная» электроника - контроллер и микросхемы (одна  или несколько) массива флэш-памяти. Выпускаются различными фирмами и продаются партиями не менее 1000 штук для тех, кто готов ваять из них различные девайсы;
  2. Разработкой, изготовлением печатной платы, а также выбором и запайкой компонентов из предыдущего пункта и прочей сопровождающей «рассыпухи» - занимается уже другая фирма. Фактически она и делает, в нашем случае флэшку. Это т.н. OEM-производитель;
  3. Собранную и уже формально готовую к работе флэшку (в виде платки с микросхемами, разъемом и т.п.) нужно еще заштамповать в корпус, положить в красивую упаковку, укомплектовать всякой сопроводиловкой и т.п. На корпусе флэшки мы видим лейбл именно этой фирмы. Вдобавок к этому «электроника» флэшки имеет возможность кастомизации на предмет «увековечивания» имени (кода) ее производителя. И, разумеется, последний приложивший руку (производитель корпуса и упаковки) оставляет там свой нэйм.

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

И так рассмотрим подробнее, из чего состоит любая флэшка. А устройство незамысловато, ведь действительно, размер то не велик. Основными компонентами являются контроллер и массив флэш-памяти, помимо всякой несущественной рассыпухи еще можно отметить стабилизатор напряжения (из 5В с USB-порта получающий порядка 3В, в зависимости от модели контроллера и памяти) и кварцевый резонатор (хотя это уже мелочь). Контроллеры, как и микросхемы памяти, выпускаются совершенно разными производителями - вопросом подборки «пары» занимается сборщик (см. п.2). В нашем случае речь пойдет о компании Silicon Motion Inc и ее передовом контроллере SMI-324, примененном во флэшке Corsair Voyager GT. Надо сказать, что после случая, подвившего меня на описанные ниже исследовательские работы и написание данного документа, мое отношение к продукции SMI упало ниже плинтуса - что не говори, а контроллеры Alcor намного более надежны и предсказуемы. Но вернемся к теме. Какие функции выполняет контроллер флэшки - думаю понятно. Что представляет из себя контроллер, с какого боку он доступен конечному пользователю, оснащенному инженерным подходом к технике (не секрет, что для «домохозяйки» флэшка - это просто «черный ящик» - и все)? На просторах интернета удалось найти такую вот схему:


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

Разработчик контроллера, разумеется, позаботился о «гибкости» своего устройства, обеспечив возможность обновления 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 удалось (почти случайно -  т.к. не с первого раза) добиться того, что «сервисный режим» флэшка стала хватать и без «иголки». Ну а далее в нее успешно легла и прошивка и конфигурация. А далее дело техники - закатали в нее правильные идентификаторы (плюс прочие настройки, подобранные мной для данной флэшки), форматнули для верности и вперед. УРА! Работает.

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

Подробнее про мой экземпляр флэшки, определяемый не совсем так, что представляет собой на самом деле (сравнение по результатам вскрытия):

 

По информации утилиты SM32x_I0414:

Установлено в реале:

Контроллер

SMI-324BC

SMI-324QF BC

Флэш-память (2шт)

K9MDG08U5M

K9HCG08U1M

 

Лицевая сторона корпуса и платы:

 

Оборотная сторона корпуса и платы:

 

Иное определение типа памяти, видимо, связано с тем, что первые цифры идентификаторов по базе из файла 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» для выполнения заказанных действий. Чуток подробнее о настройках в данном окошке (хотя оно интуитивно понятно):

  • 1. Mode: Memory Bar (наше устройство чисто флэшка, а не картридер или картридер совмещенный с флэшкой);
  • 2. Serial Number: *** (эстетика, можно обойтись и без него, хотя можно не трогать текущий), тут же и длина серийника при его наличии (SN Length);
  • 3. Группа USB (то, каким образом флэшка видна в системе и кто ее изготовил для нее корпус - чисто эстетический характер);
  • 4. Группа Inquiry (почти тоже что и предыдущее, только на чуть более низком уровне стека USB);
  • 5. Disk Type: USB-HDD|USB-ZIP (в первом случае флэшка определяется как жесткий диск, во втором - как съемный накопитель);
  • 6. Disk Size: *** (если размер диск определяется неверно - можно указать его вручную, либо же оставить без изменений - «NO Check»);
  • 7. Disk Label: *** (метка диска при его форматировнии);
  • 8. Led Ready: *** (метод индикации подключенной флэшки: 80 - светодиод горит постоянно, 82 - не горит);
  • 9. Lead Busy: *** (скорость мерцания светодиода при активности: 1 - максимальная, 48 - минимальная );
  • 10. USB Mode: *** (Форсирование режима шины при котором контроллер будет функционировать - USB 1.x | USB 2.0 | Оба режима);
  • 11. Группа Select TEST ITEM (Собственно, основные значимые настройки):
  • a. Pretest: *** (тут можно выбрать, будемли мы тестировать имеющиеся сбойные блоки, имеющиеся почти на любой флэшке, на работоспособность с целью их использования - что очень не рекомендуется во избежание разных глюков и потери информации, свободного пространства от этого много не выиграешь. Ставим «No Erase All»). Чуть ниже - Select PTest - выбор шаблона тестирования, специфичного для каждого контроллера (если не указан - то выбирается автоматически);
  • b. Data Block | Bad Block *** (два способа задать количество резервных блоков, которые будут подменять испортившиеся в процессе эксплуатации);
  • c. Write CID *** (Запись идентификационно-конфигурирующей информации - с установкой этой галки становятся доступными два поля рядом - в первом задаем тип контроллера, во втором тип микросхемы массива флэш-памяти. Брать эти данные лучше путем непосредственного, визуального их считывания с поверхности самих микросхем);
  • d. Download ISP (Установка этой галки приводит к перезаписи прошивки в контроллере - галка «Select ISP» позволяет выбирать файл прошивки вручную, иначе выбор происходит автоматически из комплекта прошивок идущих вместе с утилитой );
  • e. Copy Test (Тестирование контрольного участка массива флэш-памяти на работоспособность - можно выбрать размер тестируемой области, при его увеличении процесс тестирования может занять существенное время. Кнопочкой «Set», можно выбрать шаблоны, по которым будет производиться тестирование );
  • f. Make Auto Run (...);
  • g. Format (Форматирование носителя в ту или иную файловую систему - например в FAT32, без возможности конфигурирования параметров форматирования);
  • h. Preload (Запись на флэшку любых данных после форматирования - видимо при тиражировании);

 Остальные параметры окна «Setting» не существенны в целом, любо не применимы для данного контроллера в частности и по этой причине мной здесь не описываются.

Кстати, в меню, правым пунктом «Others Setting» вызывается окно управления «аппаратными» разделами на флэшке (создание запароленных разделов, эмуляция iso-образов и т.п.) - в силу достаточного объема этой тематики, а также того, что данная статья посвящена в большей степени восстановлению накопителей - рассмотрение этого пункта выходит за рамки данной статьи.

 Кнопка «Debug» и ввод пароля «1111» вызывает соответствующие окно, в котором можно сделать еще много чего интересного... Все операции, в отличие от окошка «Setting», производятся сразу!

 

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

  • 1. Жмем кнопу «Pretest» (4-ая во второй группе вертикально расположенного ряда);
  • 1.1. Выбираем шаблон для претеста, находящийся в той же папке, что и прошивка (для нашего случая . \UFD_324BC\SM324BCPTEST_4K_TWIN.BIN);
  • 1.2. Ждем, пока отработает заказанная функция. Светодиод на флэшке при этом процессе обязательно должен мигать (иначе, видимо флэшка по какой-то причине нас «не поняла» - нужно повторить операцию подключения и т.д. сначала);
  • 2. Жмем кнопку «Erase All» (самый нижний ряд). Инициируется процесс, ход которого отображается не только миганием светодиода на флэшке, но прогресс-баром справа от кнопки - операция занимает несколько секунд (если все произошло мгновенно, значит что-то не то, повторяем все сначала);
  • 3. Закрываем окно «Debug» и переходим к «Setting» - производим необходимое конфигурирование (см. пояснения выше), не забыв указать правильный тип контроллера и памяти. Файл прошивки будет выбран автоматически, хотя может быть задан вручную. Использование опции «Pretest» в большинстве случаев обязательно (без нее не проходит), а в списке справа рекомендуется выбирать «No Erase All». Рекомендуется, также, форматировать флэшку в FAT32 ;
  • 4. Сохраняем конфигурацию (лучше в файл) и жмем «Start» ... после успешного завершения флэшку «передернуть», а сервисный драйвер деинсталлировать (обязательно).

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

 (C) MiGeRA.

Октябрь 2009.

Распространяется свободно, но без права внесения изменений. При копировании и публикации сохранение копирайта обязательно!

Заглавная » Железо компьютерное » USB - переферия и флэш » Ремонт флэшек на контроллере SMI