На смену интерфейсу LPC пришел интерфейс SPI (Serial Peripheral Interface), в состав "Южного моста" включен контроллер последовательной шины SPI, который для передачи адреса/данных/управления и статусной информации, использует 1-битный канал на повышенной частоте (например 85 МГц для SST25VF080B-80). Это позволило уменьшить габариты (рис. 2) и чип стал 8-контактным (вместо 32). В качестве носителя BIOS часто использовалась микросхема SST 25VF080B. Эта микросхема имеет объем 8 Мегабит (1 Мегабайт) и подключается к интерфейсу SPI. Интерфейс LPC, как и прежде, поддерживается современными чипсетами и разработчик может подключить чип ПЗУ BIOS как LPC, так и SPI интерфейсу.
Процессор после окончания «своего» сигнала «начального сброса» должен приступить к выборке первой исполняемой команды из ПЗУ BIOS, что должно подтверждаться присутствием цикла обращения к этой микросхеме через интерфейс SPI (Serial Peripheral Interface). Обращение к ПЗУ BIOS начинается с выдачи активного низкого уровня сигнала на вход CE# (рис. 1).
Рис. 2. Варианты корпуса, контакты: 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).
Для перезаписи содержимого микросхемы BIOS, программа должна взаимодействовать с двумя блоками регистров:
- регистры интерфейса Flash ROM, расположенные в составе "южного моста" чипсета,
- и регистры, входящие в состав самой микросхемы Flash ROM.
При переходе от интерфейса LPC к SPI, архитектура двух указанных блоков существенно изменилась (контроллер SPI, входящий, например, в состав "южного моста", содержит более 20 регистров управления и состояния). Регистры адресуются в пространстве памяти с использованием технологии memory-mapped I/O.
Например, регистр Software Sequencing Flash Status имеет разрядность 8 бит и расположен по смещению 90h относительно базового адреса контроллера SPI (SPIBAR+90h), а регистр Software Sequencing Flash Control имеет разрядность 24 бит и расположен по смещению 91h (Рис. 3). При программировании контроллера, к двум указанным регистрам удобно обращаться одной 32-битной операцией чтения или записи по адресу 90h. При этом биты 0-7 соответствуют регистру Software Sequencing Flash Status, а биты 8-31 - регистру Software Sequencing Flash Control (биты 16-21 (Data Byte Count) – задают количество байтов данных для операций чтения или записи данных. Количество равно значению этого поля плюс 1. Например: 000000b=1 байт, 111111b=64 байта). Именно такой метод доступа используется в ассемблерных программах.
Рис. 3.
В общем случае, для инициирования операций стирания или перезаписи микросхемы BIOS, программа должна выполнить четыре действия:
- настроить регистры "южного моста" чипсета, управляющие размещением микросхемы BIOS в адресном пространстве для обеспечения доступа к полному объему микросхемы;
- выключить режим защиты записи BIOS, реализуемый средствами "южного моста" чипсета;
- выключить режим защиты записи BIOS, реализуемый средствами микросхемы Flash ROM;
- передать команду стирания или записи микросхеме Flash ROM.
Информация для выполнения цикла обмена на шине SPI (адрес и данные) записывается в специальные регистры контроллера («моста») SPI в PCH (Flash Address и Flash Data соответственно), затем в регистр Software Sequencing Flash Control передается команда на выполнение цикла обращения к Flash ROM (чтения или записи).
После этого, через регистр Software Sequencing Flash Status можно определить момент завершения операции и проконтролировать наличие ошибок. Данные, прочитанные из Flash ROM, находятся в регистре Flash Data.