Распиновка разъема spi на материнских платах asus

Обновлено: 07.07.2024

Эта статья продолжает тему, связанную с угрозой искажения BIOS материнской
платы вредоносными программами. В ранее опубликованном материале
"Проникновение в BIOS ROM"
N1 и N2 был
приведен пример программы, выполняющей запись в микросхему BIOS, рассмотрены
механизмы защиты, используемые производителями материнских плат и причины, по
которым данные механизмы часто оказываются неэффективными. Напомним, что эта
проблема возникла более 10 лет назад, когда в качестве носителя BIOS начали
использовать микросхемы Flash ROM, допускающие перезапись содержимого без
физического вмешательства в компьютер. Таким образом, возможность оперативной
перезаписи (обновления) BIOS, привела к побочному эффекту – риску его случайного
или преднамеренного искажения.

Казалось бы, сегодня на эту тему уже все сказано. Но время идет, появляются
новые типы микросхем Flash ROM и интерфейсов для их подключения. Это
сопровождается появлением новых методов защиты BIOS от несанкционированного
искажения, и, конечно, новых уязвимостей. В ранее опубликованном материале,
ссылка на который приведена в начале статьи, рассматриваемая тема раскрыта на
примере платформы, использующей микросхему SST 49LF004A, подключенную к
интерфейсу LPC (Low Pin Count). Сегодня, ему на смену пришел интерфейс SPI
(Serial Peripheral Interface). Напомним, что для перезаписи содержимого
микросхемы BIOS, программа должна взаимодействовать с двумя блоками регистров:
регистры интерфейса Flash ROM, расположенные в составе "южного моста" чипсета и
регистры, входящие в состав самой микросхемы Flash ROM. При переходе от
интерфейса LPC к SPI, архитектура двух указанных блоков существенно изменилась.
Поэтому есть смысл рассмотреть взаимодействие программ с микросхемой BIOS,
механизмы защиты и их уязвимости применительно к современным платформам.
Материал снабжен примерами на ассемблере. Для экспериментов использовалась
материнская плата Gigabyte GA-965P-S3, построенная на чипсете Intel 965,
описанном в 2. В качестве носителя BIOS на данной плате используется
микросхема SST 25VF080B, описанная в [5]. Эта микросхема имеет объем 8 Мегабит
(1 Мегабайт) и подключается к интерфейсу SPI. Некоторые микросхемы других
производителей, использующих тот же интерфейс, описаны в [4,6,7]. Описание
интерфейса SPI приведено в [8,9]. При взаимодействии с контроллером SPI, нам
потребуется использовать механизмы доступа к конфигурационному пространству,
описанные в документах 12.

Интерфейс SPI: историческая справка

Как известно, быстродействие микросхемы постоянного запоминающего устройства
(Flash ROM), используемой в качестве носителя BIOS, практически не влияет на
общую производительность компьютера. Это связано с тем, что при старте
материнской платы, BIOS переписывается (или распаковывается) в оперативную
память Shadow RAM и при обращении к BIOS в сеансе ОС, программы работают с
оперативной памятью, а не с микросхемой Flash ROM. Поэтому, в отличие от
процессора, памяти, графической подсистемы, эволюция которых сопровождается
ростом производительности, микросхемы Flash ROM и их интерфейсы развиваются в
другом направлении. Здесь главными критериями являются уменьшение стоимости,
потребляемой мощности и занимаемой площади на материнской плате. Главный метод
достижения этих целей – уменьшение количества проводников между микросхемой BIOS
и контроллером, обычно входящим в состав "южного моста" чипсета. С точки зрения
метода подключения микросхемы BIOS, можно выделить три поколения материнских
плат:

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

2) С появлением чипсетов Intel 810, 815, на основе "хабовой" архитектуры,
шина ISA ушла в прошлое. Ряд устройств материнской платы, ранее подключаемых к
ISA (контроллер гибких дисков, порты COM и LPT, микросхема BIOS), "переехали" на
интерфейс Low Pin Count или LPC, название которого переводится как "малое
количество сигналов". Сигналы адреса, данных и управления в этом интерфейсе
передаются по пяти линиям (не считая сигналов сброса, тактирования и линий
питания), в режиме мультиплексирования во времени. Микросхемы BIOS, используемые
в таких платформах, иногда называют Firmware Hub или FWH. Пример программы
стирания и записи микросхемы BIOS, приведенный в ранее опубликованной статье
"Проникновение в BIOS ROM" N1 и N2" предназначен для таких платформ.

Отметим, что интерфейс LPC также поддерживается современными чипсетами и
разработчик материнской платы может использовать для подключения микросхемы BIOS
как LPC, так и SPI. Сфера применения интерфейса SPI не ограничивается
материнскими платами компьютеров. Внимательный читатель мог обратить внимание на
то, что из-за перехода к последовательному формату данных, каждый из описанных
интерфейсов использует больше тактов для выполнения операций чтения и записи,
чем его предшественник, что чревато снижением быстродействия. Но этого не
происходит, так как указанное обстоятельство компенсируется ростом частоты и
оптимизацией форматов данных. Шина ISA работает на частотах 5-8MHz, LPC на
33MHz, SPI на 33-50 MHz.

