Самодельный JTAG на Сириус270

161 views
Skip to first unread message

laborer

unread,
Sep 14, 2009, 8:10:09 AM9/14/09
to tion_sbc
Здравствуйте,

В связи с тем что неудачно перешил uBoot возникла необходимость его
восстановить.
Спаяли такой кабель:
LPT J7 (на Сириусе)
2 26 (nReset)
3 7 (TMS)
4 5 (TCK)
5 3 (TDI)
6 1 (TRST)
8-15
11 23 (TDO)
18 10 (GND)
19 12 (GND)
20 14 (GND)
21 16 (GND)
22 18 (GND)
23 20 (GND)
24 22 (GND)
25 24 (GND)

Это что-то вроде клона wiggler'a. Имхо, больше ничего не надо - всё
остальное есть на Сириусе.

Использую openocd (из репозитория debian squeeze).
Чип по jtag вроде определяется (кабель спаян правильно?), но сыпятся
непонятные ошибки:

sergeyhost:/home/tmp/openocd# openocd -f parport -f tion-pro270 -f
reflash
Open On-Chip Debugger 0.3.0-in-development (2009-08-13-23:22)
svn:r2529
$URL: http://svn.berlios.de/svnroot/repos/openocd/trunk/src/openocd.c
$
For bug reports, read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS
parport port = 0
jtag_speed: 0
2000 kHz
jtag_nsrst_delay: 10
jtag_ntrst_delay: 10
Error: Translation from khz to jtag_speed not implemented
Info : JTAG tap: pxa270.cpu tap/device found: 0x79265013 (mfg: 0x009,
part: 0x9265, ver: 0x7)
Info : JTAG Tap/device matched
Info : JTAG tap: pxa270.cpu tap/device found: 0x79265013 (mfg: 0x009,
part: 0x9265, ver: 0x7)
Info : JTAG Tap/device matched
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x07
Error: JTAG error while writing DCSR
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x07
Error: JTAG error while writing DCSR
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x07
Error: JTAG error while writing DCSR
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x07
Error: JTAG error while writing DCSR
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x06
Error: JTAG error while reading TX
error while polling TX register, reset CPU
target state: halted
target halted in ARM state due to undefined, current mode: User
cpsr: 0x00000000 pc: 0x00000000
MMU: disabled, D-Cache: disabled, I-Cache: disabled
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x06
Error: JTAG error while writing RX
unknown error when probing flash bank '#0' at 0x00000000
auto erase enabled
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x06
Error: JTAG error while writing RX
Error: auto_probe failed -104

wrote 0 byte from file /home/tmp/openocd/u-boot.bin in 0.000424s
(0.000000 kb/s)
^C

В каталог с прошивкой поместил xscale/debug_handler.bin, содержимое
конфигов взял из вики (пробовал кое-что менять, но пока безрезультатно
- не хватает знаний/опыта):
sergeyhost:/home/tmp/openocd# cat parport
telnet_port 4444
gdb_port 2001

interface parport
parport_port 0
parport_cable wiggler
jtag_speed 0

sergeyhost:/home/tmp/openocd# cat tion-pro270
# tion-pro270.cfg:
#
# Marvell/Intel PXA270 Script

set CHIPNAME pxa270
set ENDIAN little
set CPUTAPID 0x79265013

jtag_khz 2000

# set jtag_nsrst_delay to the delay introduced by your reset circuit
# the rest of the needed delays are built into the openocd program
jtag_nsrst_delay 10

# set the jtag_ntrst_delay to the delay introduced by a reset circuit
# the rest of the needed delays are built into the openocd program
jtag_ntrst_delay 10

# use combined on interfaces or targets that can't set TRST/SRST
separately
reset_config trst_and_srst separate

# jtag scan chain
jtag newtap $CHIPNAME cpu -irlen 7 -ircapture 0x1 -irmask 0x7f -
expected-id $CPUTAPID

# target configuration
#debug_level 3

#soft_reset_halt

set TARGETNAME [format "%s.cpu" $CHIPNAME]
target create $TARGETNAME xscale -endian $ENDIAN -chain-position
$TARGETNAME -variant pxa27x

