Можно ли сделать JTAG-интерфейс с Arduino?


14

Если это так, можно ли направить меня на сайт, который рассказывает, как это сделать? Я полагаю, что, возможно, нашел способ , но я не уверен относительно того, будет ли он работать или нет (нужно найти что-то, чтобы проверить его).

Этот вопрос относится к предыдущему моему вопросу, расположенному здесь.

В случае, если требуется дополнительная справочная информация.


JBailey Я только что натолкнулся на ваш вопрос об использовании arduino для создания конвертера JTAG-USB, и мне было интересно, как вы его разобрали? \

Ответы:


14

Да, можно превратить Arduino в адаптер ART JTAG.

Есть три проблемы: напряжение, скорость и драйверы.

Arduino изначально работает на 5V. Большинство микроконтроллеров ARM не допускают 5 В на своих выводах JTAG и требуют 3,3 В. Самое простое решение - запустить Arduino при напряжении 3,3 В, если вам не потребуется какое-либо преобразование уровня (см. Преобразование I2C от 3,3 до 5,0 В). Идеи ).

Arduino подключен к ПК через последовательный канал. Я сомневаюсь, что он может работать быстрее, чем 115200 бит / с, что сделает интерактивные действия, такие как пошаговое выполнение кода в отладчике, очень медленным. Но вы сможете загружать код и обновлять устройства.

JTAG - это протокол высокого уровня, специфичный для каждого семейства процессоров, который использует SPI-подобный интерфейс для обмена данными. Большинство ключей JTAG просто предоставляют интерфейс SPI через USB, а оставшуюся часть работы оставляют за приложением для ПК. OpenOCD и URJTag являются популярным выбором. Вам понадобится драйвер в одном из них для вашего протокола Arduino JTAG.

Bus Pirate очень похож на Arduino (низкоскоростной микроконтроллер + чип FTDI). Он поддерживает JTAG с OpenOCD, так что это, безусловно, возможно.

Если вы используете плату Teensy / Opendous или другую плату AVR-USB, вы можете использовать eStick-JTAG .

Но для JTAG с потерей стоимости я бы порекомендовал один из ключей на базе FTDI2232. Они дешевые и хорошо поддерживаются OpenOCD.


5

Это возможно, но очень сложно. Мне не нравятся JTAG на основе FTDI, потому что чипы FTDI представляют собой готовые черные ящики, и никто не учится на них.

Если бы я хотел создать USB-JTAG с AVR, я бы получил тот, который поддерживает по крайней мере полную скорость USB в чипе. Затем получите USB-стек AVR (c исходными кодами) и посмотрите на последовательный пример usb-to. Так как битовая привязка по usb - плохая идея (высокая задержка), ее необходимо преобразовать в команды более высокого уровня, которые будут инструктировать MCU самостоятельно выполнять битовую привязку (или использовать SPI, если это возможно) и возвращать результат высокого уровня через usb (полные байты). ). Но затем возникает необходимость написания драйверов для IDE для поддержки нового устройства JTAG для его отладки. OpenOCD и URJTag имеют исходный код драйверов для многих jtag-устройств, поэтому вам нужно будет получить и переработать его для вашего нового устройства. Посмотрите, как некоторые люди проделали похожую работу: http://code.google.com/p/estick-jtag/


1

Посмотрите на openocd. Бэкэнды в основном основаны на подходе параллельного порта, и я думаю, что он заходит так далеко, что меняется только по одному биту за раз. Довольно просто взять то, что я думаю, они называют фиктивным бэкэндом, который является примером. Отправьте любую команду записи в arduino, и установите или сбросьте этот бит. Когда вас попросят прочитать входной бит, отправьте команду в arduino, чтобы выполнить эту задачу и вернуть результаты.

Я сделал именно это с успехом, но не с Arduino, у меня был разговор openocd от хоста в симулируемое ядро ​​руки, работающее в симуляторе HDL.

Обратите внимание, что некоторые спецификации jtag закрыты, например, cortex-m3 является своего рода сериализованным уменьшенным числом пинов jtag, которое в прошлый раз, когда я смотрел, было недоступно без NDA. это может не иметь значения, потому что openocd позаботится обо всем этом для вас, пока вы используете интерфейс jtag, который поддерживает openocd, бэк-бэк-бэнд - это то место, где ваше arduino и любой интерфейс, который вы используете для доступа к нему / с него, входят в игру. ,

Как уже отмечал Джоби, вы должны быть осторожны с напряжениями (не все ардуиновые ароматы имеют напряжение 5 В и не все контроллеры питания имеют напряжение 3,3 В), а также с формированием сигнала и заземлением и всем этим. Если ваша целевая плата питается от источника питания, который находится на другом уровне по сравнению с тем, что вы используете для питания вашего Arduino, вы можете расплавить что-то, когда вы подключите их.


Обратите внимание, что использование последовательного (или, что еще хуже, USB-интерфейса с пакетным транспортным интерфейсом) для прокси-битов может быть очень медленным. Гораздо эффективнее, чтобы микроконтроллер выполнял полные операции и общался с ним на более высоком уровне, то есть велел ему прочитать этот регистр, записать его или даже запрограммировать этот блок данных.
Крис Страттон

1

Это возможно, и я на самом деле реализовал это и объяснил все здесь .

Существует библиотека на GitHub здесь , который состоит из двух частей: программа , которая работает на Arduino и сценарий питона , который отправляет XSVF файлы в Arduino.

Скорее всего, вам потребуется несколько резисторов для преобразования 5 В в 3,3 В, так как большинство FPGA и CPLD используют этот уровень напряжения.

Я также имел некоторый опыт написания ассемблера / дизассемблера для файлов XSVF, код находится в той же библиотеке github и объясняется в этом посте здесь .

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.