Creación de particiones de un controlador GPIO en bancos de patillas
Un desarrollador de controladores puede, como opción, particionar un dispositivo de controlador de E/S de uso general (GPIO) en dos o más bancos de patillas GPIO. Por ejemplo, un dispositivo de controlador GPIO que tiene 64 patillas GPIO se puede describir mediante el controlador del controlador GPIO como dos bancos, cada uno de los cuales tiene 32 patillas GPIO. El desarrollador puede proporcionar un único controlador para administrar todos los bancos en un dispositivo de controlador GPIO, y este controlador suele usar un objeto de dispositivo para representar todo el dispositivo. Sin embargo, algunos o todos los bancos del dispositivo se pueden administrar independientemente de los otros bancos del dispositivo.
Normalmente, un controlador de controlador GPIO elige particionar un controlador GPIO en dos o más bancos por uno de los siguientes motivos:
- El estado de potencia de las patillas GPIO en un banco se puede administrar independientemente de las patillas de los otros bancos.
- El número total de patillas del controlador GPIO es mayor que 64.
El tamaño máximo del banco que admite la extensión de marco GPIO (GpioClx) es de 64 patillas. Un dispositivo de controlador GPIO que contenga más de 64 patillas debe particionarse por el controlador en dos o más bancos, cada uno de los cuales no contiene más de 64 patillas.
Para determinar cómo se divide un controlador GPIO en bancos, GpioClx llama a la función de devolución de llamada de evento CLIENT_QueryControllerBasicInformation . Esta función, implementada por el controlador del controlador GPIO, proporciona una estructura de CLIENT_CONTROLLER_BASIC_INFORMATION que describe los atributos y funcionalidades del controlador GPIO. Dos miembros de esta estructura, TotalPins y NumberOfPinsPerBank, especifican cómo se particionan las patillas del controlador GPIO en bancos. TotalPins especifica el número total de patillas en el controlador GPIO y NumberOfPinsPerBank especifica el número de patillas por banco. Si N es el número de bancos del controlador, los bancos se numeran de 0 a N-1. Todos excepto el último banco (es decir, el número de banco N-1) deben contener el número de patillas especificadas en el miembro NumberOfPinsPerBank . El último banco puede tener cualquier número de patillas de uno a NumberOfPinsPerBank.
GpioClx determina el número total de bancos en el controlador GPIO a partir de los valores de los miembros TotalPins y NumberOfPinsPerBank . GpioClx usa la siguiente fórmula de enteros para calcular el número total de bancos:
(TotalPins + NumberOfPinsPerBank – 1) / NumberOfPinsPerBank En algunos dispositivos de controlador GPIO, un banco de patillas en un dispositivo se puede activar o cambiar a un estado de bajo consumo independientemente de los otros bancos en el mismo dispositivo. Por lo tanto, cuando un banco determinado está inactivo, este banco se puede cambiar a un estado de bajo consumo de energía para reducir el consumo de energía. Para dar cabida a estos dispositivos, GpioClx admite la administración de energía de nivel de componente. GpioClx define dos estados de potencia de nivel de componente, F0 (totalmente encendido) y F1 (bajo consumo o apagado).
Para determinar si un banco de patillas GPIO admite la administración de energía de nivel de componente, GpioClx llama a la función de devolución de llamada de evento CLIENT_QuerySetControllerInformation . El parámetro InputBuffer de esta función es un puntero a una estructura CLIENT_CONTROLLER_QUERY_SET_INFORMATION_INPUT . Para solicitar información de administración de energía, el autor de la llamada establece el miembro RequestType de esta estructura en QueryBankPowerInformation.
Si un banco GPIO admite la administración de energía de nivel de componente, GpioClx permite una transición al estado de alimentación F1 cuando el banco está inactivo. Antes de que el banco entre en el estado F1, GpioClx llama a la función de devolución de llamada de evento CLIENT_SaveBankHardwareContext para indicar al controlador que guarde el contexto de hardware (principalmente, el contenido del registro) del banco. Más adelante, después de que el banco entre en el estado F0, GpioClx llama a la función de devolución de llamada de evento CLIENT_RestoreBankHardwareContext para indicar al controlador que restaure el contexto de hardware guardado anteriormente.