Guía de diseño de controladores de Bus periférico simple (SPB)

En esta sección se describe cómo escribir un controlador para un dispositivo de controlador de bus periférico simple (SPB) o para un dispositivo periférico conectado a un SPB. La categoría SPB incluye autobuses como I²C y SPI. El proveedor de hardware de un dispositivo de controlador SPB proporciona un controlador de controlador SPB para administrar las funciones de hardware en el controlador. Este controlador puede admitir una familia de dispositivos de controlador similares. El proveedor de hardware de un dispositivo periférico conectado a SPB proporciona un controlador periférico SPB para administrar las funciones de hardware en el dispositivo periférico. Este controlador puede admitir una familia de dispositivos periféricos en una variedad de plataformas de hardware que proporcionan SPB compatibles.

En versiones de Windows antes de Windows 8, el sistema operativo obtuvo información de los dispositivos conectados a SPB en una placa base de PC solo indirectamente a través del firmware de la plataforma. A partir de Windows 8, los proveedores de hardware pueden suministrar controladores de Windows para controlar directamente sus controladores SPB y sus dispositivos periféricos conectados a SPB, y hacer que estos dispositivos estén disponibles para su uso por parte del sistema operativo y las aplicaciones. Para obtener más información, consulte Controladores de controlador spb y controladores de dispositivos periféricos de SPB.

Los SPB se usan con frecuencia para conectar dispositivos periféricos de baja velocidad a conjuntos de chips de placa base y sistema en módulos chip (SoC). Un circuito integrado requiere menos patillas para conectarse a un bus serie que a un bus paralelo, que transmite varios bits de datos por ciclo de reloj. Normalmente, los SPB se usan en aplicaciones sensibles a los costos en las que los recuentos de patillas bajos y las conexiones simples son más importantes que la velocidad de transmisión de datos. Dado que las SPB se ejecutan a velocidades bajas y requieren pocas conexiones eléctricas, se usan con frecuencia en aplicaciones en las que se debe conservar la energía de la batería.

Por ejemplo, la placa base pc en un equipo portátil podría usar un bus I²C para comunicarse con un dispositivo de baja velocidad que supervisa el nivel de batería. Del mismo modo, el módulo SoC de un teléfono inteligente u otro dispositivo móvil puede usar un bus I²C para conectarse a un dispositivo sensor, como un acelerómetro, un dispositivo GPS o un sensor de temperatura.

Un SPB no es un bus Plug and Play. Los dispositivos periféricos suelen tener conexiones fijas a un SPB y no se pueden quitar. Incluso si un dispositivo periférico se puede desconectar de una ranura en un SPB, la ranura normalmente se dedica a este dispositivo. Durante el inicio del sistema, el firmware ACPI de la plataforma de hardware enumera los dispositivos periféricos conectados a SPB para el administrador de Plug and Play y especifica los recursos de hardware dedicados a cada dispositivo.

Incluido en estos recursos es un identificador de conexión que identifica la conexión del dispositivo con el SPB. El identificador de conexión encapsula la información (por ejemplo, una dirección de bus y una frecuencia de reloj de bus) que un controlador SPB requiere para establecer una conexión con el dispositivo. Otros recursos de hardware pueden incluir una interrupción a la que el controlador conecta su ISR. Sin embargo, los recursos de hardware del dispositivo no incluyen memoria para los registros de dispositivos. Un dispositivo periférico conectado a SPB no está asignado a la memoria y solo se puede acceder a él a través del SPB. Para obtener más información, consulte Identificadores de conexión para SPB-Connected dispositivos periféricos.

Un SPB no proporciona ningún medio específico del bus para transmitir solicitudes de interrupción de dispositivos periféricos al procesador. En su lugar, un dispositivo periférico conectado a SPB señala una interrupción a través de una ruta de acceso de hardware independiente que se encuentra fuera del SPB y del controlador SPB. La rutina de servicio de interrupción (ISR) para un dispositivo periférico conectado a SPB debe ejecutarse en IRQL = PASSIVE_LEVEL para que pueda enviar solicitudes de E/S de forma sincrónica para acceder serialmente a los registros de hardware del dispositivo a través del SPB. Para obtener más información, consulte Interrupciones de SPB-Connected dispositivos periféricos.