Прошивка через lpt 25 серия инструкция. Архитектура микросхемы SPI Flash ROM. Интерфейс SPI: историческая справка

Перепрошиваем spi-flash память, если слетела прошивка

Одной из распространённых неисправностей современных ЖК-телевизоров является "слёт" прошивки.

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

Перечислю основные признаки "слёта" прошивки:

    Телевизор не включается, хотя индикация дежурного режима имеется. Индикатор светится. Отмечу, что телевизор перестаёт включаться вовсе . Если он, раз от разу реагирует на команды и включается, то, скорее всего неисправность связана с блоком питания;

    ЖК-телевизор не переходит в рабочий режим ни по команде с кнопочной панели, ни по команде с пульта. В некоторых случаях реакция на нажатие кнопки “Power” имеется - индикатор меняет цвет, но включение телевизора так и не происходит.

Что необходимо для прошивки микросхемы памяти?

USB-программатор микросхем SPI-Flash 25 серии.

В качестве программатора для прошивки микросхем памяти я уже давно использую USB-программатор Postal 3. Он же Postal AVR. Покупал набор для самостоятельной сборки. Вместе с рассыпухой, которой нет в наборе, программатор обошёлся мне в сумму около 500 руб. Покупал его специально для прошивки микросхем SPI-Flash от LCD-телевизоров.

Сейчас набор стоит 550 руб., но на плату запаяна вся SMD-мелочь. Ссылка на сайт , где можно заказать Postal 3 (USB). Там же найдёте инструкцию по установке и настройке софта.

Вот так программатор выглядит в сборе.

Разумеется, сейчас в продаже можно найти и другие программаторы (например, CH341A).

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

Если руки прямые и есть время, то можно собрать программатор самому.

Для работы с USB-программатором Postal 3 используется программа с аналогичным названием (Postal 2/3).

Актуальную информацию по программатору Postal 3 (рисунок печатки, прошивка для микроконтроллера, софт, вопросы/ответы и пр.) можно найти в профильных темах на форумах Монитора и Ремонта бытовой техники и электроники .

Также можете скачать подробный мануал по прошивке микросхем памяти разных серий от Фёдора (fsem) по ссылке (формат PDF).

Что такое прошивка и где её взять?

Прошивка представляет собой файл в формате .bin , который иногда ещё называют дампом памяти или просто дампом. Она является микропрограммой, которая управляет работой ЖК-телевизора.

Где взять рабочую прошивку?

Самый простой способ найти годную прошивку - это вбить в строку поиска Гугла фразу типа: "модель вашего аппарата прошивка (скачать)". Например, "mystery mtv-3223lt2 прошивка" или "mystery mtv-3223lt2 скачать прошивку". Но такой способ выручает не всегда.

Рабочие прошивки можно найти в интернете на специализированных форумах и сайтах, где радиомеханики и сервис-инженеры обмениваются ими. Наиболее популярные Интернет-ресурсы такого толка, это:

Как найти то, что нужно в огромном океане информации - это отдельная тема. Но, чтобы ваш поиск был удачным, дам ещё несколько советов.

