Алгоритм - Учебный центр

Версия сайта для слабовидящих
Заполните форму ниже! Мы вам перезвоним!

Нажав на кнопку "Отправить", Я даю своё согласие на автоматизированную обработку указанной информации, распространяющейся на осуществление всех действий с ней, включая сбор, передачу по сетям связи общего назначения, накопление, хранение, обновление, изменение, использование, обезличивание, блокирование, уничтожение и обработку посредством внесения в электронную базу данных, систематизации, включения в списки и отчетные формы.


BIOS ROM c интерфейсом SPI.

 

BIOS ROM c интерфейсом SPI 

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

 

Рис. 1. ICH10 и ПЗУ BIOS

             Flash ROM SPI. Сегодня, на смену интерфейсу LPC пришел интерфейс SPI (Serial Peripheral Interface). Начиная с чипсета Intel 945, в состав "Южного моста" включен контроллер последовательной шины SPI, который для передачи адреса/данных/управления и статусной информации, использует 1-битный канал на повышенной частоте (50 МГц вместо 33 , и    даже 80 МГц  для  SST25VF080B-80). Это позволило уменьшить габариты и чип стал 8-контактным (вместо 32). В качестве носителя BIOS, например, часто используется микросхема SST 25VF080B (2.7 - 3.6V). Эта микросхема имеет объем 8 Мегабит (1 Мегабайт) и подключается к интерфейсу SPI (Mode 0 and Mode 3). Интерфейс LPC, как и прежде, поддерживается современными чипсетами и разработчик может подключить чип ПЗУ BIOS как LPC, так и SPI интерфейсу. Сфера применения SPI не ограничивается системными платами ПК, он успешно используется в TV и другой микропроцессорной аппаратуре.

               Интерфейс SPI. Основная архитектура шины SPI для базового варианта интерфейса приведена на рис. 2 (классическая четырех проводная структура). В ней один веду­щий управляет несколькими (N) ведомыми. Все ведомые подключены параллельно на линиях SCLK, MISO и MOSI шины SPI. Выборка ведомо­го происходит с помощью одной из линий портов ввода/вывода, которая соединяется с входом NSS соответству­ющего ведомого. Обычно такая архи­тектура используется для построения систем с одним микроконтроллером, исполняющим роль ведущего, и рядом периферийных микросхем, исполня­ющих роль ведомых. В качестве пе­риферийных микросхем может быть использован ряд современных микро­схем, оснащенных интерфейсом SPI, например, таймеры реального времени RTC, аналого-цифровые преобразователи ADC, цифро-аналоговые преобразо­ватели DAC, различные микросхемы памяти Flash-ПЗУ и т. п.

Рис. 2. Основная архитектура шины SPI (базовый вариант)

 

Частным случаем предыдущей ар­хитектуры является трех проводная структура, приведен­ная на рис. 3. в ней ведо­мая микросхема постоянно выбрана, и необходимость в использовании четвертой линии интерфейса SPI от­сутствует.

Рис. 3. Трехпроводная структура шины SPI

 

При обмене данными по интерфейсу SPI контроллер может работать как в режиме Master, так и в режиме Slave. При этом пользователь может задать следующие параметры:

 - скорость передачи (четыре программируемых значения);

 - формат передачи (от младшего разряда к старшему или наоборот).

Дополнительной возможностью подсистемы SPI является «пробужде­ние» микроконтроллера из режима Idle при поступлении данных. Модуль SPI использует четыре внешних вывода микроконтроллера. Как и для большинства периферийных устройств микроконтроллера, эти выводы являются ли­ниями порта ввода/вывода общего назначения. В ряде случаев пользователь должен само­стоятельно задать режим работы вывода, используемого модулем SPI, в со­ответствии с его назначением, причем возможность управления внутренними подтягивающими резисторами выводов, работа­ющих как входы, сохраняется независимо от способа управления их режи­мом работы.

Обмен данными осуществляется (передаваемые данные записываются, а принимаемые данные считываются) через регистр данных (SPDR). Запись в этот регистр инициирует начало передачи, а при его чтении считывается содержимое приемного буфера сдвигового регистра. Поэтому этот регистр можно назвать буфером между регистровым файлом микроконтроллера и сдвиговым регистром модуля SPI. Перед началом выполнения обмена необходимо разрешить рабо­ту модуля SPI. При подключении к ведущему устройству нескольких ведомых, что разрешено спецификацией SPI, выбор конкретного ведомого устройст­ва осуществляется подачей на его вход SS сигнала «низкого уровня».

Спецификация интерфейса SPI предусматривает 4 режима передачи данных. Эти режимы различаются соответствием между фазой (момент считывания сигнала) тактового сигнала SCK, его полярностью и передава­емыми данными. Вывод SS(Slave Select  -  выборка ведомого) предназначен для выбора активного ведомого уст­ройства и в режиме Slave всегда является входом.При подаче на него на­пряжения «низкого уровня» модуль SPI активируется и вывод MOSI пере­ключается в режим вывода данных (если это задано пользователем). Ос­тальные выводы модуля SPI являются в этом режиме входами. А при пода­че на вывод SS напряжения «высокого уровня» все выводы модуля SPI переключаются в режим ввода данных. При этом модуль переходит в неак­тивное состояние и прием данных не производится. Каждый раз, когда на вывод SS подается напря­жение «высокого уровня», происходит сброс модуля SPI. Соответствен­но, если изменение состояния этого вывода произойдет во время передачи данных, и прием и передача немедленно прекратятся, а передаваемый и принимаемый байты будут потеряны.

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

С - вход синхронизации (соответствует сигналу SCK);

D - входные последовательные данные (соответствует сигналу MOSI);

Q - выходные последовательные данные (соответствует сигналу MISO);

SS# - Slave Select, (или CS# - Chip Select) - сигнал выбора ве­домого устройства.

При обозначении способа передачи данных могут использоваться раз­личные обозначения режимов обмена: SPI Mode 0, 1, 2, 3. Все эти режимы различаются фазой и уровнем активности («полярностью») синхросигналов. На рис. 4, 5, 6, 7 иллюстрируется передача и прием байта в различных режимах. В любом режиме входные и выходные дан­ные стробируются по разным перепадам синхроимпульсов. Кроме того, есть варианты в использовании сигнала SS#. В первом варианте (он и представлен на рисунке), для ведомого устройства признаком начала транзакции является спад сиг­нала SS#, а завершения - его подъем. Во втором варианте, на­чало транзакции определяется по первому фронту (спаду) SCK, а сигнал SS# может иметь низкий уровень постоянно. Второй вариант иногда предпочитают для простейшего двух­точечного интерфейса с единственным ведущим устройством и единственным ведомым устройством, когда нет опасения потери синхронизации.

 

Рис. 4. Режим обмена SPI Mode 0

Рис. 5. Режим обмена SPI Mode 1

Рис. 6. Режим обмена SPI Mode 2

Рис. 7. Режим обмена SPI Mode 3

Микросхемы SPI-Flash (в том числе и SST25VF080B), используют только 3 сигнала для приема/передачи данных: SCK (Serial Clock) – вход тактовой частоты; SI (Serial Input) – вход данных (побитно адрес/данные/коды команд); SO (Serial Output) – выход данных (побитно данные/состояние микросхемы). Для защиты от записи используется cигнал WP#, защита от записи программного обеспечения осуществляется через биты защиты блока в регистре статуса, сигнал HOLD# приостанавливает последовательность обращения к памяти (не отбрасывая устройство), используется гибкая система  стирания (однородными 4-килобайтными секторами, 32- килобайтными оверлейными блоками, однородными 64- килобайтными оверлейными блоками – см. табл. 2).

Процессор после окончания «своего» сигнала «начального сброса» должен приступить к выборке первой исполняемой команды из ПЗУ BIOS, что должно подтверждаться присутствием цикла обращения к этой микросхеме через интерфейс SPI (Serial Peripheral Interface). Платформа, использующая интерфейс SPI, также поддерживает чтение содержимого микросхемы ПЗУ BIOS, но для передачи управляющей и статусной информации во время записи и стирания Flash ROM, используется другой метод доступа. Информация для выполнения цикла на шине SPI (адрес и данные) записывается в специальные регистры контроллера SPI (Flash Address и Flash Data соответственно), затем в регистр Software Sequencing Flash Control передается команда на выполнение цикла обращения к Flash ROM (чтения или записи). Микросхемы SPI-Flash (рис. 8), используют 3 сигнала для приема/передачи данных: SCK (Serial Clock) – вход тактовой частоты; SI (Serial Input) – вход данных (побитно адрес/данные/коды команд; SO (Serial Output) – выход данных (побитно данные/состояние микросхемы).  Обращение к ПЗУ BIOS начинается с выдачи активного низкого уровня сигнала на вход CE# (см. рис. 9).  Описание контактов микросхемы SST 25VF080B приведено в табл. 1.

 

 Рис. 8. Микросхема SST 25VF080B - функциональная блок-схема, варианты корпуса, контакты: 1 - CS# (Chip Enable), 2 - DO  (Data Output), 3 - WP# (Write Protect), 4 - GND (Ground), 5 - DI  (Data Input),  6 - CLK (Clock Input), 7 - HOLD# (Hold Input),  8 - VCC (Supply Voltage 2.7-3.6v).

  Таблица 1

 

На рис. 9, 10, 11, 12  приведены примеры протоколов операций на интерфейсе SPI.

 

  Рис. 9. Протокол интерфейса SPI (код операции - 03H, операция «Чтение» см. табл. 3)

  

Таблица 2. Программирование Status Register Block Protection для SST25VF080B

   Таблица 3.  Device Operation Instructions (команды операций устройства)

 

 

Рис. 10. Операция стирания блоком 32-KByte и 64-KByte на SPI (код операции 52H и D8H)

Рис.11. Операция «Чтение» Read-Status-Register (RDSR), код операции 05H

Рис. 12. Write-Enable (WREN), Write Disable (WRDI), код операции 06H и 04H

 

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

 - регистры интерфейса Flash ROM, расположенные в составе "южного моста" чипсета,

 - и регистры, входящие в состав самой микросхемы Flash ROM.

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

               Физический доступ к микросхеме BIOS (не надо путать с областью Shadow RAM) осуществляется посредством окна, примыкающего к верхней границе диапазона 0-4GB. Например, Flash ROM размером 1 Мбайт будет доступен в диапазоне FFF00000h-FFFFFFFFh. В платформах, использующих интерфейс 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.

            В платформах с интерфейсом 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. Варианты заполнения могут быть разными, даже среди материнских плат одной модели, использующих различные версии BIOS. Некоторые утилиты перезаписи Flash изменяют содержимое указанных регистров.

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

 - настроить регистры "южного моста" чипсета, управляющие размещением микросхемы BIOS в адресном пространстве для обеспечения доступа к полному объему микросхемы;

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

 - выключить режим защиты записи BIOS, реализуемый средствами микросхемы Flash ROM;

 - передать команду стирания или записи микросхеме 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.

 

 


Лицензия