Инструкция по работе с UFPI для новичков (самиздат)
#1
Доброго!
 
своял инструкцию для новичков по использованию и настройке UFPI (EEPROM + SPI + NAND модули + работа в режиме разделов + UDEV файлы)

по мере появления времени (которого в обрез) постараюсь дорабатывать.. 
думаю тема актуальна,  поможет начинающим освоиться без лишней суеты по форуму в поисках простой иформации, и избавит более продвинутых от казалось бы элементарных вопросов с их стороны.

по NAND расписал базовую работу + UDEV, разделы и Offset, кое что по работе с BAD блоками.. некоторые сложные моменты расписал на сколько можно подробно, для улучшения восприятия.....  для тех кому "туго заходит" советую вдумчиво перечитать несколько раз, а то тут как в "Матрице" - все можно и не понять с первого раза пока не дочитаешь и не попробуешь, т.к. объем информации приличный... хотя и старался кратко..   

ИНСТРУКЦИЯ (САМИЗДАТ)

открыт для здоровой критики и помощи 

с eMMC не работаю плотно, поэтому не помешала бы помощь, как и с OneNAND с которой вообще не работал.

файл во вложении для тех у кого проблемы с YAndex, буду обновлять по мере накопления исправлений

версия 11.08.2018 - актуальна для релиза 1.1.6 от 2018.07.27 + небольшие дополнения и исправления == версия 23.10.2018


Attached Files
.rar   инструкция UFPI самиздат 23.10.2018.rar (Size: 1.5 MB / Downloads: 149)
Reply
#2
Как правильно восстановить Samsung UE40D5520 и UE40D5500 с помощью UFPI
https://mslw.com/bb/showthread.php?tid=84
https://mslw.com/bb/showthread.php?tid=79
Как работать с eMMC в isp режиме
https://mslw.com/bb/showthread.php?tid=55
Ссылки доступны только владельцам UFPI
Уважаемые не пользователи аплоада. Если нужен дамп, создавайте тему в соответствии с правилами. В личку не пишите.
Reply
#3
Как обходить бэд блоки при работе с OneNAND

1 Детект
Show ContentSpoiler:
2 Проверка на бб
Show ContentSpoiler:
3 Анализ дампа
3.1 Выбираем режим -  Samsung RFS OneNAND with spare. Build flash file for current IC from Dump.
3.2 Указываем путь к рабочему дампу
3.3 Плохие блоки выбираем -Текущие.
3.4 Ставим галку -Удалить плохие блоки из дамп
3.5 Нажимаем Ок.
Show ContentSpoiler:
   
Стираем и записываем полученный дамп. Управление бэд блоками, не используется.
Show ContentSpoiler:
Верификация
Show ContentSpoiler:
Уважаемые не пользователи аплоада. Если нужен дамп, создавайте тему в соответствии с правилами. В личку не пишите.
Reply
#4
Как создать файл .udev для NAND
Например для дампа считанного с майна 5800-A6M88G-0P10.
При создании файла нам нужно указать начальный адрес раздела, так называемый offset и размер раздела. Начальный адрес, программа позволяет указывать, как с учётом спаре, так и без, а вот размер только с учётом спаре. В данном случае будем прописывать адреса с учётом спаре.
Сначала нужно узнать адресацию разделов. Подключаем терминал, снимаем лог - нам повезло. В логе адресация есть.
Show ContentSpoiler:
Первого раздела нет, мы добавим его вручную. Начинаться он будет с  0x00000000 и заканчиваться соответственно 0x0000001c0000. Условно назовём его BOOT.
Адресация в терминальных логах бывает разная. Это может быть начальный адрес раздела и конечный (как в данном случае), так же может быть указан начальный адрес раздела и его размер. Но в любом случае, начальные адреса разделов указаны без учёта области спаре в дампе и если  в редакторе перейти например по адресу 0x000009ca0000, то мы увидим такую картинку
   
если же перейти к смещению 0x0A66A000, то картинка будет другой. Это уже похоже на начало раздела.
   
