ロード トップ 参照元 逆検索 検索 ヘルプ

[logo] ianjtag


SuzKiti:L-Router

このページは、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" としているらしい。

    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);

  • SMAPLE というコマンドを発行して、BSR を初期化。BSR のサイズは、 292 bit もある。

    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 という 関係の シフトレジスタの ように見える。


    ここで、簡単そうなデバイス --- CPLD をちょっと調査

    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 を復活できるとは思えないが...

    とりあえず、やるべきこと とその順番

    まんぞくしたら -- 終り。




    (最終更新 Thu Mar 30 18:54:36 2006)