Работа с NandPro (с примерами!)

Автор: | Опубликовано в FAQ Мастерская, Xbox 360 11 Comments

NandPro — программа для работы с памятью Xbox 360, с её помощью можно читать и писать NAND приставки. Но это далеко не все её функции! Будет описано, что такое бэд блоки и как их ремапить, в чем разница между +w, -w и +W, а еще будут полезные примеры!

В первую очередь, NandPro — консольная программа, поэтому необходимо уметь запускать командную строку и пользоваться ей.

Основы работы с командной строкой

Чтобы запустить командную строку, следует нажать комбинацию Win + R и ввести cmd:
winr
В итоге, запускается окно командной строки с указанием пути к текущей рабочей папке:
cmd_clear
Данный путь крайне важен при работе с командной строкой — все файлы будут в первую очередь искаться и создаваться там.
Для смены рабочей папки, используется команда cd (change directory):
cmd_cd
Так, с папкой разобрались. Там будет лежать программа NandPro и все файлы, с которыми будем работать.

Работа с NandPro

Совместимость

Теперь про совместимость. NandPro 2.0 умеет работать с LPT и SPI Flasher, NandPro 3.0 также поддерживает NAND-X (Super NAND Flasher)
hw_fla2

Данные устройства являются относительно дешевыми и обычно хоть что-нибудь из этого имеется у «специалиста» по установке Freeboot.

Что до совместимости с приставками — стандартные версии NandPro не имеют совместимости с платой приставки Corona, поэтому многие перешли на использование JRunner и прочих программ. К счастью, мне удалось пропатчить программу, отключив проверку FlashConfig.
Скачать NandPro, совместимые с любыми приставками, можно здесь.

FlashConfig

Вы увидели незнакомое слово? FlashConfig это число, обозначающее конфигурацию подключенной памяти приставки. Всё еще непонятно?
Вот смотрите:
Все Phat приставки с 16 МБ памятью, кроме Jasper, имеют FlashConfig 0х01198010
Jasper с 256 МБ памятью имеет конфиг 0х008A3020
У Jasper 512 МБ значение почти такое же — 0х00AA3020
А вот Jasper 16 МБ (Elite) покажет 0х00023010, как и Trinity!
Больше всех отличилась Corona — у неё значение 0х00043000
Увидеть FlashConfig можно в логе чтения. Обязательно обратите на него внимание в следующий раз.
nandpro_fc
Если подключение совершенно нерабочее, FlashConfig будет 0х00000000 или 0хFFFFFFFF, в таком случае, NandPro выдаст ошибку Can’t detect flash controller. Но даже, если считывание пойдет, значения должны быть именно такими, как я только что описал. В случае некорректного числа — прекратите работу и проверьте соединение. В случае работы с патченным NandPro, такая проблема актуальна — не зря FlashConfig проверялся ранее.

Работа с файлами

Помимо работы с физическими устройствами, NandPro позволяет работать с обычными файлами.
Для этого, нужно вместо usb: или lpt: написать имя файла, например:
nandpro nanddump.bin: -r16 nandcopy.bin
В зависимости от содержимого, программа может не распознать файл как образ памяти приставки, поэтому придется в конце команды добавить значение FlashConfig:
nandpro somefile.bin: -w16 nand.bin :01198010

Основные команды

Большинство знают команды чтения и записи, например
nandpro usb: -r16 nanddump.bin — чтение с помощью USB устройства образа в файл nanddump.bin, не более 16 МБ
nandpro lpt: -w16 xell.ecc — соответственно, запись с помощью LPT образа xell.ecc, не более 16 МБ

Обратите внимание, указанный параметр можно использовать для чтения или записи только первых N мегабайт памяти:
nandpro usb: -r2 nand2.bin — чтение первых 2 МБ памяти в файл nand2.bin
nandpro usb: -w2 nanddump.bin — запись первых 2 МБ образа nanddump.bin в память приставки

Но так лучше не делать, ведь можно добавить еще два параметра для уточнение области работы:
nandpro usb: -r16 nand50.bin 0 50 — чтение первых 50 блоков памяти в файл nand50.bin
При этом, первый параметр указывает, номер блока, с которого начать чтение, а второй — сколько блоков читать. В предыдущем примере, начало было в нуле, а размер считываемой области — 0х50 блоков.

