Довольно часто в практике разработчика возникает необходимость организовать множество параллельных дискретных портов ввода-вывода по последовательному интерфейсу. Эти порты могут использоваться, например, для опроса состояния различных датчиков или контактов, а также для дискретного управления единичными индикаторами или исполнительными устройствами. Наиболее предпочтительными для этих целей являются последовательные интерфейсы PC и SPI, которые обладают высокой скоростью, требуют минимального количества линий связи и широко распространены в различной аппаратуре.
Конечно, данную задачу можно решить, применив недорогой микроконтроллер, имеющий встроенный интерфейс PC или SPI. В этом случае микроконтроллер под управлением программы сможет принимать данные по последовательному интерфейсу и транслировать их через параллельные порты ввода-вывода, а также выполнять обратную передачу данных. Такой микроконтроллер должен иметь большое число выводов, или к нему придется подключить дополнительные регистры.
Однако поставленную задачу можно решить и более простым способом, не требующим использования микроконтроллера, а также создания и отладки программы. Такую возможность предоставляют новые микросхемы MCP23017 и MCP23S17 компании Microchip, которые были представлены на рынке электронных компонентов в 2007 г.
Первая из них является преобразователем последовательного интерфейса I2C в два параллельных 8-разрядных порта ввода-вывода, а вторая - преобразователем последовательного интерфейса SPI в два параллельных 8-разрядных порта ввода-вывода. Рассмотрим состав и основные технические характеристики этих микросхем.
Обе микросхемы обеспечивают преобразование данных из последовательного интерфейса в параллельный 16-разрядный, состоящий из двух 8-разрядных портов. Микросхемы отличаются только типом последовательного интерфейса: МСР23017 имеет интерфейс I2C, a MCP23S17 - интерфейс SPI. Набор внутренних регистров микросхем позволяет сконфигурировать любой вывод порта ввода-вывода. С помощью этих регистров можно задать направление, полярность и тип вывода. Кроме того, данные регистры позволяют создать гибкую систему с различными условиями генерации прерываний. Аппаратные адресные выводы используются для задания адреса самой микросхемы, что позволяет
подключить к одному последовательному интерфейсу одновременно несколько таких микросхем.
Ниже перечислены особенности и основные технические параметры описываемых микросхем:
- наличие двух 8-разрядных дистанционных двунаправленных портов ввода-вывода А и В, которые по умолчанию сконфигурированы как входы;
- скорость работы интерфейса I2C может составлять 100, 400 кГц или 1,7 МГц;
- скорость работы интерфейса SPI может достигать 10 МГц;
- три адресных вывода позволяют использовать до восьми микросхем на одной шине интерфейса;
- допускается конфигурировать выходной сигнал прерывания на выводах INTA и INTB как активный высокий и низкий уровни или открытый сток;
- выходные сигналы прерываний INTAn INTB могут быть сконфигурированы для независимого или совместного обслуживания;
- источник сигнала прерываний конфигурируется с помощью специального регистра и по умолчанию настроен на слежение за изменением сигнала на выводах портов;
- полярность входных данных портов ввода может изменяться с помощью конфигурационного регистра полярности;
- содержит схему сброса при включении питания;
- наличие входа внешнего сброса;
- ток потребления в режиме ожидания не превышает 1 мкА;
- максимальный выходной ток любого вывода составляет 25 мА;
- суммарная максимальная рассеиваемая мощность - 700 мВт;
- диапазон рабочего напряжения от 1,8 до 5,5В;
- температурный рабочий диапазон от -40 до +125°С;
- изготавливаются в 28-выводных корпусах типов PDIP (300 mil), SOIC (300 mil), SSOP и QFN (6x6 мм).
Рис. 1. Архитектура микросхем МСР23017 и MCP23S17
На рис. 1 представлена архитектура микросхем. Как видно из рисунка, микросхемы МСР23017 и MCP23S17 имеют одинаковую структуру и отличаются лишь интерфейсным блоком. Три входных адресных сигнала позволяют задать адрес микросхеме. Это дает возможность подключить к одному последовательному интерфейсу до восьми таких микросхем. Управление микросхемами осуществляется с помощью внутренних регистров конфигурации и управления. С их помощью можно включить автоматическую инверсию для каждой входной линии портов А и В.
Назначение выводов микросхем МСР23017 и MCP23S17 приведено в таблице 1.
Обращение к микросхемам по последовательному интерфейсу осуществляется путем передачи нескольких байт. Первый байт несет информацию о коде операции, включающим в себя адрес микросхемы и режим обращения (чтение или запись). Второй передаваемый байт содержит адрес внутреннего регистра микросхемы. Третий байт содержит байт данных.
Микросхема МСР23017 с интерфейсом PC поддерживает 7-разрядную адресацию. Восьмой разряд данных в управляющем байте определяет режим обращения к микросхеме. Он имеет обозначение R/W и инициирует режим чтения (R) или записи (W) при установке соответственно уровня лог. 1 или лог. О в этом разряде. Передача данных на шине всегда начинается со стартового условия S и заканчивается стоповым условием Р, которые показаны на рис. 2.
Для подтверждения приема данных используется девятый бит квитирования, имеющий название АСК. Микросхема MCP23S17 с интерфейсом SPI поддерживает байтовый обмен данными и имеет вход выбора кристалла CS, наличие низкого уровня сигнала на котором разрешает обращение к ней. Формат управляющего байта данных для интерфейса PC представлен на рис. 3, а для интерфейса SPI - на рис. 4.
Как видно из рисунков, адрес микросхем состоит из двух частей - неизменной части 0100, представляющей собой старшую часть двоичного адреса, и переменной младшей части адреса, определяемой состоянием разрядов А2, А1 и АО. При совпадении их значений адреса и значения сигналов, установленных на адресных выводах микросхемы, последняя будет откликаться на него.
Адресация внутренних регистров микросхем производится с помощью адреса, передаваемого во втором байте. Формат первого и второго байтов для интерфейсов PC и SPI представлен на рис. 5 и 6 соответственно.
Таблица 1. Назначение выводов микросхем МСР23017 и MCP23S17
Условные обозначения: 1 - ввод, О - вывод, Р - питание.
Рис. 2. Передача данных на шине
Рис. З. Формат управляющего байта данных для интерфейса I2С
Рис. 4. Формат управляющего байта данных для интерфейса SPI
Рис. 5. Формат первого и второго байтов для интерфейса I2С
Рис. 6. Формат первого и второго байтов для интерфейса SPI
Микросхемы МСР23017 и MCP23S17 имеют 11 регистров конфигурирования и управления для порта А и 11 регистров для порта В. Адресовать их можно двумя способами, определяемыми состоянием в регистре IOCON разряда под названием BANK с условной записью IOCON.BANK. Если IOCON.BANK=0, то адреса регистров портов Аи В являются спаренными. Например, регистр IODIRA порта А имеет адрес OOh, а регистр IODIRB порта В - адрес 01 h и т.д. При этом все 22 регистра доступны в диапазоне адресов от OOh до 15h.
Если IOCON.BANK=1, адреса регистров портов А и В отделены. Регистры, связанные с портом А, отображены на адреса OOh-OAh, а регистры, связанные с портом В, отображены на адреса 10h-1 Ah. Например, регистр IODI-RA порта А имеет адрес OOh, а регистр IODIRB порта В - адрес 10h. Таким образом, разряд IOCON.BANK обеспечивает режим 8-разрядного и 16-разрядного обращения к регистрам микросхем. В таблице 2 приведены оба варианта адресации регистров микросхем МСР23017 и MCP23S17. Данная организация регистров позволяет пользователю самостоятельно выбрать удобный режим адресации для обращения к ним из программы.
Рассмотрим назначение каждого из регистров. В таблице 3 отображены имена разрядов всех регистров микросхем для портов А и В. Следует обратить внимание на то, что их названия отличаются друг от друга лишь последней буквой. Кроме того, регистр IOCON является единым для обоих портов, хотя и имеет два адреса. Регистр IODIR определяет направление данных каждого разряда порта ввода-вывода. Когда любой разряд IO7 - Ю0 этого регистра установлен в единичное состояние, соответствующий вывод порта становится входом; когда данный разряд сброшен, вывод становится выходом.
Таблица 2. Адресация регистров микросхем МСР23017 и MCP23S17
Таблица 3. Имена разрядов регистров микросхем MCP23017 и MCP23S17
Регистр IPOL отвечает за инверсию полярности входов портов. Когда любой разряд IP7 - IP0 этого регистра установлен в единичное состояние, соответствующий вход порта инвертируется; когда данный разряд сброшен, вход порта не инвертируется.
Регистр GPINTEN управляет формированием прерывания для каждого вывода порта. Если любой из его разрядов GPINT7 - GPINT0 установлен, соответствующий вывод сформирует прерывание при изменении своего состояния. Сброс этих разрядов регистра запрещает формирование прерывания при изменении состояния входов портов.
Регистр DEFVAL представляет собой регистр сравнения с разрядами портов и позволяет формировать прерывания для каждого вывода порта при несовпадении соответствующего разряда порта и разряда DEF7 -DEFO данного регистра.
Регистр INTCON управляет реакцией входов порта на регистр сравнения для формирования прерывания. Если разряд ЮС7 - ЮС0 установлен, соответствующий вход порта сравнивается с соответствующим разрядом в регистре DEFVAL. Если разряд ЮС7 - ЮС0 сброшен, соответствующий вход порта сравнивается с его предшествующей величиной.
Регистр конфигурации IOCON содержит несколько разрядов для выбора конфигурации микросхемы:
- разряд 7 (BANK) определяет адресацию регистров (как показано выше);
- разряд 6 (MIRROR) управляет отражением разрядов порта на вход прерывания. Если он сброшен, прерывание на выводе INTA формируется от порта А, а прерывание на выводе INTB - от порта В. Если данный разряд установлен, прерывание на выводах INTAn INTB формируется от любого из портов;
- разряд 5 (SEQOP) управляет автоматическим инкрементом адреса для режима последовательных операций. Если он сброшен, автоинкремент отключен, если установлен - включен. Это позволяет читать и записывать данные в один и тот же регистр, не указывая каждый раз его адрес, а также производить запись и чтение последовательно во все регистры, указав лишь адрес первого регистра;
- разряд 4 (DISSLW) позволяет контролировать скорость изменения сигнала SDA. Если он установлен, скорость изменения сигнала SDA не контролируется, если сброшен - контролируется;
- разряд 3 (HAEN) разрешает аппаратную адресацию (только для MCP23S17). Если он установлен, аппаратная адресация разрешена, а если сброшен - запрещена;
- разряд 2 (ODR) позволяет конфигурировать вывод прерывания как открытый сток, если он установлен. Если этот разряд сброшен, активный уровень вывода прерывания определяется разрядом полярности INTPOL;
- разряд 1 (INTPOL) определяет активный уровень вывода прерывания. Когда он установлен, активный уровень высокий, когда сброшен - низкий;
- разряд 0 не используется и всегда читается как ноль. Регистр GPPU служит для подключения к входам портов подтягивающих к источнику питания резисторов 100 кОм. Когда любой разряд из PU7 - PU0 этого регистра установлен в единичное состояние, соответствующий вывод порта подключается к подтягивающему резистору; когда данный разряд сброшен, соответствующий вывод порта отключается от резистора.
Регистр INTF отражает факт возникновения прерывания от выводов порта, которые сконфигурированы с помощью регистра GPINTEN. Установленный разряд этого регистра указывает, что соответствующий вход порта вызвал прерывание. Этот регистр предназначен только для чтения, запись данных в него игнорируется.
Регистр захвата прерываний INT-САР позволяет определить уровень возникновения прерывания - 0 или 1. Этот регистр только читается и обновляется аппарат-но во время возникновения прерывания. Регистр останется неизменным, пока прерывание не будет очищено с помощью чтения регистра INTCAP или GPIO.
Регистр GPIO отражает значение порта. Чтение из этого регистра считывает порт. Запись в него модифицирует регистр OLAT.
Регистр блокировки OLAT обеспечивает доступ к выходному буферу. Чтение из этого регистра заканчивается чтением буфера, а не самого порта. Запись в него модифицирует выходной буфер, который изменяет выводы, сконфигурированные в качестве выходов.
Рис. 7. Структурная схема подключения восьми микросхем МСР23017 к последовательному
интерфейсу I2C
Рис. 8. Структурная схема подключения восьми микросхем MCP23S17 к последовательному интерфейсу SPI
Конструктивно микросхемы могут быть изготовлены в одном из четырех типов корпусов.
Следует обратить внимание на очень удачное расположение выводов микросхем, которое позволяет разрабатывать простую трассировку для печатной платы. Чертежи корпусов с указанием размеров можно найти на интернет-странице производителя микросхем: www.micro-chip.com.
На рис. 7 показана структурная схема подключения восьми микросхем МСР23017 к последовательному интерфейсу I2C. В качестве управляющего устройства здесь выступает процессор CPU. Аналогичная схема подключения к последовательному интерфейсу SPI представлена на рис. 8. Как видно из представленных схем, первая из них - с последовательным интерфейсом PC - намного проще.
Однако следует помнить, что тактовая частота данного интерфейса не превышает 1,7 МГц. Более сложная схема с последовательным интерфейсом SPI позволяет работать на частоте до 10 МГц.
Поскольку стоимость описанных микросхем составляет около 1 доллара США, они хорошо конкурируют с другими микросхемами подобного типа. А простота их применения и удачное для трассировки платы расположение выводов делает их использование предпочтительным.
Если требуется преобразовать последовательный порт в один параллельный байт, можно воспользоваться ранее выпущенными микросхемами МСР23008 и MCP23S08 этой же фирмы, имеющими один 8-разрядный порт ввода-вывода.
Статья предоставлена редакцией журнала Электроника. Другие статьи журнала "Электроника" можно прочитать на сайте журнала.
Тут ошибка в самом изложении. В таблице 2, графы бита IOCON.BANK при 1 и 0 перепутаны. А на рис.6 не хватает бита А1 во втором байте.
ZNLp8Q , [url=http://pkrcpmvelmzx.com/]pkrcpmvelmzx[/url], [link=http://jkhtrctkdfex.com/]jkhtrctkdfex[/link], http://wafxcfkzbljq.com/
Kudos! What a neat way of tihnikng about it.