Найти нужную прошивку можно по номеру материнской платы (main board"а или майна). Он же номер шасси. Вбиваем в поиск его и слово прошивка. Иногда достаточно просто указать номер шасси и изучить первую страницу выдачи поисковика.

Номер шасси обычно указывается на самой печатной плате. Далее на фото показана основная плата телевизора Rolsen RL-28D1307. Как видим, на ней указан номер шасси - TP.VST59S.P89.

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

Это перечень с маркировкой основных микросхем или блоков: процессора (он же скалер), flash-памяти, ЖК-панели (LCD panel), платы T-CON, модуля тюнера и пр. По этому списку можно точно определить, что прошивка подходит именно под ваш аппарат. Это бывает необходимо, когда одна и та же модель телевизора имеет разные версии, в которых могут быть установлены другие компоненты и блоки.

Особое внимание нужно уделять номеру ЖК-панели (LCD panel). Обычно она указывается на её корпусе. Если в списке всё совпадает, но номер ЖК-панели другой, то, возможно, с данной прошивкой ваш телевизор будет работать некорректно.

В довольно редких случаях найти прошивку на нужный аппарат не удаётся. Например, мне не удалось найти прошивку для ЖК-телевизора Hyundai H-LED19V15. Но, когда я стал искать её по номеру шасси (main board’а), то обнаружил, что точно такой же майн установлен в телевизоре Liberton LED 1910 ABHDR. Взял прошивку от него.

Как оказалось, эти две модели телевизоров полные клоны. Разница лишь в бренде. Было забавно, когда при включении Hyundai H-LED19V15 на его экране появлялась заставка с надписью Liberton.

Подбор spi-flash памяти для замены.

Флэш-память (SPI-Flash память) применяется в современных ЖК-телевизорах, автомобильных MP3-ресиверах, видеорегистраторах всех мастей, материнских платах персональных компьютеров, телевизионных приставках и даже в говорящих игрушках и фоторамках.

Как правило, в них используются микросхемы SPI-Flash памяти 25 серии (MX25L1633E, MX25L1605A, MX25Q32B-104HIP, W25Q32FVSSIG, G25Q16-15G, GD25Q32, HG25Q32BVSIG и т.п.). Питание у данной серии микросхем 3-ёх вольтовое (2,7...3,6V), в отличие от 24 серии у которой номинальное напряжение питания составляет 5 вольт, да и тип памяти другой.

Зачастую на корпусе микросхемы указывается неполная маркировка что-то вроде 25Q64BSIG, но обязательно присутствует надпись 25Qxx, 25Lxx или что в этом духе. Вместо xx - кодовая маркировка объёма памяти микросхемы.

Микросхемы имеют корпус SOIC-8 под планарный монтаж.

Также могут применяться и другие типы корпусов, например, SOIC-16 (300 mil).

Не исключено, что на практике встретите не только микросхемы spi-flash с выводами (pin), но и в корпусах под BGA-монтаж (на шарах) или с выводами в виде контакта (pad), например, WSON-8 (DFN-8). К счастью, такие в ЖК-телевизорах встречаются довольно редко. Но это пока...

Вместо родной микросхемы памяти лучше использовать новую или заведомо исправную. Родная может быть с браком или дефектом. Даже если мы её удачно перешьём рабочей прошивкой, то не факт, что микросхема будет корректно работать в будущем.

Родную микросхему SPI-Flash лучше не выкидывать или считать и сохранить с неё родную, заводскую прошивку. Это страховка на случай, если новая прошивка не подойдёт.

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

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

Наиболее часто в ЖК-телевизорах можно обнаружить микросхемы 25Q32 на 32 Мбит (4 Мбайт или 4194304 байт) и 25Q64 на 64 Мбит (8 Мбайт или 8388608 байт).

Почему 8388608 байт, а не 8000000? Кому не понятна эта путаница с килобайтами и мегабайтами, и, почему надо умножать не на 1000, а на 1024, советую погуглить "Кибибайт". Возможно, развеете для себя очередной миф, наподобие того, что ток течёт не от плюса "+" к минусу "-", а наоборот.

Итак, с теорией более-менее разобрались, теперь займёмся практикой.

Ещё раз напомню о важном. При ремонте ЖК-телевизора первым делом стоит убедиться в том, что причина его некорректной работы кроется именно в "слетевшей" прошивке. Аналогичным образом проявляются неисправности блока питания (дежурного или основного).

Перепрошивать память будем на примере ЖК-телевизора Mystery MTV-3223LT2. На фото он уже исправно работает.

Неисправность проявлялась следующим образом. Телевизор не включался, но при нажатии кнопки "Power" на пульте ДУ или кнопочной панели светодиодный индикатор менял свой цвет.

Вскрываем заднюю крышку телевизора. При этом его лучше положить на диван или кровать, чтобы исключить повреждение ЖК-матрицы.

Откручиваем болты по периметру задней крышки. Не удивляйтесь тому, что LED-подсветка включена. Фото я делал уже на рабочем телевизоре.

Почти вся электронная начинка сосредоточена на одной печатной плате.

Здесь и блок питания, и инвертор DC/DC для питания LED-подсветки, и скалер (центральный процессор), а также блок тюнера и усилитель. Всё на одной плате.

Кстати, номер LCD панели у нашего телевизора Mystery MTV-3223LT2 (V4N09) указан на наклейке (V320BJ7-PE1).

После осмотра печатной платы и замера основных напряжений стало ясно, что "железо" исправно, а неисправность, скорее всего связана с программной частью аппарата.

Снимаем плату, чтобы выпаять микросхему памяти. Если не уверены в том, что потом, во время сборки, сможете правильно подключить все провода и шлейфы, то делаем качественное фото или записываем/маркируем что и с чем соединяется.

Теперь нам надо подобрать замену нашей микросхеме. Как видим, в данном телевизоре используется 25Q64BSIG с объёмом памяти 8 Мбайт (64 Мбит). Вместо неё я установлю новую микросхему W25Q64FVSIG фирмы Winbond.

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

Выпаиваем чип и убираем остатки припоя с дорожек медной оплёткой.

Отмываем остатки флюса изопропиловым спиртом. Место под установку прошитой памяти готово.

Теперь настало время прошить новую флэш-память.

Файл прошивки для ЖК-телевизора Mystery MTV-3223LT2 (V4N09) можно скачать по ссылке .

Так как микросхема выполнена в планарном корпусе, то для её прошивки желательно иметь переходник.

Первое время я просто напаивал провода на ножки микросхемы и вставлял их в панель программатора. Занятие нудное, да ещё есть риск отломить выводы микросхемы.

Устав это делать, купил адаптер-переходник с SOIC-8/SOP-8 на DIP-8 (200 - 208 mil). Вот ссылка , если кому надо такой. и детали на Али я уже рассказывал.

Кроме адаптеров есть ещё и специальные клипсы для прошивки памяти без выпаивания, но я таким пока не пользовался.

Обязательно обращаем внимание на то, под какой сокет идёт адаптер. Их существует несколько под разные типы корпусов (150 mil, 170 mil) или же под корпуса TSSOP-8. Для тех микрух, что стоят в ЖК-телевизорах надо на 200 209 mil.

Так как выводы у переходника типа PLS, то в цанговую панель на программаторе его не установишь. У меня на программатор запаяна обычная панелька DIP-8 с лепестковыми контактами. Поэтому в неё адаптер вставляется легко.

Устанавливаем память в переходник и не забываем установить джампер в положение 3,3V на плате программатора. Напомню, что микросхемы SPI-Flash питаются напряжением 2,7...3,6V.

При нажатии на верхнюю пластинку фиксатора контакты панели расходятся. Ставим микросхему на контакты, соблюдая цоколёвку и отпускаем фиксатор. Напомню, что отсчёт номера вывода микросхемы ведётся против часовой стрелки, начиная от ключа на корпусе микросхемы. Ключом в данном случае является круглое углубление или точка на корпусе.

Память я прошиваю с помощью своего старенького ноутбука Acer Aspire 5510, который гоняет ещё под WinXP. Подключаем программатор к USB-порту компьютера.

Также не помешает поставить "галку" в чекбоксе "Auto " в блоке "Writer ". Особенностью микросхем SPI-Flash является то, что они требуют полного стирания перед записью. С опцией "Auto" программа перед записью автоматически очищает память микросхемы, а также проводит проверку-сравнение (Verify) после считывания или записи дампа.

В окне слева выводятся логи процесса. По ним можно понять, что делает программа. Чтобы очистить записи в окне логов можно нажать кнопку "Clear ".

Основные настройки программы задаются на вкладке "Настройки", которую можно открыть кнопкой "Settings ".

Как видим из этого скриншота, взятом для примера, программа определила, что микросхема имеет маркировку GD25Q32, а её объём памяти составляет 4194304 байт (4M-byte).

На вкладке Settings необходимо сделать несколько настроек. Во-первых, необходимо указать, какой объём памяти имеет наша микросхема. Если проводили проверку кнопкой "Version", то объём смотрим в логах.

Я выбираю 8 M-byte (8 Мбайт) для W25Q64. Жмём "ОК". Также не помешает проверить снята ли галочка в чекбоксе EEPROM.

Затем нужно указать файл дампа, который мы будем записывать в память. Для этого в главном окне программы жмём кнопку "Open " напротив поля "Source File (for flashing) ". В окне проводника выбираем файл прошивки и жмём "Открыть ".

После этого в поле ввода "Source File (for flashing)" появится путь к файлу прошивки.

Если до этого считывали содержимое микросхемы ("Read "), то вместо Scan SPI Flash for Erase в прогресс-баре можем увидеть надпись Wait for Busy Clear .

Если микросхема памяти новая, то программа сообщит, что чип пустой и очистка не требуется (Chip is Empty, Erase Not Need. May be DATA-Line disconnected?).

Если же память микросхемы была ранее записана данными, то программа выполнит очистку и сообщит об этом (Chip is Empty. All Data = FF. May be DATA-Line disconnected?).

По завершению записи происходит верификация (Verify SPI Flash ).

В большинстве случаев процесс записи проходит без ошибок в течение нескольких минут.

Если процесс прошёл успешно, то в окне логов последними строчками будут SPI Verify 8388608 OK. usb-device closed .

Если что-то не получается, то ответ на вопрос можно найти на форумах. Ссылки я уже указывал.

Запаиваем микросхему на плату, соблюдая цоколёвку!

Радуемся работе ЖК-телевизора.

Ну и напоследок дисклеймер. Ну как без него!?

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

Почти во всей современной электронной технике стоят микросхемы памяти таких серий как: 25LVxxx, WINBOND и др. Их объединило общее название SPIFLASH. Много занимаюсь ремонтом и такой программатор необходим под руками почти всегда.

Я переделал много программаторов под каждый процессор и пришел к выводу, что проще и быстрее отпаять саму флеш память и впаять на место, чем рыться в недрах инета и искать как прошить девайс через процессор. Был даже спутниковый ресивер, где по непонятной причине не работал сервисный разъем. Выход оставался один. Выпаять spiflash и прошить ее программатором. После прошивки и установки микросхемы на место аппарат ожил.

Рис. 1. Схема программатора Spiflash

Схема его проста и не вызовет затруднений. Резисторы 100 Ом можно поменять в пределе 47-100 Ом. Резисторы 4.7 кОм можно поменять в пределе 3.9-6.2 кОм. Схема питается от источника 3.3 В.

На печатной плате предусмотрена разводка под трехножечную микросхему-стабилизатор. Она может быть любой малогабаритной, например LM117 3.3v. Поясню зачем: Питается схема от USB порта, там напряжение 5 В, а наши флешки работают именно от источника 3.3в. Тем самым нам не нужно подсоединять внешний источник питания.

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

Способ установки микросхемы для прошивки: Отпаиваем флеш. Убираем с ее ножек лишний припой. Ложем микросхему на стол, подложив под нее что-нибудь толщиной 0.5 мм, так чтобы эта подложка не мешала ножкам микросхемы. Подгибаем ножки к столу. Делается это за тем, чтобы между микросхемой и столом был промежуток. Ложем микросхему на плату программатора, совмещаем ножки микросхемы с дорожками платы программатора и прижимаем пластмассовой прищепкой (за счет того что, ранее мы делали промежуток, микросхема плотно ножками прижимается к дорожкам платы программатора и корпус ей не мешает). Раньше я подпаивал их. Эта процедура надоела))).


