Перейти к содержанию

Программатор RT809H, сохранение или чтение раздела памяти eMMC


Рекомендуемые сообщения

Опубликовано

Привет Как вы знаете, программаторы UFPI (на которых я работаю) и ENTT позволяют сохранять выбранные разделы или разделы в памяти EMCC Программатор RT809H при программировании EMCC имеет вкладку «НАСТРОЙКА», где мы можем выбрать сохранение всей памяти EMCC или опцию «Частичный адрес», где вы должны указать данные для сохранения. Я заинтересован в предоставлении данных для записи раздела памяти на этой вкладке Я не могу записать данные в формате записи адреса, размера данных, как это делает UFPI Нужно ли RT809H пересчитывать данные чтения-записи по-другому?

  • 1 год спустя...
Опубликовано

Насколько я помню RT809H можно считать разделы и записать разделы, но в какой то версии был косяк что о менял раздел ext_csd , тем самым изменял ее конфиг. Возможности в програмном обеспечении не такие большие как по сровнению в ufpi 

  • 2 года спустя...
Опубликовано

RT809H и работа с разделами eMMC: детальный анализ

Понимание проблемы

Когда мы работаем с eMMC-памятью в телевизионной технике, принципиально важно понимать,

что разные программаторы используют разные модели адресации при работе с частичным чтением/записью.

Как считают адреса разные программаторы

UFPI / ENTT — логика адресации
Стартовый адрес (LBA или байтовый) + Размер данных
Пример:
Start Address : 0x00700000
Data Size     : 0x00100000  (1 MB)
Всё прозрачно — указал откуда, указал сколько, получил кусок.

 RT809H — логика «Partial Address»
RT809H работает иначе. В поле **Partial Address** нужно указывать:
Start Address : адрес начала (в байтах или секторах — зависит от версии ПО)
End Address   : адрес конца блока (не размер, а именно конечный адрес!)

⚠️ Это главная путаница.  UFPI принимает `Старт + Размер`, а RT809H ожидает `Старт + Конец`.

Формула пересчёта:
End Address = Start Address + Data Size - 1

Пример:
UFPI:   Start = 0x00700000 | Size = 0x00100000
RT809H: Start = 0x00700000 | End  = 0x007FFFFF

Единицы адресации в RT809H

Здесь важный нюанс, который путает многих:

| Версия ПО RT809H | Единица адресации |
| Старые версии (< 9.xx) | Байты |
| Новые версии (9.xx+) | Секторы (512 байт) |

Пересчёт байтов в секторы:
Sector Address = Byte Address / 512

Пример:
Байтовый старт : 0x00700000 = 7340032 байт
В секторах     : 7340032 / 512 = 14336 (0x3800 секторов)

Известный баг RT809H с ext_csd

@sus256 Ты правильно помнишь — это **реальная проблема**, известная в сервисных кругах.

Что происходит:
- ext_csd — это регистр конфигурации самой микросхемы eMMC (168 байт, адресуется отдельно через CMD8)
- В некоторых версиях RT809H при записи частичного дампа программатор **перезаписывал ext_csd**, меняя параметры:
  - Boot partition enable
  - Bus width configuration
  - Partition config
  - Sleep/Awake параметры

 Последствия:
- Чип перестаёт загружаться с boot partition
- Изменяется конфигурация шины (8-bit → 4-bit)
- В худшем случае — чип блокируется по boot config

 Как защититься:
1. **Перед записью** — считать и сохранить ext_csd отдельно
2. Использовать версии ПО RT809H **не ниже 10.xx** (частично исправлено)
3. После записи — **верифицировать ext_csd** и при необходимости восстановить
4. По возможности для частичной записи использовать UFPI — там эта проблема отсутствует

Практический алгоритм работы в RT809H

 Шаг 1 — Определить параметры раздела
Узнаём из partition table или из UFPI-дампа:
Пример раздела "logo":
  Start LBA : 0x3800
  Size      : 0x800 секторов (= 1 MB)

 Шаг 2 — Пересчитать под RT809H
Start Address = 0x3800
End Address   = 0x3800 + 0x800 - 1 = 0x3FFF

 Шаг 3 — Вкладка НАСТРОЙКА в RT809H
[x] Partial Address
    Start : 0x3800
    End   : 0x3FFF

 Шаг 4 — Проверить единицы (байты или секторы)
Смотрим на размер всего чипа в интерфейсе:
- Если показывает `0x1D2000000` (байты 8GB) → **байтовая адресация**
- Если показывает `0xE90000` (секторы 8GB) → **секторная адресация**

