Описание eMMC
#2
Описание eMMC
Сейчас и в дальнейшем, при описании работы с EMMC мы будем отталкиваться от работы в программе eMMC tool, которую также называют Easy Jtag Plus.
Модуль eMMC_tool предствляет собой развитие программы EasyJtag Classic в области работы с eMMC. Данный модуль объединяет собой несколько программ типа Direct Odin и Direct Qualcomm, которые изначально были написаны для попыток записи прошивок напрямую в eMMC и общей работы c eMMC.
Основная кнопка программы это Detect EMMC, для проверки подключения и определения, "живая" ли микросхема вообще, т.е. реагирует она на внешние комманды или нет. По данной команде из микросхемы вычитываются основные данные: CID, CSD, размеры разделов, основные биты конфигурации, хранящиеся в Extended CSD (ExtCSD).
CID содержит информацию о производителе микросхемы, название микросхемы, месяц год производства и серийный номер.
ExtCSD представляет собой блок регистров (512 байт), в которых хранится конфигурация микросхемы.
Сама микросхема eMMC представляет собой память с контроллером (интерфейсом), и с точки зрения устройства содержит в себе
1) 4 основных раздела (
ROM1, ROM2, ROM3, RPMB),
2) до 4 разделов GP (
GP1-GP4),
3) регистры конфигурации
Extended CSD (ExtCSD)
ROM1 -
Main User Datа, иногда называется Userdata;
ROM2 -
Boot Partition 1 (Boot1);
ROM3 -
Boot Partition 2 (Boot2);
ROM4 - так иногда называют раздел
GP1.
Раздел
ROM1 является основным разделов в который пишутся данные (прошивка), и содержит в себе все разделы,
сформированные с помощью таблицы разделов.
ROM2,3 (Boot1,2) являются разделами в котором хранится загрузчик, отправляемый в процессор
(например, MTK (Mediatek), Exynox (Samsung)), или откуда процессор сам его берет (Intel, HiSilicon)
RPMB - защищенный от прямого чтения/записи раздел, предназначенный для хранения данных, к которым должен быть затруднен доступ извне. Данные в этом разделе доступны только через процессор устройства, который получает в него доступ использующий ключ, содержащий с себе SN процессора и еще какие-то данные. Для работы с этим разделом в процессорах содержится специальный блок, который шифрует данные и работает с этим разделом, предварительно согласовав ключи с микросхемой, в которой их еще нет. Достоверных данных о возможности работать с этот разделом минуя процессор, неизвестно.
Разделы
GP1-GP4, это разделы, которые создаются за счет начала раздела ROM1 и физически располагаются на его месте, уменьшая собой размер ROM1. На данный момент такие разделы, а точнее один (GP1) создаются в устройствах, собранных на процессорах Intel (но не на всех, в частности на платформе CloverView).
Размеры ROM2/3/RPMB можно изменить только на EMMC Samsung до ревизии Extended CSD v1.8 (MMC v 5.1), в остальных случаях их размер остается таким, каким его задали на заводе. В большинстве случаев размер не имеет значения, потому как обычно загрузчики редко превышают размер 512KB. Но есть аппараты, которые используют RPMB и отказываются работать с микросхемами, которые предназначены для аппаратов с процессорами Tegra (Nvidia), в которых обычно конфигурируется размер RPMB равным нулю
Также для процессоров MTK со scatter файлами первых версий (например, для процессоров MT6589), сумма размеров ROM2/3/RPMB не может быть больше начала раздела MBR, который должен быть записан по адресу указанному в scatter, который для MT6589 процессора равен 0x600000 (6MB).
Поэтому eMMC с размерами ROM2/3/RPMB 2/2/2MB или 2/2/0,5MB будет работать с MT6589, а с размерами ROM2/3/RPMB 4/4/4 уже не будет.
Раздел(ы) GP1 создаются на всех типах eMMC, поддерживающих General Partition Configuring, однократно. При этом наблюдались проблемы с созданием разделов GP1-GP4 на микросхемах Toshiba.
Лог детакта eMMC, базовая информация о eMMC.
В настройках eMMC_Tool есть галочка "Shot info about eMMC in log". Данная настройка позволяет выводить только основную информацию в логе детекта eMMC.
Первые строки позволяют понять, есть ли физический контакт по линии CMD, которая служит основной линией передачи команд в eMMC.
Т.к. eMMC имеет 2 напряжения, VCC (собственно питание микросхемы) и VCCQ (или VIO - напряжение линии ввода-вывода), то интерфейс обмена eMMC работает с логическими уровнями VCCQ. Поэтому важно, чтобы в интерфейсе программы было выставлено напряжение VIO равное напряжению на адаптере eMMC, обычно это 1,8v.
Тем не менее, при нестабильности коннекта можно увеличить VIO в программе, это позволит за счет перетока тока из бокса в интерфейс eMMC улучшить коннект с проблемным подключением. Настоятельно не рекомендуется повышать больше чем на 1 шаг или ставить ниже реального VCCQ.
Теперь становятся понятным следующие 2 строки:
CMD Pullup Level: - уровень напряжение линии CMD, которое выдает бокс;
CMD Active Level: - уровень сигнала, которое отдает микросхема.
Если CMD Active Level сильно занижено (
300-500mV), это значит обычно отсутствие контакта по линии CMD или отсутствие PullUp резисторов между линией CMD и VCCQ в интерфейсе подключения eMMC. Если занижен CMD PullUp Level, это значит, что линия CMD закорочена на землю.
Дальше в логе выводится CID, CSD, потом идет расшифровка CID - из него выделяется для наглядности Brand eMMC (Samsung), eMMC NAME (M8G2FB), Serial Number (S/N: D31CE4AC), версию прошивки firmware eMMC (rev.00).
Дальше выводятся размеры ROM1, ROM2, ROM3, RPMB. Т.к. размеры ROM2/3 всегда одинаковы, они выводятся одной строкой.
Одной из важных строк является версия ExtCSD, которая показывает поколение eMMС, а точнее - стандарт команд, который она поддерживает. При замены eMMC в аппарате нужно знать, что в большинстве случаев более новую eMMC нельзя заменить более старой.
Для того, чтобы в процессе работы с eMMC были видны основные ее параметры, они дублируются над логом одной строкой или по нажатию на кнопку под ней в расширенном виде с расшифровкой.
В первой строке выводится краткая информация: EMMC Brand, NAME, информация о разделе загрузки (boot from
, являющегося расшифровкой регистра 179 ExtCSD, кол-во линий data по которым передается boot, записанное в регистре 177 ExtCSD (bus config).
В расширенном варианте также отображаются цифровые значения регистров 179/177 ExtCSD, значение регистра 162 ExtCSD с расшифровкой.
Кроме этого выводится значение регистра конфигурации [PARTITION_SETTING_COMPLETED], 0x01 в котором означает, что раздел ROM1 окончательно сконфигурирован, и создание в нем или изменение разделов GP1-GP4 невозможно.
Последняя строка - значения регистров ExtCSD, которые показывают выставлен ли режим RO (ReadOnly - только чтение) в eMMC.
Temporary Write Protection это временный флаг, который можно легко снять, он выставляется во время загрузки Boot в аппаратах Lumia (и может еще где-то).
Permanent Write Protection выставляется eMMC при ее длительном износе, и говорит обычно о том, что срок службы eMMC пришел к концу.
В расширенном варианте лога выводится еще строка информация по регистру ExtCSD [PARTITIONING_SUPPORT], который отображает возможности eMMC к созданию дополнительных разделов GP1-GP4, битовый регистр, может иметь значения 0x00, 0x01, 0x03, 0x07. Из них 0x00 означает, что микросхема не поддерживает создание GP1-GP4, остальные значения связаны с вариантами конфигурирования GP1-GP4, чем больше значение тем больше опций при создании этих разделов поддерживает eMMC.
Частично или полностью неисправные eMMC.
Признаки плохого контакта eMMC в сокете или же полной неисправности eMMC являются строки:
Can't init device. Reason: CMD Timeout Error
Can't init device. Reason: OCR Ready Timeout Error [Check VCC or eMMC DEAD]
Can't init device. Reason: CARD is Password Locked
У полуживых микросхем в CID выдается информация, которая говорит о том, что микросхема находится в boot-режиме.
примеры:
Sandisk:
EMMC NAME:
SDM032 , S/N: FFFFFFFF , rev. 90
EMMC ROM 1 (Main User Data) Capacity: 30 MB (000001E9C000)
Hynix:
EMMC NAME:
M MOR , S/N: 00000000 , rev. 00
EMMC ROM 1 (Main User Data) Capacity: 128 MB (000008000000)
FORESEE
EMMC NAME: , S/N: FFFFFFFF , rev. FF
EMMC NAME
(HEX):
000000000000
Samsung
EMMC NAME: 000000 , S/N: 20110726 ,
rev. 56
EMMC NAME (HEX): 303030303030
Признаком boot-режима eMMC Samsung является eMMC NAME 000000, и rev.0x56. Так же выглядит запуск eMMC Samsung используя TP (test-point). В eMMC Samsung до MMC rev 5.0 (и в некоторых rev 5.0), чаще всего можно восстановить прошивку eMMC, но это не всегда гарантирует, что она после этого долго проработает (зависит от причины, по которой она оказалась в boot).
Для других eMMC, кроме перечисленных Samsung, восстановление firmware eMMC (вывод из boot) пока не предоставляется возможным. При этом нужно учитывать что Hynix и Sandisk падают в boot при значительном износе ячеек памяти, что значит, что долго они работать после возможного восстановления не будут.