Архитектура микросхемы SPI Flash ROM

Микросхемы SPI Flash, в частности SST25VF080B, используют три сигнала для
приема и передачи данных. SCK (Serial Clock) – вход для тактирования
передаваемых или принимаемых данных. SI (Serial Input) – вход для передачи
данных от контроллера к микросхеме, по этой линии побитно передаются адрес,
данные для записи, и коды команд управления микросхемой. SO (Serial Output) –
выход для передачи данных от микросхемы к контроллеру, по этой линии побитно
передаются читаемые данные, а также информация о состоянии микросхемы.
Контроллер управляет микросхемой посредством команд, инициирующих операции
чтения и записи данных, стирания, чтения идентификаторов микросхемы, чтения и
записи регистра статуса и т.п.

Назначение каждого из восьми контактов микросхемы, описание всех команд, а
также другие подробности содержатся в [5].

Архитектура контроллера SPI

Контроллер SPI, входящий в состав "южного моста" Intel ICH8, содержит более
20 регистров управления и состояния. Регистры адресуются в пространстве памяти с
использованием технологии memory-mapped I/O, рассмотренной в ранее
опубликованной статье "Устройства системной поддержки. Исследовательская работа
N 9". Описание всех регистров и команд контроллера SPI выходит за рамки
данной статьи, рассмотрим основные отличия программной модели интерфейса SPI от
его предшественника - интерфейса LPC, акцентируя внимание на регистрах,
используемых при выполнении основных операций – чтении идентификаторов, записи и
стирании Flash ROM.

Напомним, что физический доступ к микросхеме BIOS (не путать с областью
Shadow RAM) осуществляется посредством окна, примыкающего к верхней границе
диапазона 0-4GB. Например, Flash ROM размером 1 Мбайт будет доступен в диапазоне
FFF00000h-FFFFFFFFh. В платформах, использующих интерфейсы ISA и LPC, через тот
же диапазон, при выполнении операций стирания и записи выполняется передача
команд и записываемых данных для микросхемы Flash ROM, а также чтение ее
статуса. Платформа, использующая интерфейс SPI, рассматриваемая в данной статье,
также поддерживает чтение содержимого микросхемы BIOS через указанный диапазон,
но для передачи управляющей и статусной информации во время записи и стирания
Flash ROM, используется другой метод доступа. Информация для выполнения цикла на
шине SPI (адрес и данные) записывается в специальные регистры контроллера SPI
(Flash Address и Flash Data соответственно), затем в регистр Software Sequencing
Flash Control передается команда на выполнение цикла обращения к Flash ROM
(чтения или записи). После этого, через регистр Software Sequencing Flash Status
можно определить момент завершения операции и проконтролировать наличие ошибок.
Данные, прочитанные из Flash ROM, находятся в регистре Flash Data.

Бит 0 (SPI Cycle In Progress) – используется для определения момента
завершения операции на шине SPI. "0" означает, что шина SPI свободна и программа
может запускать следующий цикл. "1" означает, что шина SPI занята, выполняется
транзакция. Бит устанавливается и сбрасывается аппаратно, доступен только для
чтения.

Бит 1 (Reserved) – не используется.

Бит 2 (Cycle Done Status) – устанавливается в "1" аппаратно, при
завершении транзакции на шине SPI. Для сброса, программа должна записать "1" в
данный бит.

Бит 3 (Flash Cycle Error) – устанавливается в "1" аппаратно, если при
выполнении транзакции имели место ошибки: защита записи или попытка запуска
следующей транзакции до завершения предыдущей. Для сброса, программа должна
записать "1" в данный бит.

Бит 4 (Access Error Log) – устанавливается в "1" аппаратно, если имели
место попытки обращения к микросхеме BIOS, нарушающие права доступа к заданным
диапазонам адресов, запрограммированным в конфигурационных регистрах контроллера
SPI.

Биты 5-7 (Reserved) – не используются.

Бит 9 (SPI Cycle Go) – запуск транзакции на SPI. Запись "1" в этот бит
запускает выполнение транзакции, тип и содержание которой определяются
состоянием битов 10-31 этого же регистра.

Бит 10 (Atomic Cycle Sequence) – при передаче приказа на выполнение
транзакции, запись "1" в этот бит запрещает внешним событиям вмешиваться в
процессы, происходящие на интерфейсе SPI до тех пор, пока не будут выполнены три
фазы: передача префиксной команды, передача основной команды и завершение
выполнения основной команды.

Отметим, что таким образом реализуется один из механизмов защиты от
случайного искажения содержимого микросхемы BIOS. Так называемые префиксные
команды (например, Write Enable) должны предшествовать командам, изменяющим
содержимое микросхемы (например, Write, Erase). Получив код команды, содержащий
"1" в данном бите, все три фазы контроллер выполняет аппаратно, без
вмешательства процессора до завершения выполнения основной команды.

