Поделиться через


Обзор драйверов контроллера SPB

Контроллер SPB — это устройство, которое управляет простой периферийной шиной (SPB) и передает данные на периферийные устройства, подключенные к SPB, и от них. Поставщик оборудования для контроллера SPB предоставляет драйвер контроллера SPB для управления аппаратными функциями в контроллере.

Начиная с Windows 8, расширение платформы SPB (SpbCx) упрощает разработку драйверов контроллера для простых периферийных автобусов (SPB). SpbCx — это системное расширение для платформы драйверов в режиме ядра (KMDF). Поставщик оборудования для устройства контроллера SPB предоставляет драйвер контроллера для выполнения всех операций драйвера, относящихся к оборудованию. Этот драйвер взаимодействует с SpbCx для выполнения операций, относящихся к контроллерам SPB, и напрямую взаимодействует с KMDF для выполнения универсальных операций с драйвером.

Например, драйвер контроллера SPB обычно вызывает метод WdfDeviceInitSetPnpPowerEventCallbacks в KMDF для регистрации для получения обратных вызовов событий питания, а метод WdfInterruptCreate для подключения подпрограммы службы прерываний драйвера (ISR) к прерыванию от контроллера SPB. Для выполнения операций, относящихся к SPB, контроллер SPB взаимодействует с SpbCx через интерфейс драйвера устройства SpbCx (DDI).

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

На следующей схеме показан драйвер контроллера SPB и SpbCx.

блок-схема компонентов spb.

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

Драйверы, которые отправляют запросы ввода-вывода на контроллер SPB, являются драйверами в режиме ядра, которые используют платформу драйвера в режиме ядра (KMDF), или драйверами пользовательского режима, которые используют среда выполнения платформы драйвера режима пользователя (UMDF). Эти драйверы могут отправлять запросы на чтение и запись для передачи данных на периферийные устройства, подключенные к SPB, и с них. Кроме того, драйверы могут отправлять запросы управления вводом-выводом (IOCTL) для выполнения операций, относящихся к SPB.

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

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

Только драйверы могут отправлять запросы ввода-вывода непосредственно на контроллер SPB. Когда приложение в пользовательском режиме передает данные на периферийное устройство, подключенное к SPB, или из нее, приложение должно полагаться на драйвер периферийного устройства SPB для отправки соответствующих запросов на чтение или запись на контроллер SPB.