FLASH & nForce2

для раздела Лаборатория
Приобрел я nForce2 от Epox, очень понравилась устойчивостью к неправильным и завышенным настройкам, захотел считать текущую версию BIOS 'на всякий случай' и тут началось... Все делалось штатной утилитой awdflash. Считать удалось беспроблемно, а вот после reboot они начались. Я получил неожиданное сообщение о нарушении контрольной суммы и предложение вставить дискету. Наверно, не стоит приводить слова, когда я менял 3 дисковода и коробку дискет, пока окончательно не убедился, что BIOS не хочет читать дискеты.

Ну хорошо, есть же программатор, 'не проблема'. Увы, ничего не выйдет. В nForce2 применяются т.н. LPC (Low Pin Count) FLASH, у них используется синхронная шина с совмещением адреса и данных. До этого применяли микросхемы памяти со статическим доступом - отдельными шинами адреса и данных. Впрочем, отличился не только nForce - чаша сия не минула и Intel, для него используется похожая система с экономией выводов микросхем FWH (Firmware HUB). Если поставить такую микросхему в программатор, который их не понимает, то, в лучшем случае, она не сгорит. Прочитать, а уж тем более переписать, ее точно не удастся. Одноразовая mainboard за 100$, это не чересчур?

Вообще говоря, поддержка LPC FLASH реализована еще в самом первом chipset'е под К7 - Irongate, но LPC были слабо распространены. Т.е., сами фирмы разработчики mainboard могут принимать решение о типе используемого FLASH, ничего не мешает поставить обычную FLASH и в nForce2. Сделал выборочную проверку по другим фирмам для nForce2 - унылое однообразие, LPC.

В сложившейся ситуации надо обращаться в гарантийный ремонт, а это столько проблем и нервов - увидев сообщение о неправильной контрольной сумме любой ремонтник заявит о неправильной перепрошивке BIOS, т.е. конец гарантии. Обидно, но я ведь и не пытался ничего прошивать, это ошибка самой программы или, иначе говоря, самой EPOX.

За пару дней был сделан программатор на LPT и сама программа.

Считал BIOS из FLASH и сравнил с оригиналом, серьезное нарушение только в одном байте - было 82h, а должно 87h по адресу 25555h. Для тех, кто знает протокол FLASH, этим будет все сказано. Впрочем, большинство протокола не знает и я попробую восстановить случившееся.

В FLASH ничего нельзя записать простой командой записи по произвольному адресу, впрочем, как и выполнить другие команды деструктивного свойства - стирание, например. Для выдачи такой команды, а запись байта тоже команда, нужно выдать unlock последовательность.

Она состоит из набора записей некоторых чисел по некоторым адресам. Для приведенной FLASH unlock последовательность будет заключаться в записи 0AAh по адресу 5555h и 55h по адресу 2AAAh. Чтение типа FLASH также является командой и ей предшествует все та же unlock последовательность. А вот на команду чтения идентификатора сделана специальная ссылка - после нее обязательно нужно сделать сброс.

Программа awdflash при старте считывала тип FLASH и, естественно, не сделала сброс. Т.о., следующая же ее команда к FLASH должна была начинаться с unlock последовательности (а там 0AAh по адресу 5555h) и этот байт был ЗАПИСАН в FLASH. Если вернуться к приведенному ранее сбою в моем BIOS, то там была ошибка в адресе 25555h и число 82h вместо 87h.





У FLASH, как и у ее первоисточника EPROM, при перезаписи может записываться единичные биты в 0. (команда стирание устанавливает во всех битах единицы) Т.е. были сброшены нулевой и второй биты, а это как раз и произойдет при попытке записи числа 0AAh(битовое поле 10101010) на место 87h(битовое поле 10000111). Мне не повезло, если б в оригинальном BIOS там был нуль или 82h - я бы и не заметил. Очень грустно.

Telegram-канал @overclockers_news - это удобный способ следить за новыми материалами на сайте. С картинками, расширенными описаниями и без рекламы.
Страницы материала
Страница 1 из 0
Оценитe материал
рейтинг: 4.3 из 5
голосов: 16

Теги

Популярные новости

Сейчас обсуждают