Uso de la interfaz de solicitud de E/S de SPB
A partir de Windows 8, la extensión de marco de SPB (SpbCx) es un componente proporcionado por el sistema que admite la interfaz de solicitud de E/S de SPB. Los controladores de dispositivos periféricos SPB usan esta interfaz para enviar solicitudes de E/S a dispositivos conectados a I²C, SPI y otros buses periféricos simples (SPB). Al hacer que una interfaz de solicitud de E/S estandarizada esté disponible en una variedad de tipos de bus, SpbCx simplifica la tarea de proporcionar compatibilidad con controladores para una familia de dispositivos periféricos en una variedad de plataformas de hardware y controladores SPB de diferentes proveedores de hardware.
Si se cumplen las condiciones siguientes, el proveedor de hardware de un dispositivo periférico conectado a SPB puede desarrollar un controlador de dispositivo que pueda funcionar en varios tipos de bus:
- El dispositivo periférico debe ser compatible con hardware con estos buses.
- El controlador puede usar los mismos protocolos de control de dispositivos en todos estos tipos de bus.
Al eliminar el código específico del bus de los controladores periféricos, la extensión del marco SPB reduce el tiempo de desarrollo de estos controladores y garantiza un comportamiento más coherente en los tipos de bus admitidos.
Los dispositivos periféricos que están conectados a SPB no están asignados a memoria y los controladores de estos dispositivos no pueden acceder directamente a los registros de hardware de estos dispositivos. En su lugar, un controlador de dispositivo periférico SPB debe confiar en un controlador SPB para transferir datos en serie hacia y desde el dispositivo. Para solicitar dicha transferencia, el controlador debe enviar una solicitud de E/S al dispositivo. Esta solicitud de E/S se envía a una cola administrada por SpbCx.
SpbCx coopera con un controlador de controlador SPB para controlar las solicitudes de E/S de los controladores. El proveedor de hardware para el controlador SPB proporciona al controlador de controlador SPB para realizar tareas específicas del hardware del controlador.
Solo los controladores pueden enviar solicitudes de E/S a la interfaz de solicitud de E/S de un controlador SPB. Las aplicaciones no pueden enviar directamente solicitudes de E/S a un controlador SPB. En su lugar, una aplicación puede enviar solicitudes de E/S al controlador para un dispositivo periférico conectado a SPB y, a continuación, confiar en el controlador para enviar al controlador spb las solicitudes de E/S que puedan ser necesarias para transferir datos hacia o desde el dispositivo.
Para que un controlador pueda enviar solicitudes de E/S a un dispositivo periférico conectado a SPB, el controlador debe abrir una conexión lógica al dispositivo. Para abrir esta conexión, el controlador usa el identificador de conexión que recibió como recurso de hardware del administrador de Plug and Play. Para obtener más información, consulte ID de conexión para dispositivos periféricos SPB.
SpbCx y el controlador del controlador SPB controlan conjuntamente solicitudes de lectura y escritura para dispositivos periféricos conectados a SPB. En respuesta a una solicitud IRP_MJ_READ, el controlador SPB transfiere el número especificado de bytes de un dispositivo periférico a un búfer proporcionado por el controlador. En respuesta a una solicitud IRP_MJ_WRITE, el controlador SPB transfiere el número especificado de bytes de un búfer proporcionado por el controlador a un dispositivo periférico.
Para una solicitud IRP_MJ_READ o IRP_MJ_WRITE para transferir cero bytes, SpbCx completa la solicitud con un código de estado de STATUS_SUCCESS, pero no realiza ninguna operación.
SpbCx y el controlador del controlador SPB también controlan estos códigos de control de E/S específicos de SPB (IOCTLs):
Un controlador periférico SPB usa estos ICTL para realizar secuencias de transferencia de E/S. Una secuencia de transferencia de E/S es un conjunto ordenado de transferencias de bus (operaciones de lectura y escritura) que se realiza como una sola operación de bus atómico. Para obtener más información sobre estos ICTL, consulte Secuencias de transferencia de E/S.
El controlador del controlador SPB para un controlador SPB determinado podría admitir ICTL personalizados que realizan funciones específicas del hardware. Estos son IOCTLs que SpbCx no controla y que el proveedor de hardware para el controlador SPB admite para la ventaja de los controladores de dispositivos periféricos de SPB que necesitan realizar operaciones específicas del hardware. Si un controlador de dispositivo periférico SPB envía un IOCTL que ni SpbCx ni el controlador del controlador spb reconoce, no se realiza ninguna operación y la solicitud de E/S se completa con un valor de estado de error de STATUS_NOT_SUPPORTED.
El controlador de un dispositivo periférico conectado a SPB suele ser un controlador del marco de controladores del modo de usuario (UMDF) o un controlador del marco de controladores en modo kernel (KMDF). Para enviar una solicitud de lectura, escritura o IOCTL a un dispositivo periférico conectado a SPB, un controlador UMDF llama a un método como IWDFIoRequest::Send. Un controlador KMDF llama a un método como WdfIoTargetSendReadSynchronously, WdfIoTargetSendWriteSynchronously o WdfIoTargetSendIoctlSynchronously.
Para ver ejemplos de código que muestran cómo enviar solicitudes de E/S a dispositivos periféricos conectados a SPB, consulte estos temas:
Recursos de hardware para controladores periféricos SPB en modo de usuario
Recursos de hardware para controladores periféricos SPB en modo kernel