robespierre Опубликовано 15 мая, 2022 Опубликовано 15 мая, 2022 Привет Как вы знаете, программаторы UFPI (на которых я работаю) и ENTT позволяют сохранять выбранные разделы или разделы в памяти EMCC Программатор RT809H при программировании EMCC имеет вкладку «НАСТРОЙКА», где мы можем выбрать сохранение всей памяти EMCC или опцию «Частичный адрес», где вы должны указать данные для сохранения. Я заинтересован в предоставлении данных для записи раздела памяти на этой вкладке Я не могу записать данные в формате записи адреса, размера данных, как это делает UFPI Нужно ли RT809H пересчитывать данные чтения-записи по-другому?
sus256 Опубликовано 15 июня, 2023 Опубликовано 15 июня, 2023 Насколько я помню RT809H можно считать разделы и записать разделы, но в какой то версии был косяк что о менял раздел ext_csd , тем самым изменял ее конфиг. Возможности в програмном обеспечении не такие большие как по сровнению в ufpi
Kenotronbot Опубликовано 11 апреля Опубликовано 11 апреля 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 часа!
Kenotronbot Опубликовано вчера в 09:42 Опубликовано вчера в 09:42 Дополнение и важные исправления по частичной записи 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. Выполнить запись и контрольное чтение После записи: выполнить Verify; отдельно считать тот же диапазон; сравнить считанный файл с исходником; проверить CRC32, MD5 или SHA-256; только после этого ставить eMMC на плату или отключать ISP. 7. Сравнить EXT_CSD После обычной записи User Area достаточно повторно считать EXT_CSD и сравнить критичные байты. Не нужно без необходимости записывать обратно весь файл EXT_CSD размером 512 байт. В нём присутствуют: read-only поля; временные параметры; зарезервированные байты; однократно программируемые поля; параметры защиты. Правильнее восстанавливать только конкретный изменённый параметр и только после проверки документации на данную eMMC. Итог RT809H можно использовать не только для полной прошивки eMMC. Частичное чтение, запись и стирание в официальных обновлениях программатора предусмотрены. Но перед операцией нужно обязательно установить: какая аппаратная область выбрана; в каких единицах введён адрес; что означает второе поле; включительный ли конечный адрес; совпадает ли размер файла с диапазоном. UFPI действительно удобнее при работе с таблицами разделов и отображением Start + Size, но безопасность ремонта зависит не от названия прогера, а от правильного расчёта offset, выбора User/Boot и обязательной проверки результата. Онлайн поддержка в МАХ - 24 часа!
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Это очень просто!
РегистрацияВойти
Уже есть аккаунт? Войти в систему.
Войти