ianjtagこのページは、ianjtag を調べて、L-Router でどうしたら使えるかを考えるページ。
初期化の手順。
とりあえず、pjtag_sa1100_init を見てみる。
/* Reset the TAP and bring it to the "run test idle" mode */
jtag_reset();
jtag_test_logic_reset();
jtag_run_test_idle();
/* Read the ID code */
jtag_do_ir_dr_path(JTAG_CMD_IDCODE, &iro, IRSZ,
dri, dro, IDRSZ);
idcode = jtag_fillword(dro, 0, 32, 1);
これは一体なにをしているのか。
jtag_reset():
volatile int i;
_outp(lpt_address, 0); /* nTRST pin down */
for (i = 0; i < 100000; i++); /* hold it down for a while */
_outp(lpt_address, 1<<3); /* nTRST pin up again */
どうも、nTRST ピンを " -> 0 -> 1" としているらしい。
____
TRST なんて書いてられないので、以降 nTRST と表記
jtag_test_logic_reset();
putp(1, 1);
putp(1, 1);
putp(1, 1);
putp(1, 1);
putp(1, 1);
/* should be at test_logic_reset by now,
but give it a few more to be sure */
putp(1, 1);
putp(1, 1);
putp(1, 1);
putp(1, 1);
これは一体.. putp を見てみる。
putp(int tdi, int tms)
/* TCK is low. Apply TMS and TDI */
_outp(lpt_address, (1 << 3) | (tms << 2) | (tdi << 1) | 0);
/* Rise TCK */
_outp(lpt_address, (1 << 3) | (tms << 2) | (tdi << 1) | 1);
/* Drop TCK */
_outp(lpt_address, (1 << 3) | (tms << 2) | (tdi << 1) | 0);
/* Read and return TDO */
return !((int)_inp(lpt_address + 1) >> 7); /* get TDO data */
putp は、TDI/TMS の状態に対して、TCK を 0 -> 1 -> 0 を行い、TDO の値を取って来るものらしい。
void
jtag_run_test_idle (void)
jtag_test_logic_reset();
putp(1,0);
/* should be at run_test_idle by now,
but give it a few more to be sure */
putp(1,0);
putp(1,0);
putp(1,0);
これは、 A_Brief_Introductio_to_the_JTAG_Boundary_Scan_Interface
を見るとわかるけども、モード(TAP: Test Access Port)を初期状態にする。 TMS=0 で 3 回 TCLK を出せば 必ず 初期状態(run_test_idle) になる。 コメントでは、4 回だして確実にしているという意味か。
ここまでをまとめると ...
_____________________________________
nTRST ________________|
_ _ _ _ _ _
TCK _____________________| |_| |_| | ...._____| |_| |_| | ....
TDO ------------------------<v>-<v>-<v> ...
___________________________________
TMS |_______________________
TDI = 1
という感じか。
jtag_do_ir_dr_path(JTAG_CMD_IDCODE, &iro, IRSZ,
dri, dro, IDRSZ);
これはなにをやっているのだろうか。
コードを見ると、
* IRSZ(=5) bit の IR(instruction register) を JTAG_CMD_IDCODE(= 6)
に設定。old value を、iro に入れる。
* IDRSZ(=32) bit の ID レジスタ? の内容を dri の設定。
つぎに、こんなことをしている。
/* Initialize all sa1110 pins to well known states */
jtag_do_ir_dr_path(JTAG_CMD_SAMPLE, &iro, IRSZ,
bsr_defaults, dro, BSRSZ);
pjtag_sa1110.c につぎの関数があるのでそれを見てみる。
* Bus read and write functions: * flw32 - Perform a flash-write-word cycle to the given bus address * flw32n - Perform n flash-write-word-cycles to the given bus addresses * flr32 - Perform a flash-read-word cycle from the given bus address * flr32n - Perform n flash-read-word cycles from the given bus addresses
flr32 をみるとなんかこんなコードになっている。
for (i=0; i<len; i++) {
dri[BSR_nCS0_OUT] = 1;
dri[BSR_nCS1_OUT] = 1;
dri[BSR_nCS2_OUT] = 1;
dri[BSR_nCS3_OUT] = 1;
/* set address 0 thru 25 */
for (j = 0; j < 26; j++)
dri[bsr_addrbus[j]] =
(unsigned char)((addr_array[i] >> j) & 1UL);
dri[mkcs(addr_array[i])] = 0;
jtag_do_dr_path(dri, dro, BSRSZ);
どういうことかと言うと ...
つうことですな。ということは ... たぶん vr4122 固有の情報が必要。
... うーん。BSR の詳細がわからんと 無理なのか....
メモ
それはともかく、VR 関係の情報はまったく出てこない。自分で見付けるの も無理、公開されるのを期待するのも無理という結果になりそう。
JTAG まとめ
ちょっとまとめてみる。JTAG を制御するのは、TAP Contoller といわれている。 、レジスタは、4 つ あって
こいつらは、全部 TDI --> レジスタ --> TDO という 関係の シフトレジスタの ように見える。
コマンド SA1100(5bit) Intel386 EX(4bit) RM7000(3bit) PPC405GP(7bit)
BYPASS 11111 1111 111 1111111
EXTEST 00000 0000 000 0000000
SAMPLE 00001 0001 110 1111010
CLAMP 00100 --- 1111110
HIGHZ 00101 1000 1111101
IDCODE 00110 0010 1111011
INTEST ??? 1001
PRIVATE001-005 CUSTOM
EXTEST デバイスがあるかないか?
IDCODE デバイスの ID取得
SAMPLE BSR の状態を設定する。
HIGHZ BSR の状態を ハイインピーダンスにする?
BYPASS シフトレジスタのチェーンをバイパスする? ( BYPASS レジスタを選択?)
ここで、簡単そうなデバイス --- CPLD をちょっと調査
ID Register (10bits)
SAMPLE/PRELOAD 0001010101
EXTEST 0000000000
BYPASS 1111111111
IDCODE 0001011001
USERCODE 0000000111
... ISP Instructions ... Hidden
IDCODE
ver --- part number --- Manufactuer's
identify
EPM3032A 0001 0111 0000 0011 0010 00001101110 1
EPM3064A 0001 0111 0000 0110 0100 00001101110 1
EPM3128A 0001 0111 0001 0010 1000 00001101110 1
EPM3256A 0001 0111 0010 0101 0110 00001101110 1
BSR Length EPM3032A 96 EPM3064A 192 EPM3128A 288 EPM3256A 480
なんか なにがわからなくて、どうすれば どこまでわかるかというイメージが できてきた。--- だからといって L-Router を復活できるとは思えないが...
とりあえず、やるべきこと とその順番
まんぞくしたら -- 終り。