Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Open-source эмулятор для TMS320: DLE500USB
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Сигнальные процессоры и их программирование - DSP
Edmundo
Таки собрался с силами, и сделал наконец свой первый open-source проект.
http://www.prodigi.ru/

Все планировал сделать по-хорошему, но понял, что времени все равно не будет, поэтому пока просто выложил все как есть с комментариями. Страницы нарисовал на коленке, прошу не бить.

В будущем планирую пописать статейки про JTAG-протоколы и т.п.

Да не сочтут модераторы мой пост моветоном smile.gif Да перенесут, ежели сочтут smile.gif
Doka
Цитата(Edmundo @ Oct 14 2007, 18:13) *
Таки собрался с силами, и сделал наконец свой первый open-source проект.
a14.gif

Цитата
Все планировал сделать по-хорошему, но понял, что времени все равно не будет ...
насчет времени: раз уж оpen-source, так наверное надо заинтересовавшихся проектом смотивировать к коллективной работе, т.е. какие-то базовые веб-инструменты для обеспечения совместной работы + какое-нить ToDo по дальнейшему видению развития проекта.
Edmundo
Цитата(Doka @ Oct 14 2007, 19:23) *
насчет времени: раз уж оpen-source, так наверное надо заинтересовавшихся проектом смотивировать к коллективной работе, т.е. какие-то базовые веб-инструменты для обеспечения совместной работы + какое-нить ToDo по дальнейшему видению развития проекта.

Если появятся заинтересованные, то тогда придумаем что-нибудь.
Насчет дальнейшего to do -- хочется сделать новую железку на более мощном контроллере/процессоре + воткнуть FPGA (типа Cyclone, благо они сейчас весьма доступны). Таким образом совместить снифер с эмулятором, сделать снифер помощнее, плюс переместить функции формирования JTAG-цепочек с компьютера в контроллер (вот скоростища-то будет). Вот тогда заживем smile.gif
А пока на досуге напишу статьи для лучшего понимания сути процессов.
khach
Спасибо, интересная реализация, надо будет попробовать в железе. Есть одна просьба- на странице проекта упоминается девайс-снифер жтага. Можно ли на него схемку и программы тоже зашарить? Понимаю, что делалось наверно одноразовое нечто и код будет несовсем прозрачным, но это терпимо.
Degun
Цитата(Edmundo @ Oct 14 2007, 20:50) *
...плюс переместить функции формирования JTAG-цепочек с компьютера в контроллер (вот скоростища-то будет). Вот тогда заживем smile.gif

Т. е. сейчас он работает не в реальном масштабе времени? А эмуляторы от Texas Instruments, например XDS560R, также не позволяет эмулировать работу программы в реальном масштабе времени? Как же тогда измерять реальное время выполнения подпрограмм?
Edmundo
Цитата(khach @ Oct 14 2007, 21:53) *
Спасибо, интересная реализация, надо будет попробовать в железе. Есть одна просьба- на странице проекта упоминается девайс-снифер жтага. Можно ли на него схемку и программы тоже зашарить? Понимаю, что делалось наверно одноразовое нечто и код будет несовсем прозрачным, но это терпимо.