Бит 11 (Sequence Prefix Opcode Pointer) – при использовании префиксных
команд (когда бит 10 установлен в "1", см. выше), этот бит выбирает один из двух
байтов, который будет передан в качестве префиксной команды для микросхемы SPI
Flash. При "0" выбирается младший байт регистра Prefix Opcode Configuration
Register, при "1" – старший.

Бит 12-14 (Cycle Opcode Pointer) – это битовое поле выбирает один из
восьми байтов, который будет передан в качестве основной команды для микросхемы
SPI Flash. Указанные байты находятся в регистре Opcode Menu Configuration
Register.

Бит 15 (Reserved) – не используется.

Биты 16-21 (Data Byte Count) – задает количество байтов данных для
операций чтения или записи данных. Количество равно значению этого поля плюс 1.
Например: 000000b=1 байт, 111111b=64 байта.

Бит 22 (Data Cycle) – Задает наличие байтов данных в команде. "0"
означает, данные отсутствуют (например, в команде стирания), "1" означает, что
данные присутствуют (например, в команде чтения статуса, данными является
содержимое регистра статуса).

Биты 24-26 (SPI Cycle Frequency) – задает частоту битовой
синхронизации при выполнении транзакции на SPI. Используются два значения
(остальные зарезервированы): 000b=20MHz, 001b=33MHz.

Биты 27-31 (Reserved) – не используются.

Отметим, что предварительное заполнение восьми байтов регистра Opcode Menu
Configuration Register и двух байтов регистра Prefix Opcode Configuration
Register выполняет BIOS при старте платформы. Поэтому, при формировании битовых
полей, выбирающих код команды и код префикса, программа должна просканировать
указанные регистры и найти, под каким номером в них находятся коды требуемых
операций. Варианты заполнения могут быть разными, даже среди материнских плат
одной модели, использующих различные версии BIOS. Некоторые утилиты перезаписи
Flash изменяют содержимое указанных регистров.

Детальное описание всех регистров и команд контроллера SPI приводится в [3].
Описание команд микросхемы SPI Flash приводится в 7. Информация, изложенная
выше, также проиллюстрирована ассемблерными примерами, прилагаемыми к статье.

Механизмы доступа к Flash ROM и защита записи

В общем случае, для инициирования операций стирания или перезаписи микросхемы
BIOS, программа должна выполнить четыре действия:

  1. Настроить регистры "южного моста" чипсета, управляющие размещением
    микросхемы BIOS в адресном пространстве для обеспечения доступа к полному
    объему микросхемы.
  2. Выключить режим защиты записи BIOS, реализуемый средствами "южного моста"
    чипсета.
  3. Выключить режим защиты записи BIOS, реализуемый средствами микросхемы
    Flash ROM.
  4. Передать команду стирания или записи микросхеме Flash ROM.

Рассмотрим подробнее эти процедуры, механизмы защиты, препятствующие их
несанкционированному выполнению и, конечно, уязвимости этих механизмов.

Как было сказано выше, при выполнении операций записи и стирания, программный
доступ к микросхеме SPI Flash осуществляется посредством регистров контроллера
SPI, без использования диапазона адресов, в котором доступен образ микросхемы
BIOS. Поэтому перенастройка чипсета для доступа к диапазону FFF00000h-FFFFFFFFh
в данном примере не потребуется.

Практика показывает, что данный механизм "защиты от снятия защиты" обычно не
активируется разработчиками BIOS. Во всех материнских платах, исследованных
автором, бит BLE=0, поэтому для снятия защиты записи достаточно установить бит
BIOSWE=1, эта операция не будет перехвачена.

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

Источники информации

1) Intel Low Pin Count (LPC) Interface Specification. Revision 1.1. Document
Number 251289-001.
2) Intel P965 Express Chipset Family Datasheet – For the Intel 82P965 Memory
Controller Hub (MCH). Document Number: 313053-001.
3) Intel I/O Controller Hub 8 (ICH8) Family Datasheet – For the Intel 82801HB
ICH8 and 82801HR ICH8R I/O Controller Hubs. Document Number: 313056-001.

4) 1 Mbit SPI Serial Flash SST25VF010 Data Sheet. Document Number:
S71233-01-000.
5) 8 Mbit SPI Serial Flash SST25VF080B Data Sheet. Document Number:
S71296-01-000.

6) W25X10A, W25X20A, W25X40A, W25X80A 1M-bit, 2M-bit, 4M-bit and 8M-bit
Serial Flash Memory with 4KB sectors and dual output SPI Data Sheet.

7) MX25L802 8M-bit [8Mx1] CMOS Serial Flash EEPROM Data Sheet.

8) SPI EEPROM Interface Specification. Part Number 223-0017-004 Revision H.

Присутствующие на «материнках» контакты можно разделить на несколько групп: разъёмы питания, подключения внешних карт, периферийных устройств, и кулеров, а также контакты передней панели. Рассмотрим их по порядку.

Питание

Периферия и внешние устройства

К разъёмам для периферии и внешних устройств относятся контакты для жесткого диска, порты для внешних карт (видео, аудио и сетевой), входы типов LPT и COM, а также USB и PS/2.