C этой схемой также часто просматривают:

Для прошивки Flash-памяти BIOS материнских плат, винчестеров, а также своих любительских конструкций мне потребовался программатор. Любимый PonyProg поддерживает только до 256кбит, кроме того LPT-порт теперь редкость, поискав по Интернету, нашел довольно простой USB-вариант "BlackcatUSB". Программатор предназначен для чтения/записи SPI-Flash чипов памяти объемом от 1 Мбита и выше (т.е. более 128кбайт) популярных серий 25ххх, 26ххх. По протоколу JTAG (требуется перепрошивка) CFI-Flash чипов - 25ххх, 28ххх, 29ххх, 39ххх, 49ххх, 58ххх, а так же K8D17ххх, K8D32ххх.

Его основой является микроконтроллер AT90USB162, имеющий USB-загрузчик, поэтому первоначальная его прошивка и обновление ПО производится по шине USB. Для перепрошивки не требуется дополнительных программ - это можно сделать прямо из его собственной программы. ПО распространяется свободно, более того. разработчики предоставляют файлы прошивок и исходники программы. Поддерживается система скриптов для добавления новых алгоритмов. Можно вручную выбирать все параметры работы с неизвестной памятью. Программа не требует установки, просто запускаем и работаем.

Внешний вид фабричного варианта

