gdbproxy からのリセット発行


これで、gdbproxyに組み込まれているurjtagから、blackfinに向けてリセットコマンドを発行します。この後、アプリケーションをロードして実行すると、正しく実行されました。まだ短い試験しか行っていませんが、どうやら大丈夫のようです。
試していないけれど,UrJTAGの src/cmd/cmd_bfin.c 辺りからつらつらと眺めた感じだと,たぶん大丈夫なはず.

BF506Fに進展があれば!と早速調査。





結果変わらず。orz



リセットはかかってるようなんだけどな。
BF506 に関してはよくわからないものの,一つ心当たりがあるとするならば,追加引数.

(KOOP版は本家UrJTAGからのブランチなので,コードが全く同一なのかは調べていないが,本家にはあるので)追加引数として,{core|reset} を与えることができる(はず).

/* 本家の src/cmd/cmd_bfin.c から抜粋 */

        if (num_params == 3)
        {
            if (!strcmp (params[2], "core"))
                reset_what |= 0x1;
            else if (!strcmp (params[2], "system"))
                reset_what |= 0x2;
            else
            {
                urj_error_set (URJ_ERROR_BFIN, "bad parameter '%s'", params[2]);
                return URJ_STATUS_FAIL;
            }
        }
        else if (num_params == 2)
            reset_what = 0x1 | 0x2;
        else
        {
            urj_error_set (URJ_ERROR_BFIN,
                           "'bfin emulation' requires 0 or 1 parameter, not %d",
                           num_params - 2);
            return URJ_STATUS_FAIL;
        }

        urj_log (URJ_LOG_LEVEL_NORMAL,
                 _("%s: reseting processor ... "), "bfin");
        fflush (stdout);
        if (reset_what == 0x3)
            software_reset (chain);
        else if (reset_what & 0x1)
            bfin_core_reset (chain);
        else if (reset_what & 0x2)
            chain_system_reset (chain);
        urj_log (URJ_LOG_LEVEL_NORMAL, _("OK\n"));

        return URJ_STATUS_OK;
    }

リセットの発行順序や間隔が影響しているのであれば,追加引数でなんとかなるのかもしれない(でも試してはいない).

たぶん次の問題は…

Eclipse の Hardware Debugging で想定しているリセットコマンド ( monitor reset ) とは書式が異なるので,明示的にスクリプトを書かないといけないという辺り.gdbproxy を hack して monitor reset を monitor urjtag bfin reset の alias にでもすれば良いのかもしれないけれど,BF506F では別の手順が必要となると,いろいろ大変かもしれない.