Compartir a través de


Controladores periféricos para dispositivos en puertos serie de SerCx2-Managed

Normalmente, un puerto serie administrado por SerCx2 está conectado permanentemente a un dispositivo periférico. Este dispositivo se controla mediante un controlador periférico que envía solicitudes de E/S al puerto serie. Estas solicitudes transfieren datos hacia y desde el dispositivo y configuran el estado del puerto serie. SerCx2 administra conjuntamente las solicitudes de E/S enviadas por el controlador periférico y un controlador de controlador serie asociado.

Con frecuencia, los controladores serie se encuentran en el sistema en circuitos integrados de chip (SoC). Algunos ejemplos de dispositivos periféricos que podrían estar conectados al puerto serie de un controlador serie en un chip SoC incluyen dispositivos GPS, LAN inalámbrica, cámara y Bluetooth.

El controlador periférico para el dispositivo periférico conectado en serie suele ser un controlador del marco de controlador en modo kernel (KMDF) o del marco de controlador del modo de usuario (UMDF). Para comunicarse con este dispositivo, el controlador periférico debe abrir primero una conexión lógica al controlador serie y recibir un identificador de archivo al que el controlador puede enviar solicitudes de E/S. Para obtener más información, vea Apertura de un puerto serie de SerCx2-Managed.

En esta página

Arquitectura del controlador serie

En el diagrama de bloques siguiente se muestran las capas de software y hardware que forman las rutas de comunicación entre un dispositivo periférico (en la parte inferior del diagrama) y el controlador periférico de este dispositivo (en la parte superior del diagrama). En este ejemplo, el dispositivo periférico está conectado al puerto del controlador serie y a una patilla de interrupción en el controlador GPIO.

Diagrama que muestra las capas de software y hardware de un dispositivo periférico en un puerto serie administrado por SerCx2.

El controlador periférico de este ejemplo es un controlador UMDF que envía solicitudes de E/S al dispositivo periférico. Estas solicitudes se mueven por la ruta de comunicación que se muestra en el lado izquierdo del diagrama. Las solicitudes se controlan mediante SerCx2 y el controlador del controlador serie. El controlador periférico puede solicitar operaciones de E/S que establezcan la configuración de hardware del puerto serie (por ejemplo, cambiar la velocidad de baudios) y que transfieran datos hacia y desde el dispositivo periférico a través del puerto serie. Para obtener más información, consulte Ruta de acceso de solicitud de E /S.

Las interrupciones del dispositivo periférico viajan hacia arriba a través de la ruta de comunicación en el lado derecho del diagrama anterior. Como se muestra en la esquina inferior derecha de este diagrama, la patilla de interrupción del dispositivo periférico está conectada a un pin en un controlador de E/S de uso general (GPIO). Esta patilla GPIO está configurada para recibir señales de interrupción del dispositivo periférico. En una plataforma de hardware basada en SoC, un controlador GPIO suele desempeñar el papel del controlador de interrupción programable. Para obtener más información, consulte Ruta de acceso de interrupción.

Los dos bloques que se muestran en gris en el diagrama son módulos proporcionados por el sistema. La extensión de marco gpIO (GpioClx) está disponible a partir de Windows 8. Al igual que SerCx2, GpioClx es una extensión de KMDF. GpioClx realiza funciones que son comunes a una variedad de controladores GPIO. GpioClx funciona con un controlador de controlador GPIO que administra todas las operaciones específicas del hardware en el controlador GPIO. Para obtener más información, consulte Introducción a la compatibilidad con controladores GPIO.

Ruta de acceso de solicitud de E/S

Para transmitir datos al dispositivo periférico, el controlador periférico envía una solicitud de escritura (IRP_MJ_WRITE) al controlador serie. Para recibir datos del dispositivo periférico, el controlador periférico envía una solicitud de lectura (IRP_MJ_READ) al controlador serie.

Además, Windows define un conjunto de solicitudes de control de E/S de dispositivo (IOCTLs) que el controlador periférico puede usar para realizar varias operaciones de control de E/S específicas de los controladores serie. A continuación se muestran ejemplos de operaciones de control de E/S que el controlador periférico puede solicitar:

  • Establezca la velocidad de baudios a la que el puerto serie transmite y recibe datos.
  • Establezca los intervalos de tiempo de espera para las solicitudes de lectura y escritura.
  • Especifique un conjunto de eventos de hardware en el puerto serie para el que el controlador periférico recibe notificaciones.

SerCx2 admite muchas de las mismas ICTLs serie que el controlador serie de bandeja de entrada, Serial.sys y la versión 1 de la extensión del marco de trabajo serie (SerCx). Para obtener más información:

Ruta de acceso de interrupción

Como se muestra en el diagrama de arquitectura del controlador serie , el dispositivo periférico usa la patilla GPIO para enviar interrupciones del dispositivo al controlador periférico. En respuesta a una señal de interrupción del dispositivo periférico, el controlador GPIO señala una interrupción de hardware (denominada interrupción principal ) al procesador. El sistema operativo dirige esta interrupción al ISR de GpioClx. A continuación, GpioClx identifica qué patilla GPIO causó la interrupción y busca el identificador de interrupción global del sistema (GSI) para la interrupción virtual (denominada interrupción secundaria ) desde el dispositivo periférico. GpioClx proporciona el GSI al HAL y el HAL llama al ISR del controlador periférico. Para controlar la interrupción, el controlador periférico normalmente envía una o varias solicitudes de E/S al dispositivo periférico mediante SerCx2 y el controlador de controlador serie. Para obtener más información sobre las interrupciones principales y secundarias, consulte Interrupciones de GPIO.

Las interrupciones de GPIO son solo una manera de que el controlador periférico reciba notificaciones de eventos de hardware en el dispositivo periférico. Otra manera es que el controlador periférico solicite notificaciones de SerCx2 y del controlador de controlador serie cuando se produzcan determinados tipos de eventos de hardware en el puerto serie. Por ejemplo, el controlador periférico puede pedir que se le notifique cuando el controlador serie recibe datos en serie del dispositivo periférico. Para solicitar estas notificaciones, el controlador periférico envía una solicitud de IOCTL_SERIAL_SET_WAIT_MASK al dispositivo periférico para especificar un conjunto de eventos que se van a supervisar y, a continuación, envía una solicitud de IOCTL_SERIAL_WAIT_ON_MASK para empezar a escuchar estos eventos. SerCx2 controla estas solicitudes, con la ayuda del controlador serie. Para obtener más información sobre los tipos de eventos que puede supervisar el controlador periférico, consulte SERIAL_EV_XXX que se describen en IOCTL_SERIAL_SET_WAIT_MASK.

Sin embargo, el controlador serie solo puede detectar eventos de hardware cuando se encuentra en el estado de alimentación del dispositivo D0. Si el controlador serie está en un estado de bajo consumo, el controlador periférico no puede confiar en las notificaciones del controlador serie para saber cuándo, por ejemplo, el dispositivo periférico tiene nuevos datos para que el controlador pueda leer. En este caso, el dispositivo periférico debe enviar una señal de interrupción (o, quizás, una señal de reactivación) a través de un pin GPIO. Un controlador GPIO consume muy poca potencia y normalmente permanece activo después de que la mayoría de los demás dispositivos hayan entrado en estados de bajo consumo.