Немного о том, как устроен и что представляет из-себя этот зверь.
Речь пойдёт об аппаратной (и далее программной) реализации 'Dual-BIOS'. Gigabyte не охотно делится с подноготной своего продукта, ограничиваясь тремя скудными картинками у себя на сайте. Ну не хотят - не надо. В свободном доступе есть принципиальные схемы мат/плат и даташиты чипсетов - они и прольют свет на происходящее.
Суть в том, чтобы вдохнуть жизнь в материнку с убитым бивисом. На плате имеются 2 чипа с одинаковыми прошивками: M_BIOS и B_BIOS (main/backup), которыми программно управляет чипсет. Если контрольная сумма основного биос искажена, то хост подключает к пространству системной памяти резервную м/схему, и подаёт сигнал сброса 'Reset'. Машина перезагружается уже с кодом бэкап-биоса, и предлагает восстановить Main. Неплохая идея.. Посмотрим, как она воплощается в жизнь.
Параллельная флэш-память уже канула в лету, освободив нишу для последовательной 'SPI-Flash'. Сейчас, в качестве носитей кода BIOS мат/плат широкое распространение получила 25-я их серия, которую производят: Winbond(W), Silicon(SST), Macronix(MX). Это "одного поля ягоды" с такими характеристиками:
| Code | 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| 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 Мбайт/с). Принцип отображён на рис.ниже:

Нужно сказать, что это не единственный способ подключения двух чипов к хосту - производитель вправе сам выбирать организацию и способ их переключения. Например, всё начиналось с обычного тумблера, при помощи которого переключалась линия(CS#). Когда main отправлялся к праотцам, юзеру достаточны было щёлкнуть этим переключателем, и загрузка происходила с резервного чипа BIOS. Хоть вариант был и топорный, зато безотказный!
Сейчас-же, чтобы автоматом запустился бэкап - на 'мэйне' обязательно должен быть живой загрузчик и не совпадать контрольная сумма основного блока. Такой подход отталкивает саму идею Dual-BIOS на второй план. Остаётся только гадать, зачем разработчикам понадобились такие выкрутасы..
Встречались и схемы с последовательным соединением чипов, как на схеме ниже.
Поскольку в интерфейсе SPI данные передаются сразу в обе стороны (двусторонний обмен по разным линиям), то для записи в 'main' достаточно продублировать команду 'backup'. В этом случае, фактически данные выталкиваются из второго чипа(В), в первый(М):
| Code | 1
2
3
4
5
6
7
8
9
10
11
| +----CS(0)-->>--+
____|___ __|___
| MISO |<-------| MISO |
| | +--->| MOSI | Main
| | | |______|
| I C H | | ______
| | +-<--| MISO |
| MOSI |------->| MOSI | Backup
|________| |______|
| |
+----CS(1)-->>--+ |
|
Как видим, это тоже хороший вариант, но из-за громоздкости реализации, данная схема не прижилась. Сейчас почти во-всех системах применяется первый вариант с шинной архитектурой. В ней, все выводы кроме CS# и WP# соединяются между собой. Рассмотрим тонкости её реализации..
Физическая разводка
Как говорилось выше, мастером является встроенный в южный мост SPI-контроллёр. На рис.ниже отображены его пины, и в квадратных скобках указаны листы схемы (sheets), на которые идут эти выводы. Видно, что все/они уходят к листу[26], где представлена распиновка самих чипов BIOS. Выделяется только пин(CS#), который помимо листа[26] ссылается ещё и на лист[24]:

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

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-BIOS обеспечивают следующие узлы контроллёра IT8718F:
1. Триггер Main/Backup, определяющий тип старта платформы;
2. Демультиплексор сигналов(CS#), выбирающий одну из двух м/схем BIOS;
3. 'WatchDog' таймер с формирователем сигнала сброса CPU.
Продолжение следует...
|