このページは、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 を復活できるとは思えないが...
とりあえず、やるべきこと とその順番
まんぞくしたら -- 終り。