Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Контроллер SPB — это устройство, которое управляет простой периферийной шиной (SPB) и передает данные из периферийных устройств, подключенных к SPB. Поставщик оборудования для контроллера SPB предоставляет драйвер контроллера SPB для управления аппаратными функциями в контроллере.
Начиная с Windows 8 расширение платформы SPB (SpbCx) упрощает разработку драйверов контроллеров для простых периферийных автобусов (SPB). SpbCx — это системное расширение для платформы драйверовKernel-Mode (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 и SpbCx выполняются в режиме ядра и взаимодействуют друг с другом через DDI SpbCx. Драйвер контроллера SPB вызывает методы поддержки драйверов, реализованные SpbCx. SpbCx вызывает функции обратного вызова событий, реализованные драйвером контроллера SPB.
Драйверы, отправляющие запросы ввода-вывода контроллеру SPB, — это драйверы в режиме ядра, использующие драйверыKernel-Mode Driver Framework (KMDF) или драйверы пользовательского режима, использующие платформу драйверовUser-Mode (UMDF). Эти драйверы могут отправлять запросы на чтение и запись для передачи данных на периферийные устройства, подключенные к SPB, и из них. Кроме того, драйверы могут отправлять запросы управления вводом-выводом (IOCTL) для выполнения операций, специфичных для простого периферийного интерфейса (SPB).
Драйвер контроллера SPB напрямую обращается к аппаратным регистрам устройства контроллера SPB, чтобы инициировать передачу данных на периферийные устройства, подключенные к SPB. Для SPB, напримерI2C, эти передачи данных происходят относительно медленно. Хотя аппаратные регистры контроллера SPB, скорее всего, являются отображёнными в памяти, регистры периферийных устройств должны предоставляться последовательно через SPB.
В ответ на запрос ввода-вывода для передачи данных в или из периферийного устройства, подключенного к SPB, драйвер контроллера SPB инициирует передачу по шине, помечает запрос ввода-вывода как ожидающий и возвращает управление без ожидания завершения передачи. Позже, когда оборудование контроллера SPB завершает передачу, контроллер сигнализирует о прерывании, и ISR в драйвере контроллера SPB либо завершает ожидающий запрос ввода-вывода, либо инициирует следующую передачу в рамках запрошенной операции ввода-вывода.
Только драйверы могут отправлять запросы ввода-вывода непосредственно контроллеру SPB. Когда приложение в режиме пользователя передает данные на периферийное устройство, подключенное к SPB, приложение должно полагаться на драйвер периферийных устройств SPB, чтобы отправить соответствующие запросы на чтение или запись в контроллер SPB.