Блочная структура памяти

Блоки, блоки — а что это? Как известно, вся память приставки поделена на части по 16 КБ (0х4000 байт), при этом каждый блок имеет несколько служебных полей, включающих контрольные суммы и номер блока (0х200 байт). Итого, размер одного блока составляет 0х4200 байт. (В приставках с 256/512 МБ памятью используются блоки размером в 8 раз больше, но мы их все равно будем рассматривать как отдельные 8 блоков)
В приставках с 16 МБ памятью работа ведется с диапазоном блоков 0х0 — 0х400, в приставках с 256/512 МБ памятью, 0х0 — 0х1000 соответственно.
Я не просто так ставлю крестик! Это шестнадцатеричная система, где после 9 идут A, B, C, D, E и F. 0х50 в десятичной системе будет 80

Помимо стандартных параметров команды, есть и некоторые особенные, например, +w или даже +W. Плюс означает полный пересчет служебных полей (контрольные суммы + номер блока), заглавная буква означает, что в файле нет служебных полей и их нужно добавить в случае записи или убрать в случае чтения.

Пример №1

Потренируемся для закрепления? Возьмем универсальный образ XeLL для Corona и заменим в нём ядро на другое, без поддержки графики.
Такой образ пригодится, если RGH срабатывает, но ключ достать не удается из-за зависания.
Вспоминаем, что программа будет все искать по пути в командной строке, так что скопируем оба файла в ту же папку.
Теперь важный момент — в образах XeLL, ядро занимает блоки 30-3F и 40-4F (да, там две копии одного и того же).
Кроме того, ядро не содержит служебных областей, так что нужно использовать команду +W
И напоследок, программа не распознает образ XeLL без явного указания FlashConfig, тоже не забываем про это.

Итого, нужно выполнить две команды, чтобы записать новое ядро в образ:
cmd_ex1
Да, пример сложный, но нужный. Разберем подробнее одну из команд:
nandpro rgx_corona.bin: +W16 rgh_nograph.bin 30 10 :00043000
rgx_corona.bin: — имя файла, с которым работаем
+W16 — записать с добавлением и пересчетом служебных областей, не более 16 МБ
rgh_nograph.bin — файл, что записываем в образ
30 — начать запись с 0х30 блока
10 — записать не более 0х10 блоков
:00043000 — рассматривать образ как память Corona

Ну как, осилили? Надеюсь, теперь вам всё нипочем 🙂 а впереди еще много неожиданного!

Суть ремапа

Вот и подошли к главному. Что происходит, если какой-то из блоков не функционирует? (А такое бывает нередко)
После записи, такой блок не читается вовсе или читается неправильно — данные пропадают, что нехорошо. Для решения данной проблемы и существует ремап.

В конце памяти отведено резервное место под те данные, что попадают на плохие участки. Таким образом, данные не пропадают, при ошибке чтения, приставка просто ищет блок в этой области. Обратите внимание — приставка ищет блок. Не важно, в каком месте области он находится, если он там есть, он будет найден. Несмотря на это, для удобства обычно начинают записывать с конца. Поиск происходит по номеру блока в служебной области, поэтому категорически запрещается писать в неё с помощью команды +w — она меняет номер блока!

Зона для ремапа в приставках с памятью 16 МБ находится в блоках с 3E0 по 3FF, а в приставках с 256/512 МБ памяти — в блоках F00 — FFF соответственно

Ремапить можно только цельный образ. Многие считают, что бэд блоки — всего лишь проблема чтения и ремапить нужно даже только что считанный с приставки образ. Ни в коем случае! Если в памяти есть бэд блоки, а приставка при этом работает — считанный образ уже будет заремаплен.
Новые версии сборщиков Freeboot автоматически ремапят образ при сборке — просто смотрят, как перемещены блоки в исходном образе и поступают аналогично с собираемым. Поэтому прежде чем выполнять ремап вручную — подумайте, а точно ли это вам нужно? Не сделала ли это за вас программа-сборщик?

Ремап

