Искусство перешивки BIOS. Часть шестая.

Собственный "перешивочный" комплекс.

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

Для перешивки 99.9% флэшек (к матплатам, конечно) вам понадобятся три платы:

  1. Что-нибудь подревнее, под Pentium1 - для перешивки очень распространённых Intel-флэшей 1Mbit.
  2. Что-нибудь под P2 с 2Mbit-ным биосом - для перешивки остальных "обычных" 1- и 2Mbit флэшек.
  3. Что-нибудь под P3 из серии i8xx - для перешивки "хабовых" флэшек.
  4. (Добавлен в последней версии статьи - прим.ред.) Что-нибудь на nForce (1/2/3).

В качестве п.1 я использую Asus на i430HX (конкретно - P55T2P4). Для таких случаев (1Mbit и /или Intel-флэшки) рекомендуется именно Asus по причине возможности использовать исключительно удобный асусовский прошивальщик - старый pflash или поновее aflash - элементарные в использовании, не пристают с глупыми вопросами и показывают адрес повреждённой области микросхемы в случае ошибки.

В качестве п.2 я использую плату на i440BX (конкретно - PCPartner-928). Она 2Mbit-ная, что позволяет шить и 1- и 2Mbit-ные "обычные" флэшки. Тип разъёма на ней DIP32, для перешивки PLCC32 используется переходничок PLCC32->DIP32, сделанный из старой неисправной платы с PLCC32 колодкой (см. фото).

Cамодельный переходник PLCC32->DIP32Сделан путём фигурной резьбы лобзиком по неисправным материнским платам;) плюс допаянные вручную ножки) Cамодельный переходник PLCC32->DIP32
Сделан путём фигурной резьбы лобзиком по неисправным материнским платам;) плюс допаянные вручную ножки) Cамодельный переходник PLCC32->DIP32 - вид снизу Cамодельный переходник PLCC32->DIP32 - вид снизу

В качестве п.3 я использую плату на i820 (конкретно - Chaintech 6CTA2). На ней стоит i82802AB (4Mbit), что позволяет шить как сами интеловские "хабы" так и "хабовые" 2- и 4Mbit-ные флэшки.

В качестве п.4 я использую плату на nForce (первый который, но не принципиально) - Abit NV7-133R. Она предназначена для самых тяжёлых случаев - для перешивки "чисто" LPC-шных флэшек. /Просто многие (даже, видимо - большинство) производители плат на nForce1/2/3 (а LPC стал использоваться именно на них) обычно используют флэшки с поддержкой и LPC и FWH, что позволяет шить их на п.3)/.

Вообще никаких особых условий по выбору конкретной модели или фирмы (кроме случая с Асус для Intel-флэшей) нет. Не нужно стремится брать для такой цели "крутые" и "навороченные" платы. Нужно строго наоборот - чем "безвестнее" и примитивнее плата - тем более лучший получится из неё "программатор". Т.е. для этого просто идеальны всякие Акорпы да PCPartner-ы, а вот любые платы даже с минимальными "претензиями" всегда ухудшают "универсальность". Плюс, конечно, другим важным условием является хороший и удобный доступ к гнезду флэшки.

В качестве главного программного обеспечения используются amiflash (конкретно - версия 8.37, только с ключами). Он знает большинство чипсетов/флэшей и очень удобен в работе благодаря удобной коммандной строке (батфайлик для него прилагался выше).

Для редких случаев, когда не справляется amiflash (некоторые типы флэшек и/или экзотные чипсеты) - используется awdflash (обязательно с ключом /f).

Для тяжёлых случаев (как правило очень экзотные флэши/биосы/чипсеты, очень старые, либо, наоборот, самые новые матплаты) используется Uniflash. Он же может быть использован с целью визуальной проверки места проблем во флэшке. Плюс особенно стоит обратить на него внимание счастливым обладателям современных плат на nForce2, использующие LPC-флэшки типа PMC (как правило - Epox/Gigabyte).

PMC-шки поддерживают два режима (LPC/FWH) и, может быть, из-за этого часто "стандартные" прошивальщики некорректно их перешивают (а то и зависают в процессе перешивки) - uniflash же это делает исключительно корректно.

п.с. последние версии uniflash стали настолько корректными и удобными, что теперь я в основном только им и пользуюсь...


Экстремальные способы перешивки/восстановления

В некоторых сложных случаях приходится прибегать к использованию сразу двух прошивальщиков. Обычно это uniflash + awdflash (но не обязательно). Например, прошиваете сначала с помощью amiflash, а после этого сразу же с помощью uniflash. После первой попытки амифлэш ругнётся, что прошил некорректно, а uniflash перешьёт уже корректно.