Распиновка каждого из указанных портов само собой отличается. Вот так выглядит распиновка IDE.

Распиновка IDE на материнской плате

Кроме данных вариантов, в некоторых случаях для подключения периферии может использоваться вход типа SCSI, однако на домашних компьютерах это большая редкость. К тому же большинство современных приводов оптических и магнитных дисков также используют данные типы разъёмов. О том, как правильно их подключать, мы поговорим в другой раз.

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

Клавиатуры и мыши подключаются к портам типа PS/2. Этот стандарт также считается устаревшим, и массово заменяется на более актуальный USB, однако ПС/2 предоставляет больше возможностей для подключения управляющих устройств без участия операционной системы, потому еще в ходу. Схема контактов данного порта выглядит так.

Обратите внимание, что входы для клавиатуры и мыши строго разграничены!

Внимание! Несмотря на внешнюю схожесть, порты USB и FireWire несовместимы!

Передняя панель
Особняком стоят контакты для подключения передней панели: вывода на лицевую часть системного блока некоторых портов (например, линейного выхода или 3,5 mini-jack). Процедура подключения и распиновка контактов уже рассмотрена на нашем сайте.

Заключение

Мы с вами рассмотрели распиновку важнейших контактов на материнской плате. Подводя итоги, отметим, что изложенной в статье информации достаточно для рядового пользователя.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

SPI-on-commando

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

Немного предыстории:

Материнская плата ASUS Commando, без, модного нынче, Dual BIOS. Только Boot Block – небольшая область BIOS, не затрагиваемая записью, которая позволяет, в случае необходимости, инициализировать минимальный набор компонентов, необходимых для включения компьютера, произвести поиск BIOS на съемных носителях. Обычно подходят Floppy или флешка с файлом прошивки, переименованным в AMIBOOT.ROM (зависит от BIOS и материнской платы, точнее написано в инструкции к плате), либо CD с драйверами из комплекта поставки. Обнаружив подходящий файл, boot block запишет его в BIOS и, если все прошло правильно, компьютер после перезагрузки оживет. Неплохая фишка, несколько раз выручала, но в данном случае она не сработала, видимо, оказался поврежден и boot block.

Еще немного поиска, и вот оно, решение – статья чешского комрада (на чешском) о предельно простом программаторе и софтине к нему для прошивки микросхем флеш памяти с SPI интерфейсом! Ничего сложного, минимум компонентов.

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

Сборка устройства

Для сборки нам понадобится:

  • 1 разъем DB25P, можно отрезать от ненужного шнура от принтера
  • 4 шт. резисторы по 150 Ом
  • 1 любой электролитический конденсатор емкостью 100 мкФ или более и рабочим напряжением на 6.3 В или больше (нужен при запитке от БП)
  • Кусок плоского шлейфа с IDC разъемом на 10 контактов (он идеален при наличии SPI разъема на плате)
  • Штекер molex (как на жестких дисках ATA), либо гнездо для батарейки CR2032

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

Схема с сайта автора, при подключении непосредственно к чипу (для флеш-памяти с рабочим напряжением 3 вольта):

Прошивка BIOS через SPI: Схема spipgm

Программатор SPIPGM может использоваться и для микросхем флеш-памяти с рабочим напряжением 1.8 Вольт. Автор применяет для этого дополнительный модуль (своего рода переходник), который подключается к основному модулю и состоит из дополнительных резисторов для гашения напряжения и каскада усиления на транзисторах BC547 для выходного сигнала чипа (схемы на сайты автора по ссылке выше). Ниже приводится адаптация схемы подключения, сразу предназначенная для работы с чипами на 1.8В. Для получения напряжения питания в 1.8 Вольта применен делитель напряжения (на схеме серые резисторы, желательно 1/4 Ватт), делитель при желании может быть пересчитан на другие номиналы (я указываю варианты 10 и 12 Ом, или 100 и 120 Ом), а еще лучше заменен подходящим DC-DC преобразователем (например, TLV70018). Диоды любые, нужны они для минимизации ошибок и, в принципе, можно обойтись без них.

Схема spipgm для чипов памяти на 1.8В

Мы же будем подключать программатор не к чипу, а к разъему SPI_J1.

Если разъем 7 контактный, то подключается к нему следующим образом:

Схема подключения SPI к 7-ми контактному разъему

1. -> питание +3.3v 2. -> земля от питания и вывод 18 на LPT 3. -> резистор -> LPT 7 4. -> резистор -> LPT 8 5. -> резистор -> LPT 10 6. -> резистор -> LPT 9

Так же, на некоторых материнских платах бывают 9 контактные разъемы, там схема подключения немного отличается:

Схема подключения SPI к 9-ти контактному разъему

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

Расположение элементов программатора внутри DB25P

При питании от батарейки конденсатор можно исключить. Лично я брал с +5 шины блока питания ( красный провод), подключив к нему через разъем molex и погасив напряжение диодами до

3.3v (двух-трех диодов будет достаточно).

Схема подключения диодов

