Есть ли способ отправить данные прямо в порт JTAG из приложения? (Cortex-M3)

Я использую NXP LPC1769, который содержит Cortex-M3. До сих пор я обращался к нему только через интерфейс JTAG, но теперь мне нужно сделать это наоборот. Предполагается, что ИТ-процедура считывает определенные части памяти и немедленно отправляет их в порт JTAG. Есть ли способ сделать это?

ОБНОВЛЕНИЕ: после нескольких часов исследований я нашел кое-что, что может помочь: Cortex-M3 поддерживает ITM (макроячейка инструментальной трассировки), которая может отправлять данные через вывод TDO порта JTAG. Теперь мой вопрос: как бы это сделать? Я нашел только специфические для отладчика приложения ITM, где в моем случае я хочу иметь возможность отправлять определенные сообщения JTAG (или записывать определенные регистры DP / AP) из запущенного приложения.


person Muller    schedule 26.04.2017    source источник
comment
Я ответил на другой вопрос (stackoverflow.com/questions/32123443/), которая может быть вам полезна. Он особенно нацелен на keil IDE, но часть ITM должна быть тем, что вы ищете. Я не знаю, как извлечь информацию ITM на стороне ПК. Должен быть документ с вашим инструментом отладки. Может ты там что-нибудь найдешь.   -  person jwsc    schedule 27.04.2017
comment
Во-первых, я сомневаюсь, что это jtag, но вместо этого SWD, тонкая разница, конечно. Это главное подчиненное устройство, такое как spi, i2c, usb и т. Д. Вы хотите отправить что-то мастеру, вы оставляете это где-то и проводите опрос мастера. Если бы это был действительно JTAG, это все равно было бы так, мастер управляет часами, а конечный автомат jtag tdo является его подчиненным, вы помещаете значения в регистр в пространстве jtag, а затем заставляете мастер опросить его.   -  person old_timer    schedule 29.04.2017
comment
Прочтите документацию по руке, в которой рассматриваются эти темы.   -  person old_timer    schedule 29.04.2017
comment
Поверьте, это JTAG. Мой код обрабатывает навигацию через конечный автомат TAP путем побитовой обработки отдельных сигналов JTAG, и он не работал бы, если бы это был SWD. В настоящее время я использую решение для опроса, о котором вы упомянули, но сама причина, по которой я ищу альтернативу, заключается в том, что опрос слишком медленный для моего приложения. Я понимаю, что JTAG - это в первую очередь вещь «ведущий-ведомый», и он не предназначен для того, чтобы цель отправляла данные на хост, но я надеялся, что есть способ.   -  person Muller    schedule 19.06.2017


Ответы (1)


Существует несколько способов выполнения ввода-вывода хоста через порт JTAG. Первый, к которому я обычно обращаюсь, называется полухостингом. Semihosting использует точки останова процессора, чтобы предоставить отлаживаемой плате операции ввода-вывода для хоста. Механизм объясняется немного подробнее здесь: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0471h/Bgbjjgij.html.

То, как вы можете включить полухостинг в своем отладчике, будет меняться в зависимости от того, какой инструмент вы используете. Например, поток для настройки полухостинга в среде LPCXpresso IDE можно найти здесь: https://www.lpcware.com/content/forum/configure-lpcxpresso-use-semihosting и руководство по GNU Arm Eclipse можно найти здесь: https://mcuoneclipse.com/2014/09/11/semihosting-with-gnu-arm-embedded-launchpad-and-gnu-arm-eclipse-debug-plugins/.

Обратной стороной полухостинга является то, что он медленнее по сравнению с использованием ITM.

Другой метод, на который вы ссылаетесь в своем вопросе, - это использование функции ITM (Instrumentation Trace Macrocell). В отличие от полухостинга, ITM может работать, не дожидаясь, пока адаптер JTAG запросит данные, если включен вывод SWO или настроен отдельный выход UART. Как и в случае с полухостингом, детали будут меняться в зависимости от используемых вами инструментов.

Руководство по использованию ITM в качестве стандартного вывода в среде LPCXpresso IDE можно найти здесь: https://www.lpcware.com/content/faq/lpcxpresso/how-use-itm-printf.

person ehntoo    schedule 08.06.2017