# Maps to PXA internal RAM. If you are using a PXA255
# Initialize SDRAM or leave this option off
$TARGETNAME configure -work-area-virt 0 -work-area-phys 0x5c000000 -
work-area-size 0xFFFC -work-area-backup 0

# flash bank <driver> <base> <size> <chip_width> <bus_width>
flash bank cfi 0x00000000 0x02000000 2 4 0

init
reset halt
flash probe 0

sergeyhost:/home/tmp/openocd# cat reflash
flash write_image erase /home/tmp/openocd/u-boot.bin

Буду признателен за любую помощь.

Sergey Alyoshin

unread,
Sep 14, 2009, 10:16:19 AM9/14/09
to tion...@googlegroups.com
1. Попробуйте с более старой версией (у меня работает svn:1213)

2. У вас кабель -- это одни провода? Если так, то стоит попытаться
с адаптером (с шинными формирователями).

awa

unread,
Sep 14, 2009, 10:50:21 AM9/14/09
to tion_sbc
> 2. У вас кабель -- это одни провода? Если так, то стоит попытаться
> с адаптером (с шинными формирователями).

Так на плате "сириус" стоит буфер (микросхема U2, стр. 11 схемы).
Зачем тогда еще раз буферировать?

Sergey Alyoshin

unread,
Sep 14, 2009, 11:40:30 AM9/14/09
to tion...@googlegroups.com
2009/9/14 awa <A11B...@bk.ru>:

Чтобы работало.

laborer

unread,
Sep 15, 2009, 3:18:51 AM9/15/09
to tion_sbc
> Чтобы работало.

У меня LPT-кабель не длинный, частоту (jtag_khz 2000 ) в конфиге
пробовал снижать. Один буфер есть. Должно и так работать. Вы можете
сказать что-нибудь по цоколёвке? Всё же есть сомнения относительно
nReset,TRST.

>Попробуйте с более старой версией (у меня работает svn:1213)

Собрал 1213:
$ ./bootstrap
$ ./configure --enable-parport
$ make
# checkinstall make install

В результате - почти тоже самое (LPT порт по-умолчанию не просёк, но
это наверное надо было ещё опцию --enable-parport_ppdev добавить), но
процессор определился.

Из-за ошибки "Error: Translation from khz to jtag_speed not
implemented " есть подозрение, что конфиги со страницы
http://www.zao-zeo.ru/dokuwiki/doku.php/openocd для ARM-JTAG не совсем
рабочие. Собственно, эта ошибка появляется и при запуске openocd без
jtag-адаптера.
Вы можете привести что у вас выводится на команду openocd -f parport -
f tion-pro270 -f reflash?

Sergey Alyoshin

unread,
Sep 15, 2009, 5:42:03 AM9/15/09
to tion...@googlegroups.com
2009/9/15 laborer <labor...@gmail.com>:

> У меня LPT-кабель  не длинный, частоту (jtag_khz 2000 ) в конфиге
> пробовал снижать. Один буфер есть. Должно и так работать.

Будет хорошо, если заработает. Я так не пробовал, но у того кто
пробовал напрямую -- не получилось.


> сказать что-нибудь по цоколёвке? Всё же есть сомнения относительно
> nReset,TRST.

Могу, полярность nReset LPT.2, на Wiggler этот сигнал через транзистор?


> Из-за ошибки "Error: Translation from khz to jtag_speed not
> implemented " есть подозрение, что конфиги со страницы
> http://www.zao-zeo.ru/dokuwiki/doku.php/openocd для ARM-JTAG не совсем
> рабочие. Собственно, эта ошибка появляется и при запуске openocd без
> jtag-адаптера.

Они работают для меня. Ваши предложения по их изменению?


> Вы можете привести что у вас выводится на команду openocd -f parport -
> f tion-pro270 -f reflash?

Для 0.2

# wiggler-lpt.cfg
# Wiggler LPT

interface parport
parport_port 0
parport_cable wiggler
jtag_speed 0

# tion-pro270.cfg
#
# Marvell/Intel PXA270 Script

set CHIPNAME pxa270
set ENDIAN little
set CPUTAPID 0x79265013


jtag_khz 2000

# set jtag_nsrst_delay to the delay introduced by your reset circuit
# the rest of the needed delays are built into the openocd program
jtag_nsrst_delay 10

