Рисунок 4 – Способы внутренней организации буфера вывода SDA
В первом случае линия выходных данных через открытый сток полевого транзистора включена параллельно входной линии. Чип корректно реагирует на сигнал START I2C-протокола, сбрасывая внутренний контроллер в независимости от команд и процедур, выполняемых им в текущий момент.
Во втором случае вывод SDA использует двунаправленный буфер, управляемый внутренним контроллером чипа. Микросхема не «видит» сигнала START в процессе выдачи битов данных на линию (когда буфер включен в режим Out). Если неизвестно состояние такого чипа в данный момент, то необходимо послать в него девять тактовых импульсов с высоким (если сам чип позволит) логическим уровнем на линии SDA, потом сигнал START. После этого состояние чипа будет определено.
В первом случае нет необходимости делать это.
В 1989 году по заказу компании Fuji-Xerox, изготовили микросхему памяти в 256 байт. Чип был назван Xerox90 и в основе работы использовал классический I2C-протокол. Он обладает некоторыми оригинальными свойствами как в способе обращения к нему, так и в структуре памяти. При неверном обращении его легко можно заблокировать (или как стало популярным говорить «убить»). Заблокированный (или убитый, мертвый) чип по сути есть чип, все байты памяти которого при классическом I2C чтении имеют неизменяемое нулевое значение. В связи с высокой трудоемкостью восстановления или разблокирования такого чипа его дальнейшее использование нецелесообразно. В 1994 году чип был доработан, но название Xerox90 сохранилось. Изменения от первоначального варианта в большей степени коснулись структуры памяти и способа ее полного перепрограммирования. Последняя известная его доработка произошла в 2000 году. Микросхема незначительно изменила структуру работы по классическому протоколу и способу перепрограммирования. Она получила новое название Xerox01. Вероятно, существовали или есть и другие производители таких чипов, так как численность таких микросхем с несущественными отклонениями от основной идеи защиты памяти достигает трех десятков. Однако все эти микросхемы очень легко привести в «мертвое» состояние. И все они имеют сходную структуру полного перепрограммирования.
Демонстрационная версия программы, представленная на сайте, позволяет Вам прочитать чип Xerox и получить такую же информацию, какую Вы получили бы используя любой другой программатор I2C и убили бы чип. Демо-версия не убивает чип Xerox при установке опции «Устройства» программы в позицию «Xerox» и предупреждает о возможных последствиях при иных установках.
Что касается чипов от HP Business InkJet, они имеют сходный с I2C протокол. Отличия в структуре команд чтения. Оно вместе с адресацией данных в чипе проходит в одну последовательность от Start до Stop. Все чипы одного аппарата (а их там 8 штук) имеют различный адрес устройства, зависящий от установки чипа. В виду отсутствия видимого интереса пользователей к этому чипу, его поддержка не включена ни в демонстрационную версию, ни в полный вариант программы для I2C. Однако если будет такая необходимость, то соответствующие доработки будут произведены.
По типу микросхем программаторы различают:
· Программирующие микросхемы ПЗУ (ПЗУ с ультрафиолетовым стиранием, ППЗУ, флэш-память).
· Программирующие внутреннюю память микроконтроллеров.
· Программирующие ПЛИС (Программируемые логические интегральные схемы).
Универсальные программаторы могут поддерживать все вышеперечисленные типы.
По сложности:
· Если нужно единожды запрограммировать микроконтроллерное устройство, радиолюбители обходятся простейшим программатором, подключаемым к COM- или LPT-порту. Например, самый простой программатор для микросхем AVR – это кабель из шести проводов и четырёх резисторов (так называемый программатор PonyProg).
· Те любители, которые занимаются разработкой прошивок или производят свои схемы в больших количествах, используют программаторы посложнее – такие устройства часто содержат свой микроконтроллер. Подобные программаторы удобны тем, что после работы переводят свои выходы в Z-состояние, и запрограммированное устройство можно испытывать, не отключая программатора. Такие программаторы, как правило, работают с одним-двумя семействами микросхем.
· Самодеятельным конструкторам программаторов известна «проблема курицы и яйца» – если программатор содержит запрограммированный микроконтроллер, то как его запрограммировать? Обычно или отдают микросхему профессионалам, или строят простейший программатор и идут к другу, у которого на компьютере есть соответствующий порт (всё больше современных компьютеров вообще не имеют COM- и LPT-портов).
· В конструкторских бюро и лабораториях применяются универсальные программаторы. Поскольку в таких устройствах каждый из выводов разъёма (а этих выводов может быть до сотни) может подавать на микросхему напряжения от 0 до 27 В с точностью в 0,1 вольт и частотами до 40 МГц, универсальные программаторы бывают очень дороги – до нескольких тысяч долларов. Зато при появлении новой микросхемы достаточно добавить её поддержку на программном уровне.
По подключению микросхемы:
· Параллельный.
· Внутрисхемный.
Параллельные программаторы содержат разъём, в который и вставляется программируемая микросхема. Внутрисхемные пригодны только для тех микросхем, в которых поддерживается внутрисхемное программирование, но позволяют прошивать микросхему, не вынимая её из устройства.
При покупке параллельного программатора стоит обратить внимание на качество разъёма, в который устанавливается микросхема. Обычный одноразовый разъём долго не прослужит; программатор должен иметь цанговые разъёмы – а ещё лучше ZIF. В дорогих программаторах есть несколько разъёмов – под разные виды корпусов.
Первые программаторы были автономными – для набора прошивки имелась клавиатура или коммутационная панель. С распространением ПК такие программаторы были полностью вытеснены подключаемыми к компьютеру – специальная программа (которая также называется программатором) передаёт прошивку с компьютера, а программатору остаётся только записать её в память микросхемы.
Для подключения программаторов могут применяться:
– Последовательный порт.
– Параллельный порт.
– Специализированная интерфейсная плата (ISA или PCI).
– USB.
Стоит заметить, что в самых простых параллельных и последовательных программаторах управляющему ПО приходится напрямую управлять логическим уровнем на выводах порта. Такое прямое управление в Windows NT запрещено, это обходится установкой специализированного драйвера; через адаптеры USB>COM bitbang-программаторы работают крайне медленно (единицы-десятки байт в секунду). Микроконтроллерные программаторы полностью поддерживают протокол COM- или LPT-порта и поэтому свободны от этих недостатков.
Специализированные платы изредка применялись до появления USB, так как позволяли достичь максимальных скоростей обмена данными. Впрочем, одновременно они делали программатор стационарным.
Современные программаторы подключаются через USB (лишь простые дешёвые конструкции используют COM- или LPT-порты).
По дополнительным функциям:
– Наличие программного обеспечения под распространённые платформы (обычно под Windows и Linux; остальные ОС среди разработчиков непопулярны).
– Проверка правильности подключения ещё до попытки стереть микросхему.
– Проверка исправности программатора.
– JTAG-адаптеры, пригодные одновременно как для программирования, так и для отлаживания прошивок.
– Полевые программаторы имеют компактные размеры и содержат внутреннюю память для хранения прошивки.[1] Такие программаторы предназначены для обслуживания техники прямо в местах её установки (подчас труднодоступных).
– Встроенный HEX-редактор, позволяющий откорректировать записанную в микросхеме информацию.
– Возможность самостоятельного обновления прошивки самого программатора.
– Возможность одним нажатием кнопки выполнить некоторую последовательность действий – например, стереть, проконтролировать стёртость, записать, проверить правильность записи и установить конфигурационные биты (так называемое автоматическое программирование).
В программаторах для массового программирования может применяться скриптовый язык, на котором можно реализовать, например, автоинкремент серийных номеров – таким образом, каждая микросхема будет иметь уникальный номер.
Прочитав название статьи каких-нибудь 10-15 лет назад, мы бы очень удивились: нам бы ваши проблемы. Работая на «ящиках», мы и понятия не имели, что в этом вопросе бывает какая-то неопределенность. Перечень разрешенных к применению микросхем был настолько «широк», что приходилось выбирать практически из одной позиции, да и вопрос с программаторами обстоял элементарно просто: тебе нужен программатор – сделай его сам. Каждая лаборатория с гордостью делала свой, самый лучший и надежный программатор. Каких устройств там только не было: начиная от простых, но очень надежных изделий на тумблерах, до очень сложных, занимавших половину рабочего стола и иногда работавших мощных программаторов. Их разработчики с любовью программировали каждый бит тех сложных устройств (благо устройства эти не были обременены большим количеством информации). Обычно пользоваться таким программатором мог только человек, давший ему жизнь, а весь процесс программирования со стороны воспринимался, как шаманский танец с бубном. Теперь мы, к великому сожалению, лишены всей прелести тех лет.
С падением железного занавеса выяснилось, что перечень программируемых интегральных схем в мире просто гигантский – это микросхемы памяти как с параллельным, так и с последовательным доступом информации (EPROM, EEPROM, FLASH); микроконтроллеры с внутренней памятью команд и данных; микросхемы программируемой логики (PLD). Причем, перечень таких изделий с каждым годом стремительно растет, имея тенденцию к усложнению изделий и к увеличению их гибкости. С другой стороны, как ответ на потребность использования этих микросхем, рынок наполняется большим количеством программаторов. Как не ошибиться и сделать правильный выбор при приобретении программатора? В этой статье мы попытаемся дать представление об устройстве программаторов и ответить на этот вопрос.