JTAG (названный в честь Объединенной группы по тестированию, которая его кодифицировала) — это отраслевой стандарт для проверки конструкций и тестирования печатных плат после изготовления.
JTAG реализует стандарты для встроенного инструментария в автоматизации электронного проектирования (EDA) в качестве дополнительного инструмента для цифрового моделирования . [1] Он определяет использование выделенного отладочного порта, реализующего последовательный интерфейс связи для доступа с низкими накладными расходами без необходимости прямого внешнего доступа к системному адресу и шинам данных. Интерфейс подключается к встроенному порту тестового доступа (TAP), который реализует протокол с отслеживанием состояния для доступа к набору тестовых регистров, которые представляют логические уровни чипа и возможности устройства различных частей.
Группа совместных действий по тестированию была сформирована в 1985 году для разработки метода проверки конструкций и тестирования печатных плат после изготовления. В 1990 году Институт инженеров по электротехнике и электронике систематизировал результаты усилий в стандарте IEEE 1149.1-1990 под названием « Стандартный порт тестового доступа и архитектура граничного сканирования» .
Стандарты JTAG были расширены многими производителями полупроводниковых микросхем специализированными вариантами для предоставления функций, специфичных для конкретного производителя. [2]
В 1980-х годах многослойные печатные платы и интегральные схемы (ИС) с использованием шариковой сетки и аналогичных технологий монтажа стали стандартными, и соединения устанавливались между ИС, которые были недоступны для зондов. Большинство производственных и полевых дефектов в печатных платах были вызваны плохими паяными соединениями на платах, дефектами среди соединений платы или связями и соединительными проводами от контактных площадок ИС к рамкам выводов штырей. Группа совместных тестовых действий (JTAG) была сформирована в 1985 году для обеспечения обзора выводов от одной контактной площадки ИС к другой, чтобы эти неисправности можно было обнаружить.
Промышленный стандарт стал стандартом IEEE в 1990 году как IEEE Std. 1149.1-1990 [3] после многих лет первоначального использования. В том же году Intel выпустила свой первый процессор с JTAG ( 80486 ), что привело к более быстрому принятию его в отрасли всеми производителями. В 1994 году было добавлено дополнение, содержащее описание языка описания граничного сканирования (BSDL). Дальнейшие уточнения относительно использования всех нулей для EXTEST, разделения использования SAMPLE от PRELOAD и лучшей реализации для ячеек OBSERVE_ONLY были сделаны и выпущены в 2001 году. [4] С 1990 года этот стандарт был принят электронными компаниями по всему миру. Граничное сканирование в настоящее время в основном является синонимом JTAG, но JTAG имеет важные области применения за пределами таких производственных приложений. Пересмотр IEEE Std. 2013 [5] В версии 1149.1 представлен широкий набор дополнительных функций, связанных расширений BSDL и нового языка описания процедур (PDL), основанного на Tcl .
Хотя ранние приложения JTAG были нацелены на тестирование на уровне платы, здесь стандарт JTAG был разработан для помощи в тестировании устройств, плат и систем, диагностике и изоляции неисправностей. Сегодня JTAG используется в качестве основного средства доступа к подблокам интегральных схем , что делает его важным механизмом для отладки встроенных систем , которые могут не иметь других каналов связи с возможностью отладки. [ требуется цитата ] В большинстве систем отладка на основе JTAG доступна с самой первой инструкции после сброса ЦП, что позволяет ей помогать в разработке программного обеспечения ранней загрузки , которое запускается до того, как что-либо будет настроено. Внутрисхемный эмулятор (или, правильнее сказать, адаптер JTAG ) использует JTAG в качестве транспортного механизма для доступа к отладочным модулям на кристалле внутри целевого ЦП . Эти модули позволяют разработчикам программного обеспечения отлаживать программное обеспечение встроенной системы непосредственно на уровне машинных инструкций, когда это необходимо, или (что более типично) в терминах исходного кода на языке высокого уровня.
Поддержка отладки системного программного обеспечения является для многих разработчиков программного обеспечения основной причиной интереса к JTAG. Многие архитектуры кремния, такие как PowerPC, MIPS, ARM и x86, построили целую инфраструктуру отладки программного обеспечения, трассировки инструкций и трассировки данных вокруг базового протокола JTAG. Однако часто отдельные поставщики кремния реализуют только части этих расширений. Некоторые примеры - ARM CoreSight и Nexus , а также реализации Intel BTS (Branch Trace Storage), LBR (Last Branch Record) и IPT (Intel Processor Trace). Существует много других подобных расширений, специфичных для поставщиков кремния, которые могут быть не задокументированы, кроме как в соответствии с NDA . Принятие стандарта JTAG помогло отодвинуть среды отладки, ориентированные на JTAG, от ранних процессорно-специфичных конструкций. Процессоры обычно можно останавливать, выполнять пошагово или позволять им работать свободно. Можно устанавливать точки останова кода как для кода в ОЗУ (часто с использованием специальной машинной инструкции, например INT3 ), так и в ПЗУ/флэш-памяти. Часто доступны точки останова данных, как и массовая загрузка данных в ОЗУ. Большинство проектов имеют отладку в режиме остановки , но некоторые позволяют отладчикам получать доступ к регистрам и шинам данных без необходимости останавливать отлаживаемое ядро. Некоторые наборы инструментов могут использовать модули ARM Embedded Trace Macrocell (ETM) или эквивалентные реализации в других архитектурах для запуска отладочной (или трассировочной) активности на сложных аппаратных событиях, например, логический анализатор, запрограммированный на игнорирование первых семи обращений к регистру из одной конкретной подпрограммы.
Иногда разработчики FPGA также используют JTAG для разработки инструментов отладки. [6] Те же методы JTAG, которые используются для отладки программного обеспечения, работающего внутри ЦП, могут помочь в отладке других цифровых блоков дизайна внутри FPGA. Например, можно предоставить пользовательские инструкции JTAG, позволяющие считывать регистры, созданные из произвольных наборов сигналов внутри FPGA, обеспечивая видимость поведения, невидимого для операций сканирования границ. Аналогично, запись таких регистров может обеспечить управляемость, которая в противном случае недоступна.
JTAG позволяет программисту устройств передавать данные во внутреннюю энергонезависимую память устройства (например, CPLD ). Некоторые программаторы устройств выполняют двойную функцию: для программирования и отладки устройства. В случае ПЛИС энергозависимые устройства памяти также можно программировать через порт JTAG, обычно во время разработки. Кроме того, через порт JTAG могут быть доступны внутренние возможности мониторинга (температура, напряжение и ток).
JTAG-программаторы также используются для записи программного обеспечения и данных во флэш-память . Обычно это делается с использованием того же доступа к шине данных, который использовал бы ЦП, и иногда обрабатывается ЦП. В других случаях сами микросхемы памяти имеют интерфейсы JTAG. Некоторые современные отладочные архитектуры обеспечивают внутренний и внешний доступ к шине без необходимости остановки и захвата ЦП. В худшем случае обычно можно управлять внешними сигналами шины с помощью функции граничного сканирования.
На практике при разработке встраиваемой системы эмуляция хранилища инструкций является самым быстрым способом реализации цикла отладки (редактирование, компиляция, загрузка, тестирование и отладка). [ требуется цитата ] Это связано с тем, что внутрисхемный эмулятор, имитирующий хранилище инструкций, может быть очень быстро обновлен с хоста разработки, скажем, через USB. Использование последовательного порта UART и загрузчика для загрузки прошивки во Flash делает этот цикл отладки довольно медленным и, возможно, дорогим с точки зрения инструментов; установка прошивки во Flash (или SRAM вместо Flash) через JTAG является промежуточным решением между этими крайностями.
Технология граничного сканирования JTAG обеспечивает доступ ко многим логическим сигналам сложной интегральной схемы, включая выводы устройства. Сигналы представлены в регистре граничного сканирования (BSR), доступном через TAP. Это позволяет проводить тестирование, а также контролировать состояния сигналов для тестирования и отладки. Таким образом, можно локализовать как программные, так и аппаратные (производственные) неисправности и контролировать работающее устройство.
В сочетании со встроенным самотестированием ( BIST ) цепь сканирования JTAG обеспечивает низконакладное встроенное решение для тестирования ИС на наличие определенных статических неисправностей (коротких замыканий, обрывов и логических ошибок). Механизм цепи сканирования обычно не помогает диагностировать или тестировать на наличие временных, температурных или других динамических эксплуатационных ошибок, которые могут возникнуть. Тестовые случаи часто предоставляются в стандартизированных форматах, таких как SVF или его двоичный аналог XSVF, и используются в производственных испытаниях. Возможность выполнять такое тестирование на готовых платах является неотъемлемой частью Design For Test в современных продуктах, увеличивая количество неисправностей, которые могут быть обнаружены до отправки продуктов клиентам.
Интерфейс JTAG — это специальный интерфейс, добавляемый к чипу. В зависимости от версии JTAG добавляются два, четыре или пять контактов. Четырех- и пятиконтактные интерфейсы разработаны таким образом, что несколько чипов на плате могут иметь свои линии JTAG, соединенные последовательно, если выполняются определенные условия. [7] Двухконтактный интерфейс разработан таким образом, что несколько чипов могут быть соединены в топологию звезды . В любом случае тестовый зонд должен подключаться только к одному порту JTAG, чтобы иметь доступ ко всем чипам на печатной плате .
Контакты разъема:
Вывод TRST — это необязательный сброс активного низкого уровня для тестовой логики, обычно асинхронный, но иногда и синхронный, в зависимости от чипа. Если вывод недоступен, тестовую логику можно сбросить, переключившись в состояние сброса синхронно, используя TCK и TMS. Обратите внимание, что сброс тестовой логики не обязательно подразумевает сброс чего-либо еще. Обычно существуют некоторые процессорно-специфичные операции JTAG, которые могут сбросить весь или часть отлаживаемого чипа.
Поскольку доступна только одна линия данных, протокол является последовательным . Вход синхронизации находится на выводе TCK. Один бит данных передается из TDI и выводится в TDO по фронту нарастающего тактового сигнала TCK. Могут быть загружены различные инструкции. Инструкции для типичных ИС могут считывать идентификатор чипа, выбирать входные контакты, управлять (или плавать) выходными контактами, манипулировать функциями чипа или обходить (передавать TDI в TDO для логического сокращения цепочек из нескольких чипов).
Как и в случае с любым тактовым сигналом, данные, представленные в TDI, должны быть действительны в течение некоторого специфического для чипа времени установки до и времени удержания после соответствующего (в данном случае, восходящего) фронта тактового сигнала. Данные TDO действительны в течение некоторого специфического для чипа времени после нисходящего фронта TCK.
Максимальная рабочая частота TCK варьируется в зависимости от всех чипов в цепочке (должна использоваться самая низкая скорость), но обычно она составляет 10-100 МГц (100-10 нс на бит). Также частоты TCK зависят от компоновки платы и возможностей и состояния адаптера JTAG. Один чип может иметь тактовую частоту JTAG 40 МГц, но только если он использует тактовую частоту 200 МГц для не-JTAG операций; и ему может потребоваться использовать гораздо более медленные часы, когда он находится в режиме низкого энергопотребления. Соответственно, некоторые адаптеры JTAG имеют адаптивную тактовую частоту с использованием сигнала RTCK (Return TCK). Более быстрые частоты TCK наиболее полезны, когда JTAG используется для передачи большого количества данных, например, при сохранении исполняемого файла программы во флэш-памяти .
Тактирование изменяется на шагах TMS через стандартизированный конечный автомат JTAG . Конечный автомат JTAG может сбрасываться, получать доступ к регистру инструкций или получать доступ к данным, выбранным регистром инструкций.
Платформы JTAG часто добавляют сигналы к горстке определенных спецификацией IEEE 1149.1. Сигнал сброса системы (SRST) довольно распространен, позволяя отладчикам сбрасывать всю систему, а не только части с поддержкой JTAG. Иногда есть сигналы событий, используемые для запуска активности хостом или устройством, контролируемым через JTAG; или, возможно, дополнительные линии управления.
Несмотря на то, что лишь немногие потребительские продукты предоставляют явный разъем порта JTAG, соединения часто доступны на печатной плате как остаток от разработки прототипа и/или производства. При эксплуатации эти соединения часто предоставляют наиболее жизнеспособные средства для обратного проектирования .
Уменьшенное количество контактов JTAG использует только два провода, провод синхронизации и провод данных. Это определено как часть стандарта IEEE 1149.7. [8] Контакты разъема:
Он называется cJTAG (compact JTAG).
Двухпроводной интерфейс снизил давление на количество контактов, и устройства можно было подключать в топологии звезды . [9] Топология звезды позволяет отключать некоторые части системы, в то время как другие по-прежнему могут быть доступны через JTAG; последовательная цепь требует, чтобы все интерфейсы JTAG были запитаны. Существуют и другие двухпроводные интерфейсы, такие как Serial Wire Debug (SWD) и Spy-Bi-Wire (SBW).
В JTAG устройства предоставляют один или несколько тестовых портов доступа (TAP). На рисунке выше показаны три TAP, которые могут быть отдельными чипами или модулями внутри одного чипа. Последовательная цепь TAP называется цепочкой сканирования или (в общих чертах) целью. Цепи сканирования могут быть произвольной длины, но на практике двадцать TAP — это необычно долго. [ необходима цитата ]
Для использования JTAG хост подключается к сигналам JTAG целевого устройства (TMS, TCK, TDI, TDO и т. д.) через какой-либо адаптер JTAG , который может нуждаться в обработке таких проблем, как смещение уровня и гальваническая развязка . Адаптер подключается к хосту с помощью некоторого интерфейса, такого как USB, PCI, Ethernet и т. д.
Хост взаимодействует с TAP, манипулируя TMS и TDI совместно с TCK и считывая результаты через TDO (который является единственным стандартным входом на стороне хоста). Выходные переходы TMS/TDI/TCK создают базовый примитив связи JTAG, на котором строятся протоколы более высокого уровня:
На базовом уровне использование JTAG включает в себя чтение и запись инструкций и связанных с ними регистров данных; и иногда включает в себя запуск ряда тестовых циклов. За этими регистрами находится оборудование, которое не указано JTAG и которое имеет свои собственные состояния, на которые влияют действия JTAG.
Большинство хостов JTAG используют кратчайший путь между двумя состояниями, возможно, ограниченный особенностями адаптера. (Например, один адаптер [ which? ] обрабатывает только пути, длина которых кратна семи битам.) Некоторые слои, построенные поверх JTAG, отслеживают переходы состояний и используют необычные пути для запуска операций более высокого уровня. Некоторые ядра ARM используют такие последовательности для входа и выхода из двухпроводного (не JTAG) режима SWD . Последовательность сканирования нулевого бита (ZBS) используется в IEEE 1149.7 [8] для доступа к расширенным функциям, таким как переключение TAP в цепи сканирования и из них, управление питанием и другой двухпроводной режим.
Размеры регистров инструкций, как правило, невелики, возможно, четыре или семь бит в ширину. За исключением BYPASS и EXTEST, все коды операций инструкций определяются реализатором TAP, как и связанные с ними регистры данных; неопределенные коды инструкций не должны использоваться. Две ключевые инструкции:
При выходе из состояния RESET регистр инструкций предварительно загружается либо BYPASS, либо IDCODE. Это позволяет хостам JTAG идентифицировать размер и, по крайней мере частично, содержимое цепи сканирования, к которой они подключены. (Они могут войти в состояние RESET, а затем сканировать регистр данных, пока не считывают записанные ими данные. Регистр BYPASS имеет только нулевой бит; в то время как регистр IDCODE является 32-битным и начинается с единицы. Поэтому биты, не записанные хостом, можно легко сопоставить с TAP.) Такая идентификация часто используется для проверки работоспособности ручной конфигурации, поскольку IDCODE часто неспецифичен. Например, он может идентифицировать микроконтроллер на базе ARM Cortex-M3 без указания поставщика или модели микроконтроллера; или конкретную ПЛИС, но не то, как она была запрограммирована.
Распространенная идиома подразумевает сдвиг BYPASS в регистры инструкций всех TAP, кроме одного, который получает какую-то другую инструкцию. Таким образом, все TAP, кроме одного, выставляют однобитный регистр данных, и значения могут быть выборочно сдвинуты в или из регистра данных этого одного TAP, не влияя на любой другой TAP.
Стандарт IEEE 1149.1 (JTAG) описывает ряд инструкций для поддержки приложений граничного сканирования. Некоторые из этих инструкций являются обязательными , но TAP, используемые для отладки вместо тестирования граничного сканирования, иногда обеспечивают минимальную или не обеспечивают никакой поддержки для этих инструкций. Эти обязательные инструкции работают с регистром граничного сканирования (BSR), определенным в файле BSDL , и включают:
Определенные IEEE дополнительные инструкции включают:
Устройства могут определять больше инструкций, и эти определения должны быть частью файла BSDL, предоставленного производителем. Они часто помечены только как PRIVATE.
Устройства взаимодействуют с миром через набор входных и выходных контактов. Сами по себе эти контакты обеспечивают ограниченную видимость работы устройства. Однако устройства, поддерживающие сканирование границ, содержат ячейку сдвигового регистра для каждого сигнального контакта устройства. Эти регистры соединены в выделенный путь вокруг границы устройства (отсюда и название). Путь создает возможность виртуального доступа, которая обходит обычные входы и выходы, обеспечивая прямой контроль над устройством и подробную видимость сигналов. [10]
Содержимое регистра сканирования границ, включая возможности ввода/вывода сигналов, обычно описывается производителем с помощью специфичного для детали файла BSDL . Они используются с проектными «сетлистами» из систем CAD/EDA для разработки тестов, используемых при производстве плат. Коммерческие тестовые системы часто стоят несколько тысяч долларов за полную систему и включают диагностические опции для точного определения неисправностей, таких как обрывы цепей и короткие замыкания. Они также могут предлагать средства просмотра схем или макетов для графического отображения неисправности.
Чтобы включить сканирование границ, поставщики ИС добавляют логику к каждому из своих устройств, включая ячейки сканирования для каждого из сигнальных выводов. Затем эти ячейки соединяются вместе, образуя регистр сдвига сканирования границ (BSR), который подключается к контроллеру TAP. Эти конструкции являются частью большинства библиотек Verilog или VHDL. Накладные расходы на эту дополнительную логику минимальны и, как правило, оправдывают свою цену, позволяя эффективно тестировать на уровне платы.
Пример помогает продемонстрировать работу JTAG в реальных системах. Примером здесь является отладочный TAP процессора ARM11 , ядра ARM1136 [11] . Сам процессор имеет обширные возможности JTAG, аналогичные тем, что есть в других ядрах ЦП, и он интегрирован в чипы с еще более обширными возможностями, доступ к которым осуществляется через JTAG.
Это нетривиальный пример, который является репрезентативным для значительного сечения систем с поддержкой JTAG. Кроме того, он показывает, как механизмы управления строятся с использованием примитивов чтения/записи регистров JTAG, и как они объединяются для упрощения тестирования и отладки сложных логических элементов; ЦП распространены, но ПЛИС и ASIC включают в себя другие сложные элементы, которые необходимо отлаживать.
Лицензиаты этого ядра интегрируют его в чипы, обычно объединяя его с другими TAP, а также многочисленными периферийными устройствами и памятью. Один из этих других TAP обрабатывает тестирование сканирования границ для всего чипа; он не поддерживается отладочным TAP. Примеры таких чипов включают:
Оба эти процессора предназначены для использования в беспроводных телефонах, таких как сотовые телефоны, что является одной из причин, по которой они включают контроллеры TAP, которые изменяют цепь сканирования JTAG: Отладка работы с низким энергопотреблением требует доступа к чипам, когда они в основном выключены, и, следовательно, когда не все TAP работают. Эта модификация цепи сканирования является одним из предметов готовящегося стандарта IEEE 1149.7 [8] .
Этот отладочный TAP предоставляет несколько стандартных инструкций и несколько специально разработанных для отладки с использованием аппаратных средств , когда программный инструмент (отладчик) использует JTAG для связи с отлаживаемой системой:
BYPASS
и IDCODE
, стандартные инструкции, как описано вышеEXTEST
, INTEST
, стандартные инструкции, но работающие на ядре, а не на внешней граничной цепочке сканирования. EXTEST
номинально предназначен для записи данных в ядро, INTEST
номинально предназначен для их чтения; но две цепочки сканирования являются исключениями из этого правила.SCAN_N
Инструкция ARM для выбора пронумерованной цепочки сканирования, используемой с EXTEST
или INTEST
. Существует шесть цепочек сканирования:0
- Регистр идентификатора устройства, 40 бит идентификационных данных, доступных только для чтения1
- Регистр состояния и управления отладкой (DSCR), 32 бита, используемые для работы отладочных средств4
- Регистр передачи инструкций (ITR), 33 бита (32 инструкции плюс один бит состояния), используемый для выполнения инструкций процессора в специальном режиме отладки (см. ниже)5
- Отладочный коммуникационный канал (DCC), 34 бита (одно длинное слово данных плюс два бита статуса), используемый для двунаправленной передачи данных в ядро. Используется как в режиме отладки, так и, возможно, во время выполнения при общении с программным обеспечением, поддерживающим отладчик.6
- Встроенный модуль трассировки (ETM), 40 бит (7-битный адрес, одно 32-битное длинное слово данных и бит чтения/записи), используемый для управления работой пассивного механизма трассировки инструкций и данных. Он питает либо встроенный буфер трассировки (ETB), либо внешний высокоскоростной модуль сбора данных трассировки. Трассировка поддерживает пассивную отладку (изучение истории выполнения) и профилирование для настройки производительности.7
- отладочный модуль, 40 бит (7-битный адрес, одно 32-битное длинное слово данных и бит R/W), используемый для доступа к аппаратным точкам останова, точкам наблюдения и т. д. Их можно записывать во время работы процессора; он не обязательно должен находиться в режиме отладки.HALT
и RESTART
, специфичные для ARM11 инструкции для остановки и перезапуска ЦП. Остановка переводит ядро в режим отладки , где ITR может использоваться для выполнения инструкций, включая использование DCC для передачи данных между хостом отладки (JTAG) и ЦП.ITRSEL
, специфичная для ARM11 инструкция для ускорения некоторых операций с ITR.Эта модель напоминает модель, используемую в других ядрах ARM. Системы, отличные от ARM, обычно имеют схожие возможности, возможно, реализованные с использованием протоколов Nexus поверх JTAG или других схем, специфичных для конкретного поставщика.
Более старые ядра ARM7 и ARM9 включают модуль EmbeddedICE [14] , который объединяет большинство этих возможностей, но имеет неудобный механизм для выполнения инструкций: отладчик должен управлять конвейером инструкций ЦП, такт за тактом, и напрямую обращаться к шинам данных для чтения и записи данных в ЦП. ARM11 использует ту же модель для поддержки трассировки (ETM, ETB), что и эти старые ядра.
Более новые ядра ARM Cortex очень похожи на эту модель отладки, но построены на порте отладки (DAP) вместо прямого доступа к ЦП. В этой архитектуре (называемой CoreSight Technology ) ядро и модуль JTAG полностью независимы. Они также отделены от JTAG, поэтому их можно размещать через двухпроводной интерфейс SWD ARM (см. ниже) вместо шестипроводного интерфейса JTAG. (ARM берет четыре стандартных сигнала JTAG и добавляет дополнительный TRST, а также сигнал RTCK, используемый для адаптивного тактирования.) CoreSight JTAG-DP асинхронен с тактами ядра и не реализует RTCK. [15] Кроме того, более новые ядра имеют обновленную поддержку трассировки.
Одним из основных способов отладки программного обеспечения является представление однопоточной модели, в которой отладчик периодически останавливает выполнение программы и проверяет ее состояние, как показано в содержимом регистров и памяти (включая регистры периферийных контроллеров). Когда приближаются интересные события программы, человек может захотеть пошагово выполнить инструкции (или строки исходного кода), чтобы посмотреть, как происходит конкретное неправильное поведение.
Так, например, хост JTAG может ОСТАНОВИТЬ ядро, войдя в режим отладки, а затем прочитать регистры ЦП с помощью ITR и DCC. После сохранения состояния процессора он может записать в эти регистры любые необходимые ему значения, а затем выполнить произвольные алгоритмы на ЦП, обращаясь к памяти и периферийным устройствам, чтобы помочь охарактеризовать состояние системы. После того, как отладчик выполнит эти операции, состояние может быть восстановлено, а выполнение продолжено с помощью инструкции RESTART.
Режим отладки также входит асинхронно, когда модуль отладки запускает точку наблюдения или точку останова, или выдает инструкцию BKPT (точка останова) из отлаживаемого программного обеспечения. Когда он не используется для трассировки инструкций, ETM также может запустить переход в режим отладки; он поддерживает сложные триггеры, чувствительные к состоянию и истории, а также простые сравнения адресов, предоставляемые модулем отладки. Асинхронные переходы в режим отладки обнаруживаются путем опроса регистра DSCR. Вот как реализуется пошаговое выполнение: ОСТАНОВИТЕ ядро, установите временную точку останова на следующей инструкции или следующем операторе высокого уровня, ПЕРЕЗАПУСТИТЕ, опрашивайте DSCR, пока не обнаружите асинхронный вход в состояние отладки, удалите эту временную точку останова, повторите.
Современное программное обеспечение часто слишком сложно для работы с такой однопоточной моделью. Например, процессор, используемый для управления двигателем (возможно, приводящим в движение пильное полотно), может не иметь возможности безопасно войти в режим остановки; ему может потребоваться продолжить обработку прерываний для обеспечения физической безопасности людей и/или оборудования. Выдача инструкции HALT с использованием JTAG может быть опасной.
Процессоры ARM поддерживают альтернативный режим отладки, называемый Monitor Mode , для работы с такими ситуациями. (Это отличается от Secure Monitor Mode, реализованного как часть расширений безопасности на новых ядрах ARM; он управляет операциями отладки, а не переходами безопасности.) В этих случаях точки останова и точки наблюдения вызывают особый вид аппаратного исключения, передавая управление монитору отладки, работающему как часть системного программного обеспечения. Этот монитор взаимодействует с отладчиком с помощью DCC и может, например, организовать пошаговое выполнение только одного процесса, в то время как другие процессы (и обработчики прерываний) продолжают выполняться.
Поставщики микропроцессоров часто определяли собственные расширения отладки, специфичные для ядра. К таким поставщикам относятся Infineon , MIPS с EJTAG и другие. Если поставщик не принимает стандарт (например, используемый процессорами ARM или Nexus), ему необходимо определить собственное решение. Если они поддерживают сканирование границ, они обычно строят отладку через JTAG.
Freescale имеет COP и OnCE (эмуляция на кристалле). OnCE включает команду JTAG, которая переводит TAP в специальный режим, в котором IR удерживает команды отладки OnCE [16] для таких операций, как пошаговое выполнение, установка точек останова и доступ к регистрам или памяти. Он также определяет EOnCE (улучшенная эмуляция на кристалле) [17], представленную как решение проблем реального времени.
ARM имеет обширную архитектуру отладки ядра процессора (CoreSight), которая началась с EmbeddedICE (средство отладки, доступное на большинстве ядер ARM), и теперь включает множество дополнительных компонентов, таких как ETM (Embedded Trace Macrocell) с высокоскоростным портом трассировки, поддерживающим многоядерную и многопотоковую трассировку. Обратите внимание, что трассировка неинвазивна; системам не нужно останавливать работу для трассировки. (Однако данные трассировки слишком объемны, чтобы использовать JTAG как нечто большее, чем канал управления трассировкой.)
Nexus определяет инфраструктуру отладки процессора, которая в значительной степени независима от поставщика. Одним из его аппаратных интерфейсов является JTAG. Он также определяет высокоскоростной вспомогательный интерфейс порта, используемый для трассировки и многого другого. Nexus используется с некоторыми новыми платформами, такими как процессоры серий Atmel AVR32 и Freescale MPC5500.
Доступ к интерфейсу JTAG целевого устройства осуществляется с помощью некоторых приложений с поддержкой JTAG и некоторых адаптеров JTAG. Существует широкий спектр такого оборудования, оптимизированного для таких целей, как тестирование производства, отладка высокоскоростных систем, разработка недорогих микроконтроллеров и т. д. Точно так же программное обеспечение, используемое для управления таким оборудованием, может быть весьма разнообразным. Разработчики программного обеспечения в основном используют JTAG для отладки и обновления прошивки.
Официальных стандартов для физических разъемов адаптера JTAG не существует. Платы разработки обычно включают заголовок для поддержки предпочтительных инструментов разработки; в некоторых случаях они включают несколько таких заголовков, поскольку им необходимо поддерживать несколько таких инструментов. Например, микроконтроллер, ПЛИС и процессор приложений ARM редко используют общие инструменты, поэтому плата разработки, использующая все эти компоненты, может иметь три или более заголовков. Производственные платы могут не включать заголовки или, если пространство ограничено, могут предоставлять доступ к сигналу JTAG с помощью контрольных точек.
Вот некоторые общие схемы расположения выводов [20] для штыревых разъемов 2,54 мм (0,100 дюйма) :
Эти разъемы, как правило, включают в себя больше, чем просто четыре стандартизированных сигнала (TMS, TCK, TDI, TDO). Обычно предоставляются сигналы сброса, один или оба из TRST (сброс TAP) и SRST (сброс системы). Разъем обычно обеспечивает напряжение питания логики тестируемой платы, чтобы адаптеры JTAG использовали соответствующие логические уровни. Напряжение платы также может служить в качестве входа отладчика наличия платы . Могут быть предоставлены другие входные или выходные сигналы событий или линии ввода-вывода общего назначения (GPIO) для поддержки более сложных архитектур отладки.
Высокопроизводительные продукты часто используют плотные разъемы (часто 38-контактные разъемы MICTOR ) для поддержки высокоскоростной трассировки в сочетании с операциями JTAG. Недавняя тенденция заключается в том, чтобы платы разработки интегрировали интерфейс USB с JTAG, где второй канал используется для последовательного порта. (Платы меньшего размера также могут питаться через USB. Поскольку современные ПК, как правило, не имеют последовательных портов, такие интегрированные отладочные соединения могут значительно уменьшить беспорядок для разработчиков.) Производственные платы часто полагаются на соединения с контрольными точками с помощью гвоздей для тестирования и программирования.
Аппаратное обеспечение адаптера сильно различается. Если оно не интегрировано в плату разработки, оно включает в себя короткий кабель для подключения к разъему JTAG на целевой плате; соединение с хостом отладки, таким как соединение USB, PCI или Ethernet; и достаточно электроники для адаптации двух доменов связи (и иногда обеспечения гальванической развязки ). Может потребоваться отдельный источник питания. Существуют как немые адаптеры, где хост решает и выполняет все операции JTAG; так и интеллектуальные , где часть этой работы выполняется внутри адаптера, часто управляемого микроконтроллером. Интеллектуальные адаптеры устраняют задержки связи для последовательностей операций, которые могут включать опрос для изменения состояния между шагами, и могут соответственно обеспечивать более высокую пропускную способность.
По состоянию на 2018 год [обновлять]адаптеры с USB- соединением с хостом являются наиболее распространенным подходом. Высокопроизводительные продукты часто поддерживают Ethernet , с тем преимуществом, что отладочный хост может быть довольно удаленным. Адаптеры, которые поддерживают высокоскоростные порты трассировки, обычно включают несколько мегабайт буфера трассировки и предоставляют высокоскоростные соединения (USB или Ethernet) для передачи этих данных на хост.
Адаптеры параллельного порта просты и недороги, но они относительно медленны, поскольку используют центральный процессор для изменения каждого бита (« битовый бэнгинг »). Они стали менее полезными, поскольку в последние годы большинство компьютеров не имеют параллельного порта. Поддержка драйверов также является проблемой, поскольку использование контактов адаптерами сильно различается. Поскольку параллельный порт основан на логическом уровне 5 В, большинство адаптеров не поддерживают преобразование напряжения для целевых напряжений 3,3 В или 1,8 В.
Существуют также адаптеры последовательного порта RS-232 , и их полезность также снижается. Обычно они используют либо более медленную битовую передачу, чем параллельный порт, либо микроконтроллер, транслирующий некоторые командные протоколы в операции JTAG. Такие последовательные адаптеры также не быстры, но их командные протоколы обычно можно повторно использовать поверх высокоскоростных соединений.
Для всех адаптеров JTAG поддержка программного обеспечения является основной проблемой. Многие поставщики не публикуют протоколы, используемые их аппаратным обеспечением адаптера JTAG, ограничивая своих клиентов цепочками инструментов, поддерживаемыми этими поставщиками. Это особая проблема для «умных» адаптеров, некоторые из которых встраивают значительные объемы знаний о том, как взаимодействовать с определенными процессорами.
Большинство сред разработки для встроенного ПО включают поддержку JTAG. Существует, в общем, три источника такого ПО:
Все такое программное обеспечение, как правило, включает базовую поддержку отладчика: остановку, приостановку, пошаговое выполнение, точки останова, просмотр структуры данных и т. д. Коммерческие инструменты, как правило, предоставляют такие инструменты, как очень точные симуляторы и анализ трассировки, которые в настоящее время не доступны в виде открытого исходного кода.
Serial Wire Debug (SWD) — это альтернативный 2-контактный электрический интерфейс, который использует тот же протокол. Он использует существующее соединение GND. SWD использует стандартный двунаправленный проводной протокол ARM CPU, определенный в ARM Debug Interface v5. [21] Это позволяет отладчику стать еще одним мастером шины AMBA для доступа к системной памяти и периферийным устройствам или отладочным регистрам. Скорость передачи данных составляет до 4 МБ/с при 50 МГц . SWD также имеет встроенное обнаружение ошибок. На устройствах JTAG с возможностью SWD TMS и TCK используются как сигналы SWDIO и SWCLK, обеспечивая двухрежимные программисты.