Сравнительная таблица возможностей

| Функция | UFPI | RT809H |
| Частичное чтение по разделам | ✅ Удобно | ⚠️ Через Partial Address |
| Адресация | Старт + Размер | Старт + Конец |
| Защита ext_csd | ✅ Автоматически | ❌ Требует внимания |
| Работа с partition table | ✅ Встроено | ❌ Вручную |
| Верификация после записи | ✅ | ✅ |

 Вывод и рекомендация

Для частичной записи разделов eMMC в RT809H:

1. Переводи адреса из формата `Старт + Размер` → в `Старт + (Старт + Размер - 1)`
2. Проверяй единицы адресации своей версии ПО (байты или секторы)
3. **Всегда делай полный бэкап перед частичной записью**
4. Контролируй ext_csd до и после операции
5. Если есть выбор — для прецизионной работы с разделами используй UFPI, RT809H оставь для полного перепрошивания чипа

Онлайн поддержка в  🔗 МАХ - 24 часа!

 

  • 3 месяца спустя...
Опубликовано

Дополнение и важные исправления по частичной записи eMMC в RT809H

Основной принцип пересчёта указан правильно, но только при условии,

что конкретная версия RT809H действительно принимает два значения:

 

Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.

 

и End Address является последним включённым адресом, а не размером блока.

Тогда формула такая:

Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.
Пример в байтах:
Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.
Для режима с адресацией по секторам 512 байт:
Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.
Нельзя жёстко привязывать адресацию к версии RT809H

Утверждение:

Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.
лучше не использовать. У RT809H существует много сборок, переводов и обновлённых алгоритмов.

Одинаковый номер основной версии ещё не гарантирует одинаковое поведение окна частичного чтения.

На уровне протокола современные high-capacity eMMC работают с блочными адресами.

Но оболочка программатора может показывать пользователю либо LBA, либо уже пересчитанный байтовый offset.

В U-Boot для high-capacity MMC старт передаётся как номер блока, а для старых byte-addressed устройств выполняется умножение на размер блока.

Поэтому единицы нужно проверять именно в установленной сборке RT809H.

Как проверить единицы без риска

Сделать пробное частичное чтение, а не запись.

Например:

Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.
Если программа сохраняет файл размером 0x200, то есть 512 байт, значит:
  • адреса указаны в секторах;
  • конечный адрес включительный.

Если программа не принимает такой диапазон либо получает другой размер, нужно проверить:

  • не является ли второе поле размером;
  • не используется ли байтовый offset;
  • не считается ли End как невключительная граница.

Размер, отображаемый в окне, можно использовать только как подсказку:

0x1D2000000 байт
и
0xE90000 секторов × 0x200
описывают один и тот же объём. Но это ещё не доказывает, что поля Partial Address работают в тех же единицах.
Исправление по EXT_CSD

EXT_CSD — это не раздел памяти размером 168 байт.

Это отдельный 512-байтный регистр конфигурации eMMC.

Число 168 — это номер байта:

EXT_CSD[168] = RPMB_SIZE_MULT
Он определяет размер RPMB в единицах по 128 Кбайт, но не является размером самого EXT_CSD. 
Linux также рассчитывает размер RPMB через соответствующий множитель.
EXT_CSD читается отдельной MMC-командой CMD8 SEND_EXT_CSD, 
а изменение разрешённых полей выполняется командой CMD6 SWITCH. 
Обычная блочная запись в User Area сама по себе в EXT_CSD попасть не может. 
Это разные операции протокола.
В штатном интерфейсе RT809H области также разделены:
User
Boot1
Boot2
RPMB
EXT_CSD
EXT_CSD выбирается отдельным флажком. 
Поэтому утверждение, что RT809H при любой частичной записи обязательно перезаписывает EXT_CSD, некорректно.
Такой случай возможен только если: 
  • выбран флажок EXT_CSD;
  • загружен полный комплект файлов RT809H;
  • программа отдельно выполняет запись конфигурации;
  • имеется баг конкретной сборки;
  • пользователь перепутал запись User Area с восстановлением полного комплекта.

Для подтверждения бага нужны:

точная версия RT809H;
выбранный алгоритм EMMC_AUTO/4BIT/ISP;
скрин настроек;
лог операции;
EXT_CSD до записи;
EXT_CSD после записи.
Без этого нельзя утверждать, что проблема исправлена именно в версии 10.xx.
Какие байты EXT_CSD критичны

В первую очередь сравниваются:

EXT_CSD[179] PARTITION_CONFIG
EXT_CSD[177] BOOT_BUS_WIDTH
EXT_CSD[162] RST_n_FUNCTION
EXT_CSD[173] BOOT_WP
EXT_CSD[171] USER_WP
EXT_CSD[155] PARTITION_SETTING_COMPLETED
  PARTITION_CONFIG определяет:
  • откуда eMMC должна грузиться;
  • Boot1 или Boot2;
  • выдавать ли Boot ACK;
  • какая аппаратная область сейчас выбрана для доступа.

BOOT_BUS_WIDTH определяет ширину и режим шины именно во время boot operation.

Обычный BUS_WIDTH — это отдельный рабочий параметр передачи данных.

Его не следует путать с конфигурацией загрузочной шины.

Управление boot partition и boot bus в U-Boot также выполнено отдельными командами partconf и bootbus.

Неправильные значения PARTITION_CONFIG или BOOT_BUS_WIDTH могут привести к отсутствию загрузки, но обычно не блокируют сам чип.

Конфигурацию можно восстановить при офлайн-подключении или по ISP.

Реально опасны поля:

  • однократно программируемые;
  • аппаратная защита Boot1/Boot2;
  • постоянная защита от записи;
  • завершение конфигурации разделов;
  • постоянное включение или отключение RST_n.

В составе mmc-utils операции с аппаратным Reset прямо обозначены как постоянные.

Правильный порядок частичной записи в RT809H

1. Снять полный комплект

Перед вмешательством сохранить:

User Area
Boot1
Boot2
EXT_CSD
CID
CSD
лог определения eMMC
RPMB обычным копированием полноценно не переносится, поскольку это защищённая область с ключом и счётчиком.
В инструкции RT809H она также выделена отдельно и не рекомендуется к обычному чтению.
2. Выбрать правильную аппаратную область

Для разделов Android, Linux, GPT, logo, boot, recovery, system, vendor и userdata обычно выбирается:

User
Флажки:

Boot1

Boot2

RPMB

EXT_CSD

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

Адреса из GPT относятся к началу User Area, а не ко всему физическому набору User + Boot1 + Boot2.

3. Проверить единицы адресации

Не ориентироваться только на номер версии программы.

Нужно определить:

  • байты или LBA;
  • размер логического сектора;
  • включается ли End Address в диапазон;
  • является ли второе поле концом либо размером.

Для большинства телевизионных eMMC используется логический сектор 512 байт, но это нужно проверять, а не принимать безусловно.

4. Пересчитать диапазон

Для секторной адресации:

Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.
Для байтовой адресации:
Это скрытый контент, для просмотра сообщения Вы должны быть Участником форума.
5. Проверить размер файла

Размер файла должен точно соответствовать диапазону:

Size = End - Start + 1
для байтовой адресации либо:
File Size = (End LBA - Start LBA + 1) × 512
для секторной.

Не следует рассчитывать, что RT809H безопасно обрежет слишком большой файл или правильно дополнит маленький.

6. Выполнить запись и контрольное чтение

После записи:

  1. выполнить Verify;
  2. отдельно считать тот же диапазон;
  3. сравнить считанный файл с исходником;
  4. проверить CRC32, MD5 или SHA-256;
  5. только после этого ставить eMMC на плату или отключать ISP.

7. Сравнить EXT_CSD

После обычной записи User Area достаточно повторно считать EXT_CSD и сравнить критичные байты.

Не нужно без необходимости записывать обратно весь файл EXT_CSD размером 512 байт. В нём присутствуют:

  • read-only поля;
  • временные параметры;
  • зарезервированные байты;
  • однократно программируемые поля;
  • параметры защиты.

Правильнее восстанавливать только конкретный изменённый параметр и только после проверки документации на данную eMMC.

Итог

RT809H можно использовать не только для полной прошивки eMMC.

Частичное чтение, запись и стирание в официальных обновлениях программатора предусмотрены.

Но перед операцией нужно обязательно установить:

какая аппаратная область выбрана;
в каких единицах введён адрес;
что означает второе поле;
включительный ли конечный адрес;
совпадает ли размер файла с диапазоном. 

UFPI действительно удобнее при работе с таблицами разделов и отображением Start + Size,

но безопасность ремонта зависит не от названия прогера, а от правильного расчёта offset, выбора User/Boot и обязательной проверки результата.

Онлайн поддержка в  🔗 МАХ - 24 часа!

 

  • LiVan изменил название на Программатор RT809H, сохранение или чтение раздела памяти eMMC

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать аккаунт

Это очень просто!

Регистрация

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...