Зашарить можно, правда там все достаточно кургузо и работать с ним непосвященному непросто. Хочу сделать более продвинутый снифер. Думаю пока, что поставить в сердце -- то ли VC5509 (TMS TMS'у друг smile.gif да и моща неплохая) или какой-нибудь ARM, например STR912. Ну и Cyclone (как писал выше) который будет бегать по state-машине JTAG'а. Если сделать такой снифер/эмулятор, да еще написать неплохой софт/документацию к нему, то любой, у кого есть доступ к стандартному 510-му, сможет добавлять новые функции.

Цитата(Degun @ Oct 14 2007, 22:01) *
Т. е. сейчас он работает не в реальном масштабе времени? А эмуляторы от Texas Instruments, например XDS560R, также не позволяет эмулировать работу программы в реальном масштабе времени? Как же тогда измерять реальное время выполнения подпрограмм?

Не очень понял, что значит "в реальном масштабе времени". Если вы имеете в виду RTDX, то в моем варианте он не реализован (не анализировал, что там за протокол). Профайлинг тоже не сделан.
В остальном, после того, как вы нажимаете "Run" (а лучше "Run free") ваша программа работает (ну по крайней мере так по теории polite-эмуляции) так же, как и без эмулятора.

Ну а если вы даже суперскоростным 560-м не можете померить время выполнения подпрограмм, то вероятнее всего вы "не умеете его готовить" smile.gif
Edmundo
Цитата(khach @ Oct 14 2007, 21:53) *
Можно ли на него схемку и программы тоже зашарить? Понимаю, что делалось наверно одноразовое нечто и код будет несовсем прозрачным, но это терпимо.

Зашарил smile.gif
Плюс к этому написал первую статью по теме.
Pathfinder
Edmundo,
а что из себя представляют драйвера отладчиков в css? Давно хочу заняться чем-то подобным для Analog Devices, но у них в VDSP для каждого отладчика своя dll с ActiveX интерфейсом, как отследить вызовы через него я пока не знаю.
Edmundo
Цитата(Pathfinder @ Oct 22 2007, 14:00) *
Edmundo,
а что из себя представляют драйвера отладчиков в css? Давно хочу заняться чем-то подобным для Analog Devices, но у них в VDSP для каждого отладчика своя dll с ActiveX интерфейсом, как отследить вызовы через него я пока не знаю.

Драйвера отладчиков для CCS фактически представляют собой обычную DLL-ку (только расширение переименовано в *.DVR) с набором определенных public exported функций. CCS при соответствующих действиях (загрузка программы, запуск, просмотр памяти т.п.) просто вызывает эти функции, передавая им какие-то параметры.
evg123
Тема чрезвычайно интересная. Хотелось бы, чтобы она имела продолжение.
Edmundo
Цитата(evg123 @ Nov 6 2007, 16:47) *
Тема чрезвычайно интересная. Хотелось бы, чтобы она имела продолжение.

Вообще, если интересно, могу здесь дублировать новости проекта.

Разместил простенький софт-проект драйвера-логгера для Code Composer Studio, который имитирует внутрисхемный эмулятор и ведет лог вызовов функций. Будет интересен программистам как образец взаимодействия CCS и DVR-драйверов, а так же как reference frameworks для создания драйвера собственного эмулятора.

MyEmulator
Konst_777
Цитата(Edmundo @ Oct 14 2007, 18:13) *
Таки собрался с силами, и сделал наконец свой первый open-source проект.
http://www.prodigi.ru/

Да, круто a14.gif. Даже супер круто a14.gif a14.gif ...

Вот Вы пишете: "Признаюсь, что многое изменилось с тех пор, как проект начинался. Выросли цены на нефть, появились вполне доступные внутрисхемные эмуляторы. Поэтому проект перешел из разряда «экономической целесообразности» в разряд «из любви к искусству»."

Пожалуйста, расскажите подробнее о "вполне доступных" внутрисхемных эмуляторах для TMS320.
rezident
Цитата(Konst_777 @ Dec 25 2007, 00:07) *
Пожалуйста, расскажите подробнее о "вполне доступных" внутрисхемных эмуляторах для TMS320.

http://projects.caxapa.ru/index.html?ID=6
Konst_777
Цитата(rezident @ Dec 25 2007, 00:12) *

Вообще то, я неточно задал свой вопрос. Я хотел спросить, где можно купить дешевый внутрисхемный эмулятор для TMS320. Чуть позже, в теме Вопросы новичка, AD или TI и др. я, кажется нашел ответ на свой вопрос.
В любом случае, спасибо за ответ rezident. beer.gif
HardJoker
Цитата(Konst_777 @ Dec 24 2007, 23:58) *
Вообще то, я неточно задал свой вопрос. Я хотел спросить, где можно купить дешевый внутрисхемный эмулятор для TMS320. Чуть позже, в теме Вопросы новичка, AD или TI и др. я, кажется нашел ответ на свой вопрос.
В любом случае, спасибо за ответ rezident. beer.gif


http://www.mlabsys.com/, контора отечественная, сидят(ли) у Федорова
Edmundo
Цитата(Konst_777 @ Dec 24 2007, 22:07) *
Пожалуйста, расскажите подробнее о "вполне доступных" внутрисхемных эмуляторах для TMS320.

Ну вообще я имел в виду SAU510. Конечно и SM510 тоже доступна (может даже более), но заниматься сборкой такого устройства я бы лично не стал, и имею SM510 только по той причине, что он мне попался уже готовый smile.gif
gluckmaker
А из жабодушительных соображений из этой схемы можно выкинуть гальваническую развязку? Т.е., если вместо всех ISO721 поставить одну HC244, питаемую от таргета, ничего плохого не случится? Я просто в первый раз сталкиваюсь с этими процессорами (конкретно в моём случае - TMS320C6415T) и не знаю, может, там есть какие-то специальные электрические требования к JTAGу... Отладчик будет втыкаться в ноут, заземлить который проблематично.
Edmundo
Цитата(gluckmaker @ Aug 3 2008, 23:37) *
А из жабодушительных соображений из этой схемы можно выкинуть гальваническую развязку? Т.е., если вместо всех ISO721 поставить одну HC244, питаемую от таргета, ничего плохого не случится? Я просто в первый раз сталкиваюсь с этими процессорами (конкретно в моём случае - TMS320C6415T) и не знаю, может, там есть какие-то специальные электрические требования к JTAGу... Отладчик будет втыкаться в ноут, заземлить который проблематично.

Можно, главное направление сигналов сохранить biggrin.gif (для эмулятора TMS, TCK, TDI, TRST -- выходы, TDO, TCK_RET-входы; EMU0 и EMU1 не используются, но должны быть в "1").
P.S. Кстати ставил ADuM1100 вместо ISO-шек -- тоже работал... Сейчас конечно время другое, появились мнококанальные ISO, в следующей ревизии их поставлю (или SiLabs'овские).
bureau
Мне вот непонятен смысл соединения через изоляторы линий TF_NSS и RF. Хотя по фотке http://www.prodigi.ru/projects/dle500usb/img/photo1.jpg изоляторы через которые они у вас соеденяются не стоят...
SM
Цитата(Edmundo @ Aug 4 2008, 14:41) *
EMU0 и EMU1 не используются, но должны быть в "1").

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

PS. Каких только комментов чудных не найдешь в недрах техаса smile.gif smile.gif
Код
/* DRM - The EMU0/1 info in GPSR SS got swapped in VHDL                     */
#define GPSR_EMU0          ((UINT32)0x00000100) /*  8 EMU0                  */
#define GPSR_EMU1          ((UINT32)0x00000080) /*  7 EMU1                  */
Edmundo
Цитата(bureau @ Jan 11 2009, 22:28) *
Мне вот непонятен смысл соединения через изоляторы линий TF_NSS и RF. Хотя по фотке http://www.prodigi.ru/projects/dle500usb/img/photo1.jpg изоляторы через которые они у вас соеденяются не стоят...

Соединяются они для синхронизма, так как изоляторы обладают серьезной задержкой, поэтому и на фрейм желательно внести эту задержку. А заменил изоляторы перемычками, как говорится, "из экономии" smile.gif Вроде работает.

Цитата(SM @ Jan 11 2009, 23:22) *
Это в принципе не правильно. Они могут быть выходами таргета, и по ним может производиться подсчет событий, отлов глобальных брейкпойнтов, и т.п.

То, что в 510-х EMU0 и EMU1 не нужны, Вы как-то сами говорили, насколько мне помнится. То, что это двунаправленные сигналы, и что они используются при event'ах, RTDX и пр., в курсе, но до этих функций еще добраться надо smile.gif
SM
Цитата(Edmundo @ Jan 17 2009, 08:32) *
То, что в 510-х EMU0 и EMU1 не нужны, Вы как-то сами говорили, насколько мне помнится.
Это было давно и оказалось не правда. "на поверку" - это экспериментально, т.е. хакерски. Беру свои слова обратно, так как сейчас обладаю точной информацией. Да, подавляющее большинство функций корректно работает и без них, но... Есть исключения... Например если глянуть в ф-цию PTI_AsysCount из dvr-ки для ARM7, ARM9, ARM11, C54xx то отлично видно использование PTI_EmuCount, который выполняет USCIF-овский SC_CMD_BENCHMARK. Со всеми вытекающими. Разница лишь в том, что в XDS560 два счетчика на борту, а в 510 один. Второй пример - глобальные брейкпойнты - в их случае ECU проца, в котором точка останова стоит, программируется на вывод на EMUx сигнала о том, что проц ее словил, а остальные процы синхронно тормозятся, ловя своими EMU этот сигнал. Ну и композер этот факт тоже ловит. Ну соотв. профайлинг бывает не совместим с глобальными брейкпойнтами.

Касаемо RTDX-а, да, только в 560-ом и HSRTDX юзаются EMU, 510 не умеет.
fromRU
http://www.prodigi.ru/ проект не работает..
мб у кого-то остались материалы с этого ресурса?
Edmundo
Цитата(fromRU @ Mar 1 2012, 11:10) *
http://www.prodigi.ru/ проект не работает..
мб у кого-то остались материалы с этого ресурса?

Да, я как-то забросил это дело. Временно разместил на сайте http://prodigi.shamil.ru/.

Извиняюсь за поздний ответ, редко захожу на форум.

P. S. Недавно игрался с 5-м композером, было бы время, можно попробовать все портировать на него, более того, выдать эмулятор за XDS100, чтобы не надо было приобретать лицензию.
PrSt
Цитата(Edmundo @ May 4 2012, 16:17) *
Да, я как-то забросил это дело. Временно разместил на сайте http://prodigi.shamil.ru/.

Извиняюсь за поздний ответ, редко захожу на форум.

P. S. Недавно игрался с 5-м композером, было бы время, можно попробовать все портировать на него, более того, выдать эмулятор за XDS100, чтобы не надо было приобретать лицензию.

и тоже не работает ;(
/: /home/shamil/data/www/shamil.ru/prodigi/auto.p(8:19): '/home/shamil/data/www/shamil.ru/sections.cfg' read failed: No such file or directory (2), actual filename '/home/shamil/data/www/shamil.ru/sections.cfg' [file.missing]

zodinyac
Можно ли залить проект на какой-нибудь файлообменник типа rghost.ru?
mpr
Цитата(zodinyac @ Apr 22 2016, 17:24) *
Можно ли залить проект на какой-нибудь файлообменник типа rghost.ru?

http://rghost.net/6sZtgdX67
то что сохранилось с 2008г
gagel
Цитата(Edmundo @ May 4 2012, 15:17) *
P. S. Недавно игрался с 5-м композером, было бы время, можно попробовать все портировать на него, более того, выдать эмулятор за XDS100, чтобы не надо было приобретать лицензию.

Вот это было бы здорово! Т.к. понимаю, что у вас интереса, наверняка, уже нет, может, поможете советом и информацией, как бы это реализовать?

Я сейчас пробую (под Линуксом) заменить libtixds55x.so, в которой сидят GTI_*, TRG_*, PTI_*. Для платки с tms320c5502. Т.к. загрузка программки длится просто нереально долго, а также printf (CIO) слишком медленный. И это, учитывая, что xds100 реализован на ftdi 2232h, который может прокачать и 400 Мбит/с (8 бит параллельно).

Цитата(mpr @ May 1 2016, 15:44) *
http://rghost.net/6sZtgdX67
то что сохранилось с 2008г

Спасибо! Надеюсь, оно подходит для c55x?..

Кстати, есть ещё люди, интересующиеся open source реализацией? (Преимущественно под Линукс, но портабельно, чтобы и под винду собиралось.)
Raven
Думаю, в идеале интересно было бы это портировать в OpenOCD, пользуясь накопленной здесь информацией. А по-минимуму - запустить хотя бы в обособленном виде для начала.
gagel
Идеальную картину я себе обрисовал некоторое время назад. Поддержка c55x не только в openocd, но и в gdb (иначе что толку от openocd?) и binutils(?). С одной стороны gcc умеет c6x и gdb тоже, но вот с c55x не сложилось. На этом идеал закончился, потому что реализовать поддержку в gdb хоть и можно (13 лет назад кто-то интересовался этим вопросом в списке рассылок gdb), но точно не в одиночку как хобби.

Кстати, openocd пришлось бы перерабатывать: ведь здесь вместо нормального разделения команда по irscan, данные по drscan применяют исключительно irscan.

Запустить в обособленном режиме через libftdi могу попробовать. Но это даст слишком мало: только читать/писать память и, может, старт/стоп (уже загруженной) программы. Без возможности загрузки программы, без точек останова, CIO printf, Log.printf DSPBIOS,..

Кстати, что ещё было бы интересно (и просто?) - это попробовать с помощью самописной маленькой программки через boundary scan подёргать пин, на котором висит светодиодик. Но вот куда копать?
Raven
Цитата(gagel @ Jun 7 2016, 23:43) *
Идеальную картину я себе обрисовал некоторое время назад. Поддержка c55x не только в openocd, но и в gdb (иначе что толку от openocd?) и binutils(?). С одной стороны gcc умеет c6x и gdb тоже, но вот с c55x не сложилось. На этом идеал закончился, потому что реализовать поддержку в gdb хоть и можно (13 лет назад кто-то интересовался этим вопросом в списке рассылок gdb), но точно не в одиночку как хобби.

Поддержать новый CPU в GDB - это да, дело непростое... Но для обозримых времен, похоже, актуальнее будет обеспечить работу с CodeComposer'ом (если он работает с c55x).

Вообще, самым, наверное, ценным в этом проекте является reverse engineering API драйвера - можно просто другие готовые кабели приспосабливать для работы с TI DSP через JTAG.

Цитата(gagel @ Jun 7 2016, 23:43) *
Кстати, openocd пришлось бы перерабатывать: ведь здесь вместо нормального разделения команда по irscan, данные по drscan применяют исключительно irscan.

Тут нужно доисследовать. Разницу в подходе к использованию IR у Техаса я заметил (и тут не OOCD "виноват", а ARM и подавляющее большинство других чипмейкеров), но объем сложности в модификации OOCD -- для меня пока вопрос открытый.

Цитата(gagel @ Jun 7 2016, 23:43) *
Запустить в обособленном режиме через libftdi могу попробовать. Но это даст слишком мало: только читать/писать память и, может, старт/стоп (уже загруженной) программы. Без возможности загрузки программы, без точек останова, CIO printf, Log.printf DSPBIOS,..

Запустить что?

Цитата(gagel @ Jun 7 2016, 23:43) *
Кстати, что ещё было бы интересно (и просто?) - это попробовать с помощью самописной маленькой программки через boundary scan подёргать пин, на котором висит светодиодик. Но вот куда копать?

А вот для этого уже много сделано до нас ;-) Во-первых, есть удобные проприетарные программы с GUI, во-вторых, OpenOCD через самописные скрипты может это делать, и в-третьих, существует проект UrJTAG.
gagel
Цитата(Raven @ Jun 8 2016, 12:55) *
Поддержать новый CPU в GDB - это да, дело непростое... Но для обозримых времен, похоже, актуальнее будет обеспечить работу с CodeComposer'ом (если он работает с c55x).

Да, работает wink.gif А то как бы я вообще этим вопросом заинтересовался: есть ещё какие-то IDE для c55x?

Цитата(Raven @ Jun 8 2016, 12:55) *
Вообще, самым, наверное, ценным в этом проекте является reverse engineering API драйвера - можно просто другие готовые кабели приспосабливать для работы с TI DSP через JTAG.

Точно.

Цитата(Raven @ Jun 8 2016, 12:55) *
Тут нужно доисследовать. Разницу в подходе к использованию IR у Техаса я заметил (и тут не OOCD "виноват", а ARM и подавляющее большинство других чипмейкеров), но объем сложности в модификации OOCD -- для меня пока вопрос открытый.

Мне показалось, что как раз у Техаса отклонение от нормы: ведь они не используют DR. Или для чего DR придумали?

Цитата(Raven @ Jun 8 2016, 12:55) *
Запустить что?

Самописную мини-программку для демонстрации, что результаты реверса в принципе работают через libftdi и xds100 на c55x.

Цитата(Raven @ Jun 8 2016, 12:55) *
А вот для этого уже много сделано до нас ;-) Во-первых, есть удобные проприетарные программы с GUI, во-вторых, OpenOCD через самописные скрипты может это делать, и в-третьих, существует проект UrJTAG.

