Перейти к содержанию

MCP23017 — расширитель портов на 16 выводов с I²C

MCP23017 добавляет микроконтроллеру 16 выводов общего назначения по шине I²C: у каждого — свой бит направления, подтяжка и прерывание по изменению. Разбираем по даташиту Microchip выводы, адресацию, главные регистры и отличия от простого PCF8574.

Обновлено Редакция GAW

MCP23017 — 16-битный расширитель портов Microchip с интерфейсом I²C; его брат MCP23S17 отличается только интерфейсом — SPI до 10 МГц. Выводы разбиты на два 8-битных порта A и B, у каждого свой набор регистров. Питание — от 1,8 до 5,5 В в промышленном диапазоне температур, поэтому микросхема работает и с 3,3-, и с 5-вольтовыми контроллерами.

Выводы

MCP23017, вид сверху: 1–8 GPB0–GPB7, 9 VDD, 10 VSS, 11 NC, 12 SCK, 13 SDA, 14 NC, 15 A0, 16 A1, 17 A2, 18 RESET, 19 INTB, 20 INTA, 21–28 GPA0–GPA7MCP230171GPB02GPB13GPB24GPB35GPB46GPB57GPB68GPB79VDD10VSS11NC12SCK13SDA14NC15A016A117A218RST19INTB20INTA21GPA022GPA123GPA224GPA325GPA426GPA527GPA628GPA7вид сверху
MCP23017 в корпусе DIP-28, вид сверху

Выводы A0–A2 и RESET Microchip требует подключать к определённому уровню — оставлять их свободными нельзя. Вывод SCK — линия SCL шины I²C. У корпуса QFN нумерация другая, её сверяют по таблице 1-1 даташита.

Адрес

Адрес I²C — 0100 A2 A1 A0 в двоичном виде, то есть от 0x20 до 0x27. Восемь расширителей на одной шине дают 128 выводов. Тот же диапазон 0x20–0x27 занимает PCF8574, поэтому при совместном использовании адреса разводят выводами. Другие адреса популярных устройств — в статье об адресах I²C.

Главные регистры

Адреса — при настройке по умолчанию (IOCON.BANK = 0), когда регистры портов A и B чередуются:

РегистрПорт AПорт BНазначение
IODIR0x000x01направление: 1 — вход, 0 — выход; после сброса все выводы — входы
IPOL0x020x03инверсия чтения входа
GPINTEN0x040x05разрешение прерывания по изменению
DEFVAL, INTCON0x06, 0x080x07, 0x09сравнение с заданным значением вместо любого изменения
IOCON0x0A0x0Bобщая настройка: режим адресов, объединение INTA и INTB, открытый сток выхода прерывания, полярность
GPPU0x0C0x0Dподтяжка входа: 1 — включена
INTF, INTCAP0x0E, 0x100x0F, 0x11какой вывод вызвал прерывание и состояние порта в этот момент
GPIO0x120x13чтение выводов
OLAT0x140x15защёлка выходов — запись выходов без чтения порта

Типичная последовательность: записать в IODIRA ноль для выходов, затем писать значения в OLATA или GPIOA; для входов — включить GPPUB и читать GPIOB. По умолчанию после передачи байта адрес регистра увеличивается сам, поэтому IODIRA и IODIRB можно записать одной транзакцией.

Прерывания

У каждого порта свой выход прерывания — INTA и INTB; их можно объединить битом MIRROR в IOCON. Выход настраивается как двухтактный с активной единицей или нулём либо как открытый сток. Источник — любое изменение вывода или отличие от значения в DEFVAL. Регистр INTCAP запоминает состояние порта в момент прерывания; прерывание сбрасывается чтением INTCAP или GPIO.

Токи и уровни

ПараметрЗначение по Microchip
Ток через один выводдо 25 мА втекающий и вытекающий
Суммарный токдо 125 мА через VDD и 150 мА через VSS
Ноль на выходедо 0,6 В при 8 мА
Единица на выходене ниже VDD − 0,7 В при 3 мА
Встроенная подтяжка40–115 мкА при 5 В
Ток в покоедо 1 мкА

Светодиоды подключают с резистором, считая не только ток каждого вывода, но и суммарный ток корпуса. Встроенная подтяжка — около 100 кОм; для длинных линий нужен внешний подтягивающий резистор. Сравнение с простым 8-битным расширителем — в карточке PCF8574, шина и подтяжки — в статье «Интерфейс I²C».

Частые вопросы

Какой адрес I²C у MCP23017?

0x20–0x27: старшие биты адреса — 0100, младшие три задают выводы A2, A1, A0. Все три на общем проводе — 0x20, все на питании — 0x27. На одной шине можно поставить восемь MCP23017, то есть 128 выводов. Выводы адреса нельзя оставлять свободными — Microchip требует подключить их к определённому уровню.

Как включить подтяжку входов MCP23017?

Записать единицы в регистр GPPUA или GPPUB (адреса 0x0C и 0x0D при настройке по умолчанию) для нужных выводов. Встроенная подтяжка слабая: по Microchip ток 40–115 мкА при 5 В, что соответствует примерно 100 кОм. Для кнопки этого обычно хватает, для длинных линий ставят внешнюю подтяжку.

Чем MCP23017 отличается от PCF8574?

У MCP23017 16 выводов против 8, у каждого есть настоящий регистр направления, подтяжка включается программно, а выход — двухтактный: в единице он отдаёт миллиамперы, а не десятки микроампер, как PCF8574. PCF8574 проще: квазидвунаправленные выводы, слабая единица, I²C до 100 кГц. MCP23017 работает на I²C до 1,7 МГц и умеет прерывания по сравнению с заданным значением.

Зачем подключать вывод RESET у MCP23017?

Microchip указывает, что RESET должен быть подключён к определённому уровню: свободный вывод может случайно сбросить микросхему. Обычно его соединяют с питанием напрямую или через резистор либо с выводом микроконтроллера, чтобы сбрасывать расширитель программно.

Источники

  1. Microchip. MCP23017/MCP23S17: 16-Bit I/O Expander with Serial Interface (DS20001952C, 2016) — табл. 1-1 — выводы; разд. 1 — питание 1,8–5,5 В, I²C 100 кГц, 400 кГц и 1,7 МГц; предельные токи 25 мА на вывод, 125 мА через VDD, 150 мА через VSS; подтяжка 40–115 мкА при 5 В; табл. 3-1 — адреса регистров при BANK = 0 и 1; разд. 3.3 — адрес 0100 A2 A1 A0
  2. Texas Instruments. PCF8574 Remote 8-Bit I/O Expander for I2C Bus (SCPS068K, revised September 2024) — для сравнения: 8 квазидвунаправленных выводов без регистра направления, I²C до 100 кГц

Нашли ошибку?