Блок питания все же надежней батарейки. Имея отдельный БП можно запитать напрямую от шины +3.3 ( оранжевый провод ATX разъема). Чтобы запустить блок питания без компьютера нужно замкнуть зеленый и черный провода.

Девайс в сборе:

Собранный SPI программатор

Программа SPIPGM

Теперь можно переходить к программному обеспечению.

Проект, кстати, развивается и по сей день, автор частенько выкладывает обновленные версии программы с информацией о новых чипах, доработками и исправлениями.

В архиве следующие файлы:

SPIPGMW.EXE – исполняемый файл для Win9x/NT/2k/XP/Vista/7 (только х32, поддержки х64 нет) IOPERM.DLL – библиотека для низкоуровневого доступа в Win9x/NT/2k/XP/Vista/7(без UAC)

Надежней всего прошивать из DOS, загрузившись с Hiren или любого другого подходящего загрузочного CD/Flash. Но можно и из Windows.

Синтаксис и основные команды:

Синтаксис: spipgmw /<команда> [имя файла] [адрес] [размер] [/l=адрес] [/d=задержка]

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

Прошивка BIOS через SPI:

spipgmw /i – идентификация чипа. Для проверки все ли правильно подключено, программа должна определить тип установленной памяти. Если этого не происходит, проверьте правильность подключения и поддержку чипа программой.

spipgmw /d BIOS.bak – если нужно сохранить резервную копию имеющегося BIOS.

spipgmw /u – разрешение записи.

spipgmw /e – стирание.

…ждем процесс записи…

spipgmw /v FILE.rom – сравниваем записанные данные с файлом прошивки. Либо можно сделать дамп spipgmw /d test.rom и сравнить его содержимое с оригинальным файлом прошивки в каком-нибудь Hex-редакторе.

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

Восстанавливаем BIOS на программаторе после неудачного обновления

Любительский

Аватар пользователя

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

Существует 3 основных способа восстановления запоротого BIOS

1. Восстановление программными средствами самой мат.платы.

Современные модели материнок (у Гигабайта последние 3 года на мейнстримовых и топовых точно) на плате распаяно сразу 2 микросхемы BIOS, в случае неудачного обновления BIOS загрузится с резервной микрухи, а позже зальет копию в поврежденный. У некоторых моделей нет возможность восстановления поврежденного BIOS и в случае смерти первого просто начинает работать второй за место него, соответственно после смерти второго мать уже не запустится

Еще есть возможность восстановления из bootblock'а, но работает если BIOS умер не окончательно и бутблок все еще жив и попытке запустить систему он обнаруживает кривую сумму биоса. В таком случае он пытается считать BIOS с HDD, или флоппа. Некоторые платы (у Гигабатов такая фича встречается) пишут дубль BIOS на HDD, который к ним подключают самым первым, соответственно для восстановления этот диск можно подключить. Для восстановления с флоппа достаточно записать прошивку с правильным названием на дискету, она будет обнаружена и восстановлена. Жизнеспособность бутблока можно определить по сигналам (световым и звуковым) с подключенного флоповода, если флоп подает признаки жизни, значит мы легко отделались

2. Восстановление методом горячей замены иди hotswap. Работает только на мамках, где BIOS не впаян, а сидит в сокете и его можно подцепить. Т.е. надо найти другую рабочую плату с подобным BIOS, т.е. чтобы кровать была такая же и желательно чипы были общего или одного из аналогичных семейств, тогда процедура точно прокатит. На плате с живым BIOS заранее делаются удобства для вырывания чипа с кровати - нитки, изолированная проволока и т.п. если нет специальных щипцов, плата включается заходим в DOS (или фирмовую утилиту платы) для обновления BIOS, вырываем BIOS, вставляем мертвый и зашиваем BIOS, если появляются предупреждения о несовпадении контрольных сумм, то их игнорим, т.к. бояться нечего - родной BIOS лежит отдельно. Затем система отключается, в каждую плату возвращаем свою микросхему и проверяем работоспособность. Данный метод разве что не прокатит, если микросхемы впаяны в платы, горячая замена не получится, можно конечно рискнуть и отпаять BIOS на работающей плате - но это очень рискованно - можно остаться с 2мя уже окончательно мертвыми платами, причем дохлая уже будет электроника, а не программная часть

3. Восстановление на программаторе. Этот способ универсальный, т.е. прошить можно любую микросхему в любом типе корпуса. Если микруха припаяна к плате, то снимаем ее и напаиваем на плату программатора или используем специальные панельки. Безусловно на одном программаторе можно прошить ограниченное число микросхем, но это обычно касается простых программаторов, более "взрослые" являются действительно универсальными, но стоят они уже не 5 копеек и приобретаются в основном для потокового ремонта, а не домашнего использования с целью восстановления пары плат. Тем не менее данный способ универсальный, он полностью заменяет и расширяет первые 2 способа, а когда они не работают, то это единственный выход. Способ горячей замены это даже искусственный метод, который был обнаружен опытным путем благодаря унификации производителями элементов плат. Об одном из простых "домашних" программаторах я и хочу рассказать.

Суть процесса