# set the jtag_ntrst_delay to the delay introduced by a reset circuit
# the rest of the needed delays are built into the openocd program
jtag_ntrst_delay 10

# use combined on interfaces or targets that can't set TRST/SRST separately
reset_config trst_and_srst separate

# jtag scan chain
jtag newtap $CHIPNAME cpu -irlen 7 -ircapture 0x1 -irmask 0x7f

-expected-id $CPUTAPID

# target configuration
#debug_level 3

#soft_reset_halt

set TARGETNAME [format "%s.cpu" $CHIPNAME]
target create $TARGETNAME xscale -endian $ENDIAN -chain-position
$TARGETNAME -variant pxa27x

# Maps to PXA internal RAM. If you are using a PXA255
# Initialize SDRAM or leave this option off
$TARGETNAME configure -work-area-virt 0 -work-area-phys 0x5c000000

-work-area-size 0xFFFC -work-area-backup 0

# flash bank <driver> <base> <size> <chip_width> <bus_width>
flash bank cfi 0x00000000 0x02000000 2 4 0

init
reset halt
flash probe 0


# Log

openocd -f /home/min/data/linux/openocd/wiggler-lpt.cfg -f
/home/min/data/linux/openocd/tion-pro270.cfg -c flash write_image
erase "/home/min/data/linux/u-boot/u-boot_tion-pro270_416mhz_128m.bin"

Open On-Chip Debugger 0.2.0 (2009-09-15-11:35) Release
$URL: http://svn.berlios.de/svnroot/repos/openocd/tags/openocd-0.2.0/src/openocd.c


$
For bug reports, read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS
parport port = 0
jtag_speed: 0
2000 kHz
jtag_nsrst_delay: 10
jtag_ntrst_delay: 10

Error: Translation from khz to jtag_speed not implemented

Info : JTAG tap: pxa270.cpu tap/device found: 0x79265013 (mfg: 0x009,
part: 0x9265, ver: 0x7)
Info : JTAG Tap/device matched
Info : JTAG tap: pxa270.cpu tap/device found: 0x79265013 (mfg: 0x009,
part: 0x9265, ver: 0x7)
Info : JTAG Tap/device matched
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x02 check_mask: 0x07
Error: JTAG error while writing DCSR
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F
Warn : value captured during scan didn't pass the requested check:
Warn : captured: 0x00 check_value: 0x01 check_mask: 0x7F

target state: halted
target halted in ARM state due to debug-request, current mode: Supervisor
cpsr: 0xf00000d3 pc: 0x00000000


MMU: disabled, D-Cache: disabled, I-Cache: disabled

(processor reset)
Info : Flash Manufacturer/Device: 0x0089 0x0000
Warn : CFI size is 0x1000000, but total sector size is 0x2000000
flash 'cfi' found at 0x00000000
auto erase enabled
Info : Using target buffer at 0x5c000038 and of size 0x8000
Info : Write 0x8000 bytes to flash at 0x00000000
Info : Write 0x8000 bytes to flash at 0x00008000
Info : Write 0x8000 bytes to flash at 0x00010000
Info : Write 0x8000 bytes to flash at 0x00018000
Info : Write 0x23ec bytes to flash at 0x00020000
wrote 140268 byte from file
/home/min/data/linux/u-boot/u-boot_tion-pro270_416mhz_128m.bin in
7.205519s (19.010493 kb/s)

laborer

unread,
Sep 15, 2009, 8:48:38 AM9/15/09
to tion_sbc
> Могу, полярность nReset LPT.2, на Wiggler этот сигнал через транзистор?

Проблема была в этом. Решилась шунтированием Q1 на плате.

>Я так не пробовал, но у того кто
пробовал напрямую -- не получилось.

Однако же у меня получилось :)

laborer

unread,
Sep 15, 2009, 8:51:20 AM9/15/09
to tion_sbc
> Могу, полярность nReset LPT.2, на Wiggler этот сигнал через транзистор?

Проблема была в этом. Решилась шунтированием Q1 на плате.

> Будет хорошо, если заработает. Я так не пробовал, но у того кто


> пробовал напрямую -- не получилось.

Однако же у меня получилось :)

Sergey Alyoshin

