• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

JTAG, Xtensa OCD Daemon …

pvvx

Активный участник сообщества
Проба подключения JTAG к ESP8266.
1) Взял xt-ocd-11.0.2-installer.exe и под рукой был J-Link (SEGGER).
2) Соединил JTAG к модулю ESP-12
TMS -> GPIO14
TDI -> GPIO12
TCK -> GPIO13
TDO <- GPIO15
RST -> RST

3) Изменил строку в topology.xml:
<controller id='Controller0' module='jlink' usbser='xxxxxxxxx' speed='12000000'/>
4) Запустил xt-ocd.exe:
XOCD 11.0.2-development
(c) 1999-2015 Tensilica Inc. All rights reserved.
[Debug Log 2015-03-11 13:28:39]

Loading module "gdbstub" v2.0.0.11
Loading module "jlink" v2.0.0.1
0: Using JLINK lib v.49000
0: Connected to Jlink Device:
0: Name:'SEGGER J-Link ARM'
0: S/N:xxxxxxxxx
0: Firmware: J-Link ARM V8 compiled Jul 17 2014 12:31:18
0: TCK clock frequency : 12000 kHz
Loading module "jtag" v2.0.0.20
Loading module "xtensa" v2.0.0.40
Loading module "traxapp" v2.0.0.8
Loading module "trax" v2.0.1.22
Total IR bits : 5
TAP[0] irwidth = 5
Total DR bypass bits : 1
Starting thread 'GDBStub'
Starting thread 'TraxApp'
5) Для теста запустил xt-gdb и дал распечатку регистров:
GNU gdb 6.8 Xtensa Tools 8.0.1.1
Copyright (C) 2008 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details.
This GDB was configured as "--host=i686-pc-mingw32 --target=xtensa-elf".
(xt-gdb) target remote 127.0.0.1:20000
Remote debugging using 127.0.0.1:20000
warning: Spill location has not been specified, TIE register will be unavailable.
0x40002eee in ?? ()
(xt-gdb) info all-register
a0 0x40002ef1 1073753841
a1 0x3fffffb0 1073741744
a2 0x2c8dde62 747495010
a3 0x14 20
a4 0x1c3d 7229
a5 0x1000 4096
a6 0xfffffffe -2
a7 0x0 0
a8 0x0 0
a9 0x8000 32768
a10 0x0 0
a11 0x0 0
a12 0x13880 80000
a13 0x2c8dc225 747487781
a14 0x0 0
a15 0x0 0
pc 0x40002eee 0x40002eee
sar 0x4 4
litbase 0x0 0
sr176 0xc28cdafa 3264011002
sr208 0x1082b6f6 277001974
ps 0x20 32
mmid 0x0 0
ibreakenable 0x0 0
ddr 0x0 0
ibreaka0 0x0 0
dbreaka0 0x0 0
dbreakc0 0x0 0
epc1 0x0 0
epc2 0x40002eee 1073753838
epc3 0x0 0
depc 0x0 0
eps2 0x20 32
eps3 0x0 0
excsave1 0x0 0
excsave2 0x0 0
excsave3 0x0 0
interrupt 0x40 64
intset 0x0 0
intclear 0x0 0
intenable 0x0 0
vecbase 0x40000000 1073741824
exccause 0x0 0
debugcause 0x20 32
ccount 0x2c8dde6a 747495018
prid 0x0 0
icount 0x0 0
icountlevel 0x0 0
excvaddr 0x0 0
ccompare0 0x0 0
psintlevel 0x0 0
psum 0x1 1
psexcm 0x0 0
litbaddr 0x0 0
litben 0x0 0
dbnum 0x0 0
(xt-gdb)
Что-то работает, что-то нет. Надо настраивать...
xt-xp-ocd.gif
Но об этом позже - народ делает открытую среду с полным SDK и DDK и т.д. http://www.esp8266.com/viewtopic.php?f=9&t=1871
 
Последнее редактирование:

alok83

New member
Ну это очень облегчает реверс инжиниринг. Я почти закончил свой генератор псевдокода, но остались некоторые команды, которые я не совсем понимаю что именно они делают. Нужно будет тоже попробовать подключить через JTAG.
 

pvvx

Активный участник сообщества
GPIO12...15 не должны быть переназначены...
 

CHERTS

Moderator
Команда форума
Я 3 дня пытался собрать https://github.com/projectgus/openocd под mingw в ubuntu (собрать сиё дело под mingw в windows не реально), но дальше сборки свежих libusb 1.x и libftdi 1.x дело не ушло, начинаю собирать openocd и летит какая то ругань на вызовы функций по работе с usb, поковыряюсь еще пару дней, как разработчики собирают его - не понятно, хоть бы скрипт сборки выложили, а то я свой накорябал, но видать есть какие то доп. опции о которых я не знаю.
 

pvvx

Активный участник сообщества
Я 3 дня пытался собрать https://github.com/projectgus/openocd под mingw ...
Та-же ситуация. Но я на это уделил всего вечер. Потом занялся поиском по инету решения и всё что нашел - Re: How to build OpenOCD for windows но ещё не пробовал.
Собрать в первый раз не вышло из-за отсутствия всех необходимых библиотек и их прописки для MinGW в неясные каталоги. Без драйверов что-то кусочное собиралось :) Бросил из-за желания сменить MinGW с 32 на x64...
 
Последнее редактирование:

CHERTS

Moderator
Команда форума
Потом занялся поиском по инету решения и всё что нашел - Re: How to build OpenOCD for windows но ещё не пробовал.
Корявая инструкция + в ней предлагают использовать старые libusb-win32 (это форк libusb-0.1) которая в принципе не нужна, т.к. новая libusb 1.2.6 все умеет, а про сборку libftdi1 (для неё как раз нужна libusb 1.2.6) вообще ни слова.
 

pvvx

Активный участник сообщества
Корявая инструкция + в ней предлагают использовать старые libusb-win32 (это форк libusb-0.1) которая в принципе не нужна, т.к. новая libusb 1.2.6 все умеет, а про сборку libftdi1 (для неё как раз нужна libusb 1.2.6) вообще ни слова.
У меня не вышло вообще указать размещение либ. Я с линухом и MinGW особо не дружу... Но вроде для FTDI надо либу от FTDI, а не libsusb. Тогда, по идее, в винде должна работать любая FTD и с OpenOCD и как обычно - COM или т.д. Так сделано в xt-ocd-11.0.2 На коммерческие JTAG на FT с измененными VID плевать. Раз купили - пусть всю жизнь доплачивают за поддержу и спец компиляцию :)
Из дешевых Китай-JTAG на али только J-link ~1000 рупь
Всё остальное, что, использует FT2232H - сильно дороже. А менее, без буквы H - тормоза (USB не 480Mb/s, а 12). Если собирать самому на FT - то это обычно jtagkey. По тому выбор не широк...
http://elk.informatik.fh-augsburg.de/hhweb/doc/openocd/usbjtag/img/jtagkey-schema.jpg
http://anoda.cocolog-nifty.com/photos/uncategorized/2011/12/08/jtag_key.png
 
Последнее редактирование:

vphys

New member
Всем привет!
Мы добавили поддержку ESP8266 (включая отладку и программирование SPI FLASH по JTAG) в VisualGDB, наш плагин для Visual Studio. Вот здесь есть детальная инструкция: http://visualgdb.com/tutorials/esp8266/
 

pvvx

Активный участник сообщества
Всем привет!
Мы добавили поддержку ESP8266 (включая отладку и программирование SPI FLASH по JTAG) в VisualGDB, наш плагин для Visual Studio. Вот здесь есть детальная инструкция: http://visualgdb.com/tutorials/esp8266/
Hence it is always recommended to place the functions you intend to debug into the instruction RAM.
А вся IRAM поддерживается? Или какие встроены ограничения? У меня область при работе с ограничением cache flash составляет 48 кило, а не 32.
 

vphys