На мою удачу микросхемой BIOS была MX25L4005APC-12G - 4 мегабитная микруха в DIP корпусе. Т.е. ее даже отпаивать не пришлось. BIOS версии 1.0 лежал на сайте производителя отдельным файлом как раз на 512kb (4Mbit/8=512Kb), т.е. задача до банальности проста - сваять программатор, поставить на него микруху и зашить! К чему я и решил приступить


Данная микросхема SPI типа, что позволяет прошить ее элементарным программатором через LPT порт. В нете был найден соответствующий программатор сразу с ПО для его использования, называется он SPIpgm, т.е. SPI Programmator, скачать можно здесь. Элементарнейшая схема из 4х резисторов, конденсатора и сокета на 8 пин по желанию. Ограничением его является собственно ограниченный список поддерживаемых микросхем - они должны быть 8pin и быть SPI типа

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

AMIC

A25L05PU/PT (64kB), A25L10PU/PT (128kB), A25L20PU/PT (256kB), A25L40PU/PT (512kB), A25L80PU/PT (1MB), A25L16PU/PT (2MB), A25L32PU/PT (4MB), A25L64PU/PT (8MB), A25L512 (64kB), A25L010 (128kB), A25L020 (256kB), A25L040 (512kB), A25L080 (1MB)

Atmel

AT25F512B (64kB), AT25DF021 (256kB), AT26DF041 (512kB), AT25DF041A (512kB), AT26F004 (512kB), AT26DF081 (1MB), AT25/26DF081A (1MB), AT25DF081 (1MB), AT26DF161 (1MB), AT26DF161A (2MB), AT25DF161 (2MB), AT25DQ161 (2MB), AT25/26DF321 (4MB), AT25DF321A (4MB), AT25DQ321A (4MB), AT25DF641(A) (8MB)

EON

EN25B10 (128kB), EN25B20 (256kB), EN25B40(T) (512kB), EN25B80 (1MB), EN25B16 (2MB), EN25P32 (4MB), EN25P64 (8MB), EN25P128 (16MB), EN25F10 (128kB), EN25F20 (256kB), EN25F40 (512kB), EN25F80 (1MB), EN25F16 (2MB), EN25F32 (4MB), EN25F64 (8MB), EN25F128 (16MB)

ESMT

F25L004A (512kB), F25L008A/08PA (1MB), F25L016A/16PA (2MB), F25L32PA (4MB), F25L64PA (8MB), F25S04PA (512kB), F25L08PA (1MB), F25L016QA (2MB), F25L32QA (4MB), F25L64QA (8MB)

GigaDevice

GD25Q512 (64kB), GD25Q10 (128kB), GD25Q20 (256kB), GD25Q40 (512kB), GD25Q80 (1MB), GD25Q16 (2MB), GD25Q32 (4MB), GD25Q64 (8MB)

Intel

QB25F016S33B8 (2MB), QB25F032S33B8 (4MB), QB25F064S33B8 (8MB)

Macronix

MX25L512E (64kB), MX25L1005/1006E (128kB), MX25L2005/2006E (256kB), MX25L4005/4006E (512kB), MX25L8005/8006E (1MB), MX25L1605/1606E (2MB), MX25L3205/3206E (4MB), MX25L6405/6406E (8MB), MX25L12835E/12836E (16MB), MX25L25635E/25735E/25835E (32MB)

PMC

Pm25LV512(A) (64kB), Pm25LV010(AB) (128kB), Pm25LV020 (256kB), Pm25LV040 (512kB), Pm25LV080B (1MB), Pm25LV016B (2MB), Pm25LV032B (4MB), Pm25LV064B (8MB)

Spansion

S25FL004A (512kB), S25FL008A (1MB), S25FL016A (2MB), S25FL032A (4MB), S25FL064A (8MB), S25FL128P/129P (16MB), S25FL256S (32MB), S25FL512S (64MB), S25FL01GS (128MB)

ST Microelectronic/Numonyx

M25P05 (64kB), M25P10 (128kB), M25P10AV (128kB), M25P20 (256kB), M25P40 (512kB), M25P80 (1MB), M25P16 (2MB), M25P32 (4MB), M25P64 (8MB), M25P128 (16MB), M45PE10 (128kB), M45PE20 (256kB), M45PE40 (512kB), M45PE80 (1MB), M45PE16 (2MB), M25PX80 (1MB), M25PX16 (2MB), M25PX32 (4MB), M25PX64 (8MB), N25Q032A13E (4MB), N25Q032A11E (4MB), N25Q064A13E (8MB), N25Q064A11E (8MB), N25Q128A13E (16MB), N25Q128A11E (16MB), N25Q256A13E (32MB), N25Q256A11E (32MB), N25Q512A13G (64MB), N25Q512A11G (64MB), N25Q00AA13GB (128MB)

SST

Winbond

W25Q10B (128kB), W25Q20BV (256kB), W25Q40BV (512kB), W25Q80BV (1MB), W25Q16BV (2MB), W25Q32BV (4MB), W25Q64BV (8MB), W25Q128BV (16MB), W25Q256FV (32MB), W25X10 (128kB), W25X20 (256kB), W25X40 (512kB), W25X80 (1MB), W25X16 (2MB), W25X32 (4MB), W25X64 (8MB)