unread,
Sep 15, 2009, 8:56:22 AM9/15/09
to tion...@googlegroups.com
2009/9/15 laborer <labor...@gmail.com>:

Ок, можете добавить в wiki, если не затруднит.

laborer

unread,
Sep 16, 2009, 4:31:51 AM9/16/09
to tion_sbc
> Ок, можете добавить в wiki, если не затруднит.

Вот текст:

Если фирменного ARM-JTAG адаптера (wiggler) нет в наличии, его можно
попытаться изготовить самостоятельно.
Для этого потребуются разъём FC-26P и разъём DB25M, которые необходимо
соединить плоским шлейфом по схеме:

LPT J7 (на Сириус270)
2 26 (RES_OUT#)


3 7 (TMS)
4 5 (TCK)
5 3 (TDI)

6 1 (TRST#)


8-15
11 23 (TDO)
18 10 (GND)
19 12 (GND)
20 14 (GND)
21 16 (GND)
22 18 (GND)
23 20 (GND)
24 22 (GND)
25 24 (GND)

Сигнал RES_OUT# нужно дополнительно проинвертировать. Это можно
сделать одним из способов:
1. Установив логический инвертор с использованием транзистора в
коробке DB25M;
2. Проведя небольшую "операцию" на плате Сириус270:
a. Выпаять резистор R7;
b. Замкнуть выводы 1,3 транзистора Q1.

Поместите куда его считаете нужным. Я даже зарегистрировался в вики,
но честно не знаю куда этот текст добавить не нарушив стиля и
структуры уже имеющегося.

Sergey Alyoshin

unread,
Sep 16, 2009, 6:31:05 AM9/16/09
to tion...@googlegroups.com
2009/9/16 laborer <labor...@gmail.com>:

> Сигнал RES_OUT# нужно дополнительно проинвертировать. Это можно
> сделать одним из способов:

Ещё один способ выполнять инверсию d0 в OpenOCD. Через конфиг похоже
нельзя такое сделать, только править исх. код.

Sergey Alyoshin

unread,
Sep 16, 2009, 6:40:50 AM9/16/09
to tion...@googlegroups.com
2009/9/16 Sergey Alyoshin <alyos...@gmail.com>:

openocd/src/jtag/parport.c, строка 100, внимание на o_inv

/* name tdo trst tms tck tdi
srst o_inv i_inv init exit led */
{ "wiggler", 0x80, 0x10, 0x02, 0x04, 0x08, 0x01,
0x01, 0x80, 0x80, 0x80, 0x00 },
{ "wiggler_ntrst_inverted",
0x80, 0x10, 0x02, 0x04, 0x08,
0x01, 0x11, 0x80, 0x80, 0x80, 0x00 },

Вероятно, аналогично можно и srst инвертировать.

Sergey Alyoshin

unread,
Sep 16, 2009, 6:58:43 AM9/16/09
to tion...@googlegroups.com
2009/9/16 laborer <labor...@gmail.com>:

>> Ок, можете добавить в wiki, если не затруднит.
>
> Вот текст:

Добавлено в
http://www.zao-zeo.ru/dokuwiki/doku.php/tion270#jtag

laborer

unread,
Sep 16, 2009, 7:42:38 AM9/16/09
to tion_sbc
> Вероятно, аналогично можно и srst инвертировать.

Возможно и так. Судя по тому, что
led (d5) ~ 0x20,
TRST(d4) ~ 0x10,
0x01 ~ d0 (SRST) и нужно o_inv делать равным 0x00?

Я в исходники слазить не догадался (думал сложно там всё будет) :-\.
Пробовал через конфиг команды "jtag_reset x x" (x - 0 или 1) и
"reset_config trst_only", но ничего не получилось.

Sergey Alyoshin

unread,
Sep 16, 2009, 7:58:50 AM9/16/09
to tion...@googlegroups.com
2009/9/16 laborer <labor...@gmail.com>:

>> Вероятно, аналогично можно и srst инвертировать.
>
> Возможно и так. Судя по тому, что
> led (d5) ~ 0x20,
> TRST(d4) ~ 0x10,
> 0x01 ~ d0 (SRST) и нужно o_inv делать равным 0x00?

Видимо так

Reply all
Reply to author
Forward
0 new messages