Для того чтобы узнать соответствие; № блока - адрес блока без спаре - адрес блока с учётом спаре (raw), можно воспользоваться  возможностями программы.
Для этого загружаем параметры микросхемы, с которой считан дамп, идём на вкладку "Дополнительные функции", нажимаем "Печать карты блоков" и получаем то что нам нужно.
   
Создаём текстовый файл, в нём прописываем следующее
Show ContentSpoiler:
RawAddrMode = true эта строка означает, что адресация указана с учётом спаре
В первой колонке - начальный адрес раздела, во второй размер. Чтобы узнать размер, можно воспользоваться калькулятором встроенным в Windows. Допустим мы хотим узнать размер последнего раздела,  берём конечный адрес микросхемы, его можно увидеть в логе программатора
Total data size 0x10000000 256 MiB
Total raw  size 0x11000000 272 MiB
и вычитаем из него адрес с которого начинается раздел.
11000000-A66A000=6996000
   
После того как создали карту разделов, присваиваем файлу расширение udev.
В программе нажимаем Файл-Открыть устройство и загружаем созданный нами файл. После этого выбираем режим "Разделы", ставим галочку " Raw Address, нажимаем "Обновить" и "Автоимена".
   
Теперь можно работать с разделами данного дампа. Находим раздел в котором прописан nvm - записываем в исправный дамп или наоборот - находим неисправный раздел и меняем его на исправный, и не нужно подбирать дамп под модель, и матрицу

Тема по созданию файла udev из вытащенных из лога размеров разделов, для шасси Q552. Ссылка доступна только владельцам UFPI.
Уважаемые не пользователи аплоада. Если нужен дамп, создавайте тему в соответствии с правилами. В личку не пишите.
Reply
#5
Если у Вас много бэд блоков в дампе и Вы хотите не стирая узнать реальное количество плохих блоков.
Навеяно этой темой http://mslw.com/bb/showthread.php?tid=212
Взял микросхему MX30LF1G18AC так как она имеет те же размеры страницы и спаре, что и MT29F2G08ABAEAH4 из темы выше и записал в неё дамп с ресивера GS E212. При проверке на бэд блоки видим их нереальное количество.
Show ContentSpoiler:

Читаем эту тему http://mslw.com/bb/showthread.php?tid=10...82#pid1182
Предположим самый простой и наиболее часто встречающийся вариант - производитель разбил страницу на 2 или 4 части и в конце каждой страницы находится спаре. В этом случае страница у нас будет либо 512+16 либо 1024+32
Открываем редактором считанный дамп.
Ищем на первой - второй странице строки похожие на спаре  (тут нужен небольшой опыт работы с дампами). В нашем случае спаре видно сразу на первой странице. Значит 1024+32
   
Для проверки переместимся к следующему спаре. Это 1024+32+1024=2080 Видим две одинокие строчки среди FF. Значит всё правильно.
   
Итак дамп в нашей микросхеме имеет такую геометрию
page=1024
spare=32
и так как размер страницы в 2 раза уменьшился, то для сохранения общего размера дампа, необходимо увеличить количество страниц в те же два раза.
pages in block=128
Нажимаем + и изменяем геометрию под себя.
Show ContentSpoiler:
Теперь нужно определить местонахождение маркера. Здесь проще действовать наугад. И хотя разработчик ПО может определить местонахождение маркера где угодно, но чаще они придерживаются стандарта. Поэтому мы попробуем сначала первый байт
Show ContentSpoiler:
потом шестой
Show ContentSpoiler:
За правильное берём меньшее количество бэд блоков.
Для проверки стираем
Show ContentSpoiler:
Всё правильно, восемь плохих блоков.
Уважаемые не пользователи аплоада. Если нужен дамп, создавайте тему в соответствии с правилами. В личку не пишите.
Reply
#6
Как работать с модулем Logger
https://drive.google.com/file/d/1R1ylqcz...p=drivesdk


Attached Files
.rar   LOGGER.rar (Size: 206.22 KB / Downloads: 60)
Reply
#7
Photo 
        Как создать файл .udev для еММС 