Материнские платы, которые имеют на себе BIOS в виде вышеназванных микросхем я не буду указывать по ясным причинам. Намного проще глянуть модель микрухи и посмотреть в этот список

Аппаратная часть

В моем случае нужная мне память оказалась в этом списке и я приступил к изготовлению прогера. Устройство очень простое (по схеме видно) и многие не заморачиваются в таких случаях с травлением платы, а собирают навесным монтажом "на коленке", т.к. программатор понадобится от силы пару раз. Я тоже не стал заморачиваться и сделал навесным. В итоге у меня не заработало) Хотя вроде бы ни где не ошибся, возможно капризничало из-за длины проводов или их сечения

Во второй раз уже решил "чтобы наверняка" запилить себе нормально, т.е. развел плату в SprintLayot 5.1 и сделал по технологии ЛУТ. Лудил сплавом Розэ. Последнее время мне нравиться его использовать, т.к. получается довольно быстро, просто и лужение происходит равномерным тонким слоем - высверленные отверстия не закрываются. Еще давно в посудном магазине по уценке купил за 30р эмалированную миску - удачное приобретение для таких дел) Наливаю в нее на половину воды, довожу до кипения, добавляю 1-2 ложки лимонной кислоты (работает как флюс и повышает температуру кипения, затем опускаю плату и 1-2 кусочка сплава. "Управляю" процессом 2мя палочками от мороженного, обёрнутыми с одной из сторон в ткань для растирания сплава по плате и удержания платы. После окончания процесса остатки сплава можно вынуть для последующего использования. Стоит сплав копейки (около 150р вроде), а хватает его при подобных затратах на годы). В общем это было такое лирическое отступление, теперь непосредственно скрин разведенной платы. Саму разводку платы в формате *.lay можно скачать здесь


Плату зеркалить не нужно, она уже "правильно" нарисована. Я когда делаю разводку, то представлю текстолит как бы прозрачным - так намного проще, по крайней мере мне

Необходимые ингредиенты:

- Резисторы 150 ом 0,125Вт x 4шт

- Емкостный конденсатор 1mF 16-63v x 1шт

- Сокет 8pin 7,62мм x 1шт или специальные зажимные панели под SMD чипы, в общем в зависимости от пациента

- Немного проводов, я использовал провода примерно 24AWG длинной 12см

- Макетная плата или текстолит и все необходимые принадлежности для его вытравки и лужения

- Штырьковые разъемы x 5шт

1. Мало контактов, всего 5шт, для того, чтобы тратить 20р на этот разъем и ставить его на такую крохотную плату. Намного проще вывести эти 5 контактов и воткнуть их в сам разъем

2. На современных платах уже не ставят полноценный LPT разъем, производители выводят штырьки на плате, к которому можно подключить внешний/внутренний адаптер и получить тем самым DM25-F, т.е. LPT. Таким образом сделав полноценный программатор на борту с DB25-M нам придется делать соответствующий разъем для платы или покупать адаптер отдельно, как советуют производители плат. У меня конечно есть такой адаптер ↓↓↓ , я его не покупал, делал сам из шлейфа под флопп и разъема DB25-F снятого со старого кабеля от принтера. Но тем не менее я не стал городить на программатор данный разъем просто потому что у меня его не было под рукой и еще по причинам п.1


Самодельный адаптер LPT для современных плат. IDE разъем флоппа отлично подходит под пинауты плат, вставил кусок зубочистки как ограничитель, чтобы наверняка не промахнуться

В итоге у нас должно получиться примерно следующее устройство:




Для питания программатора необходимо постоянное питание 3.3v, а так же внешняя масса. Я использую для этих целей внешний полноценный БП Gembird 400Вт. Он у меня вроде лабораторного БП, живую конфигурацию ему я бы не доверил в силу его качества) Достался он мне от одного хорошего человека - данный БП видимо не имеет достаточно реальной мощности и прежнему владельцу его не хватало, система работала очень не стабильно. Мне же этого бедняги для подобный вещей вполне достаточно)

У БП на разъеме 24пин замкнут зеленый провод на землю, что дает возможность его запускать в холостой ход, из этого же разъема я и беру 3.3v (оранжевый провод) и массу (черный) для программатора

Можно еще как вариант использовать батарейку BIOS она как раз на 3.3v, а землю (массу) взять с самого корпуса работающего БП

