Основы работы с EMMC

  • Автор темы Автор темы Layder
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Layder

.
27/8/06
2 262
642
0
Кредиты
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.

detectlog.png

Первые строки позволяют понять, есть ли физический контакт по линии CMD, которая служит основной линией передачи команд в eMMC.

Т.к. eMMC имеет 2 напряжения, VCC (собственно питание микросхемы) и VCCQ (или VIO - напряжение линии ввода-вывода), то интерфейс обмена eMMC работает с логическими уровнями VCCQ. Поэтому важно, чтобы в интерфейсе программы было выставлено напряжение VIO равное напряжению на адаптере eMMC, обычно это 1,8v.

Тем не менее, при нестабильности коннекта можно увеличить VIO в программе, это позволит за счет перетока тока из бокса в интерфейс eMMC улучшить коннект с проблемным подключением. Настоятельно не рекомендуется повышать больше чем на 1 шаг или ставить ниже реального VCCQ.

Теперь становятся понятным следующие 2 строки:
CMD Active Level: - уровень напряжение линии CMD, которое ожидает бокс;
CMD Pullup Level: - уровень сигнала, которое отдает микросхема.

Если CMD Pullup Level занижено (500-800mV), это значит обычно отсутствие PullUp резисторов между линией CMD и VCCQ в интерфейсе подключения eMMC, и это значит, что возможны ошибки детекта или работы с eMMC.
Если CMD Pullup Level сильно занижено (100-300mV), это скорее всего значит, что линия 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 были видны основные ее параметры, они дублируются над логом одной строкой или по нажатию на кнопку под ней в расширенном виде с расшифровкой.

Header 2.png

В первой строке выводится краткая информация: 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
EMMC Password Locked: Yes


У полуживых микросхем в 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 при значительном износе ячеек памяти, что значит, что долго они работать после возможного восстановления не будут.



p.s. В статье могут быть некоторые неточности. Они будет исправляться со временем.
 
Последнее редактирование:
Статус
Закрыто для дальнейших ответов.
Назад
Верх Низ