Для начала, нужно считать блок образа, что попадает на битый блок памяти, в некоторый файл:
nandpro dump.bin: -r16 bad.bin 10C 1 — считали блок 10C размером 1 в файл bad.bin
Теперь его нужно записать в зону для ремапа, желательно, с конца:
nandpro dump.bin: -w16 bad.bin 3FF 1 — записали файл bad.bin в блок 3FF
Аналогично читаем второй битый блок:
nandpro dump.bin: -r16 bad.bin 2D7 1
Не забываем записывать в другой блок зоны ремапа, иначе предыдущий блок данных просто перезапишется:
nandpro dump.bin: -w16 bad.bin 3FE 1 — был использован блок 3FE

А теперь небольшой финт. После записи в приставку, такой отремапленный образ может и не заработать! Почему? Блок может оказаться частично рабочим и данные попробуют считаться! В таком случае, поиска в зоне ремапа может и не произойти.
Для предотвращения этого, записываем блок, забитый нулевыми данными, делая образ реально битым в нужных местах:
nandpro dump.bin: -w16 zero1.bin 10C 1
nandpro dump.bin: -w16 zero1.bin 2D7 1

Всё, образ готов для записи в приставку. Записывать обязательно флешером, запись через программы вроде rawflash4 может завершиться некорректно.

В случае с памятью 256/512 МБ бэды всегда идут рядами по 8 штук (в связи с особенностями деления памяти), поэтому разумно читать/писать сразу по 8 блоков за раз:
nandpro dump.bin: -r64 bad.bin 5F0 8
nandpro dump.bin: -w64 bad.bin FF8 8
nandpro dump.bin: -r64 bad.bin 768 8
Обратите внимание, «отступать» нужно тоже по 8 блоков за раз
nandpro dump.bin: -w64 bad.bin FF0 8

Пример №2

Ну как, освоили? Еще один полезный пример. Многие пробовали заремапить образ XeLL и не всегда он работал после этого. Увы, особенности его запуска не допускают бэд блоков в некоторых областях памяти. Поэтому провернем такой финт — запишем не образ XeLL, а заремапленный образ Freeboot!
Что? Вы не слыхали, что можно собрать такой образ, который будет работать на любой приставке Corona? Ну вот, теперь будете знать.
Итак, я загрузил образ вот сюда, можете скачать и попробовать заремапить под свои нужды.
В случае уже рассмотренных бэд блоков, это будет выглядеть как-то так:
cmd_ex2

Пример №3

Итак, вроде бы всё рассмотрели? Как бы не так!
Блок памяти под номером 0 — самый важный. Из него считывается программа работы южного моста приставки.
Но что, если он поврежден — например, записана неверная программа? В таком случае, южный мост не сможет запуститься.
А без южного моста, увы, перезаписать NAND не получится — питание памяти просто выключается. Что же делать?
В момент включения питания приставки (при вставке питания в консоль), южный мост загружает программу из NAND!
В это время можно успеть стереть ошибочную программу из памяти, чтобы затем записать новую. И опять на помощь приходит NandPro.
Я подготовил bat файл с циклом команд очистки памяти приставки специально для такого случая.
Итак, для «ремонта» приставки алгоритм таков:

  • Подключаем флешер, запускаем компьютер и всё такое
  • Вытаскиваем кабель питания из приставки
  • Запускаем батник, начнется посылка команд стирания
  • Вставляем питание в приставку
  • Стирание должно пройти успешно, это будет заметно по выводу
  • Закрываем окошко командной строки, нам больше не нужно посылать команды

После таких издевательств, несложно будет записать NAND рабочей версией образа памяти.

Финиш

Полный финиш. Надеюсь, вам не надоело столько читать. А ведь это лишь часть функционала NandPro! Еще есть команды вида *w16 (только пересчет контрольных сумм), запись в Xilinx чип (xsvf:) и прочее, и прочее… Но статья и так вышла реально длинной, так что упущу из виду редко используемый функционал.
P.S. Надеюсь, эта статья вам НЕ пригодится, ведь прибегать к этим методам необходимо лишь при проблемах. А проблемы лучше избегать, чем решать. 🙂

Comments
  1. Posted by MehanoidRUS
    • Posted by RichY
  2. Posted by mixail
    • Posted by MehanoidRUS
    • Posted by RichY
  3. Posted by artisstm
  4. Posted by bourne
  5. Posted by Вероника
  6. Posted by Дмитрий

Add Your Comment