На оригинальной плате имеются перемычки для выбора напряжения SPI - 3,3V / 5V, кнопка сброса и переключатели выбора режима загрузки: обычный / загрузчик. В повседневной работе сброс и перепрошивка программатора крайне редко требуются, поэтому для клона кнопка и переключатели были исключены. Вместо 10-штырькового разъема установлен DIP-сокет, а разъем USB выполнен продолжением печатной платы:

Чтобы "разъем USB" не болтался в гнезде, он должен быть толщиной 2,5мм, Мне удалось найти кусочек текстолита такой толщины, а для платы в 1,5мм придется приклеивать "подкладку" 1мм. Она должна быть обязательно неметаллической - на случай случайной вставки в разъем "вверх ногами".


Схема программатора

При установке перемычки J1 в положение 1-2 питание микроконтроллера осуществляется от линии 5V USB, при установке 2-3 - от внутреннего стабилизатора 3,3V. Внимательно смотрите даташит памяти перед выбором напряжения программирования - большинство трехвольтовых чипов выйдут из строя при питании от 5V.

Собранный без ошибок клон сразу определится системой как AT90USB162 в режиме DFU. Запускаем оболочку BlackcatUSB и убеждаемся в этом:

Если микроконтроллер не "чистый", то принудительно переводим его в режим загрузчика:

  1. замыкаем на корпус контакт RESET
  2. замыкаем на корпус контакт BOOT
  3. отпускаем RESET
  4. отпускаем BOOT