Проприетарные не интересуют в принципе. А есть примеры скриптов для OpenOCD? В UrJTAG последний значимый коммит был почти 2 года назад. Им ещё пользуются? И я так понимаю, что если мне нужно всего один пин дёргать, то всё равно нужно доставать BSDL-файлы? И не может так оказаться, что аналогично с IR/DR Техас по-другому реализовали доступ для boundary scan и OpenOCD снова не в состоянии помочь? Эх, мне бы просто информацию, какую команду в IR послать, какой формат для выбора пина и данных, и всё.
Edmundo
Прошу прощения за такое безответственное поведение с исходниками, надо сделать над собой волевое усилие, и выложить все, что есть, на github, хотя бы свалку для начала, а потом уже разобрать. Надо пошуршать по старым жёстким дискам.

Вообще заточить все это под GDB -- была у меня такая лихая идея. Но сложность её я не оценивал. А так да, можно было бы тогда отлаживать в прочих IDE, например в Qt Creator.

По драйверам. PTI_*, TRG_* -- это более низкий уровень взаимодествия с железом, и моему разуму он оказался не подвластен. Когда в своё время я обменивался своими мыслями с Сергеем Марковым aka SM, он как раз рекомендовал ломать протокол на более низком уровне, что бы не переписывать высокоуровневые драйвера под каждую платформу. В то время он уже перешёл на светлую сторону Силы под крыло Sauris, поэтому эта тема для него актуальность потеряла, у него уже был доступ к SEPK (или как он там называется). Я пошел-таки своим путем, что позволило мне добиться неплохих результатов по скорости обмена данными (на мой субъективный взгляд).

По эмуляции. Я экспериментировал с тремя семействами: C64хх (не плюс), C55xx, C28xx. Для них удалось реверсить содержание JTAG-цепочек таких распространённых операций как чтение/запись в память/регистры ядра, установка/снятие точек останова, запуск/останов программы и т.п. Не удалось до конца познать суть инициализационных цепочек, а также назначение всех разрядов регистра статуса (я о нем упоминал в статье).

По поводу "подёргать ножкой". Я в boundary scan не силён, для этого действительно есть специальные инструменты, BSDL-описания, в общем с эмуляцией граничное сканирование объединяет лишь одно -- физический интерфейс JTAG. В остальном это весьма разные вещи. По граничному сканированию рекомендую обратиться к знаниям ув. iosifk: http://iosifk.narod.ru/
Вы даже можете пообщаться с ним лично, ранее он бывал на этом форуме.

Ну а в остальном я готов проконсультировать в любых вопросах, на которые знаю/помню ответы. Правда род моей деятельности сменился, поэтому я сейчас от этого несколько далёк laughing.gif
gagel
Так, BSDL-файлы есть. UrJTAG не знает XDS100v2. Нашёл патч, собрал UrJTAG. Но и он тоже не хочет работать с Техасом. Наверняка, пытается детектить чип по DR, а там - тишина. А как без успешного detect подсунуть ему инфу про чип и затем послать что-то вроде
Код
instruction EXTEST
shift IR
set signal GPIO(6) out 1
shift DR
set signal GPIO(6) out 0
shift DR

?

Кстати, выходит, всё должно быть очень просто с boundary scan. Если бы тольке не этот IR<->DR.

О, здОрово, что вы зашли!

Цитата(Edmundo @ Jun 8 2016, 14:41) *
Прошу прощения за такое безответственное поведение с исходниками, надо сделать над собой волевое усилие, и выложить все, что есть, на github, хотя бы свалку для начала, а потом уже разобрать. Надо пошуршать по старым жёстким дискам.

Да это было давно, так что и обижаться нельзя. С github или аналогами было бы вообще прелесть!

Цитата(Edmundo @ Jun 8 2016, 14:41) *
Вообще заточить все это под GDB -- была у меня такая лихая идея. Но сложность её я не оценивал. А так да, можно было бы тогда отлаживать в прочих IDE, например в Qt Creator.

Эх, вот тогда была бы полная независимость.

Цитата(Edmundo @ Jun 8 2016, 14:41) *
По драйверам. PTI_*, TRG_* -- это более низкий уровень взаимодествия с железом, и моему разуму он оказался не подвластен. Когда в своё время я обменивался своими мыслями с Сергеем Марковым aka SM, он как раз рекомендовал ломать протокол на более низком уровне, что бы не переписывать высокоуровневые драйвера под каждую платформу. В то время он уже перешёл на светлую сторону Силы под крыло Sauris, поэтому эта тема для него актуальность потеряла, у него уже был доступ к SEPK (или как он там называется). Я пошел-таки своим путем, что позволило мне добиться неплохих результатов по скорости обмена данными (на мой субъективный взгляд).

Да, для вашего подхода, кажется, нужен как раз минимум действий. И раз не заглядывали в это SEPK, то претензий от TI к открытому эмулятору быть не должно?..

Цитата(Edmundo @ Jun 8 2016, 14:41) *
По эмуляции. Я экспериментировал с тремя семействами: C64хх (не плюс), C55xx, C28xx. Для них удалось реверсить содержание JTAG-цепочек таких распространённых операций как чтение/запись в память/регистры ядра, установка/снятие точек останова, запуск/останов программы и т.п. Не удалось до конца познать суть инициализационных цепочек, а также назначение всех разрядов регистра статуса (я о нем упоминал в статье).

Ясно. А второй части статьи не было? Может, в черновиках на старом диске?

Цитата(Edmundo @ Jun 8 2016, 14:41) *
По поводу "подёргать ножкой". Я в boundary scan не силён, для этого действительно есть специальные инструменты, BSDL-описания, в общем с эмуляцией граничное сканирование объединяет лишь одно -- физический интерфейс JTAG. В остальном это весьма разные вещи. По граничному сканированию рекомендую обратиться к знаниям ув. iosifk: http://iosifk.narod.ru/
Вы даже можете пообщаться с ним лично, ранее он бывал на этом форуме.

Спасибо за совет. С boundary scan, вроде, всё должно быть просто, если бы не обнаруженная вами особенность TI DSP обмениваться информацией исключительно через IR, а не, как полагается(?) через IR/DR.

Цитата(Edmundo @ Jun 8 2016, 14:41) *
Ну а в остальном я готов проконсультировать в любых вопросах, на которые знаю/помню ответы. Правда род моей деятельности сменился, поэтому я сейчас от этого несколько далёк laughing.gif

Кардинально (не электроника/программирование)? В любом случае заранее спасибо!
Edmundo
Цитата(gagel @ Jun 8 2016, 16:01) *
Да, для вашего подхода, кажется, нужен как раз минимум действий. И раз не заглядывали в это SEPK, то претензий от TI к открытому эмулятору быть не должно?..

Нужно перехыватывать все GTI_* функции вместо того, чтобы перехватить парочку низкоуровневых. В этом сложность.
Насколько я помню, лицензионное соглашение CCS не очень приветствует реверс-инжиниринг, так что о лицензионной чистоте можно спорить. Но в остальном да, никаких NDA и прочих ограничений нету. Как мне кажется, TI идёт в сторону либерализации, вон даже бесплатная версия CCS есть, когда во времена v2-v3 мы и помыслить о таком не могли. XDS100 опять же -- полный opensource hardware! Так что сомневаюсь, что они будут преследовать таких вот горе-исследователей wink.gif

Цитата(gagel @ Jun 8 2016, 16:01) *
Ясно. А второй части статьи не было? Может, в черновиках на старом диске?

Нет, до второй статьи руки не дошли. Я вообще думал, что с появлением XDS100 эта тема утратила актуальность не только для меня. Видать, ошибался rolleyes.gif Да и процессоры сейчас пошли сплошь многоядерные, а как там производится эмуляция -- тёмный лес для меня.

Цитата(gagel @ Jun 8 2016, 16:01) *
Спасибо за совет. С boundary scan, вроде, всё должно быть просто, если бы не обнаруженная вами особенность TI DSP обмениваться информацией исключительно через IR, а не, как полагается(?) через IR/DR.

Как мне кажется, в режиме boundary scan используются как IR, так и DR. Это в режиме эмуляции задействован только IR. Тут надо анализировать BDSL-описание на конкретный камень. Но возможно, что ошибаюсь, ибо не вникал глубоко.
CCS действительно определяет тип процессора по информации в статусном регистре который считывает в узле IR автомата состояний JTAG. Но так же ли это делается в режиме boundary scan -- не ведаю.

Цитата(gagel @ Jun 8 2016, 16:01) *
Кардинально (не электроника/программирование)?

Не сильно кардинально, но электроника и программирование свелись к минимуму, однако в рамках хобби остались по-любому biggrin.gif
Raven
Да, страничка по XDS100 действительно дает много новой интересной информации. Но, если я правильно понял из беглого ознакомления, раскрывается только HW JTAG-кабеля (притом, имеющего целый ряд ограничений по функционалу), а протокол общения с ним (самое вкусное :-)) - это пока Техас оберегает от "грязных хакерских ручек".

Так что ценность RE интерфейса драйвера только подтверждается. Нужно будет просто еще дальше пройти, до полной победы ;-)

По Boundary Scan. Это стандартная вещь JTAG'а, и если уж она поддерживается данным TAP'ом, то можно брать BSDL, анализировать его и дрыгать ножкой. Другое дело, что в чипе может быть и несколько TAP'ов (например, 1 для BSCAN, другой - для OCD). Но об этом тоже можно разузнать и работать с нужным.

Цитата(gagel @ Jun 8 2016, 16:01) *
Так, BSDL-файлы есть. UrJTAG не знает XDS100v2. Нашёл патч, собрал UrJTAG. Но и он тоже не хочет работать с Техасом. Наверняка, пытается детектить чип по DR, а там - тишина. А как без успешного detect подсунуть ему инфу про чип и затем послать что-то вроде

Да нет, особенность работы Техасовского OCD здесь ни при чем - идентификация должна поддерживаться стандартно, путем вычитывания IDCODE. Это любой, кто назвался IEEE 1149.1 TAP'ом, должен делать единообразно. Просто UrJTAG, конечно же, не знает про XDS100 - во времена последнего обновления UrJTAG еще, поди, и XDS100 не было sm.gif. Но для BSCAN он нам и не нужен. А нужен любой другой кабель, знакомый UrJTAG'у. У вас что есть, помимо XDS100? Вот здесь список поддерживаемых кабелей: список.

Можете выложить BSDL-файлы чипа, о котором идет речь? Надо взглянуть.

И еще. Если мы начинаем совместно что-то исследовать, то неплохо бы хотя бы в какой-то степени синхронизировать программно-аппаратный инструментарий. Конкретно на данный момент - надо бы и мне собрать UrJTAG. Если не сложно, не поделитесь описанием проблем при сборке, патчем и т.п. ? Чтобы быстрей дело пошло...

Полной синхронизации в ближайшее время пока не будет, конечно (например, TMS'ов у меня ни в каком виде под руками пока нет), но для первых шагов оно и необязательно. Зато есть некоторое знание JTAG'остроения и RTL-design'а (включая FPGA), что сейчас важнее.
gagel
Цитата(Raven @ Jun 8 2016, 20:55) *
Да, страничка по XDS100 действительно дает много новой интересной информации. Но, если я правильно понял из беглого ознакомления, раскрывается только HW JTAG-кабеля (притом, имеющего целый ряд ограничений по функционалу), а протокол общения с ним (самое вкусное :-)) - это пока Техас оберегает от "грязных хакерских ручек".

Вообще, xds100v2 и стандартная платка с ft2232h - это как найдите 7 отличий. Или там есть всё же какое-то принципиальное отличие?

Цитата(Raven @ Jun 8 2016, 20:55) *
Так что ценность RE интерфейса драйвера только подтверждается. Нужно будет просто еще дальше пройти, до полной победы ;-)

По Boundary Scan. Это стандартная вещь JTAG'а, и если уж она поддерживается данным TAP'ом, то можно брать BSDL, анализировать его и дрыгать ножкой. Другое дело, что в чипе может быть и несколько TAP'ов (например, 1 для BSCAN, другой - для OCD). Но об этом тоже можно разузнать и работать с нужным.

Да, вот тут интересно.

Цитата(Raven @ Jun 8 2016, 20:55) *
Да нет, особенность работы Техасовского OCD здесь ни при чем - идентификация должна поддерживаться стандартно, путем вычитывания IDCODE. Это любой, кто назвался IEEE 1149.1 TAP'ом, должен делать единообразно. Просто UrJTAG, конечно же, не знает про XDS100 - во времена последнего обновления UrJTAG еще, поди, и XDS100 не было sm.gif. Но для BSCAN он нам и не нужен. А нужен любой другой кабель, знакомый UrJTAG'у. У вас что есть, помимо XDS100? Вот здесь список поддерживаемых кабелей: список.

Кроме xds100v2 есть стандартная платка ft2232h и STM Discovery-F4 (паяльника нет). Я читал, что IDCODE - это сходу где угодно. Благодаря этому вообще находят нужные JTAG-пины. Так что очень странно, что оно пока не получается с C55x, когда пины известны. Разве что инициализация этого xds100v2 может быть причиной?

Цитата(Raven @ Jun 8 2016, 20:55) *
Можете выложить BSDL-файлы чипа, о котором идет речь? Надо взглянуть.

Вот тут они в свободном доступе: 5502 и 5509a. Я пользуюсь ezdsp5502, там xds100v2 встроенный. Иногда есть доступ к 5509a (с xds100v2-кабелем). Кстати, BSDL у 5509a выглядит более подробным.

Цитата(Raven @ Jun 8 2016, 20:55) *
И еще. Если мы начинаем совместно что-то исследовать, то неплохо бы хотя бы в какой-то степени синхронизировать программно-аппаратный инструментарий. Конкретно на данный момент - надо бы и мне собрать UrJTAG. Если не сложно, не поделитесь описанием проблем при сборке, патчем и т.п. ? Чтобы быстрей дело пошло...

Проблем со сборкой не было. Патч брал здесь: XDS100 для UrJTAG. Собирал под Debian testing последнюю svn-ревизию 2052 из git'а:
Код
git clone git://git.code.sf.net/p/urjtag/git urjtag-git


Цитата(Raven @ Jun 8 2016, 20:55) *
Полной синхронизации в ближайшее время пока не будет, конечно (например, TMS'ов у меня ни в каком виде под руками пока нет), но для первых шагов оно и необязательно. Зато есть некоторое знание JTAG'остроения и RTL-design'а (включая FPGA), что сейчас важнее.

Интересно, есть ли они вообще ещё у кого-то или C55x - уже совсем антиквариат?
Raven
Цитата(gagel @ Jun 9 2016, 05:47) *
Вообще, xds100v2 и стандартная платка с ft2232h - это как найдите 7 отличий. Или там есть всё же какое-то принципиальное отличие?

Я, признаться, пока на внутренности XDS100 не смотрел. Если они на FT2232H - тем лучше.

Цитата(gagel @ Jun 9 2016, 05:47) *
Кроме xds100v2 есть стандартная платка ft2232h и STM Discovery-F4 (паяльника нет).

Стандартная плата ft2232h - тоже хорошо, будет дублером для перепроверок. Если на ней есть header'ные контакты - то соединения можно будет делать и без паяльника, с помощью готовых оконцованных проводочков. С STM Discovery я пока, как ни странно, дела не имел, и поэтому для меня он в качестве инструмента пока отодвигается в конец списка. А вот если для вас он - старый добрый друг, то вполне может сгодится на каком-то этапе (с микроконтроллером какие-то итерации исследований/тестов могут быть быстрее).

Цитата(gagel @ Jun 9 2016, 05:47) *
Я читал, что IDCODE - это сходу где угодно. Благодаря этому вообще находят нужные JTAG-пины. Так что очень странно, что оно пока не получается с C55x, когда пины известны. Разве что инициализация этого xds100v2 может быть причиной?

Взглянул на оба BSDL-файла. Очень интересно. Факты таковы:
1) У 5502 и 5509, похоже, принципиально разный интерфейс к OCD-функционалу. 5502 предполагает работу с использованием "длинного" 38-битового IR, а 5509 выглядит в этой части более похожим на нынешний OCD-мейнстрим со сравнительно "коротким" IR (у 5509 - 6 бит).

2) 5502, как можно догадаться по номеру, древнее 5509, и НЕ ПОДДЕРЖИВАЕТ IDCODE инструкцию (это из BSDL видно). Давненько такое в мои руки не попадало sm.gif Соответственно, автоматические процедуры распознавания устройств в JTAG-цепочке будут упираться лбом в 5502. Что потребует какого-то ручного разъяснения для них, кто есть кто. 5509 поддерживает IDCODE (0x0805002F).

3) Чтобы их JTAG-пины подключились к TAP'у и заработали именно в качестве JTAG-интерфейса (а не обслуживали factory test mode), нужно, чтобы в момент положительного фронта TRSTn (т.е., в момент выхода из Test Reset) на пинах EMU0 и EMU1 были определенные уровни: 0b11 для 5502, и 0b00 для 5509. Возможно, на плате все уже для этого сделано и намертво притянуто к нужным уровням, но проверить не помешает (если будут проблемы).

Цитата(gagel @ Jun 9 2016, 05:47) *
Проблем со сборкой не было. Патч брал здесь: XDS100 для UrJTAG. Собирал под Debian testing последнюю svn-ревизию 2052 из git'а:
Код
git clone git://git.code.sf.net/p/urjtag/git urjtag-git

Понял. Я буду начинать с CygWin'а. Кстати, вы собирали HEAD или TAG_0-10-0?

Цитата(gagel @ Jun 9 2016, 05:47) *
Интересно, есть ли они вообще ещё у кого-то или C55x - уже совсем антиквариат?

Настолько древние? Ладно, лишь бы платы были исправными, процы поддерживались CCS и была документация sm.gif.
gagel
Цитата(Raven @ Jun 9 2016, 15:34) *
Я, признаться, пока на внутренности XDS100 не смотрел. Если они на FT2232H - тем лучше.

Стандартная плата ft2232h - тоже хорошо, будет дублером для перепроверок. Если на ней есть header'ные контакты - то соединения можно будет делать и без паяльника, с помощью готовых оконцованных проводочков. С STM Discovery я пока, как ни странно, дела не имел, и поэтому для меня он в качестве инструмента пока отодвигается в конец списка. А вот если для вас он - старый добрый друг, то вполне может сгодится на каком-то этапе (с микроконтроллером какие-то итерации исследований/тестов могут быть быстрее).

Ну, я не совсем электронщик - так что друг он не старый. Но проводки есть. Разве что с платой ezdsp5502 они бесполезны, т.к. в отличие от STM Техас не предусмотрели возможность подключения внешнего отладчика, только впаянный. А с платой 5509a я не могу так свободно экспериментировать: только с имеющимся xds100v2-кабелем.

Цитата(Raven @ Jun 9 2016, 15:34) *
Взглянул на оба BSDL-файла. Очень интересно. Факты таковы:
1) У 5502 и 5509, похоже, принципиально разный интерфейс к OCD-функционалу. 5502 предполагает работу с использованием "длинного" 38-битового IR, а 5509 выглядит в этой части более похожим на нынешний OCD-мейнстрим со сравнительно "коротким" IR (у 5509 - 6 бит).

Хочется верить, что факты, а не ещё не исправленные баги, как:
Цитата
5502:
BSDL Revision : 1.1 - Changed Inst length from 6 to 38 bits.

И, кстати, не смотря на 38 бит, всё равно Edmundo обнаружил, что слать надо 54, а, значит, и устанавливать irlen в 54.

Цитата(Raven @ Jun 9 2016, 15:34) *
2) 5502, как можно догадаться по номеру, древнее 5509, и НЕ ПОДДЕРЖИВАЕТ IDCODE инструкцию (это из BSDL видно). Давненько такое в мои руки не попадало sm.gif Соответственно, автоматические процедуры распознавания устройств в JTAG-цепочке будут упираться лбом в 5502. Что потребует какого-то ручного разъяснения для них, кто есть кто. 5509 поддерживает IDCODE (0x0805002F).

Как-то я этим номерам не очень доверяю, кто из них древнее. Хотя IDCODE и опциональна, но всё равно не верится, чтобы она была не реализована. Это же просто беспрецедентно за всю историю развития UrJTAG и OpenOCD!

Цитата(Raven @ Jun 9 2016, 15:34) *
3) Чтобы их JTAG-пины подключились к TAP'у и заработали именно в качестве JTAG-интерфейса (а не обслуживали factory test mode), нужно, чтобы в момент положительного фронта TRSTn (т.е., в момент выхода из Test Reset) на пинах EMU0 и EMU1 были определенные уровни: 0b11 для 5502, и 0b00 для 5509. Возможно, на плате все уже для этого сделано и намертво притянуто к нужным уровням, но проверить не помешает (если будут проблемы).

Так для отладки и для boundary scan разные условия для этих пинов? И т.к. xds100v2 предназначен в первую очередь для отладки, не окажется, что там пины намертво так притянуты, что нельзя выбрать нужный для скана режим? Вот проверить все эти соответствия на схеме с описаниями и таймингами и не запутаться для меня сложновато. Надеюсь, к ним есть программный доступ через libftdi.

Цитата(Raven @ Jun 9 2016, 15:34) *
Понял. Я буду начинать с CygWin'а. Кстати, вы собирали HEAD или TAG_0-10-0?

TAG_0-10-0 - это, наверное, релиз 0.10, вышедший 7 лет назад. А HEAD - это только указатель. Собирал я git master (основная ветка, где, как правило, ведётся разработка). Сам UrJTAG разрабатывается в svn, а git - это только зеркало. Поэтому в логе можно видеть текущую svn-ревизию (git-svn-id: ... trunk@2052 ...):
Код
$ git log -1
commit bac6b34d8e278df25b178ea929d2c41ba6a146e5
Author: Mike Frysinger <vapier@gentoo.org>
Date:   Sun Oct 11 04:57:45 2015 +0000

    ignore .dirstamp files
    
    git-svn-id: svn://svn.code.sf.net/p/urjtag/svn/trunk@2052 b68d4a1b-bc3d-0410-92ed-d4ac073336b7



Цитата(gagel @ Jun 10 2016, 02:45) *
Надеюсь, к ним есть программный доступ через libftdi.

Так, глянул на ezdsp5502_Schematics_RevC.pdf. EMU0 и EMU1 пулапнуты. Значит, TAP и для дебага, и для boundary scan - один и тот же. И значит, нет доступа только к factory test, что и не нужно. Да и с libftdi, значит, меньше ошибок будет.

А вот для 5509a - требования с точностью до наоборот: пины должны быть заземлены для boundary scan.

Чтобы не запутаться:
Цитата
5502
============
EMU0 (I/O/Z)
-----
Emulator 0 pin. When nTRST is driven low, EMU0 must be high for activation of the
nOFF condition. When nTRST is driven high, EMU0 is used as an interrupt to or from
the emulator system and is defined as I/O by way of the IEEE standard 1149.1 scan
system.
The EMU0 and EMU1/nOFF pins must be pulled up when an emulator is not
connected. Internal pullups have been included for the purpose. If the user chooses
to disable these pullups through the XBCR, external pullup resistors must be added
to these two pins.

EMU1/nOFF (I/O/Z)
-----
Emulator 1 pin/disable all outputs. When nTRST is driven high, EMU1/nOFF is used
as an interrupt to or from the emulator system and is defined as I/O by way of IEEE
standard 1149.1 scan system. When nTRST is driven low, EMU1/nOFF is configured
as nOFF. The EMU1/nOFF signal, when active (low), puts all output drivers into the
high-impedance state. Note that nOFF is used exclusively for testing and emulation
purposes (not for multiprocessing applications). Therefore, for the nOFF condition, the
following apply:
• nTRST = low,
• EMU0 = high,
• EMU1/nOFF = low
The EMU0 and EMU1/nOFF pins must be pulled up when an emulator is not
connected. Internal pullups have been included for the purpose. If the user chooses
to disable these pullups through the XBCR, external pullup resistors must be added
to these two pins.


Цитата
5509a
===========

EMU0 (I/O/Z)
-----
Emulator 0 pin. When nTRST is driven low, EMU0 must be high for
activation of the nOFF condition. When nTRST is driven high, EMU0 is used
as an interrupt to or from the emulator system and is defined as I/O by way
of the IEEE standard 1149.1 scan system.

EMU1/nOFF (I/O/Z)
-----
Emulator 1 pin/disable all outputs. When nTRST is driven high, EMU1/nOFF
is used as an interrupt to or from the emulator system and is defined as I/O
by way of IEEE standard 1149.1 scan system. When nTRST is driven low,
EMU1/nOFF is configured as nOFF. The EMU1/nOFF signal, when
active-low, puts all output drivers into the high-impedance state. Note that
nOFF is used exclusively for testing and emulation purposes (not for
multiprocessing applications). Therefore, for the nOFF condition, the
following apply: nTRST = low, EMU0 = high, EMU1/nOFF = low

Интересно, там ещё и прерывания есть.

Кстати, для сборки UrJTAG нужно иметь (среди прочих зависимостей) libusb-1.0 и libftdi (или 0.20 или 1.x). Я пока пробую с 0.20.
Raven
Цитата(gagel @ Jun 10 2016, 04:11) *
Хочется верить, что факты, а не ещё не исправленные баги, как:

Будем надеяться. Но в отношении 5509 сомневаюсь - слишком много в его BSDL других зявязок на IR-Length=6 (например, собственно коды инструкций). К тому же файл для 5502 все же содержит уже устоявшуюся информацию (за столько-то лет) - errata в нем уже учтена.

Цитата(gagel @ Jun 10 2016, 04:11) *
И, кстати, не смотря на 38 бит, всё равно Edmundo обнаружил, что слать надо 54, а, значит, и устанавливать irlen в 54.

А вот с этим будем разбираться - кто чего куда там добавляет в цепочку тихой сапой sm.gif.

Цитата(gagel @ Jun 10 2016, 04:11) *
Как-то я этим номерам не очень доверяю, кто из них древнее. Хотя IDCODE и опциональна, но всё равно не верится, чтобы она была не реализована. Это же просто беспрецедентно за всю историю развития UrJTAG и OpenOCD!

Да нет, это вполне по стандарту (он такое допускает), но совсем не комильфо для сегодняшнего дня.

Цитата(gagel @ Jun 10 2016, 04:11) *
А вот для 5509a - требования с точностью до наоборот: пины должны быть заземлены для boundary scan.

Чтобы не запутаться:

Это откуда цитаты?

Цитата(gagel @ Jun 10 2016, 04:11) *
Интересно, там ещё и прерывания есть.

Насколько я понимаю, это способ дернуть кабель-адаптер, чтобы сообщить ему о произошедших debug-событиях. Довольно обычная вещь в OCD системах.

Цитата(gagel @ Jun 10 2016, 04:11) *
Кстати, для сборки UrJTAG нужно иметь (среди прочих зависимостей) libusb-1.0 и libftdi (или 0.20 или 1.x). Я пока пробую с 0.20.

Я недавно проходил подобным путем при сборке OOCD, так что многое уже на месте. Но с наскока под CygWin не собралось. Еще немного помучаю его, и если за выходные не заведется - попробую под Linux.
gagel
Цитата(Raven @ Jun 10 2016, 13:39) *
Это откуда цитаты?

Из официальной документации: 5502, 5509a.

Edmundo,
я закончил черновик so-прокси (so - это shared object типа вин-DLL): т.е. используя найденные вами заголовки функций я набросал прокси, подменил оригинальную so'шку, а в прокси дёргаю функции из оригинальной so'шки один в один. Первое, что сделала CCS 6.1.3 - упала. Вылечить удалось быстро:
Код
- char *GTI_GETERRSTR_EX3(void)
+ char* GTI_GETERRSTR_EX3(void *pHandle, unsigned long *pParam1, unsigned long *pParam2, unsigned long *pParam3, unsigned long *pParam4, unsigned long *pParam5, unsigned long *pParam6, unsigned long *pParam7, char *str1, int unkn1, char* str2, int unkn2)

Для прокси это подошло, но как разобраться, что это за параметры для собственной реализации? Вот так это выглядит в логе:
Код
0xC9A5DB40 5855241 3 C55xx GTI C: GTI_GETERRSTR_EX3( 0x0xca953838, *0x0xc9a5c640 = 0x00000000, *0x0xc9a5c638 = 0x00000000, *0x0xc9a5c644 = 0x00000000, *0x0xc9a5c648 = 0x00000000, *0x0xc9a5c64c = 0x00000000, *0x0xc9a5c650 = 0x00000000, *0x0xc9a5c654 = 0x00000000, "", 0x00000040, "", 0x00000400 )
0xC9A5DB40 5855241 3 C55xx GTI R: GTI_GETERRSTR_EX3( 0x0xca953838, *0x0xc9a5c640 = 0x00000000, *0x0xc9a5c638 = 0x00000000, *0x0xc9a5c644 = 0x00000000, *0x0xc9a5c648 = 0x00000002, *0x0xc9a5c64c = 0x00000000, *0x0xc9a5c650 = 0x00000008, *0x0xc9a5c654 = 0x00000000, "", 0x00000040, "", 0x00000400 ) = 0x00000000


И ещё появились(?) как минимум несколько функций, которые не только присутствуют в libtixds55x.so, но и вызываются CCS: GTI_GET_NUM_RESETS, GTI_GET_RESET_INFO, GTI_RESET_EX:
Код
0xC9A5DB40 5851429 3 C55xx GTI C: GTI_GET_NUM_RESETS( 0x0xca953838 )
0xC9A5DB40 5851430 3 C55xx GTI R: GTI_GET_NUM_RESETS( 0x0xca953838 ) = 0x00000001

Тут можно предположить, что просто есть один вид RESET'а, значит возвращается 1 (но int или unsigned int)?

Код
0xC9A5DB40 5851430 3 C55xx GTI C: GTI_GET_RESET_INFO( 0x0xca953838, 0x00000000, *0x0xc9a5c4fc = ??? )
0xC9A5DB40 5851430 3 C55xx GTI R: GTI_GET_RESET_INFO( 0x0xca953838, 0x00000000, *0x0xc9a5c4fc = ??? ) = 0x00000000

Тут выбирается RESET номер 1 (т.е. 0) и получается указатель на инфу о RESET'е?

Код
0xC9A5DB40 5855123 3 C55xx GTI C: GTI_RESET_EX( 0x0xca953838, 0x00000000 )
0xC9A5DB40 5855140 3 C55xx GTI R: GTI_RESET_EX( 0x0xca953838, 0x00000000 ) = 0x00000000

Тут вызывается RESET номер 1 (т.е. 0) и статус 0 (нет ошибки)?

И есть ещё несколько функций, которые есть в бинарнике, но я пока не заметил их вызова из CCS:
Код
GTI_QUERY_INTERFACE
GTI_BLOCK_RESET
GTI_GET_WAIT_IN_RESET_MODE
GTI_SET_WAIT_IN_RESET
GTI_BP_TEST
GTI_STAT_EX2


Ещё, кстати, RTDX уже некоторое время как объявлен устаревшим. Но почему? Я так и не нашёл официального объяснения и предложения по замене. Так вот в 6.1.1 или 6.1.2 RTDX-функции были выброшены из so'шки. А в DSPBIOS они до сих пор место занимают. Вам доводилось их использовать? Интересно, можно ли их воскресить? Хотя, скорее всего, чисто теоретически.
Raven
В продолжение линии BSCAN для 5502, 5509а:
- нельзя ли выложить логи подключения UrJTAG для того и другого? В частности, хочется увидеть, как воспринимается отсутствие IDCODE в 5502 и (надеюсь) его присутствие в 5509а.
gagel
Raven,
да urjtag (как и oocd) не справляется даже с самым первым шагом: определение IRLEN:
CODE
jtag> debug all
debug: src/global/parse.c:167 urj_parse_line(): Return in urj_parse_line r=0 line={debug all}
jtag> cable JTAGv5
src/tap/usbconn/libftdi.c:336 usbconn_ftdi_connect(): Connected to libftdi driver.
src/tap/cable/ft2232.c:1203 ft2232_jtagv5_init(): JTAGv5: JTAG Mode Initialization OK!
debug: src/tap/state.c:59 urj_tap_state_dump(): tap_state: UNKNOWN_STATE
debug: src/tap/state.c:59 urj_tap_state_dump(): tap_state: TEST_LOGIC_RESET
debug: src/tap/state.c:59 urj_tap_state_dump(): tap_state: TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:0)=> RUN_TEST_IDLE
debug: src/global/parse.c:167 urj_parse_line(): Return in urj_parse_line r=0 line={cable JTAGv5}
jtag> detect
debug: src/tap/state.c:59 urj_tap_state_dump(): tap_state: TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:1)=> TEST_LOGIC_RESET
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: TEST_LOGIC_RESET =(tms:0)=> RUN_TEST_IDLE
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: RUN_TEST_IDLE =(tms:1)=> SELECT_DR_SCAN
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: SELECT_DR_SCAN =(tms:1)=> SELECT_IR_SCAN
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: SELECT_IR_SCAN =(tms:0)=> CAPTURE_IR
debug: src/tap/state.c:66 urj_tap_state_dump_2(): tap_state: CAPTURE_IR =(tms:0)=> SHIFT_IR
warning: src/tap/discovery.c:120 urj_tap_detect_register_size(): TDO seems to be stuck at 1
debug: src/global/parse.c:167 urj_parse_line(): Return in urj_parse_line r=1 line={detect}
jtag>

С 5509a ситуация та же. Я уже начал копаться в исходниках, чтобы помочь ему. Посмотрим, что выйдет.

А тем временем после написания декодера ftdi jtag, анализа его логов я написал минимальную программку - и ура! я могу считывать состояния всех пинов! Но не дёргать эти пины. Тут есть пара вопросов: инструкции PRELOAD нет, есть только SAMPLE. Остаётся пробовать её. Итак, делаю:
... --> SHIFT-IR --> (SAMPLE) --> ... --> SHIFT-DR --> (все нули) --> ... --> SHIFT-IR --> (EXTEST) --> ... --> SHIFT-DR (set control=1, value=0) --> ... --> SHIFT-IR (EXTEST) --> ... --> RUN-TEST-IDLE.

Реакция есть: выполнение загруженной программы останавливается. Но светодиодик не загорается (value = 0). Я правильно понял, что для установки значения нужно установить соответствующий ему control bit в 1? Для 5502:
Код
   "214  (bc_1,                   *,   control,  1)," &
   "215  (bc_1,                  XF,   output3,  X,     214,   1,  Z)," &

И ещё я не понял, для чего это в 5502:
Код
    attribute INSTRUCTION_CAPTURE of TMX320VC5502 : entity is  "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX01";
gagel
Всё, заработало!
... --> SHIFT-IR --> (SAMPLE) --> ... --> SHIFT-DR --> (все нули) --> ... --> SHIFT-IR --> (EXTEST) --> ... --> SHIFT-DR (set control=0, value=1) --> ... --> RUN-TEST-IDLE.
Нужно было только установить value (output3), а не и control тоже. Теперь только вопрос: а зачем этот control?
И ещё не ожидал, что при SAMPLE value=0 светодиодик горит, а при EXTEST для этого нужно писать 1. Я думал, что значение всего BSR можно один к одному использовать и для SAMPLE, и для EXTEST, т.е. содержимое интерпретируется одинаково, а не как пока получается: по-разному.
Edmundo
Цитата(gagel @ Jun 12 2016, 21:36) *
Edmundo,
я закончил черновик so-прокси (so - это shared object типа вин-DLL): т.е. используя найденные вами заголовки функций я набросал прокси, подменил оригинальную so'шку, а в прокси дёргаю функции из оригинальной so'шки один в один. Первое, что сделала CCS 6.1.3 - упала. Вылечить удалось быстро:
Код
- char *GTI_GETERRSTR_EX3(void)
+ char* GTI_GETERRSTR_EX3(void *pHandle, unsigned long *pParam1, unsigned long *pParam2, unsigned long *pParam3, unsigned long *pParam4, unsigned long *pParam5, unsigned long *pParam6, unsigned long *pParam7, char *str1, int unkn1, char* str2, int unkn2)