Для примера возьмем ТВ DEXP H32D8000Q, шасси — CV338H-T42
Если при детекте еММС в программе мы видим надпись «ММС проверка дампа… Разделы не найдены!», это значит что программатор не нашел в дампе известной ему таблицы разделов.
   

Если мы все же хотим читать\писать дамп по разделам, нам нужно создать .udev файл.

Создавать наш .udev файл мы будем анализируя таблицу разделов из дампа в HEX редакторе. Обычно она располагается в самом начале дампа.
Для этого нам понадобится:
1. Теоретические знания по устройству и анализу известных таблиц разделов, мы возьмем GPT. Все необходимое есть в статье по ссылке  нас интересует «[b]Описание структуры GPT[/b]» и «Практика работы с GPT».
2. Любой HEX редактор.
2. Стандартный калькулятор Windows в режиме «программист».

Итак, поехали! Как вы уже прочитали GPT состоит из MBR, заголовка и таблицы разделов. В таблице описания раздела памяти есть метка раздела, в GPT метка использует кодировку UTF-16LE и в HEX редакторе она хорошо читается. Давайте откроем наш дамп и посмотрим что внутри. 
   
Мы видим первый блок дампа 0х0 — 0х200 (размер одно блока 512 байт) пока ничего напоминающего знакомый нам GPT или метку раздела.
Переходим сразу ко второму блоку 0х200 — 0х400
   
Вот тут мы обнаружили знакомую нам метку раздела (выделена красным).
Заглянем заодно и в 3ий блок 0х400 — 0х600
   
и тут мы видим подобную структуру блока и метку следующего раздела. Между метками разделов 0х200 (512 байт или 1 блок). Это значит что таблица разделов, как и положено, находится в начале дампа, а одна запись в таблице разделов занимает 1 блок.

Для создания нашего .udev файла нам нужно создать текстовый документ с расширением .udev который имеет следующий вид:
Порядок параметров: адрес, размер, название, раздел, имя файла, смещение в файле.
Имя файла и смещение использовать не обязательно, при чтении разделов в программаторе можно воспользоваться функцией «авто имена»
Пример:
[DESC]
Name = Test
FlashCount = 1
FlashType1 = eMMC
FlashBase1 = 0x0


[PARTITIONS]
PartitionsMode = true
0x00000000 (адрес начала раздела) ,0x00400000 (длинна раздела) ,BOOT1 (название раздела) ,BOOT1 (раздел, может быть BOOT1,BOOT2,USER), boot1.bin (имя файла при сохранении)
0x00000000,0x00400000,BOOT2,BOOT2, boot2.bin
0x00000000,0x00200000,Partitions table,User,Partitions table.bin

Как подготовить шаблон мы разобрались и уже знаем название 2х разделов — MBOOT и MPOOL.
Теперь самое главное, как нам узнать адрес начала раздела и его длину?
Давайте сравним описание первого раздела и второго, первые 8 байт (выделено черным) не изменяются, а значит наверняка не имеют ничего общего с информацией о размещении раздела.
Вторые 8 байт изменились и изменяются во всех остальных записях в таблице. Поскольку другой информации в этом разделе таблицы нет вообще, то мы можем предположить что именно тут и хранится нужная нам информация. По аналогии с GPT разобьем 8 байт на 2 части по 4 байта, пока мы предполагаем что первые 4 байта (выделено зеленым цветом) это «первый разрешенный для использования LBA сектор», а вторые 4 байта(выделено синим цветом) это «последний LBA-сектор, разрешенный для использования»

Открывает калькулятор в режиме «программист». Если в первых 4 байта записан адрес блока начала раздела MBOOT, то что бы узнать адрес смещения нам нужно адрес блока умножить на размер блока. Не забываем что в HEX запись имеет вид little endian , поэтому нам нужно записывать символы справа на лево. Записываем 00 10 00 00 как 00 00 10 00 и умножаем это значение на размер блока, получается 0х1000 * 0х200 = 0x200000

Проверяем нашу теорию и переходим по смещению 0x200000 в дампе.
   
Как мы видим по этому адресу, как раз начало блока и тут же есть метка раздела MBOOT который мы ищем. Все получилось, мы нашли начало раздела, теперь осталось найти его размер.