Важно, чтобы BOOT был отпущен чуть позже, чем RESET. Далее переходим во вкладку AVR Firmware, выбираем файл прошивки BCUSB.1.09.SPI.hex и кнопкой "Program" запускаем процесс прошивки:

По окончании процесса (пара секунд), жмем "Start Application". Программатор определится системой и потребует драйвер - находим его в папке Drivers. После его установки видим готовый к работе программатор:

Теперь можно проверить его в работе.

ВАЖНО! Если горит (или мигает) светодиод режима, то вставлять и вынимать память из сокета нельзя - он под напряжением, это может испортить информацию!

Поэтому просто вынимаем клон из разъема USB, вставляем память в сокет и пробуем:

Память определилась и появилась вкладка SPI Flash, на которой можно ее прочесть и записать:

P.S. Программатор "BlackcatUSB" на сегодняшний момент не поддерживается разработчиком - вместо него выпускается обновленная версия "FlashcatUSB":

Из "железных" обновлений только замена мк на более емкий вариант - ATmega32U2. В программной части обновлений больше - поддержка большей номенклатуры чипов, в том числе NAND. Новые версии программы доступны на сайте разработчика. Новые прошивки NAND (FCUSB.1.07.NAND.hex) и JTAG (FCUSB.7.05.EJTAG_16K.hex) подходят и для нашего клона - во всяком случае запускаются и определяются, функционал не проверял - просто не на чем.

Эта статья продолжает тему, связанную с угрозой искажения BIOS материнской
платы вредоносными программами. В ранее опубликованном материале
и был
приведен пример программы, выполняющей запись в микросхему 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,
описанном в . В качестве носителя BIOS на данной плате используется
микросхема SST 25VF080B, описанная в . Эта микросхема имеет объем 8 Мегабит
(1 Мегабайт) и подключается к интерфейсу SPI. Некоторые микросхемы других
производителей, использующих тот же интерфейс, описаны в . Описание
интерфейса SPI приведено в . При взаимодействии с контроллером SPI, нам
потребуется использовать механизмы доступа к конфигурационному пространству,
описанные в документах .

Интерфейс 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" предназначен для таких платформ.

3) Начиная с чипсета Intel 945, в состав "южного моста" включен контроллер
специализированной последовательной шины Serial Peripheral Interface или SPI,
использующий передачу данных чтения и записи, а также управляющей и статусной
информации по однобитному последовательному каналу. Это позволило использовать
8-контактный корпус для микросхемы BIOS. Данная статья посвящена рассмотрению
именно таких платформ.

Отметим, что интерфейс 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) –
выход для передачи данных от микросхемы к контроллеру, по этой линии побитно
передаются читаемые данные, а также информация о состоянии микросхемы.
Контроллер управляет микросхемой посредством команд, инициирующих операции
чтения и записи данных, стирания, чтения идентификаторов микросхемы, чтения и
записи регистра статуса и т.п.

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

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

Контроллер SPI, входящий в состав "южного моста" Intel ICH8, содержит более
20 регистров управления и состояния. Регистры адресуются в пространстве памяти с
использованием технологии memory-mapped I/O, рассмотренной в ранее
опубликованной статье "Устройства системной поддержки. Исследовательская работа
N ". Описание всех регистров и команд контроллера 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.

