Форум программистов, компьютерный форум, киберфорум
Наши страницы
R71MT
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

Принцип работы Dual-BIOS

Запись от R71MT размещена 20.04.2018 в 23:12
Метки bios, система

Немного о том, как устроен и что представляет из-себя этот зверь.
Речь пойдёт об аппаратной (и далее программной) реализации 'Dual-BIOS'. Gigabyte не охотно делится с подноготной своего продукта, ограничиваясь тремя скудными картинками у себя на сайте. Ну не хотят - не надо. В свободном доступе есть принципиальные схемы мат/плат и даташиты чипсетов - они и прольют свет на происходящее.

Суть в том, чтобы вдохнуть жизнь в материнку с убитым бивисом. На плате имеются 2 чипа с одинаковыми прошивками: M_BIOS и B_BIOS (main/backup), которыми программно управляет чипсет. Если контрольная сумма основного биос искажена, то хост подключает к пространству системной памяти резервную м/схему, и подаёт сигнал сброса 'Reset'. Машина перезагружается уже с кодом бэкап-биоса, и предлагает восстановить Main. Неплохая идея.. Посмотрим, как она воплощается в жизнь.

Параллельная флэш-память уже канула в лету, освободив нишу для последовательной 'SPI-Flash'. Сейчас, в качестве носитей кода BIOS мат/плат широкое распространение получила 25-я их серия, которую производят: Winbond(W), Silicon(SST), Macronix(MX). Это "одного поля ягоды" с такими характеристиками:

Код:
SST25VF080B (8 Мбит = 1 Мб)
----------------------------
Тип........:  SPI-Flash;
Вольтаж....:  2,7...3,6v;
Частота....:  75 MГц;
Скорость...:  150 Мбит/сек;
Ток чтения.:  9 мА;
Объём......:  до 64 Мбит (1,2,4,8 Мб);
Страница...:  256 байт;
Сектор.....:  04 кБ;
Блок.......:  64 кБ;
Возможности:  4 кБ посекторное стирание;
              64 кБ блочное стирание;
              Полное стирание;
              Авто/инкремент адреса;
              100.000 циклов перезаписи;
              10 лет хранение данных;
              Программная и аппаратная защита от записи;
              Защита всего содержимого, или её части;
--------------------------------------------------------
         _____
   CS#--|1   8|--VDD       CS# = вход 'Chip Select' - активация чипа лог.нулём;
  MISO--|2   7|--HOLD#     WP# = вход 'Write Protect' - запрет на запись (только чтение);
   WP#--|3   6|--SCLK    HOLD# = вход запроса шины (мастер отвечает единицей HLDA);
   GND--|4   5|--MOSI     MOSI = вход 'Master-Out, Slave-IN' (DI - DataIn);
        |_____|           SCLK = вход синхро/импульса Clock (генерит Мастер);
                          MISO = выход 'Master-IN, Slave-Out' (DO - DataOut);
                           VDD = плюс источника питания 3,3v.
                           GND = минус источника питания;
В интерфейсе SPI один ведущий может управлять несколькими(N) ведомыми.
Поскольку речь идёт про Dual-BIOS, ведомых получается двое - Main и Backup чипы.
Встроенный в ICH(7..10) SPI-контроллёр может работать как в режиме 'Master', так и в режиме 'Slave'.

Мастер выбирает ведомого лишь одной линией(CS#), раздельно формируемой для каждого из флэш-чипов. При подаче на вывод(СS#) единицы, SPI-модуль переходит в неактивное состояние и приём/передача данных становится невозможной (отключается буфер I/O внутри флэш). Активным является логический нуль, который помечается решёткой(#).

Для защиты от записи используется генерируемый Мастером cигнал(WP#). Сигнал(HOLD#) останавливает обращение к памяти, не отключая при этом само устройство. По сути HOLD# - это запрос шины, на что хост отвечает подтверждением HLDA (высокий уровень), но чтобы не тратить время на обмен любезностями, в схемах его сразу подымают через резистор к шине +3,3v. Такая архитектура используется для построения систем с одним контроллёром, и рядом Slave-устройств.

Обмен начинается с подачи мастером 8-битного кода-команды по линии(MOSI). При операциях записи, за кодом команды следует адрес ячейки, и только потом - байты данных. Итого, транзакация состоит из трёх частей. Операция чтения происходит аналогично, только после приёма адреса, по линии(MISO) начинается вывод данных из SPI-Flash.

В шинных транзакациях, данные передаются сдвиговым регистром (последовательно) старшим битом вперёд, причём сразу в обоих направлениях. Поэтому в характеристиках м/схем указывается удвоеная пропускная способность - при частоте 75 МГц, спобность 150 Мбит/сек (150/8 = 18,7 Мбайт/с). Принцип отображён на рис.ниже:

Нажмите на изображение для увеличения
Название: spi.gif
Просмотров: 290
Размер:	14.1 Кб
ID:	4761

Нужно сказать, что это не единственный способ подключения двух чипов к хосту - производитель вправе сам выбирать организацию и способ их переключения. Например, всё начиналось с обычного тумблера, при помощи которого переключалась линия(CS#). Когда main отправлялся к праотцам, юзеру достаточны было щёлкнуть этим переключателем, и загрузка происходила с резервного чипа BIOS. Хоть вариант был и топорный, зато безотказный!

Сейчас-же, чтобы автоматом запустился бэкап - на 'мэйне' обязательно должен быть живой загрузчик и не совпадать контрольная сумма основного блока. Такой подход отталкивает саму идею Dual-BIOS на второй план. Остаётся только гадать, зачем разработчикам понадобились такие выкрутасы..

Встречались и схемы с последовательным соединением чипов, как на схеме ниже.
Поскольку в интерфейсе SPI данные передаются сразу в обе стороны (двусторонний обмен по разным линиям), то для записи в 'main' достаточно продублировать команду 'backup'. В этом случае, фактически данные выталкиваются из второго чипа(В), в первый(М):
Код:
     +----CS(0)-->>--+
 ____|___          __|___
|   MISO |<-------| MISO |
|        |   +--->| MOSI | Main
|        |   |    |______|
| I C H  |   |     ______
|        |   +-<--| MISO | 
|   MOSI |------->| MOSI | Backup
|________|        |______|
     |               |
     +----CS(1)-->>--+
Как видим, это тоже хороший вариант, но из-за громоздкости реализации, данная схема не прижилась. Сейчас почти во-всех системах применяется первый вариант с шинной архитектурой. В ней, все выводы кроме CS# и WP# соединяются между собой. Рассмотрим тонкости её реализации..


Физическая разводка

Как говорилось выше, мастером является встроенный в южный мост SPI-контроллёр. На рис.ниже отображены его пины, и в квадратных скобках указаны листы схемы (sheets), на которые идут эти выводы. Видно, что все/они уходят к листу[26], где представлена распиновка самих чипов BIOS. Выделяется только пин(CS#), который помимо листа[26] ссылается ещё и на лист[24]:

Нажмите на изображение для увеличения
Название: ich.png
Просмотров: 254
Размер:	29.7 Кб
ID:	4762

Здесь нет ничего особенного - одноимённые пины MISO,MOSI,CLK,HOLD обоих чипов замыкаются, и идут напрямую к контроллёру. Но почему пин(CS#) контроллёра уходит ещё и к листу[24]? Вот тут-то и начинается самое интересное..

Как оказалось, чипом 'backup' управляет не ICH, а контроллёр 'SIO 8718F', его схема показана на листе[24]. Помимо прочего, внутри SIO находится т.н. сторожевой таймер 'WatchDog', играющий чуть-ли не главную роль в реализации технологии Dual-BIOS. В задачи этого таймера входит отсчёт определённого интервала времени (в данном случае около 2-сек), по истечении которого схемы таймера подают в чипсет сигнал сброса 'Reset'. Подразумевается, что контролирующее работу этого таймера устройство (здесь 8718F), должно сбрасывать таймер в нуль, до истечении заданного промежутка времени.

Нажмите на изображение для увеличения
Название: ich_0.png
Просмотров: 326
Размер:	32.4 Кб
ID:	4763

Dual-BIOS ставит перед разработчиком следующие задачи:

Цитата:
1. Необходим триггер (Main/Backup), от состояния которого зависит режим старта: 0=Main, 1=Backup.

2. Обязанности адресного дешифратора, управляющего доступом к ROM, расширяются. Он должен обеспечить выбор одной из двух м/схем, которая будет размещена в верхнем диапазоне системной памяти 0xFFFFFFFF минус размер ROM-BIOS. Выбор осуществляется в зависимости от состояния триггера Main/Backup.

3. Необходимо реализовать алгоритм управления триггером и рестарта платформы для запуска Backup. При первом старте, триггер устанавливается в '0' и выбирается M-BIOS. Если его содержимое достоверно, POST выполняется обычным образом. Если Main кривой, триггер переключается в '1' и генерируется сигнал сброса. ЦП повторно начинает POST с адреса FFFFFFF0h, но теперь уже на адресный диапазон отображается Backup.
Триггером управляет таймер 'WatchDog', который после сброса начинает отсчёт 2-секундного промежутка времени. При успешном старте Main, фрагмент кода POST должен остановить таймер. Если Main искажён и произошла потеря управления, ответственный за остановку таймера фрагмент не будет выполнен и сторожевой пёс 'WatchDog' переключив триггер Main/Backup в состояние '1', сгенерит сигнал сброса Reset.

На следующем рисунке изображена структурная схема соединения SPI-контроллёра с двумя м/схемами биос. Нужно отметить, что таким образом сигнал выбора чипа(CS#) коммутируется только в 2-чиповой архитектуре. Если-же чип один, то линия(CS#) подключается напрямую от южного моста(ICH) к м/схеме SPI-Flash:

Нажмите на изображение для увеличения
Название: dual.png
Просмотров: 251
Размер:	4.0 Кб
ID:	4764

Таким образом, поддержку технологии Dual-BIOS обеспечивают следующие узлы контроллёра IT8718F:

1. Триггер Main/Backup, определяющий тип старта платформы;
2. Демультиплексор сигналов(CS#), выбирающий одну из двух м/схем BIOS;
3. 'WatchDog' таймер с формирователем сигнала сброса CPU.

Продолжение следует...
Размещено в Без категории
Просмотров 523 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru