Расширение SPB Framework (SpbCx)

Начиная с Windows 8, расширение платформы SPB (SpbCx) является системным расширением для платформы драйверов в режиме ядра (KMDF). SpbCx работает вместе с драйвером контроллера SPB для выполнения операций ввода-вывода на периферийных устройствах, подключенных к простой периферийной шине (SPB), например I²C или SPI.

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

SpbCx выполняет задачи обработки, общие для устройств контроллера SPB. В частности, SpbCx управляет очередями запросов ввода-вывода для контроллера SPB. Эти очереди содержат запросы ввода-вывода для периферийных устройств, подключенных к шине. Поставщик оборудования для контроллера SPB предоставляет драйвер контроллера SPB для выполнения всех аппаратных операций, необходимых для обработки этих запросов.

Разделение обязанностей между SpbCx и драйвером контроллера SPB выглядит следующим образом:

  • SpbCx управляет универсальными функциями, общими для всех членов класса устройств контроллера SPB. SpbCx предоставляет большую часть обработки запросов и управления потоком по умолчанию для драйвера контроллера. Начиная с Windows 8 spbCx является компонентом папки "Входящие" операционной системы Windows.

  • Драйвер контроллера SPB управляет аппаратными функциями на устройстве контроллера SPB. Поставщики оборудования предоставляют драйверы контроллера для своих устройств контроллеров SPB.

SpbCx и драйвер контроллера SPB работают в режиме ядра. SpbCx — это расширение платформы, а драйвер контроллера SPB — драйвер KMDF. Драйвер контроллера SPB вызывает методы в интерфейсе драйвера устройства SpbCx (DDI) для выполнения операций, относящихся к SPB, и вызывает методы KMDF для выполнения других, более универсальных функций драйвера. Сведения о создании драйвера KMDF см. в статье Сборка и загрузка драйвера Framework-Based.

Драйверы контроллера SPB статически связываются с точками входа DDI в библиотеке заглушки SpbCx Spbcx.lib. Во время выполнения эта библиотека выполняет необходимое согласование версии драйвера и версии для динамического связывания с модулем расширения платформы, Spbcx.sys, который реализует DDI. Драйвер контроллера SPB, которому требуется определенная версия Spbcx.sys, может безопасно связаться с версией Spbcx.sys с более высоким номером версии. Однако этот драйвер не может связаться с версией Spbcx.sys с более низким номером версии. Интерфейс запроса ввода-вывода SpbCx также обратно совместим.

Хотя поставщик оборудования может написать монолитный драйвер контроллера SPB, который не использует SpbCx, для этого требуются значительные усилия. Для сравнения, драйвер контроллера, использующий SpbCx, проще разрабатывать и, как правило, надежнее.