При разработке тестера микросхем изначально ставилась цель максимально отделить код тестов от аппаратной реализации тестера. Для этого был разработан специальный язык для написания тестов. Тесты компилируются в массив из интерпретируемых инструкций, которые включаются в прошивку. При желании можно было бы, например, написать компиялтор в нативный AVR-код, или в код для любой другой платформы.
Сейчас в тестере есть два набора тестов - для ТТЛ и КМОП-микросхем. Файл описания тестов состоит из перечисления описания отдельных микросхем. Тестер последовательно проверяет микросхему на предмет соответствия этим описаниям и в результате выводит список микросхем, для которых тесты выполнились успешно.
Рассмотрение языка будем проводить в основном на примере микросхемы типа 155ЛА3, которая, как известно, представляет собой 4 элемента 2-И-НЕ. Её цоколёвка:
Ниже приведён пример теста для микросхем этого семейства:
CHIP[14] 'ЛА3(00),ЛА12(37),ЛА21(1000),ЛА23(1003),ТЛ3(132)' # 4 элемента 2И-НЕ POWER: -7 +14 IN: 1(X11), 2(X12), 4(X21), 5(X22), 9(X31), 10(X32), 12(X41), 13(X42) OUT: 3(Y1), 6(Y2), 8(Y3), 11(Y4) TEST: 11111111 => 0000 TEST: 00000000 => 1111 TEST: 01010101 => 1111 TEST: 10101010 => 1111
CHIP[14] 'ЛА3(00),ЛА12(37),ЛА21(1000),ЛА23(1003)'
Тут CHIP[14] означает объявление микросхемы, число в квадратных скобках - количество выводов в корпусе. Далее идёт список имён микросхем, если по этой логике может работать несколько разных чипов. В круглых скобках тут указаны номера импортных аналогов.
Следующая строка
POWER: -7 +14
говорит, на какие выводы микросхемы подключается питание. В данном случае, при тестировании на 7й вывод микросхемы будет подключена "земля", а на 14й вывод напряжение +5В. Напряжение питания всегда 5В. Питание подаётся с выводов МК ATMega128 через токоограничивающие резисторы (на схеме их сопротивление 22 Ом). Максимальный ток, который может отдать выход МК AVR не превышает 40мА. При этом, часть подаваемого напряжения упадёт на токоограничивающих резисторах. Для питания большей части микросхем этого вполне достаточно. Однако, если потребляемый микросхемой ток превышает 40мА, и/или напряжение, подаваемое на тестируемую микросхему проседает ниже допустимого (напряжение питания микросхем серий ТТЛ составляет 5В ±5%, для серии КР1533 допуск на напряжение питания больше, ±10%), то для её нормальной проверки надо задействовать плату ключей питания, позволяющую подать существенно больший ток в обход токоограничивающим резисторам. В этом случае к номеру пина микросхемы надо добавить звёздочку:
POWER: -7* +14*
Тогда тестер попытается подключить питание через полевые транзисторы, если это возможно (если найдётся транзистор нужной полярности подключенный к нужному выводу тестируемой МС). Если такой возможности нет, питание будет подаваться обычным образом.
Не следует включать питание через полевые транзисторы для всех микросхем подряд. При тестировнии прибор последовательно прогоняет все тесты на микросхеме, перебирая, в том числе, подачу разного питания. Хотя делается это очень быстро и питание подаётся на какие-то миллисекунды, но, тем не менее, перебор в обход токоограничивающих резисторов лучше сводить к достаточному минимуму. Как вариант, если хочется иметь возможность тестировать микросхемы разных серий - от прожорливых КР531 до К1533, то можно включить питание от полевиков в тестах, и отключать его в настройках (Power off), если оно не требуется. Если в настройках модуль полевиков отключен, то питание всегда будет подаваться от атмеги.
Следующий шаг - определение того, какие выводы микросхемы являются её входами, а какие выходами. Тестер будет подавать различные сигналы на входы и проверять состояние на выходах. Первоначальное конфигурирование выводов делается следующим образом:
IN: 1, 2, 4, 5, 9, 10, 12, 13 OUT: 3, 6, 8, 11
Тут после ключевого слова IN перечисляются номера пинов-входов тестируемой МС, а после слова OUT - имена выходов. Для улучшения читаемости тестов выводам можно давать строковые имена, указывая их в круглых скобках. Например, для микросхем семейства ЛА3:
IN: 1(X11), 2(X12), 4(X21), 5(X22), 9(X31), 10(X32), 12(X41), 13(X42) OUT: 3(Y1), 6(Y2), 8(Y3), 11(Y4)
Если микросхема имеет выходы с открытым коллектором (ОК), то для них надо включить подтяжку к питанию. Чтобы сказать об этом тестеру, перед номером выхода надо поставить знак @. Например, для микросхем семейства ЛА8:
OUT: @1, @4, @10, @13
или
OUT: @1(Y1), @4(Y2), @10(Y3), @13(Y4)
В этом случае тестер сразу после подачи питания "подтянет" эти выходы к напряжению питания (т.е., запишет для них единицы в соответствующие биты регистров PORTx ATMega128).
Для подачи сигнал на вход служит команда SET. Она имеет два способа записи. Если надо изменить состояние некоторых входов, команду можно написать так (на примере теста для ЛА3):
SET: 0 -> 2, 5, 10, 13 ; 1 -> 1, 4, 9, 12
это означает, что на входы 2, 5, 10 и 13 будет подан логический "0", а на входы 1, 4, 9 и 12 - логическая "1". Вместо номеров пинов можно указывать их имена (если они были определены):
SET: 0 -> X12, X22, X32, X42 ; 1 -> X11, X21, X31, X41
Это самая общая форма записи команды. Если надо изменить состояние только одного входа (например, подать логическую "1" на 9-й вход), то команда будет выглядеть так:
SET: 1->9
Следует заметить, что эту команду SET можно применять не только ко входам микросхемы, но и к её выходам. В этом случае установка выхода в "1" означает включения для него подтяжки к питанию. Подача "0" на выход, соответственно, отключает подтяжку к питанию (и включает подтяжку к "земле" через соответствующие резисторы тестера).
Такая форма записи удобна при изменении состояния одного-двух выводов, но при проверке, например, регистров и дешифраторов такая форма записи не очень удобна из-за своей громоздкости. Если надо разом изменить состояние всех (ну или почти всех) входов, то команду можно записать так:
SET: 10101010
Для микросхем семейства ЛА3, которые мы определили выше, эта запись будет эквивалентна предыдущей:
SET: 0 -> X12, X22, X32, X42 ; 1 -> X11, X21, X31, X41
Двоичное число определяет последовательность сигналов, подаваемых на все входы микросхемы в порядке их объявления (директивой IN). Количество разрядов в числе должно точно соответствовать количеству объявленных входов МС. Если менять состояние отдельных входов не надо, то для них ставится знак -.
Например, если бы мы не хотели менять состояние входа X41 в примере выше, то могли бы написать
SET: 101010-0
Вход 12(X41) был объявлен в списке входов предпоследним, поэтому, ему соответствует предпоследний разряд.
Также, для улучшения читаемости тестов в битовую маску можно добавлять символы двоеточия для разделения логических групп. Например, так:
SET: 10:10:10:10
Количество символов двоеточия в маске может быть произвольным, они служат только визуальным разделителем и игнорируются компилятором.
После того, как входы микросхемы должным образом сконфигурированы и на них поданы сигналы, можно проверять состояние выходов. Для этого служит команда TEST, синтаксис который похож на синтаксис команды SET. На примере всё той же ЛА3:
SET: 0 -> 2, 5, 10, 13 ; 1 -> 1, 4, 9, 12 TEST: 3, 6, 8, 11 -> 1
или
TEST: Y1, Y2, Y3, Y4 -> 1
команды проверяют, что на всех выходах МС установились логические единицы.
Если бы, например, надо было проверить, что на выходах Y1 и Y2 установились единицы, а на выходах "Y3" и "Y4" - нули, то запись была бы такой:
TEST: Y1, Y2 -> 1 ; Y3, Y4 -> 0
Для этой команды также существует короткая форма записи, проверяющая сразу состояние всех выходов.
Так последнюю команду можно было бы записать так:
TEST: 1100
Тут тоже можно использовать разделительные двоеточия для удобочитаемости и выделения логических групп. Если состояние отдельных выводов не имеет значения, то для них в маске можно указать знак вопроса. Например, если бы в предыдущем примере состояние Y4 было неизвестно и/или не требовало проверки, то команда выглядела бы так
TEST: 110?
Поскольку команды SET и TEST обычно используются совместно, существует ещё одна, более компактная форма записи этой комбинации. Вместо двух строк
SET: 10101010 TEST: 1111
Можно написать одну эквивалентную:
TEST: 10:10:10:10 => 1111
Под положительным импульсом далее будет подразумеваться перевод выхода из состояния логического нуля в состоянии логической единицы. Под отрицательным импульсом, соответственно, перевод пина из единицы в ноль.
Следующая команда подаёт положительный импульс на 3-й пин микросхемы:
PULSE: +3
Вместо номера пина можно указать его имя:
PULSE: +CLK
Если надо подать последовательность импульсов, то их количество можно указать в квадратных скобках. Например, следующая команда подаёт серию из восьми импульсов отрицательной полярности на 3й пин микросхемы:
PULSE: -3[8]
Существуют микросхемы, у которых одни и те же пины могут работать и как входы и как выходы (как правило, это зависит от того, что подано на некоторый управляющий пин). Для тестирования таких микросхем пригодится команда CONFIG. Рассмотрим её на примере микросхемы 555АП6. Изначально микросхема была объявлена как:
CHIP[20] 'АП6(245)' POWER: -10 +20 IN: 2,3,4,5,6,7,8,9, 1, 19 OUT: 18,17,16,15,14,13,12,11
Следующая команда поменяет её входы и выходы местами:
CONFIG: 18, 17, 16, 15, 14, 13, 12, 11, 1, 19 -> IN ; 2, 3, 4, 5, 6, 7, 8, 9 -> OUT
Некоторые микросхемы умеют переводить свои выходы в высокоимпедансное состояние, называемое также Z-состоянием. Вывод, переведённый в Z-состояние, ведёт себя как не подключенный к схеме. Для проверки того, что выходы микросхемы (или их часть) переведены в состояние высокого импеданса, служит команда TEST-Z. Вот пример её использования для той же АП6:
TEST-Z: 11111111
У микросхемы 8 выходов, и эта инструкция проверяет, что все они находятся в состоянии высокого импеданса. Команда принимает двоичное число, разрядность которого равна количеству выходов микросхемы. Те выходы, для которых в маске передана 1, будут проверены на предмет нахождении в Z-состоянии (выходы, для которых в маске записаны нули проверяться не будут).
Сама проверка делается в два шага: сначала для всех выходов отключается подтяжка к питанию, и они получаются подключёнными к земле через резисторы тестера (100 КОм). Значит, на выходе в Z-состоянии должен быть низкий уровень. Далее включается подтяжка к питанию (установкой битов регистров PORTx ATMega128), и проверяется, что на всех выходах установился высокий уровень. Если хотя бы одна из проверок не удалась, тест считается непройденным.
Эта команда похожа на предыдущую по своему синтаксису и нужна для того чтобы отличать микросхемы с открытым коллектором (ОК) от "обычных" микросхем (например, К155ЛА9 от К155ЛА3). Перед выполнением команды на всех проверяемых выходах должен быть высокий уровень. Пример команды
TEST-OC: 1111
Эта инструкция отключит подтяжку выходов к питанию и убедится в том, что уровень на них сменится на низкий.