MCP23017
Public Unreviewedby adom
Microchip 16-bit I2C I/O expander, SOIC-28. Two 8-bit ports, interrupts, configurable pull-ups, 3 address pins. Datasheet-verified.
MCP23017
Microchip Technology · I2C 16-bit I/O expander · SOIC-28
Adds sixteen general-purpose I/O to a microcontroller over I2C, in a SOIC-28, the 16-bit big brother of the PCF8574. The pins are split into two 8-bit ports (GPA and GPB), each with per-pin direction, optional internal pull-ups, input polarity inversion, and interrupt-on-change that drives the INTA and INTB pins so the host need not poll. Three address pins (A0-A2) put up to eight of them on one bus for 128 I/O total. It speaks I2C up to 1.7 MHz (a sibling, the MCP23S17, uses SPI). Runs 1.8-5.5 V.
Pinout
| Pin | Name | Type | Function |
|---|---|---|---|
| 1 | GPB0 | bidirectional | PORTB bit 0 bidirectional I/O. Configurable per-pin as input or output; supports interrupt-on-change and internal ~75 µA weak pull-up to VDD. IOL up to 8.0 mA @ VDD=4.5V. |
| 2 | GPB1 | bidirectional | PORTB bit 1 bidirectional I/O. Same characteristics as GPB0 - configurable direction, interrupt-on-change, optional weak pull-up. |
| 3 | GPB2 | bidirectional | PORTB bit 2 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 4 | GPB3 | bidirectional | PORTB bit 3 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 5 | GPB4 | bidirectional | PORTB bit 4 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 6 | GPB5 | bidirectional | PORTB bit 5 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 7 | GPB6 | bidirectional | PORTB bit 6 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 8 | GPB7 | bidirectional | PORTB bit 7 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 9 | VDD | power_in | Positive supply. Operating range 1.8V-5.5V (industrial), 2.7V-5.5V and 4.5V-5.5V for wider temperature grades. Bypass with a 0.1 µF ceramic close to the pin. |
| 10 | VSS | power_in | Ground reference for supply and all I/O. |
| 11 | NC | unconnected | No connect on MCP23017 (this pin is Chip Select /CS on the SPI-variant MCP23S17). Leave floating or tie to ground. |
| 12 | SCL | input | I2C serial clock input (Schmitt-trigger). Standard 100 kHz, Fast 400 kHz, and Fast-mode Plus 1.7 MHz supported. Requires an external pull-up resistor to VDD. |
| 13 | SDA | bidirectional | I2C serial data (open-drain, Schmitt-trigger input). Requires an external pull-up resistor to VDD. VOL ≤ 0.6V @ 3 mA sink (VDD=1.8V), ≤ 0.8V @ 3 mA sink (VDD=4.5V). |
| 14 | NC | unconnected | No connect on MCP23017 (this pin is SPI Serial Out on MCP23S17). Leave floating or tie to ground. |
| 15 | A0 | input | Hardware slave address bit 0 (TTL buffer). Must be externally biased to VDD or VSS - do not leave floating. Sets bit A0 of the 7-bit I2C address 0100 A2 A1 A0. |
| 16 | A1 | input | Hardware slave address bit 1 (TTL buffer). Must be externally biased to VDD or VSS. |
| 17 | A2 | input | Hardware slave address bit 2 (TTL buffer). Must be externally biased to VDD or VSS. Combined with A1/A0 allows up to eight MCP23017 devices on one I2C bus. |
| 18 | RESET | input | Active-low hardware reset (Schmitt-trigger). Must be externally biased (tie to VDD directly or via a pull-up if unused). Minimum low pulse 1 µs; device is active 0 ns after RESET returns high; outputs go Hi-Z within 1 µs of RESET going low. |
| 19 | INTB | output | Interrupt output for PORTB. Configurable via IOCON as active-high, active-low, or open-drain. Can be mirrored with INTA when IOCON.MIRROR=1. VOL ≤ 0.6V @ 1.6 mA sink (VDD=4.5V). |
| 20 | INTA | output | Interrupt output for PORTA. Configurable via IOCON as active-high, active-low, or open-drain. Can be mirrored with INTB when IOCON.MIRROR=1. |
| 21 | GPA0 | bidirectional | PORTA bit 0 bidirectional I/O. Configurable per-pin as input or output; supports interrupt-on-change and internal ~75 µA weak pull-up to VDD. IOL up to 8.0 mA @ VDD=4.5V. |
| 22 | GPA1 | bidirectional | PORTA bit 1 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 23 | GPA2 | bidirectional | PORTA bit 2 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 24 | GPA3 | bidirectional | PORTA bit 3 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 25 | GPA4 | bidirectional | PORTA bit 4 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 26 | GPA5 | bidirectional | PORTA bit 5 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 27 | GPA6 | bidirectional | PORTA bit 6 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 28 | GPA7 | bidirectional | PORTA bit 7 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
Key specifications
| Parameter | Value |
|---|---|
| Type | I2C 16-bit I/O expander |
| I/O lines | 16 (ports GPA0-7, GPB0-7) |
| Bus | I2C up to 1.7 MHz |
| Address pins | A0-A2 (8 per bus) |
| Per-pin features | direction, pull-up, polarity, interrupt |
| Interrupts | INTA + INTB (configurable) |
| Supply voltage | 1.8-5.5 V |
| Package | SOIC-28 |
Ordering variants
Same part, different packaging or reel option.
MCP23017-E/SO (SOIC-28)MCP23017-E/SP (SPDIP-28)
CAD (KiCad official)
- Symbol:
Interface_Expansion:MCP23017x-x-SO - Footprint:
Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm - 3D model: SOIC-28W (KiCad packages3D)
- 3D model files:
mcp23017-etched.step/mcp23017-etched.glbcarry the MPN laser-etched on the die in a toggleableAdom.LaserEtchgroup (Fusion-ready);mcp23017.step/mcp23017.glbare the bare package body.
Provenance
Data extracted from the manufacturer datasheet, not a distributor listing:
- Datasheet: Microchip Technology datasheet (42 pp, sha256
14159c6f5655e943, retrieved 2026-08-17, tier: manufacturer) - Extractor:
ds2sf(Claude). Every pin and dimension is cited to a datasheet page; it refuses to fabricate. - CAD: KiCad official libraries (CC-BY-SA 4.0).
# MCP23017
**Microchip Technology** · I2C 16-bit I/O expander · SOIC-28
Adds sixteen general-purpose I/O to a microcontroller over I2C, in a SOIC-28, the 16-bit big brother of the PCF8574. The pins are split into two 8-bit ports (GPA and GPB), each with per-pin direction, optional internal pull-ups, input polarity inversion, and interrupt-on-change that drives the INTA and INTB pins so the host need not poll. Three address pins (A0-A2) put up to eight of them on one bus for 128 I/O total. It speaks I2C up to 1.7 MHz (a sibling, the MCP23S17, uses SPI). Runs 1.8-5.5 V.
## Pinout
| Pin | Name | Type | Function |
|---|---|---|---|
| 1 | GPB0 | bidirectional | PORTB bit 0 bidirectional I/O. Configurable per-pin as input or output; supports interrupt-on-change and internal ~75 µA weak pull-up to VDD. IOL up to 8.0 mA @ VDD=4.5V. |
| 2 | GPB1 | bidirectional | PORTB bit 1 bidirectional I/O. Same characteristics as GPB0 - configurable direction, interrupt-on-change, optional weak pull-up. |
| 3 | GPB2 | bidirectional | PORTB bit 2 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 4 | GPB3 | bidirectional | PORTB bit 3 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 5 | GPB4 | bidirectional | PORTB bit 4 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 6 | GPB5 | bidirectional | PORTB bit 5 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 7 | GPB6 | bidirectional | PORTB bit 6 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 8 | GPB7 | bidirectional | PORTB bit 7 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 9 | VDD | power_in | Positive supply. Operating range 1.8V-5.5V (industrial), 2.7V-5.5V and 4.5V-5.5V for wider temperature grades. Bypass with a 0.1 µF ceramic close to the pin. |
| 10 | VSS | power_in | Ground reference for supply and all I/O. |
| 11 | NC | unconnected | No connect on MCP23017 (this pin is Chip Select /CS on the SPI-variant MCP23S17). Leave floating or tie to ground. |
| 12 | SCL | input | I2C serial clock input (Schmitt-trigger). Standard 100 kHz, Fast 400 kHz, and Fast-mode Plus 1.7 MHz supported. Requires an external pull-up resistor to VDD. |
| 13 | SDA | bidirectional | I2C serial data (open-drain, Schmitt-trigger input). Requires an external pull-up resistor to VDD. VOL ≤ 0.6V @ 3 mA sink (VDD=1.8V), ≤ 0.8V @ 3 mA sink (VDD=4.5V). |
| 14 | NC | unconnected | No connect on MCP23017 (this pin is SPI Serial Out on MCP23S17). Leave floating or tie to ground. |
| 15 | A0 | input | Hardware slave address bit 0 (TTL buffer). Must be externally biased to VDD or VSS - do not leave floating. Sets bit A0 of the 7-bit I2C address 0100 A2 A1 A0. |
| 16 | A1 | input | Hardware slave address bit 1 (TTL buffer). Must be externally biased to VDD or VSS. |
| 17 | A2 | input | Hardware slave address bit 2 (TTL buffer). Must be externally biased to VDD or VSS. Combined with A1/A0 allows up to eight MCP23017 devices on one I2C bus. |
| 18 | RESET | input | Active-low hardware reset (Schmitt-trigger). Must be externally biased (tie to VDD directly or via a pull-up if unused). Minimum low pulse 1 µs; device is active 0 ns after RESET returns high; outputs go Hi-Z within 1 µs of RESET going low. |
| 19 | INTB | output | Interrupt output for PORTB. Configurable via IOCON as active-high, active-low, or open-drain. Can be mirrored with INTA when IOCON.MIRROR=1. VOL ≤ 0.6V @ 1.6 mA sink (VDD=4.5V). |
| 20 | INTA | output | Interrupt output for PORTA. Configurable via IOCON as active-high, active-low, or open-drain. Can be mirrored with INTB when IOCON.MIRROR=1. |
| 21 | GPA0 | bidirectional | PORTA bit 0 bidirectional I/O. Configurable per-pin as input or output; supports interrupt-on-change and internal ~75 µA weak pull-up to VDD. IOL up to 8.0 mA @ VDD=4.5V. |
| 22 | GPA1 | bidirectional | PORTA bit 1 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 23 | GPA2 | bidirectional | PORTA bit 2 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 24 | GPA3 | bidirectional | PORTA bit 3 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 25 | GPA4 | bidirectional | PORTA bit 4 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 26 | GPA5 | bidirectional | PORTA bit 5 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 27 | GPA6 | bidirectional | PORTA bit 6 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
| 28 | GPA7 | bidirectional | PORTA bit 7 bidirectional I/O with optional interrupt-on-change and weak pull-up. |
## Key specifications
| Parameter | Value |
|---|---|
| Type | I2C 16-bit I/O expander |
| I/O lines | 16 (ports GPA0-7, GPB0-7) |
| Bus | I2C up to 1.7 MHz |
| Address pins | A0-A2 (8 per bus) |
| Per-pin features | direction, pull-up, polarity, interrupt |
| Interrupts | INTA + INTB (configurable) |
| Supply voltage | 1.8-5.5 V |
| Package | SOIC-28 |
## Ordering variants
Same part, different packaging or reel option.
- `MCP23017-E/SO (SOIC-28)`
- `MCP23017-E/SP (SPDIP-28)`
## CAD (KiCad official)
- Symbol: `Interface_Expansion:MCP23017x-x-SO`
- Footprint: `Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm`
- 3D model: SOIC-28W (KiCad packages3D)
- 3D model files: `mcp23017-etched.step` / `mcp23017-etched.glb` carry the MPN laser-etched on the die in a toggleable `Adom.LaserEtch` group (Fusion-ready); `mcp23017.step` / `mcp23017.glb` are the bare package body.
## Provenance
Data extracted from the manufacturer datasheet, not a distributor listing:
- **Datasheet:** [Microchip Technology datasheet](https://ww1.microchip.com/downloads/en/DeviceDoc/20001952C.pdf) (42 pp, sha256 `14159c6f5655e943`, retrieved 2026-08-17, tier: manufacturer)
- **Extractor:** `ds2sf` (Claude). Every pin and dimension is cited to a datasheet page; it refuses to fabricate.
- **CAD:** KiCad official libraries (CC-BY-SA 4.0).
[Datasheet PDF](docs/mcp23017-datasheet.pdf)