Рекомендуемой "связкой" является awdflash + uniflash. Конкретно технология использования подобной "сладкой парочки" следующая:

  1. Запускаем awdflash с "родной" флэшкой (той, с которой запускался компьютер) и выходим без прошивки. Например, можно запустить его (awdflash) с ключиками "/pn/sy 111.bin" - записав ненужный биос (просто для проверки:) ).
  2. Ставим (hotswap) нужную для прошивки флэшку, запускаем uniflash и радуемся:) (должно прошиться нормально).
  3. Ежели, все-таки, не радуемся (прошивается некорректно) - еще раз "просто" запускаем awdflash (без прошивки и уже на "прошиваемой" флэшке) и снова пробуем uniflash - уж точно должно помочь (с поправкой на то, что uniflash "знает" данный тип флэшек).

"Скрытый смысл" использования подобного метода следующий. При запуске awdflash (равно как и любого другого прошивальщика) производится "размапливание" чипсета - для определения типа флэшки и последующей перешивки. При выходе - обычно, как бы, должно происходить "замапливание", однако на практике выясняется, что "оно никому не должно":). Чем и удается воспользоваться uniflash-у, который по разным причинам (обычно - незнание современного железа) сам не может правильно и до конца корректно "размапить" чипсет. Кроме того, помимо размапливания чипсета на предмет физического доступа в область памяти флэшки, awdflash умеет (в случае Award BIOS) снимать различные "защиты от записи", о которых не в курсе uniflash в силу своей, так сказать, "классичности" - авторы оного ("по незнанию";) ) использовали в его движке в подавляющем большинстве исключительно "классические" методы работы с железом (плата-чипсет/флэш-биос). В общем, в "примитивном" описании действенности данного метода, можно сказать следующее. awdflash, как более "умный", знающий всяческие "специфичности" для всевозможных (особенно новых) плат - начинает работу (прошивку). Однако из-за "избытка ума" умудряется оступаться на простых вещах.А по "простым вещам" - нет лучше юнифлеша. В результате чего их симбиоз и становится удачным (иногда - единственным) решением для прошивки некоторых типов флэшек на некоторых чипсетах (так, например, Winbond W39V040AP (LPC) на nForce2 - прекрасно шьется описанным методом).

Когда у вас есть под рукой только "одномегабитная" плата, а нужно прошить двухмегабитку ("обычную") можно сначала прошить первую половину (1Mbit), а потом "отдельно", вторую половину. Для этого разбиваете файл биоса на две части (по 1Mbit=128kB) с помощью любого hex-редактора и прошиваете сперва последнюю часть. После этого коротите ножку 30 (A17 в 2Mbit и NC в 1Mbit) на землю и заливаете "начальную" половину.

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

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

Прошивка флэшек с различными напряжениями перепрограммирования.

Различные типы флэшей рассчитаны на разные вольтажи программирования. Самые распространённые - это 12V/5V для старых плат, для современных, это 3.3V/3V/2.7V и меньше. Теоретически, для каждого типа нужно выставлять нужное конкретной флэшке напряжение с помощью перемычек на матплате (если такие, конечно, имеются). Практически же получается, что флэшки с более меньшим напряжением программирования совершенно благополучно шьются более высоким напряжением.

Т.е. если на матери стоит 5V-овая флэшка (например, большинство серии 29xxxx), то флэшки с более низким уровнем перепрошивки тоже на ней прошьются на ура без всяких претензий по его завышенному значению. И без хоть какой-то вероятности повреждения более низковольтных клиентов.

В случае обратного соотношения - перешивка 12V-овых флэшек на 5V-овых матерях (или с перемычками установленными на 5V) тоже часто имеет благополучный исход. Хотя здесь он уже и не является правилом - поэтому при программировании микросхем серии 28xxxx (большинство которых - 12V) - будьте бдительны по поводу правильно выставленных перемычек и не стоит пытаться их перешивать хотсвопом на современных платах (т.к. 12V-ые были лишь P1-P2), т.е. чем древней, тем больше шансов на корректную перешивку.

Если перемычки на плате не подписаны - можете просто померять напряжение на pin32 (справа сразу от ключа, если смотреть ключом вверх). В самом крайнем случае, если на плате нет перемычек - можно отогнуть эту ногу из сокета и подать на неё 12V "вручную" (например, прямо от разъёма БП).