Обзор архитектуры SerCx2
SerCx2 работает вместе с драйвером последовательного контроллера, чтобы обеспечить обмен данными между периферийным драйвером и последовательным периферийным устройством. Как правило, последовательный контроллер интегрирован в микросхему Системы на микросхеме (SoC) для обеспечения связи с низким числом контактов с периферийным устройством, которое является внешним по сравнению с микросхемой SoC, но припаяется к той же печатной плате.
На следующей схеме показан путь связи между последовательно подключенным периферийным устройством и драйвером для этого устройства. Этот периферийный драйвер выполняется в режиме ядра или пользовательском режиме и отправляет запросы ввода-вывода на последовательный порт, к которому подключено периферийное устройство.
SerCx2 и драйвер последовательного контроллера работают в режиме ядра и взаимодействуют друг с другом через интерфейс DDI-устройства (DDI) SerCx2. Драйвер последовательного контроллера вызывает методы поддержки драйверов, реализованные SerCx2. SerCx2 вызывает функции обратного вызова событий, реализованные драйвером последовательного контроллера.
Как правило, аппаратные регистры последовательного контроллера сопоставляются с памятью. Драйвер последовательного контроллера напрямую обращается к этим регистрам для настройки последовательного порта и передачи данных на периферийное устройство, подключенное к последовательному порту, и с них. Для более длительной передачи данных SerCx2 обычно использует передачу DMA (не показано на предыдущей схеме).
Сведения, необходимые драйверу периферийных устройств для открытия логического подключения к периферийным устройствам, инкапсулируются в особый тип аппаратного ресурса, который называется идентификатором подключения. Дополнительные сведения см. в разделе Идентификаторы подключений для последовательно подключенных периферийных устройств.
Как правило, только драйверы отправляют запросы ввода-вывода непосредственно на последовательный контроллер. Когда приложению в пользовательском режиме необходимо взаимодействовать с последовательно подключенным периферийным устройством, периферийный драйвер для устройства выступает в качестве посредника между приложением и устройством. Если приложению необходимо передать данные на периферийное устройство или с него, приложение отправляет запрос на запись (IRP_MJ_WRITE) или запрос на чтение (IRP_MJ_READ) в периферийный драйвер, а драйвер периферийного устройства отвечает, отправляя соответствующий запрос на запись или чтение последовательному контроллеру. Кроме того, драйвер периферийных устройств может отправлять запросы на управление вводом-выводом устройства (IOCTLs) для настройки последовательного порта. Список ioCTL, поддерживаемых SerCx2, см. в разделе Интерфейс запроса последовательного ввода-вывода.
Периферийный драйвер, который отправляет запросы ввода-вывода в последовательный контроллер, является драйвером в режиме ядра, использующим платформу драйвера в режиме ядра (KMDF), или драйвером пользовательского режима, использующим среда выполнения платформы драйвера режима пользователя (UMDF). SerCx2 управляет очередями запросов ввода-вывода, отправляемых на последовательный контроллер периферийным драйвером.
В ответ на запрос на чтение или запись SerCx2 инициирует одну или несколько транзакций ввода-вывода для перемещения данных между последовательным контроллером и буфером данных в запросе. Каждая транзакция ввода-вывода использует запрограммированный ввод-вывод (PIO) или DMA для передачи данных между последовательным контроллером и буфером данных в запросе. Типы транзакций ввода-вывода, поддерживаемые драйвером последовательного контроллера, зависят от аппаратных возможностей последовательного контроллера. Дополнительные сведения см. в статье Обзор транзакций ввода-вывода SerCx2.