Еще один вариант - поставить какой-нибудь стабилизатор на 3.3v, например LM1117, на крайние контакты подаем 5v с USB и массу (точную распиновку не помню, данный стаб я использовал в другой своей статье про коннектор привода для X'360), из центрального у нас будет 3.3v. Nаким способом получаем питание с самого СБ, на котором прошиваем - можно подключить разъем USB или вывести 2 штырька для подключения опять же к контактам USB На самой плате предварительно посмотрев распиновку

Программная часть

После изготовления устройства можно приступить к тому, ради чего все это затевалось - к прошивке

Текущая версия SPIpgm 2.1 поддерживает все семейство настольных ОС Windows, linux и еще DOS. Я очень сомневался, что на Win7/Vista все заработает, уж очень прихотливы LPT программаторы к этой ОСи. тем не менее все совпало с заявлением разработчика. не забываем, что UAC необходимо отключить (у меня отключен и так "по умолчанию"). Выключаем полностью ПК, подключаем программатор, включаем и используем командную строку. С помощью оператора cd переходим в нужную директорию, где находится программатор. Т.к. мы находимся в среде Windows, то использовать надо spipgmw, spipgm используется в DOS и Win9x, однако spipgmw можно тоже использовать в Win9x. По скрину ниже видно, что проблем нет, программатор и софт прекрасно работают в современной среде, что встречается крайне редко в подобных задачах


Однако отмечу, что я шил в DOS, мне так привычнее) Чем проще ОС, тем она надежнее. Но я не агитирую переходить на нее полностью) Просто для таких вот делишек использовать DOS мне как-то интеерснее. По опыту работы с другими самопальными программаторами могу сказать, что в WinXP этот программатор без сомнения будет работать

Если же программатор не сможет опознать микросхему (смотрим скрин ниже), то она либо мертва, либо программатор собран не верно или не поступает питание, нет массы. Более вероятен второй вариант


Вот что ответит командная строка, если программатор собран не верно. Чип не опознается, т.е. неудача

Мутим DOS или "я не ищу легких путей"

DOS запилить себе не так сложно. Можно банально сделать загрузочную дискету средствами самой ОС Windows через форматирование дискеты и положить туда папку с программатором и новой прошивкой, загрузившись после BIOS (на рабочем ПК) в консоль используем программатор

Второй вариант - сделать DOS на диске или воспользоваться уже готовым образом DOS 6.22. Вот только сам программатор надо будет записать на отдельную флешку, т.к. если мы будем снимать дамп, то на диск он записаться не сможет, хотя если чтение не требуется, можно закатать прямо на диск с образом DOS

Третий вариант - создать загрузочную флешку, это самый удобный и современный на сегодня вариант. Хороший способ описан, например, здесь

Я еще могу порекомендовать воспользоваться проектом MultiBoot - мультизагрузочная флешка. В конце мы получаем очень функциональный инструмент на все случаи жизни, мощный такой реаниматор. DOS там тоже есть с поддержкой NTFS, длинных имен и прочего. Инструкция по созданию там присутствует, все очень удобно и легально

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


В DOS все опозналось тоже без проблем

Основные программы, которые нам понадобятся:

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

spipgm /d dump.rom - чтение содержимого микросхемы в файл dump.rom

spipgm /e - полное стирание содержимого микросхемы, рекомендуется сделать перед записью

spipgm /p new.rom - прошивка, запись в микросхему данных из файла new.rom - целого и правильного файла прошивки для конкретной материнский платы, можно взять с сайта производителя или снять с другой микросхемы аналогичной платы

spipgm /u - анлок, т.е. разблокировка микросхемы для записи, если такая защита имеется

Итого для совершения задуманного с целью восстановления BIOS нам необходимо выполнить последовательность команд:

1. spipgm /i - идентифицируемся

2. spipgm /u - разблокируемся

3. spipgm /e - стираем микросхему с кривым содержимым

4. spipgm /p new.rom - зашиваем правильную прошивку

! Обращаю внимание, что если мы все делаем в среде Windows, то вместо spipgm пользуемся командой spipgmw

После этого вырубаем ПК через кнопку выключения и отключаем программатор

Внимание! Все манипуляции с портом LPT необходимо производить только с отключенным питанием платы. Т.е. перед тем как подключить или отключить что-нибудь от LPT необходимо полностью выключить БП, поставить переключатель БП в положение Off (или вынуть кабель) подождать 10сек (разрядятся конденсаторы) и только потом что-то подключать или отключать. Если не следовать этому простому правилу, то велик шанс остаться без LPT, он очень капризен к подобным вещам в силу своей незащищенности

Послесловие

Так же обращаю внимание, что данный метод подходит и для восстановления BIOS не только на мат.платах, но и на видеокартах, как ATI/AMD так и nVidia. Многие микросхемы, что указаны выше в списке совместимости устанавливаются так же и на видеокарты, вот только они всегда припаяны к видеокарте, поэтому для восстановления видях понадобится навык пайки SMD. Здесь обычно 2 варианта - отпайка микрухи и установка ее на заранее вытравленную площадку программатора или подпайка проводами на саму плату видеоадаптера

Надеюсь мой опыт поможет кому-нибудь сэкономить деньги и железки, ведь обращаться за подобными услугами в СЦ будет не совсем разумно - подобная плата на вторичном рынке сопостовима как раз со стоимостью ремонта, и поэтому надо либо восстанавливать самому, либо идти в магазин за новой. Если у меня появится возможность поковырять программатор и BIOS'ы с чипами 20 пин( в квадратных кроватях находятся), то материал будет дополнен. Благодарю за внимание

Читайте также: