La familia de dispositivos MCP23017/MCP23S17 (MCP23X17) proporciona expansión de E/S paralelas de uso general de 16 bits para aplicaciones de bus I2C o SPI. Los dos dispositivos se diferencian únicamente en la interfaz serie:
- MCP23017 – Interfaz I2C
- MCP23S17 – Interfaz SPI
El MCP23X17 consta de múltiples registros de configuración de 8 bits para selección de entrada, salida y polaridad. El maestro del sistema puede habilitar las E/S como entradas o salidas escribiendo los bits de configuración de E/S (IODIRA/B). Los datos de cada entrada o salida se guardan en el registro de entrada o salida correspondiente. La polaridad del registro del puerto de entrada se puede invertir con el registro de inversión de polaridad. Todos los registros pueden ser leídos por el maestro del sistema.
El puerto de E/S de 16 bits consta funcionalmente de dos puertos de 8 bits (PORTA y PORTB). El MCP23X17 se puede configurar para funcionar en modos de 8 o 16 bits a través de IOCON.BANK. Hay dos pines de interrupción, INTA e INTB, que pueden asociarse con sus respectivos puertos, o pueden conectarse lógicamente en OR para que ambos pines se activen si cualquiera de los puertos provoca una interrupción. La salida de interrupción se puede configurar para activarse bajo dos condiciones (mutuamente excluyentes):
- Cuando cualquier estado de entrada difiere de su correspondiente estado de registro del Puerto de Entrada. Esto se utiliza para indicar al maestro del sistema que un estado de entrada ha cambiado.
- Cuando un estado de entrada difiere de un valor de registro preconfigurado (registro DEFVAL).
El registro de captura de interrupción captura los valores del puerto en el momento de la interrupción, guardando así la condición que causó la interrupción. El reinicio de encendido (POR) establece los registros en sus valores predeterminados e inicializa la máquina de estado del dispositivo. Los pines de dirección de hardware se utilizan para determinar la dirección del dispositivo.