В платформах с интерфейсами ISA и LPC, передача команд выполнялась путем
прямой записи байта кода команды в адресный диапазон Flash ROM. Интерфейс SPI
использует косвенный метод передачи команд посредством 8-байтного регистра
OpCode Menu. Каждый из байтов этого регистра хранит код одной из команд для
управления Flash ROM (запись, стирание, чтение идентификатора и т.п.). Для
запуска требуемой операции, программа должна передать номер байта (от 0 до 7),
который содержит код этой операции. Этот номер передается в 3-битном поле COP
(Cycle Opcode Pointer), которое является частью 32-битного кода, записываемого в
регистр Software Sequencing Flash Control для запуска команды на выполнение.
Блок регистров OpCode Menu обычно инициализирует BIOS при старте платформы.
Расположение байтов кодов операций в 8-байтном блоке зависит от реализации BIOS
и может быть произвольным, поэтому программа должна просканировать данный блок и
определить, под каким номером расположена в нем требуемая команда. Этот номер и
будет использован при заполнении поля COP.

Рассмотрим использование регистров Software Sequencing Flash Status и
Software Sequencing Flash Control подробнее. Регистр Software Sequencing Flash
Status имеет разрядность 8 бит и расположен по смещению 90h относительно
базового адреса контроллера SPI (SPIBAR+90h). Регистр Software Sequencing Flash
Control имеет разрядность 24 бит и расположен по смещению 91h. При
программировании контроллера, к двум указанным регистрам удобно обращаться одной
32-битной операцией чтения или записи по адресу 90h. При этом биты 0-7
соответствуют регистру Software Sequencing Flash Status, а биты 8-31 — регистру
Software Sequencing Flash Control. Именно такой метод доступа используется в
ассемблерных примерах, прилагаемых к статье. Рассмотрим назначение битов в
соответствии с нумерацией, описанной выше.

Бит 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

Бит 8 (Reserved) – не используется. Как было показано выше, биты 8-31
рассматриваемого 32-битного слова соответствует битам 0-23 регистра Software
Sequencing Flash Control.

Бит 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" означает, что
данные присутствуют (например, в команде чтения статуса, данными является
содержимое регистра статуса).

Бит 23 (SPI SMI# Enable) – разрешение формировать запрос на прерывание
System Management Interrupt после завершения транзакции, 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 приводится в .
Описание команд микросхемы SPI Flash приводится в . Информация, изложенная
выше, также проиллюстрирована ассемблерными примерами, прилагаемыми к статье.

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

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

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

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

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

Защита записи, реализуемая "южным мостом" Intel ICH8 построена по такой же
схеме, как и в платформах предыдущих поколений, отличаются только адреса
регистров. Следовательно, процедура снятия этой защиты подобна процедуре
рассмотренной в предыдущих публикациях. Доступом к микросхеме BIOS управляет
8-битный регистр BIOS_CNTL (его координаты в конфигурационном пространстве
Bus=0, Device=1Fh, Function=0, Register=DCh). Бит 0 этого регистра (бит BIOSWE,
BIOS Write Enable) управляет разрешением записи в микросхему BIOS, 0=запрещена,
1=разрешена. Бит 1 того же регистра (бит BLE, BIOS Lock Enable) обеспечивает
перехват несанкционированного выключения защиты. Если бит BLE=1, то при попытке
установить бит BIOSWE=1 будет генерироваться прерывание SMI (System Management
Interrupt) с вызовом специальной процедуры, входящей в состав BIOS. Причем, если
BIOS при старте установит бит BLE=1, программно обнулить его чипсет не
позволяет, режим перехвата будет выключен только после аппаратного сброса (по
сигналу RESET). Подробности в .

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

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

(Продолжение следует)

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


developer.intel.com .

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.

Электронные документы, доступные на сайте
www.superflash.com или
ssti.com .

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.

Электронные документы, доступные на сайте
winbond.com.tw .

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.

Электронные документы, доступные на сайте
macronix.com .

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

Электронные документы, доступные на сайте
datakey.com .

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

Электронные документы, доступные на сайте
vtitechnologies.com .

9) SPI Interface Specification. Technical Note 15.

Электронные документы, доступные на сайте
pcisig.com .

Документы , на сайте pcisig.com доступны только для членов PCI
Special Interest Group. Воспользовавшись поисковыми системами, можно найти
данные документы для свободной загрузки.
10) PCI BIOS Specification. Revision 2.1.
11) PCI Local Bus Specification. Revision 3.0.
12) PCI-to-PCI Bridge Architecture Specification. Revision 1.1.



Понравилась статья? Поделиться с друзьями: