МИКРОСХЕМЫ ПАМЯТИ С ИНТЕРФЕЙСОМ I2C. ОСОБЕННОСТИ И ПРИМЕНЕНИЕ
А. ДОЛГИЙ, г. Москва
Вход WP (Write Protect) предназначен для управления защитой записанных в микросхему данных. Иногда его обозначают как WC (Write Control) или даже WC, что совершенно не влияет на его функцию. Если этот вывод оставлен свободным или соединен с общим проводом, можно изменять содержимое любых ячеек. При высоком логическом уровне весь массив или его часть защищены от стирания и записи. В последнее время выпускают микросхемы, в которых предусмотрены участки памяти, запись в которые можно заблокировать и другими способами, например, командами ведущего.
Логическим уровнем на входе MODE (при его наличии) переключают режимы записи данных. Если он оставлен свободным или соединен с общим проводом, действует мультибайтный режим, в противном случае - страничный. Особенности этих режимов будут рассмотрены далее. Микросхемы, не имеющие названного входа, работают только в страничном режиме записи. Один из вариантов микросхемы ST14C02C (рис. 4) выпускают без внешнего вывода MODE, который на ее кристалле предусмотрен, но оставлен не подключенным. В результате всегда включен мультибайтный режим.
Схема соединений микросхем памяти с линиями шины I2C показана на рис. 5. В зависимости от числа действующих входов А0-А2 их может быть от одной до восьми, причем комбинации логических уровней на этих входах у каждой из них должны быть различными. Так как максимальная длительность импульсов на шине I2C не ограничена, ключами К1 и К2 могут служить даже обычные выключатели, коммутируемые вручную. Подобный вариант пригодится, если, например, необходимо "подручными средствами" прочитать или записать несколько байтов данных. Визуально определить состояние линий позволят светодиоды, включенные последовательно с резисторами R1 и R2.
Puc.5Но обычно в роли ведущего все-таки выступает микроконтроллер или специализированное устройство. Ключами К1 и К2 служат транзисторы выходных каскадов двунаправленного порта, например, порта Р0 микроконтроллера из семейства совместимых с MSC-51. Каждая из линий шины I2C занимает всего один разряд подобного порта. В противном случае на нее приходится расходовать по одному разряду обычных однонаправленных портов ввода и вывода, дополняя их ключами на биполярных или полевых транзисторах или логическими элементами с открытым коллектором (стоком).
Примером может служить адаптер для подключения устройств с интерфейсом I2C к параллельному порту персонального компьютера. Реализованное в нем распределение сигналов по битам регистров порта LPT1 приведено в табл. 2, а принципиальная схема показана на рис. 6.
Таблица 2
Бит
Значение по адресу
3F8H (вывод)
3F9H (ввод)
D0
А0
D1
А1
D2
А2
-
D3
WP
D4
-
D5
D6
SCL
SCL
D7
SDA
SDA
Разъем Х1 - розетка CEN-36F, обычно устанавливаемая на принтерах, или вилка DB-25M (с общим проводом соединяют ее контакты 18-25). В зависимости от типа разъема адаптер либо связывают с компьютером стандартным "принтерным" кабелем CENTRONICS, либо стыкуют непосредственно с розеткой LPT на системном блоке (в этом случае не обязательны элементы DD1.3, DD1.4 и резисторы R1, R2: первые -заменяют перемычками, вторые - исключают). В обслуживающей программе наличие или отсутствие инверторов в цепях SDA и SCL должно быть обязательно учтено.
Puc.6Рассмотрим процедуры "общения" ведущего с микросхемами памяти. Прежде всего, он обязан сформировать на шине команду СТАРТ вслед за которой послать байт с адресом ведомого и установленным признаком записи (лог. 1 в младшем разряде). Получив подтверждение приема, ведущий продолжает передачу, посылая один или два байта адреса ячейки памяти. Прием каждого из них должен быть подтвержден ведомым. В отличие от привычного программистам принятого в IBM PC порядка первым в данном случае передается байт со старшими разрядами адреса.
Дальнейшие действия зависят от того, намерен ли ведущий читать данные, хранящиеся в массиве памяти ведомого, или записывать их туда. Для записи одного или нескольких байт их достаточно передать вслед за адресом. Первый попадет в заданную ячейку, после чего внутренний контроллер микросхемы памяти автоматически инкрементирует (увеличивает на единицу) адрес. Поэтому повторять его передачу не требуется. Следующий байт будет направлен в следующую ячейку и так далее до верхней границы страницы записи (в соответствующем числе младших разрядов адреса ячейки - все единицы), после чего заполнение страницы продолжится с нижней границы (в младших разрядах - все нули). Число байт данных, передаваемых в одном сеансе, не ограничено, но сохранятся лишь последние из них в количестве, не превышающем длины страницы.
Страничная запись значительно сокращает время, требуемое для перезаписи всего массива памяти или большей его части. Однако пользоваться ею следует осторожно. Дело в том, что многие микросхемы, взаимозаменяемые по остальным параметрам, различаются именно длиной страницы записи. В ответственных случаях рекомендуется предварительно определить ее фактическую длину. Достаточно послать ведомому для записи заведомо больше данных, чем может поместиться на странице наибольшей длины, и проверить, в каких ячейках информация действительно изменилась.
Кроме страничной записи, иногда предусматривается и мультибайтная, отличие которой в том, что адреса последовательно записываемых ячеек могут находиться на смежных страницах, пересекая их границу. В одном сеансе передают данные максимум для восьми, реже -16 ячеек, причем "перебор" запрещен.
В любом случае после передачи и подтверждения приема всех данных для программирования ведущий подает команду СТОП, запускающую в микросхеме внутренний автомат записи. Продолжительность выполняемой им процедуры не зависит от числа изменяемых байтов: автомат всегда стирает и вновь записывает всю страницу. Интересно, что происходит это даже в тех случаях, когда соответствующая область памяти защищена от записи. Данные в ней будут стерты и повторно записаны без изменений. Так что, отключив питание в неподходящий момент, защищенную информацию можно испортить. Если данные переданы в мультибайтном режиме и находятся на разных страницах, продолжительность записи удваивается - автомат программирует две страницы.
До окончания процедуры программирования микросхема памяти не реагирует ни на какие внешние сигналы и в течение этого времени на повторные обращения ведущего по ее адресу не откликается. Этим пользуются для определения момента завершения программирования.
Перед чтением данных не требуется обязательно указывать адрес ячейки. Если ведущий обращается к микросхеме памяти, установив в младшем бите байта адреса ведомого признак чтения (лог. 1), в ответ ему будет передан байт из ячейки, следующей за той, с которой выполнялась последняя операция записи или чтения, после чего счетчик адреса будет автоматически инкрементирован. Выдача ведомым данных на линию SDA синхронизируется импульсами SCL, генерируемыми ведущим. Он же обязан подтвердить прием.
Продолжая посылать импульсы SCL, ведущий может последовательно и неоднократно прочитать весь массив данных. Возврата к началу страницы на ее границе при чтении не происходит, а за адресом последней ячейки всего массива следует нулевой. Сигнал окончания чтения - отсутствие подтверждения ведущим приема последнего или единственного байта данных и следующая за этим команда СТОП. Подавать такую команду после подтвержденного приема опасно, так как в некоторых ситуациях этим можно ошибочно запустить автомат записи.
При необходимости адрес читаемой ячейки задают в явном виде следующим образом. Прежде всего ведущий обращается к ведомому с признаком записи и посылает ему один или два байта адреса ячейки. Получив подтверждение, он немедленно (без команды СТОП) посылает новую команду СТАРТ а за ней - адрес ведомого с признаком чтения и выполняет описанную выше процедуру. Первым ему будет передан байт из ячейки с указанным адресом.
Еще одну возможность прочитать данные предоставляет микросхема АТ24С21, предназначенная для компьютерных периферийных устройств "Plug & Play", в первую очередь, мониторов. Во многих из них выводы SDA и SCL этой или подобной ей микросхемы соединены соответственно с выводами 12 и 15 внешнего 15-контактного разъема. Иногда через вывод 9 того же разъема на микросхему можно подать питание и прочитать хранящиеся в ней данные и даже изменить их, не включая монитор.
Сразу после включения питания при высоком уровне на линии SCL микросхема АТ24С21 входит в режим DDC1. В ответ на синхронизирующие импульсы, подаваемые на вывод 7, называемый в данном случае VCLK (в мониторе он соединен с выводом 14 интерфейсного разъема), микросхема побитно выдает на линию SDA все содержимое своей памяти. Хотя подтверждать прием в режиме DDC1 не требуется, каждый девятый импульс VCLK - холостой, ему соответствует высокий уровень на линии SDA. Передача повторяется циклически (за младшим битом последнего байта следует старший первого) неограниченное число раз.
Разобраться в этом потоке - нелегкая задача для приемника. Несколько облегчает ее то, что во время действия первых после включения питания восьми импульсов VCLK микросхема анализирует состояние шины SDA, воспринимая его как адрес ячейки, с которой следует начать передачу данных после холостого девятого импульса. Запись в микросхему, находящуюся в режиме DDC1, невозможна.
Режим DDC2, во всем совпадающий с ^С, включают сменой высокого уровня на линии SCL низким. После этого вход VCLK превращается в обычный WP и управляет защитой массива памяти от записи. Вернуться в режим DDC1 можно только коммутацией питания.
У некоторых микросхем предусмотрена возможность программного включения защиты части массива данных от записи. Одна из них - АТ34С02. Кроме обычного адреса ведомого, начинающегося двоичной комбинацией 1010, у нее имеется специальный, начинающийся комбинацией 0110, за которой следуют биты со значениями, совпадающими с логическими уровнями на входах А0-А2. Если микросхема подтверждает прием этого адреса, переданного с признаком чтения, - вам повезло, защита еще не включена. Прием обращения по тому же адресу с признаком записи микросхема подтвердит при условии, что на вывод WP подан высокий логический уровень. И все... Больше она на этот адрес никогда не откликнется, и изменить что-либо в младшей половине массива памяти уже не удастся. Защитой старшей половины массива продолжает управлять вход WP.
Аналогичная операция с микросхемами AT24CS128 или AT24CS256 сложнее. Она защитит старшие 256 байт массива. На входах АО и А1 следует установить любые, но одинаковые логические уровни. Затем передать по шине последовательность
СТАРТ
10101100
11ХХХХХХ
ХХХХХХХХ
ХХХХХХХХ
СТОПЗначения битов, обозначенных буквой X, безразличны. Как и в предыдущем случае, включенную однажды защиту невозможно отключить. Поэтому, не будучи полностью уверенным в том, что изменять данные в защищенной области никогда не потребуется, экспериментировать не стоит.
В заключение - несколько слов о том, как привести микросхему с интерфейсом I2C в исходное состояние. Обычно эту операцию автоматически выполняет внутренний контроллер после включения питания. Она может занимать довольно много времени (до 200 мс). В связи с этим спешить с записью или чтением не следует, лучше дать микросхеме время "прийти в себя". Если нормальная работа нарушилась в результате сбоя или ошибочных действий ведущего, ее нередко удается восстановить, не выключая питания. Для этого достаточно подать на линию SDA со стороны ведущего высокий уровень и сформировать девять импульсов аналогичного уровня на линии SCL. Убедившись, что ни одно из ведомых устройств не поддерживает на линии SDA низкий уровень, можно подавать команду СТАРТ. В неопределенных ситуациях ни в коем случае нельзя пользоваться командой СТОП, так как это чревато записью случайных данных по случайным адресам.
Подробную информацию о микросхемах памяти можно найти на Интернет-сайтах компаний-производителей.
Радио 3/2001, с.25-26.