AN1043
Unique Features of the MCP23X08/17 GPIO Expanders
I/O PORT DESCRIPTION
Author:
Pat Richards
Microchip Technology Inc.
The I/O port is highly configurable for maximum
flexibility. Figure 1 is a simplified block diagram of an
I/O port pin. The port can either drive logic levels on the
pin, or read logic levels from the pad. The level on the
pad can be read at any time, regardless if the pin is
configured as an input or an output.
INTRODUCTION
GPIO expanders provide easy I/O expansion using
standard serial interfaces. GPIO products are used to
increase the I/O on an MCU or provide remote I/O
using a serial interface.
The IODIR register controls the direction of the pins
(input or output). More specifically, the IODIR registers
simply enables/disables the output driver. When the
driver is activated (IODIR = 0), the pad is driven to the
state in the latch register (OLAT). When deactivated
(IODIR = 1), the driver is high impedance.
This application note discusses the feature set and use
of the MCP23X08/17 (8-bit and 16-bit) GPIO Expand-
ers.
The MCP23X08 are 8-bit GPIO Expanders:
• MCP23008: I2C™ Interface
The I/O port has multiple, individual configurations.
Each pin can …
• MCP23S08: SPI Interface
• …be configured as an input. The output driver is
The MCP23X17 are 16-bit GPIO Expanders:
• MCP23017: I2C Interface
disabled (high impedance)
• …be configured as an output. The output driver
is enabled and the value in the latch is driven on
the pin.
• MCP23S17: SPI Interface
The functions and features of the MCP23X08 and
MCP23X17 are basically the same, except where
otherwise noted.
• …enable a weak pull-up resistor
• …emulate an open-drain configuration. This is
accomplished by clearing the output latch (OLAT)
bit to a zero and using the direction register
(IODIR) to set the level on the pin. A pull-up
resistor is required to pull the pin to voltage when
the pin is an input
FEATURES
This application note discusses some of the features of
the MCP23X08/17 and how they may be used in an
application:
- To drive a 0: configure the pin as an output
(IODIR = 0) so the port drives whatever is in
OLAT (logic 0 in this case)
• I/O Port Description
• 8/16-Bit Mode (MCP23X17 only)
• Interrupt Features
- To float a 1: set the pin as an input
(IODIR = 1). The output driver is disabled
and the pull-up resistor pulls the pin to a
logic 1
- Mapping Interrupts
- Mirroring Interrupts (MCP23X17 only)
- Servicing Interrupts
• Internal Address Pointer Control
• Hardware Address Pin on SPI
© 2006 Microchip Technology Inc.
DS01043A-page 1