New member
Hence it is always recommended to place the functions you intend to debug into the instruction RAM.
А вся IRAM поддерживается? Или какие встроены ограничения? У меня область при работе с ограничением cache flash составляет 48 кило, а не 32.
В официальном linker script-е (eagle.app.v6.ld) прописано 32КБ и мы больше не пробовали. Если у Вас работает 48, можете попробовать отредактировать linker script, но не факт, что дополнительная память не используется неявно функциями из ROM или библиотеки.
 

pvvx

Активный участник сообщества
В официальном linker script-е (eagle.app.v6.ld) прописано 32КБ и мы больше не пробовали. Если у Вас работает 48, можете попробовать отредактировать linker script, но не факт, что дополнительная память не используется неявно функциями из ROM или библиотеки.
Не используется. Я запретил :)
 

pvvx

Активный участник сообщества
Тогда должно работать. Можете отредактировать linker script, или скопировать его в проект через GUI и отредактировать локальную копию.
Как-то это глупо. При Cache_Read_Disable() у нас 64 кило IRAM. SDK не может (пока китайцы не прознали, что 16 к кеш достаточно) пользовать верхние 32 к, т.к. там у них кеш flash. Включение всего 16 к обеспечивается преназначением Cache_Read_Enable(a,b,1) на Cache_Read_Enable(a,b,0). Когда китайцы узнают, то обязательно зас... эту часть. Они уже идут к этому, выделив все раскиданные у них в SDK обращения к Cache_Read_Enable(a,b,1) в void Cache_Read_Enable_New(void).
Пока можно через опции линкеру: -Wl,--wrap=Cache_Read_Enable или путем патча в app_main.o 2-х байт.
Как раз при отладке очень нужно иметь дополнительную IRAM.
 
Последнее редактирование:

vphys

New member
Интересно, не знал об этом. А Вы не хотите написать статью о разных полезных трюках, связанных с отладкой ESP8266 (типа Cache_Read_Enable)? Мы вам дадим скидку в 75% на VisualGDB в обмен на возможность опубликовать статью у нас на сайте. Думаю, это поможет многим начинающим пользователям.
 

pvvx

Активный участник сообщества
Интересно, не знал об этом. А Вы не хотите написать статью о разных полезных трюках, связанных с отладкой ESP8266 (типа Cache_Read_Enable)? Мы вам дадим скидку в 75% на VisualGDB в обмен на возможность опубликовать статью у нас на сайте. Думаю, это поможет многим начинающим пользователям.
Я не занимаюсь коммерцией на народных проектах и вокруг них.
Если хотите заниматься коммерцией, то сначала оплатите обществу ваше обучение :) Иначе это воровство.
 

vphys

New member
Ну я и предлагаю существенные скидки в качестве оплаты за полезные советы от сообщества. Если Вы готовы писать статьи регулярно, мы вам с удовольствием будем платить авторские гонорары. Любая работа должна оплачиваться, мы это понимаем :)
 

pvvx

Активный участник сообщества
@vphys Хде peripheral register definition file?
И не запускается ваш платный VisualGDB без плясок с бубном. Каких - не скажу - платите :) на счет форума.
 

vphys

New member
Ну вот, а говорили что коммерцией не занимаетесь :)
Давайте начнем с небольшого договора на размещение баннера, и посмотрим, что из этого получится. Напишите на sysprogs@sysprogs.com вашу статистику по посещениям и желаемую сумму за 1000 показов.

А peripheral registers скоро будут, всему свое время.
 

pvvx

Активный участник сообщества
Ну вот, а говорили что коммерцией не занимаетесь :)
Давайте начнем с небольшого договора на размещение баннера, и посмотрим, что из этого получится. Напишите на sysprogs@sysprogs.com вашу статистику по посещениям и желаемую сумму за 1000 показов.
А это не мой сайт и я с него ничего не имею :) Только наоборот.
Пишите администратору сайта...
 

vphys

New member
Ну ладно тогда. Кстати, наш ESP8266 toolchain для Windows абсолютно бесплатен и содержит пропатченный gdb, который не вылетает при попытке поставить breakpoint и отображает локальные переменные. Можете считать это нашим вкладом в развитие коммьюнити.
 
Сверху Снизу