Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как правило, последовательный порт, управляемый SerCx2, постоянно подключен к периферийным устройствам. Это устройство управляется периферийным драйвером, который отправляет запросы ввода-вывода в последовательный порт. Эти запросы передают данные на устройство и с устройства и настраивают состояние последовательного порта. Запросы ввода-вывода, отправленные периферийным драйвером, совместно обрабатываются SerCx2 и соответствующим драйвером последовательного контроллера.
Часто последовательные интерфейсы содержатся в интегральных схемах System on a Chip (SoC). Примеры периферийных устройств, которые могут быть подключены к последовательному порту последовательного контроллера на микросхеме SoC, включают GPS, беспроводную локальную сеть, камеру и устройства Bluetooth.
Периферийный драйвер для последовательно подключенного периферийного устройства обычно является драйвером Kernel-Mode Driver Framework (KMDF) или драйверомUser-Mode Driver Framework (UMDF). Чтобы взаимодействовать с этим устройством, периферийный драйвер должен сначала открыть логическое подключение к последовательному контроллеру и получить дескриптор файла, в который драйвер может отправлять запросы ввода-вывода. Дополнительные сведения см. в разделе "Открытие SerCx2-Managed последовательного порта".
На этой странице
Архитектура последовательного драйвера
На следующей блок-схеме показаны уровни программного обеспечения и оборудования, которые образуют пути связи между периферийным устройством (в нижней части схемы) и периферийным драйвером этого устройства (в верхней части схемы). В этом примере периферийное устройство подключено к порту на последовательном контроллере и к линии прерывания на контроллере GPIO.
Периферийный драйвер в этом примере — это драйвер UMDF, который отправляет запросы ввода-вывода на периферийное устройство. Эти запросы перемещаются через путь связи, показанный слева от схемы. Запросы обрабатываются serCx2 и драйвером последовательного контроллера. Периферийный драйвер может запрашивать операции ввода-вывода, которые задают конфигурацию оборудования последовательного порта (например, изменение скорости ввода-вывода), а также передачу данных с периферийного устройства через последовательный порт. Дополнительные сведения см. в разделе "Путь запроса ввода-вывода".
Прерывания от периферийных устройств перемещаются вверх по пути связи с правой стороны предыдущей диаграммы. Как показано в нижнем правом углу этой схемы, контакт прерывания с периферийного устройства подключен к контакту на контроллере общего назначения ввода-вывода (GPIO). Этот контакт GPIO настроен для получения сигналов прерывания от периферийного устройства. На аппаратной платформе на основе SoC контроллер GPIO часто играет роль программируемых контроллеров прерываний. Для получения дополнительной информации см. "Путь прерывания".
Два блока, показанные в сером цвете на схеме, представляют собой системные модули. Расширение платформы GPIO (GpioClx) доступно начиная с Windows 8. Как и SerCx2, GpioClx — это расширение к KMDF. GpioClx выполняет функции, которые являются общими для различных контроллеров GPIO. GpioClx работает с драйвером контроллера GPIO, который управляет всеми аппаратными операциями в контроллере GPIO. Дополнительные сведения см. в разделе "Поддержка драйверов GPIO".
Путь запроса входа/выхода
Чтобы передать данные на периферийное устройство, периферийный драйвер отправляет запрос на запись (IRP_MJ_WRITE) последовательному контроллеру. Чтобы получить данные от периферийного устройства, периферийный драйвер отправляет запрос на чтение (IRP_MJ_READ) последовательному контроллеру.
Кроме того, Windows определяет набор запросов управления устройствами ввода-вывода (IOCTLs), которые периферийный драйвер может использовать для выполнения различных операций управления ввода-вывода, относящихся к последовательным контроллерам. Ниже приведены примеры операций управления ввода-выводами, которые может запрашивать периферийный драйвер:
- Задайте скорость передачи и получения данных последовательным портом.
- Задайте интервалы времени ожидания для запросов на чтение и запись.
- Укажите набор событий оборудования на последовательном порту, для которого периферийный драйвер получает уведомления.
SerCx2 поддерживает множество тех же последовательных IOCTL, что и встроенный драйвер последовательного порта, Serial.sys, и версия 1 расширения последовательной платформы (SerCx). Дополнительные сведения:
- См. таблицу в интерфейсе запроса последовательного ввода-вывода , чтобы определить, поддерживает ли SerCx2 определенную последовательную IOCTL.
- См. запросы управления последовательным устройством для получения подробных описаний всех последовательных операций ввода-вывода, определенных интерфейсом запросов ввода-вывода Windows.
- Общие сведения о драйверах последовательного контроллера см. в кратком обзоре Serial.sys, SerCx и SerCx2.
Путь прерывания
Как показано на схеме архитектуры последовательного драйвера , периферийные устройства используют пин-код GPIO для отправки прерываний устройства периферийным драйверу. В ответ на сигнал прерывания от периферийного устройства контроллер GPIO сигнализирует аппаратному прерыванию (называемому основным прерыванием) процессору. Операционная система направляет это прерывание в ISR модуля GpioClx. Затем GpioClx определяет, какой пин-код GPIO вызвал прерывание, и ищет идентификатор глобального прерывания системы (GSI) для виртуального прерывания (называемого вторичным прерыванием) с периферийного устройства. GpioClx передает GSI в HAL, а HAL вызывает ISR периферийного драйвера. Для обработки прерывания периферийный драйвер обычно отправляет один или несколько запросов ввода-вывода на периферийное устройство с помощью SerCx2 и драйвера последовательного контроллера. Дополнительные сведения об основных и второстепенных прерываниях см. в разделе Прерывания GPIO.
Прерывания GPIO — это лишь один из способов, с помощью которых периферийный драйвер может получать уведомления о аппаратных событиях на периферийном устройстве. Другой способ заключается в том, чтобы периферийный драйвер запрашивал уведомления от SerCx2 и драйвера последовательного контроллера, когда определенные типы событий оборудования происходят на последовательном порту. Например, периферийный драйвер может попросить получать уведомления, когда последовательный контроллер получает последовательные данные от периферийного устройства. Чтобы запросить эти уведомления, периферийный драйвер отправляет IOCTL_SERIAL_SET_WAIT_MASK запрос на периферийное устройство, чтобы указать набор событий для мониторинга, а затем отправляет запросIOCTL_SERIAL_WAIT_ON_MASK , чтобы начать прослушивание этих событий. Эти запросы обрабатываются SerCx2 с помощью драйвера последовательного контроллера. Дополнительные сведения о типах событий, которые может отслеживать периферийный драйвер, см. в SERIAL_EV_XXX, описанных в IOCTL_SERIAL_SET_WAIT_MASK.
Однако последовательный контроллер может обнаруживать аппаратные события только в том случае, если оно находится в состоянии питания устройства D0. Если последовательный контроллер находится в состоянии низкой мощности, периферийный драйвер не может полагаться на уведомления от последовательного контроллера, чтобы знать, когда, например, периферийное устройство имеет новые данные для чтения драйвера. В этом случае периферийное устройство должно отправлять сигнал прерывания (или, возможно, сигнал пробуждения) через пин-код GPIO. Контроллер GPIO потребляет очень мало энергии и обычно остается активным после того, как большинство других устройств ввели состояния низкой мощности.