Оглавление
eMMC — Embedded MultiMedia Card.
eMCP — Embedded MultiChip Packages.
uMCP — UFS MultiChip Packages.
UFS — Universal Flash Storage.
OTP — One Time Programmable.
ПЛУ — Преобразователь логических уровней.
ТП/TP — Тест поинт/Test-Point.
RO — Read Only.
MMCFW - выполняет те-же функции, что и другие (дорогие) специализированные программаторы.
USER (Пользовательский) - ограниченный режим работы программы.
В этом режиме пользователь может считать информацию, конфигурацию, и сделать дамп любых H/W разделов.
Запись, конфигурация и дополнительные инструменты недоступны.
PRO (Профессиональный) - неограниченный режим работы программы.
В этом режиме доступны все функции программы. Чтение, запись, конфигурация и дополнительные инструменты.
Устанавливать какие либо дополнительные драйвера не нужно. Во всех современных дистрибутивах Linux вшиты все необходимые драйвера для работы программы.
Обновление например 6.1.101-TK6 предназначено для старых сборок дистрибутивов рекомендуемой ОС с установленным обновлением 6.1.101 (tk2, tk3, tk4, tk5).
Необходимо оно для:
Прошивки Firmware MMC.
Однобитного подключения.
Разблокировки карт SD.
Корректной очистки MMC.
Корректной логики обработки исключительных состояний MMC.
Также его можно установить на сторонний дистрибутив Linux Mint или Ubuntu для поддержки всех необходимых операций в программе.
Рекомендуемая ОС, как правило уже содержит все имеющеюся обновления. Так как своевременно пересобирается.
Например Linux Mint XFCE-21-x64-6.1.101-TK6 уже содержит обновление 6.1.101-TK6.
MMCFW - поддерживает управление питанием подаваемым контроллером USB RTS на eMMC.
Для этого необходимо включить поддержку управления питанием в настройках программы. После чего кнопка RTS станет кликабельна.
Однако, данная функция не будет работать корректно на сборках где питание eMMC реализовано напрямую от источника питания.
Для таких случаев и пользователей сборок с ПЛУ, мы разработали простенькую схему управления питанием с использованием пары транзисторов и оптрона (оптопары). Открыть схему
В eMMC/eMCP как правило есть 4 так называемых HW раздела:
Boot0.
Boot1.
UserArea (Пользовательская область).
RPMB (Replay Protected Memory Block).
Так же опционально в eMMC можно настроить самостоятельно еще до 4-х разделов GP (General Purpose). Используется редко.
В Boot0 обычно хранится первичный загрузчик.
В Boot1 обычно хранится копия Boot0.
В UserArea хранится сама таблица разделов и её разделы. В этих разделах находится основная прошивка используемая устройством, пользовательские данные и т.д.
В RPMB хранится то, что разработчик устройства решил спрятать от просмотра и копирования (конфиги, сертификаты и т.д.). Чтение/Запись этого раздела невозможна без ключа шифрования.
Еще в eMMC есть следующие важные конфигурационные и идентификационные данные:
OCR.
CID.
CSD.
ExtCSD (Extended CSD).
В OCR хранится информация о поддерживаемом напряжении, информация о состоянии процедуры включения и индикацию режима доступа.
В CID хранится информация о производителе, имя, дата производства и прочая информация. На некоторых устройствах CID используется для привязки eMMC к устройству. В целом CID считается идентификатором eMMC.
В CSD хранится информация специфичная для устройства. CSD определяет формат данных, тип коррекции ошибок, максимальное время доступа к данным, скорость передачи данных и т.д.
В ExtCSD хранится дополнительная конфигурационная информация, в том числе и загрузочная конфигурация. ExtCSD по сути дополняет CSD.
Так вот, что бы корректно снять дамп с eMMC обычно достаточно:
Слить Boot0.
Слить Boot1.
Слить UserArea.
Слить разделы GP (если есть).
Слить ExtCSD или информацию о загрузочной конфигурации (Boot partition config, Boot bus conditions, H/W reset function).
В основном этих данных достаточно, что бы запрограммировать новую eMMC. То-есть:
Залить Boot0.
Залить Boot1.
Залить UserArea.
Залить разделы GP (если есть).
Установить загрузочную конфигурацию из слитого ExtCSD (загрузив его в программу) или установить вручную Boot partition config, Boot bus conditions, H/W reset function.
Если необходимо сконфигурировать разделы GP, то это так же можно сделать при помощи слитого ExtCSD.
Если используется привязка по CID (редко но бывает), то сменить CID можно только на eMMC от Samsung.
Если в вашем устройстве используется RPMB, то успех восстановления такого устройства зависит от того, каким образом используется RPMB. RPMB может программироваться производителем или автоматически.
Если RPMB программируется автоматически, то достаточно будет иметь чистый RPMB на новой eMMC и при первом включении устройства, RPMB за программируется устройством автоматически. RPMB можно очистить путем перепрошивки Firmware eMMC (только Samsung).
Если RPMB программируется производителем, то восстановить данные этого раздела уже не получится. Для чтения/записи этого раздела необходимо знать ключ шифрования.
Так же обратите внимание на версию Extended CSD при выборе новой eMMC. Версия Extended CSD на новой eMMC должна быть такой же, что и на заменяемой eMMC, либо выше. В противном случае работоспособность не гарантируется.
Верификация - это сверка записанных данных с данными записываемого файла после процесса записи.
Успешная верификация гарантирует, что записанные данные в eMMC идентичны данным в записываемом файле.
Все eMMC/eMCP подчиняются единому стандарту JEDEC. Что прописан для всех ревизий/версий eMMC.
Это значит, что процесс инициализации и взаимодействия с eMMC стандартизирован, а различий между eMMC - нет.
Однако, разные модели от разных производителей eMMC могут отличаться между собой в электрических характеристиках. Отсюда и возникает часто распространенная проблема заключающаяся в отсутствии инициализации некоторых MMC при нестабильном подключении.
Разные eMMC имеют разные требования к качеству подключения.
В eMMC/eMCP есть защищенный от доступа раздел, так называемый RPMB.
Производители устройств (ТВ, Магнитолы, Смартфоны и т.д.) могут использовать это раздел для хранения различных данных. Обычно это какие ни будь ключи, мак адрес, контрольные суммы и т.д.
Этот раздел обычно программируется процессором с использованием ключа шифрования. И дальнейший доступ к содержимому этого раздела будет возможен только с использованием ключа шифрования, который например может формироваться из серийного номера процессора с использованием CID eMMC. Таким образом создается так называемая пара, процессор и eMMC.
Запрограммированный ключ нельзя изменить.
Такая пара создается единожды на стороне eMMC, а повторная связка с новым процессором невозможна.
При замене eMMC, где используется RPMB, как минимум необходимо, что бы раздел RPMB был чист (не запрограммирован).
Раздел RPMB нельзя очистить, сбросить, обнулить стандартными средствами для повторного использования. Но есть средства нестандартные.
Так как раздел RPMB, и все остальные разделы формируются и контролируются программным обеспечением контроллера eMMC, то все данные в eMMC, в том числе и настройки, можно сбросить путем перепрошивки контроллера eMMC.
Процесс прошивки контроллера eMMC не документирован, и не разглашается производителями. Это не FFU.
FFU - стандартизированный процесс обновления прошивки контроллера eMMC.
Обновление прошивки контроллера не сбрасывает настройки в eMMC, и не уничтожает данные.
Не поддерживается в MMCFW на данный момент из-за отсутствия необходимости.
Существует несколько ревизий/версий eMMC/eMCP.
Ревизия = Версия:
0 = 4.0.
1 = 4.1.
2 = 4.2.
3 = 4.3.
5 = 4.41.
6 = 4.5.
7 = 5.0-5.01.
8 = 5.1.
Чем выше ревизия/версия eMMC, тем больше различных функций поддерживает eMMC.
Что бы гарантировать совместимость в замене eMMC, необходимо подбирать eMMC соответствующей ревизии/версии или выше.
Загрузочная конфигурация обычно зависит от процессора. Под разные процессоры выставляется разная конфигурация.
В редких случаях конфигурация не требуется.
К загрузочной конфигурации относятся:
Partition configuration (Boot) - этот регистр определяет конфигурацию разделов загрузки.
Boot bus Conditions (Bus) - этот регистр определяет ширину шины для операции загрузки.
H/W reset function (Rst_n) - этот регистр определяет возможность управления аппаратным сбросом.
Подробней о H/W reset function:
0x00 (Temporarily disabled): Аппаратный сброс отключен (значение по умолчанию). Сигнал на ножке RST_n игнорируется устройством.
0x01 (Permanently enabled): Функция сброса включена навсегда. Контроллер eMMC будет реагировать на сигнал низкого уровня RST_n.
0x02 (Permanently disabled): Функция сброса отключена навсегда.
Правила в отношении H/W reset function при замене eMMC:
Если в конфиг файле указано, что регистр RST_n должен быть 0x01 - значит его нужно установить в 0x01.
Если в конфиг файле указано, что регистр RST_n должен быть в 0x00 - значит для устройства не важно, какой он в eMMC.
Важно!
Установка конфигурации H/W reset function - это одноразовая, необратимая операция (OTP).
Сбросить конфигурацию H/W reset function можно только перепрошивкой контроллера eMMC.
В eMMC v5.0 и выше, появился стандарт отображения износа памяти eMMC:
Pre EOL - отображает использованное количество резервных блоков.
Device life time estimation type A - отображает степень износа памяти типа А.
Device life time estimation type B - отображает степень износа памяти типа B.
MMCFW - анализирует значения этих регистров, и выносит решение о состоянии памяти основываясь на этих регистрах.
В более ранних версиях eMMC, общего стандарта отображения износа не было. Однако, MMCFW может считать S.M.A.R.T с eMMC от Samsung v4.3 - 4.5 проприетарными способами, что доступны на вкладке Инструменты.
Опционально в eMMC можно настроить до 4-х разделов GP (General Purpose). Эти разделы создаются из области UserArea.
Для конфигурации разделов необходима Поддержка управления разделами в самой eMMC. Эту информацию можно найти в логе инициализации eMMC.
При конфигурации разделов GP можно использовать две опции:
ENH (Enhanced) - переключает режим работы ячеек памяти в режим высокой надежности хранения.
WR_REL (Write reliability) - опция которая относится к надежности при записи данных.
ENH - технология улучшенного хранения данных. Переводит выделенную область памяти в другой тип. Например TLC > MLC, MLC > SLC.
Соответственно, если мы создаём раздел GP1 размером 50МБ с опцией ENH, то из UseraArea мы отнимем на создание раздела 100МБ.
WR_REL - эта опция защищает ранее записанные данные в случае сбоя питания.
Суть данной опции в том, что имеющиеся данные не перезаписываются при записи, а новые данные записываются в новую область.
Таким образом, в случае сбоя питания во время записи у нас останутся старые, но валидные данные, вместо не валидных новых.
Макс.ENH (Enhanced)
Максимально доступный объём ENH зависит от производителя и модели eMMC. Этот объём обычно указывается в КиБ.
Enhanced UserArea
Опцию ENH также можно применить к части раздела UserArea, тем самым создать Enhanced UserArea.
Для этого задается смещение User ENH offset (HEX 0x) и размер User ENH size (HEX 0x или МиБ).
Например, если мы хотим использовать весь доступный ENH со смещения 0x00000000, то умножаем Макс.ENH на 1024 и переводим в HEX.
Полученные значения копируем в User ENH size с префиксом 0x. Значения без префикса будут интерпретированы как МиБ.
Финальная конфигурация (PARTITION_SETTING_COMPLETED) - сохранение установленной конфигурации разделов навсегда (OTP).
Если не ставить галочку на Финальная конфигурация, то будет установлена тестовая конфигурация разделов, которая будет сброшена с отключением питания eMMC.
Важно!
Финальную конфигурацию нельзя сбросить или изменить (стандартными средствами).
MMCFW - отображает тестовую конфигурацию разделов серым цветом при повторной инициализации eMMC.
Фактический размер Enhanced UserArea может немного отличаться от тестового, после установки финальной конфигурации.
В разных устройствах (ТВ, магнитолы, колонки, приставки, телефоны и т.д.) используются различные типы таблиц разделов.
Таблица разделов описывает расположение разделов в UserArea и их границы. Их еще называют Soft Parts (программные разделы).
На данный момент MMCFW поддерживает следующие таблицы разделов (чтение/запись):
GPT (GUID Partition Table).
MBR (Master Boot Record).
EBR (Extended Boot Record).
MSTAR (...).
MTD (...).
MPT (...).
Различные модификации GPT (NintendoSW, AUTO CHIPS).
Это большинство широко используемых структур данных во всех пользовательских мультимедиа устройствах на сегодняшний день.
Также, MMCFW поддерживает предварительный анализ дампа UserArea, и поиск проблем в некоторых таблицах разделов.
Поддержка структур данных (таблиц разделов) часто необходима для полноценной работы с eMMC/eMCP.
Форматирование
После восстановления таблицы разделов GPT, MMCFW автоматически форматирует раздел User Data в соответствующий формат, если раздел будет обнаружен. Обычно это файловая система EXT4.
EXT4 - является файловой системой по умолчанию во многих устройствах. Поддерживается в Android, и в Linux подобных системах.
Если в разделе User Data будет отсутствовать формат, то этот раздел нельзя буде смонтировать устройством. А само устройство не сможет загрузиться в операционную систему. На этапе монтирования раздела, устройство будет зависать или перезагружаться.
Некоторые устройства могут форматировать раздел User Data самостоятельно, автоматически. Либо пользователем в Recovery.
Переразметка
При записи дампа в UserArea с таблицей разделов GPT, MMCFW переразметит таблицу разделов, если установлена соответствующая галочка в настройках GPT-Tools.
Часто это необходимо для того, что бы масштабировать данные таблицы разделов под желаемый размер UserArea.
Если дамп был считан с eMMC 64ГБ, то его нельзя записать в eMMC меньшего объёма.
Если дамп был считан с eMMC 8ГБ, то после записи этого дампа в eMMC большего объёма, устройство будет использовать только 8ГБ.
Для решения этих проблем, в MMCFW используется переразметка.
Масштабированию подлежит только раздел User Data. А разделы, что находятся после раздела User Data, будут сдвинуты.
Также, переразметка таблицы разделов может исправить некоторые проблемы в таблице разделов, приводя её к стандарту.
Используйте данную функцию только при необходимости!
eMMC/eMCP имеет несколько типов блокировок, защит:
Парольная блокировка (Защищает все данные от чтения/записи).
Временная блокировка (Защищает данные от записи).
Постоянная блокировка RO (Защищает все или группу данных от записи).
Парольная блокировка
Данная блокировка устанавливается пользователем с использованием пользовательского пароля.
Пароль может быть разным. Но не более 16-ти символов или 32-х в HEX.
Даная блокировка часто используется для блокировки карт SD в автомобильных устройствах.
Если пароль неизвестен, то его можно сбросить только с полным уничтожением данных.
Временная блокировка
Данная блокировка снимается и ставится без особых проблем.
Постоянная блокировка RO
Данная блокировка может быть установлена как на всю область памяти, так и на какую-то её часть (группу).
Блокировка RO часто встречается на изношенных eMMC/eMCP.
Гарантированно снимается перепрошивкой контроллера eMMC. Но снимать её бессмысленно!
Блокировка установленная по износу, вскоре установится вновь, даже если её снять.
Практически у каждой eMMC/eMCP есть контакт так называемый ТП (Test-Point), который переводит eMMC в режим BOOT.
Также часто встречаются eMMC/eMCP уже находящуюся в режиме Boot. Что обычно связано с износом памяти eMMC/eMCP.
Режим BOOT используется для восстановления Firmware контроллера eMMC.
Расположение контакта ТП зависит от производителя и модели eMMC/eMCP.
Обычно ТП подключается к GND.
Важно!
После инициализации eMMC в системе с подключенным ТП, ТП необходимо отключить!
В противном случае процесс прошивки завершится неудачей. Процесс инициализации можно отслеживать в Логгере (KMSG), что доступен в программе MMCFW > Дополнительно > Логгер (KMSG).
Прошивка Firmware eMMC позволяет сбрасывать все настройки и конфигурации в eMMC, приводя eMMC в состояние новой.
Эта операция уничтожает все данные в eMMC, в том числе:
Очищает RPMB.
Очищает карту битых блоков.
Очищает CID.
Сбрасывает настройки конфигурации разделов.
Сбрасывает настройки конфигурации загрузки.
Сбрасывает Device life time estimation.
Снимает все блокировки.
Также, с помощью данной операции можно установить новый CID в eMMC версии 5.1.
Так как после прошивки Firmware eMMC становится доступным установка CID (OTP).
На данный момент MMCFW поддерживает чтение/запись Firmware eMMC только для eMMC/eMCP от Samsung.
Прошивка Firmware eMMC часто необходима тем, кто использует Б/У eMMC для установки в устройство.
Важно!
Прошивка Firmware eMMC крайне опасная операция и может вывести из строя вашу eMMC. Не используйте данную операцию без острой необходимости, и только тогда, когда не жалко потерять eMMC.
В момент запуска MMCFW, пропадают из области видимости все подключаемые накопители (диски, флешки и т.д.).
Это сделано для безопасности. Что бы система или пользователь не могли использовать накопитель с которым возможно работает программа.
После окончания работы программы, все устройства, накопители снова инициализируются системой, и станут доступны.