Для прокси это подошло, но как разобраться, что это за параметры для собственной реализации? Вот так это выглядит в логе:
Код
0xC9A5DB40 5855241 3 C55xx GTI C: GTI_GETERRSTR_EX3( 0x0xca953838, *0x0xc9a5c640 = 0x00000000, *0x0xc9a5c638 = 0x00000000, *0x0xc9a5c644 = 0x00000000, *0x0xc9a5c648 = 0x00000000, *0x0xc9a5c64c = 0x00000000, *0x0xc9a5c650 = 0x00000000, *0x0xc9a5c654 = 0x00000000, "", 0x00000040, "", 0x00000400 )
0xC9A5DB40 5855241 3 C55xx GTI R: GTI_GETERRSTR_EX3( 0x0xca953838, *0x0xc9a5c640 = 0x00000000, *0x0xc9a5c638 = 0x00000000, *0x0xc9a5c644 = 0x00000000, *0x0xc9a5c648 = 0x00000002, *0x0xc9a5c64c = 0x00000000, *0x0xc9a5c650 = 0x00000008, *0x0xc9a5c654 = 0x00000000, "", 0x00000040, "", 0x00000400 ) = 0x00000000

Понять суть параметров этих *_EX, *_EX2, *_EX3 и с каждой новой версией CCS все новых *_EX* -- сам чёрт ногу сломит. Но раньше было так, что если CCS не находил в драйвере GTI_GETERRSTR_EX*, то он обращался к GTI_GETERRSTR, параметры которой доступны для понимания.

Цитата(gagel @ Jun 12 2016, 21:36) *
И ещё появились(?) как минимум несколько функций, которые не только присутствуют в libtixds55x.so, но и вызываются CCS: GTI_GET_NUM_RESETS, GTI_GET_RESET_INFO, GTI_RESET_EX:
Код
0xC9A5DB40 5851429 3 C55xx GTI C: GTI_GET_NUM_RESETS( 0x0xca953838 )
0xC9A5DB40 5851430 3 C55xx GTI R: GTI_GET_NUM_RESETS( 0x0xca953838 ) = 0x00000001

Тут можно предположить, что просто есть один вид RESET'а, значит возвращается 1 (но int или unsigned int)?

Наверное имеются в виду hardware reset, software reset и т.п. (то есть те варианты сброса, что есть в меню Debug)
Тип возвращаемого значения можно посмотреть дизассемблером. В общем случае int.

Цитата(gagel @ Jun 12 2016, 21:36) *
Код
0xC9A5DB40 5851430 3 C55xx GTI C: GTI_GET_RESET_INFO( 0x0xca953838, 0x00000000, *0x0xc9a5c4fc = ??? )
0xC9A5DB40 5851430 3 C55xx GTI R: GTI_GET_RESET_INFO( 0x0xca953838, 0x00000000, *0x0xc9a5c4fc = ??? ) = 0x00000000

Тут выбирается RESET номер 1 (т.е. 0) и получается указатель на инфу о RESET'е?

Вполне вероятно. Если инфа в виде структуры, то распарсить её поля -- задача не из лёгких.

Цитата(gagel @ Jun 12 2016, 21:36) *
Код
0xC9A5DB40 5855123 3 C55xx GTI C: GTI_RESET_EX( 0x0xca953838, 0x00000000 )
0xC9A5DB40 5855140 3 C55xx GTI R: GTI_RESET_EX( 0x0xca953838, 0x00000000 ) = 0x00000000

Тут вызывается RESET номер 1 (т.е. 0) и статус 0 (нет ошибки)?

Верно, GTI_RESET_EX, как мне помнится, шлет результат (0 в случае успеха).

Цитата(gagel @ Jun 12 2016, 21:36) *
И есть ещё несколько функций, которые есть в бинарнике, но я пока не заметил их вызова из CCS:
Код
GTI_QUERY_INTERFACE
GTI_BLOCK_RESET
GTI_GET_WAIT_IN_RESET_MODE
GTI_SET_WAIT_IN_RESET
GTI_BP_TEST
GTI_STAT_EX2

Они не относятся к разряду супер-обязательных, назначение их надо исследовать дополнительно (при необходимости).

Цитата(gagel @ Jun 12 2016, 21:36) *
Ещё, кстати, RTDX уже некоторое время как объявлен устаревшим. Но почему? Я так и не нашёл официального объяснения и предложения по замене. Так вот в 6.1.1 или 6.1.2 RTDX-функции были выброшены из so'шки. А в DSPBIOS они до сих пор место занимают. Вам доводилось их использовать? Интересно, можно ли их воскресить? Хотя, скорее всего, чисто теоретически.

Я про такое не слышал. По-моему HSRTDX -- это одна из немногих возможностей неинвазивного обмена потоками информации с процессором. Откуда информация про obsolete?
Raven
Залез в IEEE 1149.1 и немного освежил знания по BSCAN и BSDL.

Цитата(gagel @ Jun 19 2016, 23:47) *
Нужно было только установить value (output3), а не и control тоже. Теперь только вопрос: а зачем этот control?

Из BSDL для 5502:
- ячейка (стадия) BSCAN регистра #215: "215 (bc_1, XF, output3, X, 214, 1, Z)," - в этой позиции стоит BSCAN cell типа bc_1 (самый универсальный вариант, все может), наружу выходит под видом пина XF, являющегося выходом с 3 состояниями ("output3"), "безопасное" состояние для тестов - любое ("X"), управление выходом осуществляется из BSCAN-стадии #214, отключение этого выхода осуществляется уровнем control=1 (в #214), при этом выход переключится в Z-состояние (состояние отключения - именно Z, а не, скажем, "WEAK 1");

- BSCAN stage #214: "214 (bc_1, *, control, 1)," - ячейка управления, тип bc_1, отключающее состояние - "1"; кстати, тип bc_1 наводит на мысль, что ячейка управляет выходным буфером пина XF не только для целей BSCAN, но и пропускает через себя штатный сигнал управления этим буфером (идущий из core logic), а значит, его тоже можно осмысленно capture'ить при надобности (и само собой - управлять им).

Подытожим. Пин XF являтся выходом буфера с Z-состоянием, на вход которого поступает собственно сигнал XF из core logic, прошедший через ячейку #215. Вход управления этого буфера подключен к выходу ячейки #214, на вход которой, предположительно, подключен штатный сигнал управления буфером на XF.

Цитата(gagel @ Jun 19 2016, 23:47) *
И ещё не ожидал, что при SAMPLE value=0 светодиодик горит, а при EXTEST для этого нужно писать 1. Я думал, что значение всего BSR можно один к одному использовать и для SAMPLE, и для EXTEST, т.е. содержимое интерпретируется одинаково, а не как пока получается: по-разному.

Инструкция SAMPLE предназначена в первую очередь для считывания состояния пина (т.е., интересно в первую очередь значение shifted-out). Для 5502, правда, она скорее всего работает как SAMPLE/PRELOAD, но и PRELOAD компонента функциональности лишь загоняет shifted-in значение в shadow-регистр, где она пока никак не влияет на выходной пин и ждет своего часа (точнее, инструкции EXTEST). А вот value, которая shifted-in в контексте EXTEST, после Update-DR сразу идет на выход (ну, конечно, если выходной буфер настроен ее пропустить). Так что когда вы делали SAMPLE с value = 0, светодиодом все равно пока управляла штатная логика (по-видимому, выдававшая в этот момент 1), и он при этом горел.
PRELOAD value нужна, чтобы выдавать на выход нужное нам значение на отрезке времени от Update-IR для EXTEST (будет выдано значение, записанное в shadow-регистр последней PRELOAD) до первого его Update-DR (будет выдано shifted-in значение самого EXTEST).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.