|
|
Строка 1: |
Строка 1: |
− | {{TOCright|45%}}
| |
− | :<font color="#993366"> ''Процесс перешивки BIOS в руках опытного - банальность, профессионала - искусство, а начинающего - трагедия.''</font>
| |
| | | |
− | ==Часть первая. Для тех, кому лень читать, а хочется побыстрей прошить и забыть.==
| |
− | ===Мифы.===
| |
− | Не буду акцентировать вопрос на том, что такое биос, какие они бывают и зачем. Раз вы это читаете, значит, вам что-то уже известно. Потому начнём с обратного - развеем самые стандартные, почему-то непотопляемые мифы и заблуждения.
| |
− |
| |
− | # ''Шить биос нужно (лучше) только "своим" прошивальщиком (пример: Award - с помощью AwdFlash, AMI - AMIFlash).''
| |
− |
| |
− | Бред. Однако некоторым сложно это понять и поверить - ведь на сайте производителя платы много всяческих грозных непонятных предупреждений (да ещё и на нерусском). Почему же так? Интересно - тогда дочитайте эту и прочитайте следующую часть. :)
| |
− |
| |
− | <ol start="2"><li>''Шить биос "на горячую" ('''[[Hot Swap]]''' - "хотсвапом") нужно (можно) только на точно такой же матери (таком же чипсете, с точно такой же флэшкой т.п.)''</ol>
| |
− |
| |
− | Второе самое распространённое заблуждение. Имеет корни в незнании функционирования различных типов флэшмикросхем, которое, действительно, может накладывать некоторые ограничения на используемую для хотсвапа мать. Хотя если у вас есть другая точно такая же (только рабочая;)
| |
− | мать - это несомненный плюс.
| |
− |
| |
− | ===Прошивальщики.===
| |
− | Самыми популярными являются [[AwardBIOS Flash Utility|AwdFlash]], [[AMIBIOS Flash Utility|AMIFlash]] и [[UniFlash]]. Остальные являются специфичными для конкретной фирмы (например, для "родных" матерей от [[Intel]] либо [[Asus]] - свой, ибо другие могут не сработать).
| |
− |
| |
− | Я не буду касаться расшифровки ключей - этой информации полно в интернете, я остановлюсь на том, какие из них включать.
| |
− |
| |
− | '''''ВНИМАНИЕ''': запуск флэшера БЕЗ КЛЮЧЕЙ (т.е., соответственно, с оными по умолчанию) может привести к ПОВРЕЖДЕНИЮ биоса, даже если вы не собирались его перешивать, а лишь полюбопытствовали либо хотели сохранить текущую версию. Это крайне редкое явление и в основном касается некоторых версий amiflash, но оно точно имеет место (сам попадался и не раз:).''
| |
− |
| |
− | '''''ДОПОЛНЕНИЕ''': запуск различных утилит (например, типа [[DMICFG]]), имеющихся на компактах прилагаемых к матплате (для "настройки" биоса) часто приводят к ситуации аналогичной предыдущему абзацу - повреждение биоса, даже если вы не собирались ничего делать, а лишь полюбопытствовали и ничего не перешивали.''
| |
− |
| |
− | ====AWDFLASH.====
| |
− | Самый популярный, но не самый лучший.
| |
− | Запускать с ключиками:
| |
− | '''awdflash''' имя_прошивки '''/cd/cp/py/sn/f/r'''
| |
− | В этом случае биос перешьётся без лишних вопросов (/py - Program=Y, /sn - Save=No, /f - не проверять от той ли платы это биос и биос ли это вообще:) и после окончания прошивки комп сразу перезагрузится (ключик /r - Reset, ежели не нужно - не писать). Ключи /cd/cp (Clear DMI, Clear PNP) настоятельно рекомендуются к ним можно добавить автоматический сброс CMOS (по умолчанию) - /cc.
| |
− | Если прошиваем не award bios (например ami), используем ещё и ключик nab: Work with not Award BIOS
| |
− |
| |
− | ====AMIFLASH.====
| |
− | Не такой популярный как awdflash, но в отличие от оного - самый лучший (даже несмотря на вышеупомянутые проблемы с некоторыми версиями при запуске без ключиков). Запускать с ключиками:
| |
− | '''[[amiflash]]''' имя_прошивки '''/b /n /-o /-c /-d /-r /v /-i /-k /-e /-g'''
| |
− | Если нужно сохранить старый биос, запускать с ключиками:
| |
− | '''[[amiflash]]''' '''/b /n /-o /-c /-d /-r /v /-i /-k /-e /-g/s'''имя_прошивки
| |
− | : ''После ключика '''/s''' - пробела быть не должно!''
| |
− | Чтоб не набирать такую кучу ключей - не поленитесь, сделайте один раз .bat-файлик с содержимым типа:
| |
− | c:\vc\utils\amf.exe %1 /b /n /-o /-c /-d /-r /v /-i /-k /-e /-g
| |
− | (или можно скачать его с этого сайта).
| |
− |
| |
− | ====Uniflash.====
| |
− | В данной части его рассматривать не буду, т.к. несмотря на его реальную продвинутость, он требует некоторой подготовки/опыта со стороны пользователя.
| |
− | (Однако стоит отметить, что его можно применять не только для программирования BIOS материнских плат, но и BIOS видеокарт, flash микросхем в сетевых картах)
| |
− |
| |
− | ===Особенности перешивки биосов на платах от Asus.===
| |
− | Для перешивки асусовских плат не подойдут
| |
− | "стандартные" прошивальщики, т.к.
| |
− | '''ВСЕ''' асусовские биосы (начиная с самых
| |
− | древних Pentium1) блокируют обычные способы
| |
− | перешивки. Для перешивки на таких матплатах
| |
− | придётся использовать фирменные_''асусовские''_утилиты.
| |
− | Для самых старых плат - это ''pflash'',
| |
− | для более современных - ''aflash'' (хотя
| |
− | во многих случаях ''aflash'' подходит
| |
− | и для очень старых), для совсем новых - придётся
| |
− | использовать утилиты под винду.
| |
− | В случае ''pflash/aflash'' выражение
| |
− | "придётся использовать" не совсем
| |
− | корректно, т.к., во-первых, они крайне удобны,
| |
− | понятны, достаточно универсальны и, главное,
| |
− | не пристают с вопросами, прошивая "всё,
| |
− | что шьётся". :) Во-вторых, амифлэш всё-таки
| |
− | можно использовать, хоть он и заканчивает
| |
− | работу с ошибками (точней не он, а dos4gw).
| |
− | В любом случае, всем счастливым обладателям
| |
− | асусовских плат к перешивке нужно подходить
| |
− | с особым вниманием ибо восстановление при
| |
− | ошибке дело непростое, а иногда очень даже
| |
− | сложное. И если вы даже имеете опыт и даже
| |
− | немалый - повторюсь, будьте бдительны, асусовские
| |
− | инженеры используют в своих творениях крайне
| |
− | изощрённые меры для защиты биосов, обратной
| |
− | стороной медали которых являются иногда возникающие
| |
− | серьёзные проблемы с "оживлением"
| |
− | - плата может "прикидываться" дохлой
| |
− | ("00" на POST-карте), флэшка - аналогично
| |
− | (при попытках перешивки на других платах),
| |
− | хотя реально и один и другой будут совершенно
| |
− | живыми, что может подтвердится установкой
| |
− | оных в другие точно такие же, только исправные...
| |
− | Если вы боретесь(-лись) с подобными глюками
| |
− | - внимательно прочтите главу о LPC-интерфейсе
| |
− | (асусовцы его давно применяли, в то время
| |
− | как другие стали его использовать совсем недавно)...
| |
− | п.с. подобное в определённой степени (желательность
| |
− | и/или обязательность использования "родных"
| |
− | фирменных прошивальщиков) касается и некоторых
| |
− | других производителей (как правило - известных).
| |
− | Например, многие платы от Abit также имеют
| |
− | тонкости при программировании - тот же ''Uniflash'',
| |
− | вообще, предупреждает, что не дружит с этой
| |
− | фирмой...
| |
− |
| |
− | ===Основные проблемы и сообщения об ошибках.===
| |
− |
| |
− | ====Объём файла прошивки не сопадает с объёмом флэшки.====
| |
− |
| |
− | Распространённая проблема. Как правило является результатом
| |
− | того, что производитель использовал в разных версиях
| |
− | (матплат) разные флэшки (по объёму). Например, первые
| |
− | платы какой-то модели шли с мегабитными, а все следующие
| |
− | - с двухмегабитными. В некоторых случаях, если производитель
| |
− | не признаётся, что выпускал платы с биосы разных объёмов,
| |
− | это может быть свидетельством того, что плата "левая"
| |
− | (т.е., например, в подделке используется более дешёвая
| |
− | флэшка большего объёма - 4Mbit вместо 2Mbit).
| |
− |
| |
− | ====Прошивальщик по каким-либо причинам "не соглашается" прошивать биос, утверждая, что он не от этой платы или вообще не биос.====
| |
− |
| |
− | Ещё более распространённая вещь. Однако с вышеуказанными
| |
− | "секретными" ключиками вас больше не будут
| |
− | посылать… почитать даташиты. :)
| |
− |
| |
− | ====Прошивальщик не может определить тип флэшк и потому не прошивает её.====
| |
− | Это тоже частое явление. Причин тому может быть несколько:
| |
− | * стоит защита от перезаписи (именно это обычно и предлагают проверить матюгающиеся прошивальщики). На древних платах защита ставилась перемычками, в современных - как правило, выбирается в BIOS Setup (пунктик типа BIOS Flash Protection = En./Dis.).
| |
− | * данная версия прошивальщика не знает данный тип флэшки. Редкое явление - обычно возникает при попытке шить древние флэши новыми версиями либо наоборот.
| |
− | * всунутая хотсвапом флэшка (тип) не поддерживается самой матерью - см. дальше по FWH/LPC интерфейсам...
| |
− | * просто битая флэшка - убедитесь ещё раз, что Вы вставили её правильно... ;)
| |
− | * флэшка - вовсе и не флэшка, а "однократной записи" либо вообще - с УФ-стиранием (с окошком). Верно, как правило, лишь для самых древних плат (до Pentium1) и можно определить по маркировке - она будет начинасть с цифр 27ххх .
| |
− |
| |
− | ===Всё прошло благополучно, без видимых проблем и… тишина.===
| |
− | Для восстанавления вам придётся всё ж почитать
| |
− | подробней - см. дальше.
| |
− | ----
| |
− |
| |
− | ==Часть вторая. Для тех, кому это нужно/интересно, либо было лень читать первую, а теперь надо восстановить "как было"...==
| |
− |
| |
− | Учитавая понятный факт, что эту статью, как правило,
| |
− | будут читать не для перешивки новой версии биоса,
| |
− | а восстановления работоспособности вообще, остановимся
| |
− | на различных способах перешивки.
| |
− |
| |
− | ===Прошивка на программаторе.===
| |
− | Банально и неинтересно - разбиваешь свинку с мелочью,
| |
− | выдираешь флэшку и идёшь с дискетой и пивом к ближайшим
| |
− | ремонтникам, владеющих приёмами борьбы программатором.
| |
− | Если флэшка запаяна - придётся разбить ещё одну свинку
| |
− | и нести всю плату. Могу посоветовать напрячь их впаять
| |
− | колодку - впредь при желании сможете сэкономить на
| |
− | третьей свинке…
| |
− |
| |
− | ===Хотсвоп (на горячую).===
| |
− | Берётся другая РАБОЧАЯ плата. Как уже говорилось, она не обязательно должна быть "точно такая же", "на таком же чипсете", "той же фирмы".
| |
− | Главное, на что стоит ориентироваться - тип/маркировка флэшки. Есть две основные "совместимые" группы:
| |
− | * "обычные" (в частности, именно к ним относятся '''все''' "прямоугольные" флэшки - в [[DIP]]32 корпусе) - 28xxxx, 29xxxx, 39xxxx, некоторые 49xxxx
| |
− | * "хабовые" (все они '''только''' "квадратные в корпусе [[PLCC]]32) - большинство серии 49xxxx и "родные" интеловские 82802xx
| |
− |
| |
− | Соответственно, если на плате для восстановления будет "совместимая" флэшка того же (или большего) объёма - всё должно пройти.
| |
− |
| |
− | ====Как сделать.====
| |
− | [[Изображение:Extractor6.jpg|thumb|right|200px]]
| |
− | [[Изображение:Extractor7.jpg|thumb|left|200px|Вариант промышленного "ухвата" для DIP32]]
| |
− | Проявите фантазию - главное "во время процесса" не ронять на работающую
| |
− | плату чужеродные токопроводящие детали (и не проливать жидкости).
| |
− | Для микрушек в корпусе [[DIP]]32 - попроще. Обычно рекомендуют обвязать их нитками, чтоб выдернуть можно было полегче. Я же порекомендую найти что-нибудь типа шлейфика от
| |
− | старенького COM-порта и подложить его под микросхему - так и схватиться удобней и ширина как раз на микросхему и толщина кабеля не даст сильно застрять флэшке в разъёме.
| |
− |
| |
− |
| |
− | Для "квадратных" ([[PLCC]]32) - чуть сложней. Можно продолжить мучаться с нитками. Если есть неплохой доступ и руки не дрожат - можно банально подковырнуть иголкой в соответствующих уголках и аккуратно вынуть. Если же постоянно занимаетесь этим (перешивкой подобных) или просто хотите "чтоб наверняка" - приклейте к "спине" флэшки какую-нибудь штуку, чтоб можно было удобно вынимать/вставлять: подойдёт кусок
| |
− | пластмассы или даже растопить часть стержня для клеевого пистолета… В общем - это уже дело техники, в крайнем случае вы можете пойти и купить специальный "экстрактор"
| |
− | для [[PLCC]]32.
| |
− |
| |
− |
| |
− | {| border="0" style="border-collapse:collapse" align="center"
| |
− | |+'''Варианты "ухватов" для PLCC32'''
| |
− | |valign="top"|[[Изображение:Extractor2.jpg|thumb|none|200px]]
| |
− | |valign="top"|[[Изображение:Extractor3.gif|thumb|none|200px]]
| |
− | |valign="top"|[[Изображение:Extractor5.jpg|thumb|none|200px]]
| |
− | |}
| |
− |
| |
− | ===С дискеты (для современных - в том числе с винчестера/CD-ROM-а).===
| |
− |
| |
− | В случае, когда компьютер умер не полностью и при загрузке противно хрустит дисководом и/или выдаёт надпись "'''BIOS checksum error'''" можно попытаться восстановить биос без походов к товарищу.
| |
− |
| |
− | '''ВНИМАНИЕ''': Если у вас стоит AGP/PCI видеокарта - Вы можете не увидить этого сообщения (биос чексум еррор). Для этого потребуется ISA-карточка для P1-P3-компьютеров, PCI-карта для более современных, не имеющих ISA-слотов. Хотя в большинстве современных плат бутблок (а именно он сообщает об этом грустном факте, пытаясь восстановить биос с дисковода) поддерживает вывод и на AGP-карточки.
| |
− |
| |
− | '''ДОПОЛНЕНИЕ''': Если у вас есть POST-карта (например, встроенная в матплату), то "BIOS checksum error" просто отслеживается по ошибке "41" в самом "начале" POST-а (если вы не способны оценить "начало", то это где-то 5-6 код из тех, что вы успеет разглядеть:). Код "41" в Аварде - это обращение к FDD (попытка загрузиться с дискеты), в случае AMI "бутблочные" коды попыток загрузиться с авариной дискеты - "F0-FE".
| |
− |
| |
− | В большинстве случаев для этого нужно сделать чистую системную дискету (т.е. только файлы io.sys, msdos.sys и command.com) и записать на неё файл с прошивкой (bios.bin), сам прошивальщик (awdflash.exe) и autoexec.bat с соответствующей командной строкой внутри:
| |
− | * для [[Award]]:
| |
− | "'''[[awdflash]] ''bios.bin'' /cd/cp/py/sn/f/r'''"
| |
− | * для [[AMI]]:
| |
− | "'''[[amiflash]] ''amibios.rom'' /b /n /-o /-c /-d /-r /v /-i /-k /-e /-g'''"
| |
− |
| |
− | При чём ''не рекомендую'' использовать свои имена прошивок/прошивальщиков (т.е. стоит использовать только вышеуказанные стандартные названия) - некоторые биосы (бутблоки) могут просто проигнорировать такой диск, выдавая всё то же сообщение о несистемной дискете в дисководе.
| |
− |
| |
− | Однако единого "стандарта" на процесс восстановления с дисковода всё же нет. Большинство "брэндовых" компов (т.е. фирменные Intel, HP/Compaq, Dell, IBM, Fujitsu etc) могут быть оживлены дискеткой, содержимое которой можно слить с их собственного сайта (там же должно быть подробное описание).
| |
− |
| |
− | В зависимости от современности конкретной платы/биоса ([[Award]]/[[AMI]]) на дискетке может потребоваться наличие ЛИШЬ (т.е. она, наоборот, не должна быть системной) файлов прошивальщика и прошивки или даже, вообще, только самой прошивки (когда прошивальщик встроен в биос).
| |
− |
| |
− | Короче имеются различные вариации и если к ним добавить возможность просто аппаратного сбоя самого бутблока и/или железа, то восстановление прошивки данным методом становится не самым надёжным и "многовероятным" способом (это же подтверждает и статистика). Однако, всё равно, начинать лучше именно с него - авось, повезёт и свинка уцелеет… ;)
| |
− |
| |
− | ==Часть третья. Для тех, кому, всё же, нужно разобраться. Азы.==
| |
− |
| |
− | Что ж, если дочитали досель - значит начнём с самого
| |
− | начала. Которое я пропустил из-за того, что очень
| |
− | многие его не читают :) , предпочитая середину или
| |
− | даже сразу конец.
| |
− |
| |
− | ===Немного о принципах работы.===
| |
− | [[Изображение:DIP32_PLCC32.gif|thumb|[[PP]]-тип интерфейс [[FlashBIOS]]]]
| |
− |
| |
− | "Обычная" флэшка имеет следующие сигналы:
| |
− | * 8 линий данных <strong>DQ0</strong>-<strong>DQ7</strong>
| |
− | * 17-18 линий адреса <strong>A00-A16/17</strong> (в зависимости от объёма: [[1Mbit]] - 17, [[2Mbit]] - 18)
| |
− | * <strong>CE#</strong> (''ChipEnable'') - "чипселект" (разрешение на работу с микросхемой)
| |
− | * <strong>OE#</strong> (''OutputEnable'')
| |
− | * ''RE'' (возможность считать байт данных)<br>
| |
− | * <strong>WE#</strong> (''WriteEnable'')
| |
− | * ''WE'' (возможность записать байт данных)
| |
− | Короче, достаточно примитивно и понятно, даже если Вы не обладаете особыми познаниями в электронике. И уже из этого видно, что уже только из-за 8-битной шины данных (в современных Nforce2 - она 128-bit) скорость выборки данных из флэшки (которая к тому же ещё больше ухудшается из-за больших задержек самой флэшпамяти) превратила бы загрузку даже самого быстрого компьютера в мучительное ожидание. Поэтому флэшка подключена особым способом к южному мосту, что позволяет "отображать" ("''Shadow''")
| |
− | её содержимое на "реальную" память, эмулируя при этом память ''ReadOnly''
| |
− | (''ПЗУ'' по-нашенски) и снимая ограничение по скорости.
| |
− |
| |
− | ''Опять же, из сказанного ещё один вывод: ежели Вы засунули совсем нездоровую флэшку либо вставили её неправильно - пострадать может не только сама микросхема (что обычно и случается при вставлении "задом наперёд"), но и напрямую_подключённый_южный_мост
| |
− | (из неоднократного :( личного опыта).''
| |
− | В адресном пространстве флэшка занимает самые верхние адреса ''E0000-FFFFF'' (верно
| |
− | для ''[[1Mbit]]'', для остальных аналогично, потому разберём на примере именно ''1Mbit/AwardBIOS'').
| |
− | После включения компьютера и окончании сигнала <strong>RESET#</strong> процессор выполняет
| |
− | свою первую команду по адресу ''F000:FFF0''. После самой первичной инициализации происходит проверка различных контрольных сумм (их много в биосе), главная из которых - контрольная сумма ''E000:0-FFFF+F000:0-BFFC''. Если она нарушена происходит запуск бутблока, расположенного по "самым" верхним адресам (''F000:C000/E000-FFFF''
| |
− | - последние ''8/16kB''), который производит инициализацию дисковода и пытается считать
| |
− | с него систему и/или запустить прошивальщик с прошивкой.
| |
− |
| |
− | ''Отсюда ещё один интересный вывод: если вы хотите принудительно запустить бутблок
| |
− | (для перешивки) можно испортить [[CRC]] "вручную" - закоротив адресные линии "выше" бутблочных. Например, я обычно корочу рядом расположенные '''A15''' и '''A16''' (pin 2 и 3). Объём бутблока = 16kB = 2^14, в результате чего он никак не пострадает, а контрольная сумма "остального", понятно, собъётся. Если вам не совсем понятно, зачем это может быть нужно, то когда столкнётесь с запаянной флэшкой, в которую залили "похожую" прошивку - поймёте. ;) И, кстати, для линий адреса это (корочение) совершенно безопасно.''
| |
− | После проверки ''[[CRC]]'' биос "шадовится" (операция Shadow), т.е. происходит копирование содержимого флэшки в "реальную" память, сама флэшка отключается (южным мостом), а для того, чтоб программы поверили, что обращаются к ''ПЗУ'' на область адресов биос вешаются атрибуты ''ReadOnly'' посредством программирования регистров SB (и/или ''[[MSR]]'' процессора для ''AMD'' ''K7/K8''). Вся дальнейшая работа происходит только с "зашадовленным" образом флэшки.
| |
− |
| |
− | ''Вывод: Именно по этим причинам мы можем беспрепятственно вытаскивать флэшку, сразу же, как только увидим строчку "Starting Windows/DOS/linux".''
| |
− | Если же потребуется работа именно с самой флэшкой (например, запись в неё [[ESCD]]/''[[DMI]]''), то для этого используются соответствующие процедуры, специфичные для каждого чипсета
| |
− | - нужно будет опять подключить флэшку к шине и снова отключить после окончания операции.
| |
− | ''Вывод: из-за различных способов программирования подключения/отключения флэшки (для различных чипсетов) прошивальщик должен уметь это делать, т.е. "знать" чипсет, на котором происходит перешивка.''
| |
− |
| |
− | ===Особенности программирования микросхем Intel 28Fxxx.===
| |
− | Если в вашей плате стоит флэшка от [[Intel]]
| |
− | - будьте трижды осторожны при прошивке. Дело
| |
− | в том, что интельные микросхемы используют
| |
− | аппаратную защиту бутблока. Что это значит?
| |
− | А это значит, что в них присутствует ещё один
| |
− | сигнал - '''RP#''' (pin 30) - разрешение
| |
− | на программирование бутблока. В двухмегабитках
| |
− | - это '''A17''', [[1Mbit]] - '''NC'''
| |
− | (NotConnected, не используется).
| |
− | Т.е. для того, чтоб корректно прошилась вся_область_флэшки
| |
− | на ножке RP# должно присутствовать +12V. Именно это
| |
− | задают распространённые на многих Socket7-матерях
| |
− | перемычки с названием Flash Type: Intel / Non-Intel.
| |
− |
| |
− | ''Вывод: Если в плате стоит '''Intel
| |
− | 28Fxxx''', а разводка платы не предусматривала
| |
− | правильную коммутацию для программирования
| |
− | Intel-флэшей (что является очень распространённым
| |
− | явлением) - BIOS погибнет при первой же попытке
| |
− | перешивки без особых шансов на восстановление
| |
− | (на этой плате).''
| |
− | Для перешивки '''Intel 28Fxxx'''
| |
− | на таких платах (без разводки '''RP#''')
| |
− | нужно подать на ''pin30'' вручную ''+12V'',
| |
− | но так, чтоб оно не пошло на саму плату (а
| |
− | это '''A17''') - для это можно
| |
− | просто отогнуть эту лапку, т.е. чтоб она не
| |
− | втыкалась в сам разъём.
| |
− |
| |
− | ===Программные особенности программирования флэшек.===
| |
− |
| |
− | Главный аспект, на который хотелось бы обратить внимание - флэшка не перепрограммируется "зараз" (сразу одним блоком) и, наоборот, нельзя перезаписать один отдельно взятый байт. Флэшка поддерживает лишь "блочную" запись (секторизация).
| |
− | У разных типов флэшек разная секторная организация. Например у распространённой [[Intel]] [[28F001BX]] есть следующие блоки:
| |
− | # Первый блок, в начале, самый большой, "главный" - 112kB. В нём обычно располагается всё "тело" упакованного биоса (поэтому самый большой).
| |
− | # Дальше два одинаковых блока по 4kB - в этих адресах обычно хранятся изменяемые данные типа [[ESCD]]/[[DMI]]/[[CMOS]]/пароли и т.п.
| |
− | # Последний блок - 8kB - бутблок. Т.е. говоря техническим языком - [[i28F001BX]] имеет организацию ''112+4x2+8''. Достаточно понятная и логичная организация: самый большой блок в 112kB, всё равно, переписывается лишь при обновлении биоса, дальше - постоянно изменяемые данные, потому сделаны два маленьких блока (чтоб легче и быстрей было перезаписывать эти "куски") и в конце - неизменяемый обычно бутблок (специально отдельно от других - для защиты биоса в смысле возможности запуска аварийного восстановления с дисковода) - он всегда сделан отдельно, что его "не трогали" при обычных перезаписях других блоков.
| |
− |
| |
− | Некоторые флэшки имеют очень мелкую секторизацию, например, та же [[SST]] [[29EE020]] ([[2Mbit]]) имеет целых 2048 одинаковых секторов по 128 байт. Однако большинство, всё ж, придерживается организации схожей с вышеприведенной, потому как маленький блок имеет и свои отрицательные стороны (например, в плане более сложной защиты от перезаписи).
| |
− |
| |
− | ==Часть четвёртая. "Хабовые" флэши.==
| |
− |
| |
− | Как всё было просто в старые добрые времена - шина адреса, шина данных, '''CE'''/'''WE'''/'''OE'''… ;) Но прогресс (особенно в отдельно взятой
| |
− | фирме ;) не стоял на месте и с появлением чипсетных наборов i8xx получило распространение
| |
− | это страшное и многим малопонятное название - "хабовые" флэшки.
| |
− |
| |
− | ===LPC-интерфейс.===
| |
− | В конце 97-го года Intel решила, что у мощного
| |
− | процессора обязательно должен быть баальшой
| |
− | биос (4-8MBit и больше, хотя большинство фирм
| |
− | до сих пор используют в основном лишь 2Mbit),
| |
− | а для этого никак не хватит ног (для линий
| |
− | адреса) на широкораспространённых "обычных"
| |
− | '''PLCC32'''-флэшках. Сказано -
| |
− | сделано, так появился стандарт '''LPC'''
| |
− | (''LowPinCount'' - "малоколичественноножное"
| |
− | соединение, хотя корпус по понятным причинам
| |
− | оставили прежним - '''PLCC32''').
| |
− | Кроме возможности использования больших (до
| |
− | 4Gb!) объёмов флэшей одной из самых главных
| |
− | причин называлась скорая погибель '''ISA'''-шной
| |
− | шины, отстутствие которой снимало потребность
| |
− | разводить линии адреса/данных и позволяло
| |
− | ограничиться меньшим количеством линий для
| |
− | общения, в первую очередь, "мультика"
| |
− | ('''SuperIO''') и южного моста
| |
− | (очевидная возможность же интеграции '''SIO'''
| |
− | в сам '''SB''' скромно умалчивалась;).
| |
− | В '''LPC''' для этого используется
| |
− | лишь пять проводов: '''LAD0'''-'''LAD3'''
| |
− | + '''LFRAME#''' (поэтому "''lowpin''…").
| |
− | Применительно к флэшам (т.к. использовать
| |
− | LPC-интерфейс могут разные устройства) этот
| |
− | стандарт вылился в следующее воплощение:
| |
− |
| |
− | [[Изображение:LPC_FWH.gif|thumb|LPC/FWH interface<BR>
| |
− | ----
| |
− | ''() - в скобках - значение ножки в режиме LPC или FWH''
| |
− | ]]
| |
− |
| |
− | Как видно, такая флэшка может работать сразу
| |
− | в двух различных режимах - '''LPC'''-mode
| |
− | и '''PP'''-mode (''Parallel-Programming'').
| |
− | Режим работы выбирается уровнем на ножке '''IC'''
| |
− | (''Interface Configuration Pin'') во
| |
− | время старта компьютера- "0" - '''LPC'''-mode,
| |
− | "1" - '''PP'''-mode.
| |
− | Режим '''PP''' наиболее близок
| |
− | к "обычным" флэшкам и совместим
| |
− | с ними по многим (но не по всем) ножкам, с
| |
− | учётом только того, что линий адресов всего
| |
− | 11 (0-10), но зато они мультиплексируются,
| |
− | т.е. сначала выдаётся/считывается значение
| |
− | '''A00'''-'''A10''',
| |
− | а затем '''A11'''-'''A21'''.
| |
− | С учётом этого (мультиплексирования адресов)
| |
− | и "пропажи" сигнала CE всё остальное
| |
− | полностью аналогично "обычным" флэшкам.
| |
− | В режиме '''LPC''' общение между
| |
− | мостом и флэшкой происходит лишь по четырёхбитной
| |
− | шине, а пятый '''LFRAME#''' служит
| |
− | в качестве стартового (для начала операции
| |
− | по обмену данными). Плюс '''LRESET#'''
| |
− | и '''LCLK#''', которые полностью
| |
− | аналогичны своим собратьям на материской плате
| |
− | - вот и весь набор нужных проводов (остальные
| |
− | - опционально). В общем, это есть попытка
| |
− | максимально упростить интерфейс, но не скатиться
| |
− | до "абсолютно последовательного",
| |
− | типа '''I2C''', оставив возможность
| |
− | использования даже режимов '''DMA'''
| |
− | и BusMaster-инга (которые
| |
− | могут использоваться, например, в устройствах
| |
− | типа '''DiskOnChip'''/'''LPC''').
| |
− | Режим '''PP''' используется при
| |
− | "заводской" прошивке флэшки (он,
| |
− | ведь, понятно - быстрей, что и важно при массовом
| |
− | производстве) , а '''LPC''' - при
| |
− | работе в составе плат. Только вот для работы
| |
− | с такими флэшами нужно, чтоб южный мост умел
| |
− | это делать - в результате такой стандарт стал
| |
− | реально популярен лишь с приходом популярного
| |
− | '''nForce2''' (потому как он никогда
| |
− | и не слышал про '''ISA'''-шину… :)
| |
− |
| |
− | ===FWH-интерфейс.===
| |
− | В результате достигнутых высот в области
| |
− | стандартизации ;) , компания Intel, с выходом
| |
− | чипсетных наборов i8xx продолжила нести знамя
| |
− | родителя новых стандартов. Так появился ещё
| |
− | один режим работы - '''FWH''' (''FirmWareHub'',
| |
− | от которого, собственно, и пошло название
| |
− | "хабовые"). Он был полностью аналогичен
| |
− | '''LPC''' электрически (по ножкам/разъёму),
| |
− | но (дальше сами догадаетесь;) - абсолютно
| |
− | ''<font color="#FF0000">'''_несовместим_'''</font>''
| |
− | по протоколу передачи данных. Как можно прочитать
| |
− | в некоторых документах, это было сделано для
| |
− | возможности поставить в систему кроме '''LPC'''-устройства
| |
− | ещё и '''FWH''', повесив их на
| |
− | одну и ту же шину (ведь они электрически совместимы,
| |
− | но при передаче пакетов данных каждый будет
| |
− | брать свой из-за разных протоколов), при чём
| |
− | "хабовых" флэшей можно было навешать
| |
− | до шестнадцати штук, т.к. в них появились
| |
− | дополнительные '''ID0'''-'''ID3'''
| |
− | сигналы.
| |
− | ''(прим. автора: все мои уколы в сторону родителя
| |
− | x86 просьба воспринимать как шутку, хотя как известно
| |
− | - в каждой шутке есть доля шутки… ;)''
| |
− | '''''см. рис. выше.'''''
| |
− | Как видно, картина совершенно аналогично '''LPC''', только названия '''LAD0-3'''
| |
− | + '''LFRAME#''' заменены на '''FWH0-3'''
| |
− | + '''FWH4'''.
| |
− | Режим '''PP''' совершенно тот
| |
− | же.
| |
− | '''FWH''' отличается от '''LPC'''
| |
− | протоколом, т.е. все команды для операций
| |
− | имеют совершенно другие кодовые значения в
| |
− | полях обмена данными. Плюс возможность использовать
| |
− | несколько (до 16) '''FWH'''-устройств,
| |
− | благодаря введению новых "идентификационных"
| |
− | сигналов '''ID0-3'''. По умолчанию
| |
− | для работы в качестве флэшки на матплате принимается
| |
− | '''ID'''=0000 (что и запросто можно
| |
− | проверить, прозвонив соответсвующие ножки
| |
− | (9-12) на вашей интеловской плате (они все
| |
− | "на земле").
| |
− | ''Вообще, универсальным способом отличить
| |
− | флэшку по типу хабовая/обычная можно просто
| |
− | прозвонив ножку pin28 - в хабовой она будет
| |
− | строго на земле, в то время как в "обычной"
| |
− | будет что-то в районе килоома ("звонить"
| |
− | надо в колодке самой матплаты, хотя некоторые
| |
− | флэшки тоже "звонятся" - для этого
| |
− | используйте pin16/28).''
| |
− |
| |
− |
| |
− |
| |
− | ==Собственный "перешивочный" комплекс.==
| |
− |
| |
− | Если вы по работе постоянно имеете дело с потребностью в перешивке могу дать несколько рекомендаций. Кто-то может посоветовать использовать в таком случае именно программатор, хотя я так не считаю и даже не советую. Для этого есть две простые и веские причины - во-первых, программатор не знает всех типов микрух (правильней, конечно - есть такие, что знают, но их цена исчисляется тремя нулями без преувеличения), во-вторых, даже не самый крутой программатор просто дороже.
| |
− |
| |
− | Для перешивки 99.9% флэшек (к матплатам, конечно) вам понадобятся три платы:
| |
− | # Что-нибудь подревнее, под Pentium1 - для перешивки очень распространённых Intel-флэшей 1Mbit.
| |
− | # Что-нибудь под P2 с 2Mbit-ным биосом - для перешивки остальных "обычных" 1- и 2Mbit флэшек.
| |
− | # Что-нибудь под P3 из серии i8xx - для перешивки "хабовых" флэшек.
| |
− | # ''(Добавлен в последней версии статьи - прим.ред.)'' Что-нибудь на 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 колодкой (см. фото).
| |
− |
| |
− | [[Изображение:DIP32-to-PLCC32_up.jpg|thumb|Cамодельный переходник PLCC32->DIP32<BR>''Сделан путём фигурной резьбы лобзиком по неисправным материнским платам;) плюс допаянные вручную ножки)'']]
| |
− | [[Изображение:DIP32-to-PLCC32_down.jpg|thumb|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'''/'''PP''')
| |
− | и, может быть, из-за этого часто "стандартные" прошивальщики некорректно их перешивают (а то и зависают в процессе перешивки) - ''uniflash'' же это делает исключительно корректно.
| |
− |
| |
− | ''п.с. последние версии uniflash стали настолько корректными и удобными, что теперь я в основном только им и пользуюсь...''
| |
− |
| |
− | === Экстремальные способы перешивки/восстановления ===
| |
− |
| |
− | В некоторых сложных случаях приходится прибегать к использованию сразу двух прошивальщиков. Обычно это [[uniflash]] + [[awdflash]] (но не обязательно).<FONT SIZE="-2"> Например, прошиваете сначала с помощью [[amiflash]], а после этого сразу же с помощью [[uniflash]]. После первой попытки амифлэш ругнётся, что прошил некорректно, а uniflash перешьёт уже корректно.</FONT>
| |
− |
| |
− | Рекомендуемой "связкой" является [[awdflash]] + [[uniflash]]. Конкретно технология использования подобной "сладкой парочки" следующая:
| |
− | # Запускаем [[awdflash]] с "родной" флэшкой (той, с которой запускался компьютер) и выходим без прошивки. Например, можно запустить его ([[awdflash]]) с ключиками "/<B>pn</B>/<B>sy</B> <I>111.bin</I>" - записав ненужный биос (просто для проверки :) ).
| |
− | # Ставим ([[hotswap]]) нужную для прошивки флэшку, запускаем [[uniflash]] и ''радуемся'' :) (должно прошиться нормально).
| |
− | # Ежели, все-таки, ''не радуемся'' (прошивается некорректно) - еще раз "просто" запускаем [[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 "вручную" (например, прямо от разъёма БП).
| |
− |
| |
− | == Восстановление запаянных биосов БЕЗ их выпаивания ==
| |
− |
| |
− | Как уже говорилось в "азах", для прошивки флэшек, которые впаяны в плату, можно использовать метод "порчи CRC" - это когда "искусственно" нарушается BIOS-CRC, точней (и правильней) - её подсчёт в процессе POST.
| |
− |
| |
− | Обычно данный метод применим к случаям, когда в биос "случайно" был зашит "не совсем тот" биос, либо когда в процессе работы плата в один прекрасный момент перестала загружаться, зависая на распространённом "Building DMI Pool" и т.п. Т.е. главным условием является - "живой" бутблок, который и вызывается при некорректной CRC, запуская процедуру "аварийного" восстановления биос (обычно - с дискеты).
| |
− |
| |
− | === PP ===
| |
− |
| |
− | Для "обычных" флэшей, как уже было указано в [#Немного о принципах работы. | "азах"], всё достаточно просто - коротим '''A15''' и '''A16''', что "не заденет" работу бутблока, однако точно испортит CRC. Далее - дело техники, подготавливаем дискетку (винчестер, CD-ROM...) и восстанавливаем.
| |
− |
| |
− | === FWH/LPC ===
| |
− |
| |
− | Для интерфейсов [[FWH]]/[[LPC]] такой трюк (закорачивание адресных линий) не пройдёт, т.к., во-первых, из-за их мультиплексирования (в режиме '''PP'''), во-вторых, из-за того, что в "обычном" режиме работы они (интерфейсы) используют лишь четыре линии - '''FWH0-3'''/'''LPC0-3'''. И тут уже не получится разделить на "используемые" и "не используемые" (бутблоком).
| |
− |
| |
− | Здесь придётся использовать "временной" фактор. Процедура подсчёта CRC биоса занимает некоторое конечное и "относительно длительное" время (десятые доли секунды). И если в этот момент (подсчёта CRC) "что-то нехорошее" произойдёт с любым из '''xAD0-3''' выводов - CRC будет подсчитана неверно. Потому алгоритм следующий:
| |
− |
| |
− | 1. Ищем флэшку на плате, находим у неё контакты '''15'''-'''16'''-'''17'''. ('''DQ2'''-'''Vss'''-'''DQ3''').
| |
− |
| |
− | 2. Заготавливаем "устройство корочения" (например, пинцет) и "прицеливаемся" так, чтобы закоротить '''15'''-'''16''' либо '''16'''-'''17'''.
| |
− |
| |
− | 3. Включаем компьютер и через 1-3 секунды (зависит от платы-биоса-процессора) делаем ''однократное'' [[короткое]] '''замыкание'''.
| |
− |
| |
− | 4. В зависимости от "времени" замыкания:
| |
− | * Если сделать это "зарано" - биос еще "не дошёл" до этапа подсчёта CRC, а потому, понятно, просто зависнет и ничего не выдаст на экран.
| |
− | * Если сделать это "запоздно" - биос уже проверил (успешно) CRC и был скопирован в '''Shadow''', потому он никак "не отреагирует" на корочение (ЮМ "отключил" флэшку - POST работает в ОЗУ) - т.е. поведёт себя также, как без "корочения", выдаст те же сообщения и/или зависнет (там же).
| |
− | В любом из таких случаев - делаете рестарт (RESET) и повторяете попытку с небольшим "сдвигом" по времени корочения в ту или иную сторону. Обычно, в зависимости от опыта, фазы Луны и везения - это не больше 10-20 попыток (может просто последовательно "перебирать" интервалы от нуля секунд и дальше :).
| |
− | Если у вас есть [[POST-карта]] - коротить нужно сразу же после появления посткода '''C3''' (для [[Award]]).
| |
− |
| |
− |
| |
− |
| |
− |
| |
− | Статья в '''бета'''-версии, добавления/изменения ''обязательно_последуют'', все поправки/пожелания - ''вносите'' сюда '''самостоятельно'''.
| |
− |
| |
− | Севко Роман, 11.26.03. (Первая версия)
| |
− | А также другие пользователи rom.by (см. "история" данной страницы).
| |
− |
| |
− | Перепечатка без согласования
| |
− | с администрацией ROM.by - <font color="#FF0000">не допускается.</font>
| |