Выбрать главу

Стандарт 1149.1 предусматривает и инструкцию тестирования внутренней логики устройства INTEST, но ее поддерживают не все устройства.

Контроллер тестового порта (TAP-controller) представляет собой синхронный конечный автомат, изменяющий состояние по фронту сигнала TCK и по включению питания. Сменой состояний управляет сигнал TMS (Test Mode State), воспринимаемый по положительному перепаду TCK. Граф состояний и переходов управляющего автомата представлен на рис. 11.8. Около стрелок переходов указаны значения сигнала TMS во время фронта TCK.

Рис. 11.8. Граф состояний и переходов контроллера TAP

В исходное состояние Test-Logic-Reset контроллер автоматически переходит по включении питания и из любого другого состояния может быть переведен высоким уровнем TMS, удерживаемым не менее пяти тактов TCK. Для перевода в состояние Test-Logic-Reset иногда используют и дополнительный сигнал TRST. В этом состоянии тестовая логика запрещена, и устройство работает в нормальном режиме.

Состояние Run-Test/Idle является промежуточным между выполнением тестовых операций. В этом состоянии регистры не изменяют своего значения.

В состоянии Capture-DR во время выполнения инструкций EXTEST и SAMPLE/PRELOAD сканирующий регистр фиксирует только данные на входных линиях.

В состоянии Shift-DR данные с TDI продвигаются через подключенный сдвиговый регистр на выход TDO.

В состоянии Pause-DR контроллер временно запрещает продвижение данных через сдвиговый регистр.

В состоянии Update-DR по спаду TCK сигналы из сдвигового регистра фиксируются на выходах тестовых ячеек.

В состоянии Capture-IR контроллер загружает в сдвиговый регистр инструкций код «безобидной» инструкции SAMPLE.

В состоянии Shift-IR в цепь между TDI и TDO включается сдвиговый регистр инструкций, но еще исполняется предыдущая инструкция.

В состоянии Pause-IR контроллер временно запрещает продвижение данных через сдвиговый регистр инструкций.

В состоянии Update-IR по спаду TCK фиксируется новая исполняемая инструкция, и в цепь TDI-TDO включается соответствующий ей регистр.

Кроме этих основных состояний контроллера, определяющих действия тестового оборудования, имеются и временные промежуточные состояния, необходимые для реализации переходов автомата. К ним относятся Select-DR-Scan, Exit1-DR, Exit2-DR, Select-DR-Scan, Exit1-IR и Exit2-IR.

Для интерфейса JTAG существует специальный язык описания устройств BSDL (Boundary Scan Description Language). Состав и порядок следования информационных и управляющих ячеек в сдвиговом регистре данных специфичен для каждого устройства (для чего и существует идентификационный регистр) и сообщается его разработчиками.

Интерфейс JTAG используется не только для тестирования, но и для программирования различных устройств, в том числе и энергонезависимой памяти микроконтроллеров. Контакты для сигналов JTAG имеются на шине PCI, однако в их использовании единообразия не наблюдается (либо остаются неподключенными, либо соединяются для организации цепочки). Интерфейс JTAG имеется в современных процессорах; здесь он позволяет не только тестировать сам процессор (это не представляет особого прикладного интереса), но и организовать зондовый режим отладки (probe mode, см. [6, 7]). Зондовый режим является мощным средством отладки системного программного обеспечения; обычный процессор, связанный с тестовым контроллером интерфейсом JTAG, превращается во внутрисхемный эмулятор — мечту разработчика системного ПО.

11.5. Программно-управляемая реализация последовательных интерфейсов

Рассмотренные выше интерфейсы — I²C, SMBus, SMI, SPI и JTAG — имеют общее свойство: они управляются и синхронизируются контроллером и не требуют фиксированной частоты синхронизации. Это позволяет для многих применений программно реализовать их на любом компьютере или микроконтроллере. На рис. 11.9 приведена схема простейшего адаптера интерфейсов I²C, SMBus или SMI для LPT-порта. Здесь сигнал SCL (или MDC в SMI) формируется непосредственно от выходной линии Strobe; для его переключения достаточно последовательно записывать в бит 0 регистра CR (порт с адресом LPT_BASE+2) нули (высокий уровень сигнала) и единицы (низкий). Двунаправленный сигнал SDA (MDIO в SMI) реализуется чуть сложнее: для передачи нуля в бит 1 регистра CR (LPT_BASE+2) записывается единица, для передачи единицы — нуль. На время чтения в этот бит должен быть записан нуль (чтобы на выходе был высокий уровень), данные (инверсные) считываются из бита 7 регистра SR (LPT_BASE+1). В адаптере должен использоваться диод с малым прямым падением напряжения. Лучше всего для этого подходят германиевые меза-диоды Д310 или Д311; кремниевые диоды, даже с барьерами Шоттки, здесь работают хуже (возможен слишком высокий формируемый уровень нуля).

Рис. 11.9. Адаптер трехпроводных интерфейсов для LPT-порта

Программная реализация протоколов в среде DOS и Windows 9x не вызывает особых затруднений, поскольку здесь программист может обращаться к регистрам порта непосредственно. В более защищенных ОС (UNIX, Linux, Windows NT/2000) для обращения к регистрам LPT-порта требуются вызовы API.

При использовании данных адаптеров следует внимательно относиться к проблемам защиты от помех. Непосредственно с адаптера сигналы можно передавать лишь на небольшие расстояния (десятки сантиметров). Для передачи на большие расстояния (если ПК не приблизить к объекту) подойдут преобразователи уровней сигналов ТТЛ в дифференциальные сигналы интерфейса RS-422 и обратно. При этом адаптер разделяется на 2 блока, соединенные кабелем, — первый блок устанавливается на LPT-порт, другой — около подключаемого объекта.

Несколько сложнее получаются адаптеры этих интерфейсов для СОМ-портов. Здесь можно программно генерировать сигналы DTR и RTS и считывать состояния сигналов CIS, DSR, DCD и RI. Усложнение заключается в необходимости использования преобразователей уровней сигналов RS-232C в ТТЛ (для этого выпускается ряд микросхем, например фирмами Maxim, Sypex), для которых требуется подача питания.

Для интерфейсов SPI и JTAG тоже можно использовать LPT-порт, здесь даже не требуется организация двунаправленных линий. Сигналы SCK и MOSI (SPI), TCK, TMS, TDO и TRST (JTAG) можно подключить к любым выходным линиям порта, MISO (SPI), TDI (JTAG) — к любой входной линии. Простейший адаптер содержит лишь последовательные резисторы 100–150 Ом, включенные в сигнальные цепи для уменьшения «звона» и влияния кабеля на схему. Однако такая схема может надежно работать лишь при небольшой длине кабеля (20–30 см), что не всегда удобно. Более надежна и удобна схема с буферами, способными переходить в высокоимпедансное состояние (например, 74НС244 или 1556АП5). Плата с буфером может соединяться с LPT-портом довольно длинным кабелем, а от нее к устройству идет короткий кабель. Программно-управляемый перевод буфера выходных сигналов в третье состояние позволяет логически отключать адаптер от программируемой схемы, что особенно удобно в процессе отладки программируемых устройств. Именно так устроен популярный адаптер «ByteBlaster», применяемый для программирования конфигурируемой логики фирмы Altera и других. Адаптер вместе с ПО может обеспечивать протокол SPI (быть ведущим устройством в варианте с двухточечной топологией), JTAG и собственный протокол программирования устройств «Serial Passive». Схемы различных адаптеров и ПО для них можно легко найти в Сети.