starterkit.ru

21.03.2009 - Популярно о JTAG

Обзорная статья.



   Сложность электронных устройств неуклонно растет, как растет и сложность/стоимость процесса тестирования годных устройств в производственном цикле. Одной из целью при разработке стандарта IEEE 1149.1 (JTAG) было внедрить механизм позволяющий осуществлять контроль электрических соединений между микросхемами. Стоит сказать, что IEEE 1149.1 не ограничивается пограничным сканированием и программированием встроенной Flash памяти, это механизм который позволяет получить доступ к внутренностям микросхемы, а вот какие из функций при этом доступны/возможны определяются производителями микросхем (от программирования до доступа к внутренним регистрам процессора …). Во что это все вылилось: микросхемы объединяются в последовательную цепь, внешние выводы  дополняются так называемым регистром пограничного сканирования (РПС), на каждый вывод приходится, в общем случае, по 3 бита РПС (вход, выход, разрешение выхода). Так же в микросхему интегрируется Test Acces Port (TAP) контроллер, с его помощью осуществляется ввод команд, прием/передача данных. Вы наверняка уже видели подобную схему (машину состояний).

TAP, машина состояний 

   Переход из одного состояния в другое происходит в зависимости от состояния сигнала TMS по переднему фронту тактового сигнала (TCK). Например, чтобы обнулить состояние TAP (в каком бы состоянии на текущий момент он не находился) необходимо установить TMS=1 и подать 5 тактовых импульсов. Например, чтобы «задвинуть» команду надо: TLR TMS=0-> RTI TMS=1-> SDR TMS=1-> SIR TMS=0-> CIR TMS=0-> SIR, с этого момента необходимо последовательно «задвигать» код команды в IR регистр.
IR – регистр команд (регистр инструкций),  каждый производитель сам определяет поддерживаемый набор инструкций TAP машины и разрядность IR регистра, но любое устройство в JTAG цепи должно поддерживать одну команду – BYPASS (все единицы не зависимо от разрядности IR). Команда BUPASS заставляет замыкать вход TAP с выходом (через регистр) на операциях с регистром данных DR.
DR – регистр данных, для каждой команды может быть свой регистр данных со своей разрядностью, например регистр пограничного сканирования может иметь длину до нескольких сотен бит, а ID регистр устройства 32 бита.
Если устройство содержит регистр пограничного сканирования, это значит, что оно поддерживает инструкции INTEST и EXTEST.
INTEST, по приходу этой команды, записывается состояние внешних выводов подключенных к регистру пограничного сканирования, после чего этот регистр можно считать и сказать на каком из выводов какие логические уровни присутствуют.
EXTEST, по приходу этой команды, на выводах подключенных к регистру пограничного сканирования устанавливаются уровни (и направление) описанные в регистре пограничного сканирования.
   Как происходит ввод команд и чтение/запись DR в цепи устройств JTAG, ведь их количество произвольно, каждое устройство имеет разную разрядность IR …
Для начала, нужно выяснить количество микросхем в JTAG цепи, как минимум, Вы как разработчик это знаете, так же существуют алгоритмы автоматического определения количества устройств в JTAG цепи. Разрядность IR указывается в BSDL файлах (подробности ниже).
   Итак, допустим имеется три устройства в JTAG цепи, первое устройство имеет разрядность IR = 3, второе 8, третье 6 бит. Нужно выполнить команду 0х11 на втором устройстве цепи, сначала для этого нужно сформировать обобщенную команду  для всех устройств цепи сразу, причем для первого и третьего устройства это должна быть команда BYPASS, получим   111111 00010001 111 = 0x1F88F. Если после этого необходимо записать/считать данные в/из DR регистра, необходимо учесть что 1-е и 3-е устройства в JTAG цепи  находятся в состоянии BYPASS и добавить (или игнорировать) один бит вначале и один бит в конце передаваемой/принимаемой битовой последовательности. В общем случае, количество и порядок (вначале или в конце битовой последовательности) однозначно определяется числом устройств в JTAG цепи и их положением относительно того устройства с которым осуществляется взаимодействие.
   На практике, слово JTAG больше ассоциируется с возможностью внутрисхемного программирования и отладки программного кода, что согласитесь, очень удобно когда одним загрузочным кабелем можно программировать разные устройства. Хотя, в этом случае ограничения начинает вносить ПО разных производителей, ПО программаторов разных производителей, как правило, поддерживает только загрузочные кабеля своего производства.

BSDL
   Файл содержит информацию о поддерживаемых командах, разрядности IR регистра, разрядность и назначение битов регистра пограничного сканирования и прочую специфику устройства. Поставляется производителем, в минимальном варианте может содержать только разрядность IR регистра. BSDL IEEE1532 файлы в дополнение ко всему содержат алгоритмы программирование, очистка, верифицирования, применительно к  Flash устройствам.

SVF
   Призван унифицировать процесс программирования Flash устройств разных производителей. Создаваться может следующим образом:
выход ПО программатора направляется в SVF файл,
далее в интерактивном режиме осуществляются требуемые операции (очистка, программирование …),
закрывается сессия.
В итоге получается текстовый файл с унифицированной последовательностью операций над JTAG цепью, например:
   HIR 6 TDI (3f) SMASK (3f) ; - наложить маску и загрузить в IR  значение 0x3F
Далее этот файл можно «проигрывать» на специальных SVF плеерах (зачастую и ПО программатора может использовать SVF файлы).
Например, имеем JTAG цепь состоящую из микросхем фирмы Altera и Xilinx, для их программирования придется использовать два загрузочных кабеля т.к. ПО каждого производителя поддерживает только собственные загрузочные кабели. Но, в случае, если создать SVF файлы (для одного или всех устройств) , сможем запрограммировать все устройства одним кабелем.

XSVF
   Как указывал ранее, SFV файл это обычный текстовый файл с инструкциями и размер его может быть очень большим. Например, для программирования XCF04 (загрузочная 4МБит PROM) объем SVF файла составляет 4.5Мбайт. Для приложений чувствительных к объему конфигурационных файлов Xilinx предложила XSVF формат – более компактное «двоичное» представление SVF файла.

Цитирование и публикация данного материала возможна только с указанием ссылки на ресурс http://www.starterkit.ru

Опубликовано на сайте: http://www.starterkit.ru/html
Прямая ссылка: http://www.starterkit.ru/html/index.php?name=pages&op=view&id=1