В GPT указывается адрес первого и адрес последнего блока, что бы узнать его размер нам нужно из последнего вычесть адрес первого.
Проверяем значение 4х байт(выделено синим), не забываем про little endian
00 18 00 00 записываем как 00 00 18 00, получаем выражение 0х1800 * 0х200 = 0х300000
Разделы в памяти идут непрерывно, один за другим и если вторые 4байта(синие) это конец раздела как мы думаем, то он совпадет с началом второго раздела MPOOL, проверим.
Берем 4 байта (выделены зеленым) из раздела MPOOL и находим начало раздела
00 28 00 00 --- >>> 00 00 28 00, 0х2800 * 0х200 = 0х500000
Идем по смещению и проверяем 
   
Метки раздела тут нет, но это определенно начало нового раздела.
0х300000 не равно 0х500000, а значит вторые 4 байта обозначают не конец раздела, а что же тогда?
Давайте приглядимся и прибавим к началу первого раздела наше значение 0х300000, получится
0х200000 + 0х300000 = 0х500000, что равно началу второго раздела. Это значит что 4 байта(помеченные зеленым) это размер раздела, именно то что нам нужно. Отличается от стандарта GPT да и ладно, наша цель достигнута. Теперь мы знаем где в записи раздела хранится информация о начале размещения раздела и его длина.

Давайте еще рассмотрим вариант с 5м блоком 0х800 — 0хA00
   
Эта запись в таблице сильно отличается от предыдущих, но мы без труда можем выделить то что нам нужно.
Так же находим начало раздела и его размер, получается 0x00780000(начало),0x01800000(размер). Проверяем 
   
Аналогично находим начало и размер оставшихся разделов и заполняем наш .udev файл.
Заходим в программу программатора нажимаем на «файл» --→>> «открыть устройство» и выбираем наш .udev. После этого детектим флешку. В параметре «режим доступа» выбираем «разделы».
   
Все! Теперь можно работать со всеми разделами, включая BOOT1 и BOOT2 просто отметив нужные разделы галочками. Не забываем указать имя файла или воспользуйтесь функцией авто имена.


Attached Files
.rar   .udev для еММС + анализ таблицы разделов.rar (Size: 991.78 KB / Downloads: 80)
Reply
#8
Пропустить плохой блок
Сегодня проверил функцию - "Пропустить плохой блок". Это реально работает. Принцип можно прочитать в инструкции от Danila_iva
Кратко.
Пришёл филипс в ремонт, у родной микросхемы 8 бб. На без бэдовой микросхеме собрал из двух дампов  один - тв работает. Жаба задушила ставить микросхему без бб. Пробую записать рабочий дамп в родную микросхему - аппарат не запускается (понятно, попала информация на бб). Вспомнил про эту функцию в программе - решил проверить. Загрузил файл udev, активировал функцию -"Пропустить плохой блок" и записал пофиксенный дамп разделами, пропустив при записи раздел с таблицей бб - тв запустился.
Отписываюсь для понимания того, что алгоритм этот работает без ошибок и в каких-то случаях им пользоваться можно.
Условия применения.
Имеем таблицу разделов для этого дампа
Имеем рабочую таблицу бб, для  микросхемы в которую записываем
Записываемый дамп не имеет плохих блоков
ПО устройства при обходе плохого блока, записывает информацию в следующий блок, а не в конец дампа.

вот ещё подтверждение работоспособности этого метода
Уважаемые не пользователи аплоада. Если нужен дамп, создавайте тему в соответствии с правилами. В личку не пишите.
Reply
#9
Это частный случай для филипса. Для LG и Самсунга он подходит или нет?
Интересно для LG c тошибой и ее 768-ым бб
Reply
#10
Совершенно верно -частный, даже не знаю для каких филипсов подойдёт, для каких нет.
К LG и SAMSUNG этот способ не применим.
Уважаемые не пользователи аплоада. Если нужен дамп, создавайте тему в соответствии с правилами. В личку не пишите.
Reply




Users browsing this thread: 1 Guest(s)