酔漢電子工作手帳

2007-09-02

IDCODE読めた

| 15:02 | IDCODE読めた - 酔漢電子工作手帳 を含むブックマーク はてなブックマーク - IDCODE読めた - 酔漢電子工作手帳

ようやくここまで来ました。ターゲットはDWM 2006 4月号の付録基板。

f:id:suikan:20070902145658p:image

IDCODEは、3F0F0F0F。これは以前FTDIのサンプルプログラムで読んだ値と同じです。これを読む部分のコードは、こんな感じ。

        private void IdCodeButton_Click(object sender, EventArgs e)
        {
            byte[] idcode = new byte[4];
            int readBytes;

            FTDI.JTAG.Write(
                    handle,
                    true,       // instruction
                    target[1].inst_bitlength,
                    target[1].inst_idcode,
                    target[1].inst_idcode.Length,
                    FTDI.JTAG.TapState.TestLogicState
                    );

            FTDI.JTAG.Read(
                    handle,
                    false,      // data
                    32,         // idcode is always 32 bit
                    idcode,
                    out readBytes,
                    FTDI.JTAG.TapState.TestLogicState
                    );

            textBox1.AppendText(
                "IDCODE is : " +
                idcode[3].ToString("X2") + " " +
                idcode[2].ToString("X2") + " " +
                idcode[1].ToString("X2") + " " +
                idcode[0].ToString("X2") + Environment.NewLine
            );
        }

テキストボックスへの表示を除けば、関数2つを呼ぶだけでJTAGのIDCODEを読み出すことができます。とっても簡単。ですが、最初の関数のtarget変数を組み立てるためにはXMLによるターゲット宣言ファイルの読み込みルーチンを書かなければなりません。それに、Amontec JTAGKEY(実はベステクのTINY-JTAG)の初期化を支えるルーチンも必要です。たとえばこんな感じ。

        public static void EnableTap(int handle)
        {
            FTDI.JTAG.InputOutputPins gpioL, gpioH;

            gpioL.bPin0InputOutputState = true;  // Output. Tap Enable Pin
            gpioL.bPin1InputOutputState = false; // Input
            gpioL.bPin2InputOutputState = false; // Input
            gpioL.bPin3InputOutputState = false; // Input

            gpioL.bPin0LowHighState = false; //  L. Tap Enable
            gpioL.bPin1LowHighState = false; //  L
            gpioL.bPin2LowHighState = false; //  L
            gpioL.bPin3LowHighState = false; //  L

            gpioH.bPin0InputOutputState = true; //  Output;
            gpioH.bPin1InputOutputState = true; //  Output;
            gpioH.bPin2InputOutputState = true; //  Output;
            gpioH.bPin3InputOutputState = true; //  Output;

            // amontec circuit dependent
            gpioH.bPin0LowHighState = true;    // deassert TRST;
            gpioH.bPin2LowHighState = false;   // enable TRST

            gpioH.bPin1LowHighState = false;    // keep it L always
            gpioH.bPin3LowHighState = true;    // Hi-Z  SRST

            errorCheck(
                FTDI.JTAG.SetGPIOs(
                                handle,
                                true,           // control GPIO_L
                                ref gpioL,
                                true,           // control GPIO_H
                                ref gpioH
                                )
                );
        }

そんなわけで、優雅な水鳥も水面下では激しく水をかいているのでした。

chakokuchakoku2012/08/04 20:38はじめまして。掲載していただいたソースコードのお陰で、試作中のJTAG制御ソフト?でも
デバイスIDが読めました。助かりました!!

トラックバック - http://ecrafts.g.hatena.ne.jp/suikan/20070902