(57)【要約】【課題】デバッグツール２から直接に内蔵フラッシュメモリ５の書き換え制御を行うことができ、デバッグの作業効率を高くすることが可能なマイクロコンピュータを得る。【解決手段】ＣＰＵ３によって、内蔵フラッシュメモリ５に格納された内蔵フラッシュ情報をＪＴＡＧインタフェース１１を介してデバッグツール２から読み出し可能にし、デバッグツール２からその内蔵フラッシュ情報に基づいた書き換みデータをＪＴＡＧインタフェース１１を介して入力して、さらに、ＣＰＵ３によって、内蔵フラッシュメモリ５に格納された書き換えプログラムに基づいて書き換みデータを内蔵フラッシュメモリ５に書き換える。【選択図】図１
2010102743.tif 000002
【特許請求の範囲】
【請求項１】
中央処理装置と、不揮発性メモリと、外部にデバッグツールが接続されるデバッグインタフェースとを半導体基板上に有し、
前記中央処理装置は、前記不揮発性メモリから命令のフェッチを行い当該命令を実行し、また前記デバッグツールからの指示に応じて動作制御され、
前記不揮発性メモリは、前記デバッグツールからの指示に応答してデータの書込みまたは消去が可能に構成され、データの書込みまたは消去が正常に完了したか否かの情報を第１レジスタに格納し、
前記デバッグツールから前記第１レジスタを参照可能に構成される半導体処理装置。
【請求項２】
前記半導体処理装置はさらに揮発性メモリを前記半導体基板上に有し、
前記不揮発性メモリへデータの書込みまたは消去を行うためのプログラムが、前記不揮発性メモリの所定のアドレス空間に格納され、
前記データの書込みまたは消去に先立って、前記プログラムは前記揮発性メモリに転送され、
前記デバッグツールからの指示により、前記プログラムの格納領域の先頭アドレスへ分岐する制御が行われる、請求項１に記載の半導体処理装置。
【請求項３】
前記デバッグツールから参照可能とされる第２レジスタを有し、
前記デバッグツールは前記第２レジスタに前記不揮発性メモリへ書込むデータを設定して前記揮発性メモリへ格納させ、
前記不揮発性メモリへデータの書込みを行うためのプログラムは、前記揮発性メモリから書込みデータを読み出して前記不揮発性メモリへデータの書込みを行う、請求項２に記載の半導体処理装置。
【請求項４】
中央処理装置と、不揮発性メモリと、外部にデバッグツールが接続されるデバッグインタフェースとを半導体基板上に有し、
前記中央処理装置は、前記不揮発性メモリから命令のフェッチを行い当該命令を実行し、また前記デバッグツールからの指示に応じて動作制御され、
前記不揮発性メモリは、前記デバッグツールからの指示に応答してデータの書込み、消去、または読み出しが可能に構成され、所定の領域にアクセス制限情報を格納し、
前記不揮発性メモリに前記アクセス制限情報が格納されている場合において、前記デバッグツールから入力された認証情報と前記アクセス制限情報とが合致しない場合に、前記デバッグツールからの指示に応じての前記不揮発性メモリへのデータの書込み、読み出しが制限される半導体処理装置。
【請求項５】
前記不揮発性メモリに格納されているアクセス制限情報と前記デバッグツールから入力された認証情報とが合致しない場合、前記デバッグツールからの指示に応答して前記不揮発性メモリに格納されるデータの消去は可能とされ、
前記不揮発性メモリに格納されるデータの消去完了後に前記デバッグツールからの指示に応じての前記不揮発性メモリへのデータの書込み、読み出しの制限が解除される請求項４に記載の半導体処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、実使用環境下でデバッグを行う場合に有効なマイクロコンピュータに関するものである。
【背景技術】
【０００２】
マイクロコンピュータ応用機器などに設けられたマイクロコンピュータのデバッグを行う場合に、ＩＣＥ（エミュレータ）などのデバッグツールを使用する。マイクロコンピュータがフラッシュメモリを内蔵している場合には、デバッグ中にフラッシュメモリのデータを書き換える必要が生じる。しかしながら、従来のデバッグツールには、マイクロコンピュータに内蔵されているフラッシュメモリに対する書き換え機能を備えていないため、フラッシュメモリの書き換え専用ツールであるフラッシュライタを使用して書き換えを行うか、または、ユーザがフラッシュメモリの書き換えを行うためのプログラムを用意し、デバッグツールによりそのプログラムを実行することにより、書き換えを行っていた。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
従来のマイクロコンピュータは以上のように構成されているので、フラッシュメモリの書き換えにフラッシュライタを使用する場合には、デバッグツールとは別にフラッシュライタを用意しなくてはならないので、デバッグのためのコストが高くなる。また、フラッシュメモリの構成に応じたフラッシュライタを使用しなくてはならないので、フラッシュメモリの構成が異なる度に異なるフラッシュライタを使用しなくてはならず、デバッグの作業効率が落ちるなどの課題があった。
【０００４】
さらに、デバッグツールにより書き換え用のプログラムを実行する場合には、ユーザが書き換え用のプログラムを用意しなくてはならず、デバッグの作業効率が落ちるなどの課題があった。
【０００５】
さらに、上記両フラッシュメモリの書き換え手法では、デバッグツールから直接にフラッシュメモリの書き換え制御を行うことができないため、フラッシュメモリの書き換えを伴うようなデバッグ機能を使用することができず、例えば、ソフトウエアブレーク機能を使用することができないなど、デバッグツールの機能が制限される課題があった。
【０００６】
この発明は上記のような課題を解決するためになされたもので、デバッグツールから直接に内蔵フラッシュメモリの書き換え制御を行うことができ、デバッグの作業効率を高くすることが可能なマイクロコンピュータを得ることを目的とする。
【課題を解決するための手段】
【０００７】
この発明に係るマイクロコンピュータは、第２の格納手段に格納された内蔵フラッシュ情報をインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールから内蔵フラッシュ情報に基づいた書き込みデータをインタフェースを介して入力して、第１の格納手段に格納された書き換えプログラムに基づいて書き込みデータを内蔵フラッシュメモリに書き換えるＣＰＵを備えたものである。
【０００８】
この発明に係るマイクロコンピュータは、内蔵フラッシュメモリに第１の格納手段を設けたものである。
【０００９】
この発明に係るマイクロコンピュータは、書き換えプログラムに、Ｅ／Ｗモード移行プログラム、消去プログラム、書き込みプログラム、ステータスレディ待ちプログラム、およびＥ／Ｗモード終了プログラムを備えたものである。
【００１０】
この発明に係るマイクロコンピュータは、内蔵フラッシュメモリに第２の格納手段を設けたものである。
【００１１】
この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、内蔵フラッシュメモリのブロックのサイズおよびアドレスからなるブロック情報と、書き換えプログラムの先頭アドレスからなる書き換えプログラム情報とを備えたものである。
【００１２】
この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、セキュリティコードの格納場所を示す情報を備えたものである。
【００１３】
この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換えプログラムを退避したり、書き込みデータをテンポラリに保持するのに使用する領域がどこにあるかを示す情報を備えたものである。
【００１４】
この発明に係るマイクロコンピュータは、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換え時に書き込みデータを一旦保持するために使用する領域のサイズ情報を備えたものである。
【００１５】
この発明に係るマイクロコンピュータは、内蔵フラッシュメモリの書き換えプログラムを格納した第１の格納手段と、内蔵フラッシュメモリに関する内蔵フラッシュ情報を格納した第２の格納手段と、デバッグツールからシリアルインタフェースを介して第１のレジスタに保持されたデバッグプログラムの命令コードに基づいてデバッグを実行すると共に、内蔵フラッシュ情報を第２のレジスタに保持させ、シリアルインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールからシリアルインタフェースを介して第３のレジスタに保持された内蔵フラッシュ情報に基づいた書き込みデータを書き換えプログラムに基づいて内蔵フラッシュメモリに書き換えるＣＰＵとを備えたものである。
【００１６】
この発明に係るマイクロコンピュータは、シリアルインタフェースをＪＴＡＧインタフェースとしたものである。
【００１７】
この発明に係るマイクロコンピュータは、デバッグモードになると内蔵フラッシュメモリの書き換えを許可するＦＰ端子の入力値にかかわらず強制的にその内蔵フラッシュメモリの書き換えを許可する書き換え許可手段を備えたものである。
【００１８】
この発明に係るマイクロコンピュータは、デバッグツールからの分岐命令コードに応じてＣＰＵによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するＥ／Ｗモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって消去実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、消去実行状況情報が正常と認められ、内蔵フラッシュメモリの消去すべきブロックに応じて消去プログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてＣＰＵによって通常モードに移行するＥ／Ｗモード終了プログラム実行手段とを備えたものである。
【００１９】
この発明に係るマイクロコンピュータは、デバッグツールからの分岐命令コードに応じてＣＰＵによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するＥ／Ｗモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって書き込みプログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに、デバッグツールからの書き込みデータを書き込む書き込みプログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって書き込み実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、書き込み実行状況情報が正常と認められ、内蔵フラッシュメモリの書き換えすべきブロックに応じて消去プログラム実行手段、書き込みプログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてＣＰＵによって通常モードに移行するＥ／Ｗモード終了プログラム実行手段とを備えたものである。
【発明の効果】
【００２０】
以上のように、この発明によれば、第２の格納手段に格納された内蔵フラッシュ情報をインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールから内蔵フラッシュ情報に基づいた書き込みデータをインタフェースを介して入力して、第１の格納手段に格納された書き換えプログラムに基づいて書き込みデータを内蔵フラッシュメモリに書き換えるＣＰＵを備えるように構成したので、デバッグ時にデバッグツールからマイクロコンピュータに内蔵される書き換えプログラムを用いて直接に内蔵フラッシュメモリの書き換え制御を行うことができ、デバッグの作業効率を高くすることができる。
【００２１】
また、内蔵フラッシュ情報をマイクロコンピュータに内蔵し、デバッグツールがその内蔵フラッシュ情報を読み出すことが可能であるため、デバッグツールはその内蔵フラッシュ情報に応じて書き込みデータを用意することができる。したがって、内蔵フラッシュメモリの容量やブロック構成等が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。
【００２２】
さらに、内蔵フラッシュメモリの書き換えプログラムをマイクロコンピュータに内蔵し、デバッグツールがその書き換えプログラムを起動することで内蔵フラッシュメモリの書き換えを行うようなインターフェースとなっているので、内蔵フラッシュメモリの書き換え手法が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。
【００２３】
また、この発明によれば、内蔵フラッシュメモリに第１の格納手段を設けるように構成したので、書き換えプログラムは内蔵フラッシュメモリに格納されるので、マイクロコンピュータのチップが製作された後からでも書き換えプログラムを書き込んだり、また、書き換えたりすることができる効果が得られる。
【００２４】
さらに、この発明によれば、書き換えプログラムに、Ｅ／Ｗモード移行プログラム、消去プログラム、書き込みプログラム、ステータスレディ待ちプログラム、およびＥ／Ｗモード終了プログラムを備えるように構成したので、書き換えプログラムを細かなプログラムモジュールによって構成することにより、全体の書き換えプログラムを小型化することができる。
【００２５】
また、消去プログラム、および書き込みプログラムに分割することにより、内蔵フラッシュメモリの消去のみの処理を行うことができる効果が得られる。
【００２６】
さらに、この発明によれば、内蔵フラッシュメモリに第２の格納手段を設けるように構成したので、内蔵フラッシュ情報は内蔵フラッシュメモリに格納されるので、マイクロコンピュータのチップが製作された後からでも内蔵フラッシュ情報を書き込んだり、また、書き換えたりすることができる効果が得られる。
【００２７】
さらに、この発明によれば、内蔵フラッシュ情報に、内蔵フラッシュメモリのブロックのサイズおよびアドレスからなるブロック情報と、書き換えプログラムの先頭アドレスからなる書き換えプログラム情報とを備えるように構成したので、デバッグツールは、ブロック情報に応じて書き換えデータを用意することができる。したがって、内蔵フラッシュメモリの容量やブロック構成、配置アドレスなどが異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。
【００２８】
また、内蔵フラッシュメモリの書き換えプログラムの格納場所をデバッグツールが読み出すことができるので、内蔵フラッシュメモリの書き換えプログラムの格納場所が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。
【００２９】
さらに、この発明によれば、内蔵フラッシュ情報に、セキュリティコードの格納場所を示す情報を備えるように構成したので、デバッグツールに、そのセキュリティコードとユーザによって入力されるセキュリティコードとの比較に応じて、書き換えを許可する機能を持たせることができる効果が得られる。
【００３０】
さらに、この発明によれば、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換え時に書き換えプログラムを退避したり、書き込みデータをテンポラリに保持するのに使用する領域がどこにあるかを示す情報を備えるように構成したので、デバッグツールでは、そのテンポラリ領域上のデータを退避させることができ、内蔵フラッシュメモリの書き換え処理によってテンポラリ領域上のデータが消去されてしまうのを未然に防ぐことができる効果が得られる。
【００３１】
さらに、この発明によれば、内蔵フラッシュ情報に、内蔵フラッシュメモリの書き換え時に書き込みデータを一旦保持するために使用する領域のサイズ情報を備えるように構成したので、デバッグツールでは、そのサイズ情報に応じて書き込みデータを生成することができる効果が得られる。
【００３２】
さらに、この発明によれば、内蔵フラッシュメモリの書き換えプログラムを格納した第１の格納手段と、内蔵フラッシュメモリに関する内蔵フラッシュ情報を格納した第２の格納手段と、デバッグツールからシリアルインタフェースを介して第１のレジスタに保持されたデバッグプログラムの命令コードに基づいてデバッグを実行すると共に、内蔵フラッシュ情報を第２のレジスタに保持させ、シリアルインタフェースを介してデバッグツールから読み出し可能にし、デバッグツールからシリアルインタフェースを介して第３のレジスタに保持された内蔵フラッシュ情報に基づいた書き込みデータを書き換えプログラムに基づいて内蔵フラッシュメモリに書き換えるＣＰＵとを備えるように構成したので、デバッグツールからデバッグプログラムの命令コードを第１のレジスタに設定すれば、このマイクロコンピュータのデバッグを行うことができ、さらに、そのデバッグ時にデバッグツールから直接に内蔵フラッシュメモリの書き換え制御を行うことができ、デバッグの作業効率をさらに高くすることができる。
【００３３】
また、内蔵フラッシュ情報をマイクロコンピュータに内蔵し、デバッグツールがその内蔵フラッシュ情報を読み出すことが可能であるため、デバッグツールはその内蔵フラッシュ情報に応じて書き込みデータを用意することができる。したがって、内蔵フラッシュメモリの容量やブロック構成等が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。
【００３４】
さらに、内蔵フラッシュメモリの書き換えプログラムをマイクロコンピュータに内蔵し、デバッグツールがその書き換えプログラムを起動することで内蔵フラッシュメモリの書き換えを行うようなインターフェースとなっているので、内蔵フラッシュメモリの書き換え手法が異なるマイクロコンピュータであっても、同じデバッグツールで書き換えが可能となる効果が得られる。
【００３５】
さらに、シリアルなインターフェースを使用することによって、デバッグツールとのインターフェース用端子を少なくすることができる効果が得られる。
【００３６】
さらに、デバッグツールからＣＰＵ命令を供給可能な機能は、マイクロプロセッサの通常のデバッグに使用できる機能であることから、この機能は通常のデバッグと内蔵フラッシュメモリの書き換え機能とを共用することができる。従って、内蔵フラッシュメモリ専用のハードウェアを追加することがないという効果が得られる。
【００３７】
さらに、この発明によれば、シリアルインタフェースをＪＴＡＧインタフェースとするように構成したので、バウンダリスキャンテストを行うＪＴＡＧインタフェースと共有化することができ、新たなシリアルインタフェースを設ける必要が無く、構成を簡単にすることができる効果が得られる。
【００３８】
さらに、この発明によれば、デバッグモードになると内蔵フラッシュメモリの書き換えを許可するＦＰ端子の入力値にかかわらず強制的にその内蔵フラッシュメモリの書き換えを許可する書き換え許可手段を備えるように構成したので、デバッグモードでは、ＦＰ端子の入力値にかかわらずデバッグツールによって内蔵フラッシュメモリの書き換えを行うことができる効果が得られる。
【００３９】
さらに、この発明によれば、デバッグツールからの分岐命令コードに応じてＣＰＵによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するＥ／Ｗモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって消去実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、消去実行状況情報が正常と認められ、内蔵フラッシュメモリの消去すべきブロックに応じて消去プログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてＣＰＵによって通常モードに移行するＥ／Ｗモード終了プログラム実行手段とを備えるように構成したので、デバッグツールからの分岐命令コードに応じて、内蔵フラッシュメモリの所定のブロックのデータを消去する一連の消去処理を実行することができる効果が得られる。
【００４０】
さらに、この発明によれば、デバッグツールからの分岐命令コードに応じてＣＰＵによって内蔵フラッシュメモリの消去および書き込み可能なモードに移行するＥ／Ｗモード移行プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって消去プログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに応じたブロックのデータを消去する消去プログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって書き込みプログラムを実行して、デバッグツールからの内蔵フラッシュメモリのアドレスに、デバッグツールからの書き込みデータを書き込む書き込みプログラム実行手段と、デバッグツールからの分岐命令コードに応じてＣＰＵによって書き込み実行状況情報をデバッグツールから読み出し可能にするステータスレディ待ちプログラム実行手段と、書き込み実行状況情報が正常と認められ、内蔵フラッシュメモリの書き換えすべきブロックに応じて消去プログラム実行手段、書き込みプログラム実行手段およびステータスレディ待ちプログラム実行手段を所定回数実行した後に、デバッグツールからの分岐命令コードに応じてＣＰＵによって通常モードに移行するＥ／Ｗモード終了プログラム実行手段とを備えるように構成したので、デバッグツールからの分岐命令コードに応じて、内蔵フラッシュメモリの所定のブロックに書き込みデータを書き換える一連の書き換え処理を実行することができる効果が得られる。
【図面の簡単な説明】
【００４１】
【図１】この発明の実施の形態１によるマイクロコンピュータを示す構成図である。
【図２】マイクロコンピュータのＣＰＵおよびデバッグモジュールの詳細を示す構成図である。
【図３】デバッグ事象発生時の処理手順を示す説明図である。
【図４】内蔵領域にマッピングされたデバッグモジュール用領域を示す説明図である。
【図５】モニタコード供給機能およびＪＴＡＧ制御部のレジスタ構成を示す構成図である。
【図６】内蔵フラッシュメモリのメモリ領域を示す説明図である。
【図７】フラッシュレディステータスレジスタを示す説明図である。
【図８】フラッシュメモリ制御レジスタを示す説明図である。
【図９】内蔵フラッシュ書き換えに関する情報を示す説明図である。
【図１０】ツールＲＯＭ領域の構成を示す説明図である。
【図１１】内蔵フラッシュ情報格納領域の構成を示す説明図である。
【図１２】モニタコード供給機能およびＪＴＡＧ制御部の動作を示すフローチャートである。
【図１３】内蔵フラッシュメモリの書き換え動作の概要を示すフローチャートである。
【図１４】内蔵フラッシュメモリの消去動作を示すフローチャートである。
【図１５】内蔵フラッシュメモリの消去動作の詳細を示すフローチャートである。
【図１６】内蔵フラッシュメモリの書き込み動作を示すフローチャートである。
【図１７】内蔵フラッシュメモリの書き込み動作の詳細を示すフローチャートである。
【発明を実施するための形態】
【００４２】
以下、この発明の実施の一形態を説明する。
実施の形態１．
図１はこの発明の実施の形態１によるマイクロコンピュータを示す構成図であり、図において、１はマイクロコンピュータ応用機器などに設けられた１チップのマイクロコンピュータ、２はマイクロコンピュータ１のデバッグ時に接続される汎用的なデバッグツールである。また、マイクロコンピュータ１において、３は３２ビット汎用レジスタを１６本（Ｒ０〜Ｒ１５）備えたマイクロプロセッサであるＣＰＵ、４はこの実施の形態１の特徴であるデバッグモジュール、５はこの実施の形態１の特徴であるユーザプログラムなどが格納された内蔵フラッシュメモリ、６はこの実施の形態１の特徴である内蔵ＳＲＡＭ、７はＤＭＡコントローラ、割り込みコントローラ、タイマなどの内蔵周辺Ｉ／Ｏ、８はバス制御回路、９は上記各モジュールを接続する３２ビットの内部バスである。
【００４３】
また、内蔵フラッシュメモリ５の周辺において、５ａは“１”の入力値で内蔵フラッシュメモリ５の書き換えの許可、“０”の入力値で書き換えを禁止するフラッシュプロテクト信号を入力するＦＰ端子、５ｂはそのフラッシュプロテクト信号と、ＣＰＵ３から出力されるデバッグモードで“１”、通常モードで“０”となるモード信号との論理和をとるＯＲ回路、５ｃはそのＯＲ回路５ｂの出力値が“１”で、内蔵フラッシュメモリ５の書き換えを許可し、“０”で、内蔵フラッシュメモリ５の書き換えを禁止するフラッシュ内部制御回路であり、ＯＲ回路５ｂおよびフラッシュ内部制御回路５ｃにより、ＦＰ端子５ａの入力値にかかわらずデバッグモードになると内蔵フラッシュメモリ５の書き換えを強制的に許可する書き換え許可手段を構成する。
【００４４】
図２はマイクロコンピュータのＣＰＵおよびデバッグモジュールの詳細を示す構成図であり、図において、１１はデバッグモジュール４と外部のデバッグツール２とを接続するＩＥＥＥ  １１４９.１で定められた５本のＪＴＡＧインタフェース端子（インタフェース，シリアルインタフェース）であり、各端子の機能を以下に説明する。
【００４５】
ＴＣＫ端子：クロック入力端子
ＴＤＩ端子：テスト命令コードまたはテストデータをシリアルに入力する端子
ＴＤＯ端子：テスト命令コードまたはテストデータをシリアルに出力する端子
ＴＭＳ端子：テスト回路の状態遷移を制御するテストモード選択を入力する端子
ＴＲＳＴ端子：テスト回路を非同期に初期化するテストリセットを入力する端子
１２はチップ外部からＣＰＵ３に対してデバッグ割り込みを入力する端子である。
【００４６】
また、ＣＰＵ３において、１３ａはデバッグトラップ命令実行機能であり、このデバッグトラップ命令実行機能１３ａは、デバッグ専用のトラップ命令であり、ＣＰＵ３がこの命令を実行することによりデバッグ事象が発生し、デバッグモードに移行するものである。１３ｂはプログラムカウンタであり、このプログラムカウンタ１３ｂは、ＣＰＵ３が実行している命令のアドレスを保持するレジスタである。１３ｃはプログラムカウンタ退避用レジスタであり、このプログラムカウンタ退避用レジスタ１３ｃは、デバッグ事象等が発生した時にプログラムカウンタ１３ｂ値の退避先となるレジスタである。１３ｄはＰＳＷレジスタであり、このＰＳＷレジスタ１３ｄは、ＣＰＵ３の状態を示すレジスタである。１３ｅはＰＳＷ退避用レジスタであり、このＰＳＷ退避用レジスタ１３ｅは、デバッグ事象等が発生した時にＰＳＷレジスタ１３ｄ値の退避先となるレジスタである。ＣＰＵ３は、上記以外にもロード命令、ストア命令、分岐命令、加算命令等、一般的なＣＰＵが備えている命令実行機能と汎用レジスタ１３ｆを１６本備えている。ここではこの実施の形態とは直接関係が無いので詳細は省略する。１４は実行後ＰＣブレーク機能であり、この実行後ＰＣブレーク機能１４は、ターゲットとなる命令のプログラムカウンタ値を設定すると、その命令の実行直後にデバッグ事象が発生し、デバッグモードに移行するものである。
【００４７】
さらに、デバッグモジュール４において、１５はＪＴＡＧ制御部であり、このＪＴＡＧ制御部１５は、ＪＴＡＧインタフェース端子１１を通じてデバッグツール２と通信を行い、デバッグ機能の制御を行うものであり、ＪＴＡＧインタフェース端子１１でアクセス可能なデバッグ関連の制御レジスタやＪＴＡＧインタフェース端子１１でのアクセスを制御するＴＡＰコントローラなどで構成されている。１６はこの実施の形態１の特徴であるＪＴＡＧインタフェース端子１１を通じてＣＰＵ命令を実行するモニタコード供給機能、１７はアクセスブレーク機能であり、このアクセスブレーク機能１７は、ターゲットとなるデータアクセスの条件を設定すると、設定された条件を満たすデータアクセスを検出する。条件が成立するとＣＰＵ３に対してデバッグ割り込み要求を出力するものである。１８は実行前ＰＣ（プログラムカウンタ）ブレーク機能であり、この実行前ＰＣブレーク機能１８は、ターゲットとなる命令のプログラムカウンタ値を設定すると、その命令がフェッチされたことを検出してＣＰＵ３に実行前ＰＣブレーク要求を出力する。ＣＰＵ３が実行前ＰＣブレーク要求を受け取ると、その命令の実行直前にデバッグ事象が発生し、デバッグモードに移行するものである。１９はデバッグ割り込み要求であり、このデバッグ割り込み要求１９は、デバッグ専用の割り込みであり、ＤＢＩ端子１２、ＪＴＡＧ制御部１５、アクセスブレーク機能１７の３個所から発生するデバッグ割り込み要求を論理和して１本化してからＣＰＵ３に対して出力するものである。ＣＰＵ３にデバッグ要求が入力されるとデバッグ事象が発生し、デバッグモードに移行する。
【００４８】
以上のように、マイクロコンピュータ１には、デバッグ機能が内蔵されており、主にデバッグモジュール４がデバッグ機能の制御を行っている。
【００４９】
ここで、ＪＴＡＧについて補足説明する。
今日のマイクロコンピュータ応用機器では、高密度実装化、デバイスの高集積、大規模、狭ピッチ化により、ボードレベルのテストが困難となってきている。このようなボードレベルのテストの課題を解決する目的で欧米の半導体、電子機器メーカ、テスタメーカなどが中心となってＪＴＡＧ（Ｊｏｉｎｔ  Ｔｅｓｔ  Ａｃｔｉｏｎ  Ｇｒｏｕｐ）が結成された。このＪＴＡＧより提案されたボードレベルのテスト方式がバウンダリスキャン方式といわれるものであり、現在はＩＥＥＥ１１４９．１テストポートアクセス規格（ＩＥＥＥ  Ｓｔａｎｄａｒｄ  Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｐｏｒｔ  ａｎｄ  Ｂｏｕｎｄａｒｙ  Ｓｃａｎ  Ａｒｃｈｉｔｅｃｔｕｒｅ  （ＩＥＥＥ  Ｓｔｄ．１１４９．１ａ−１９９３）として標準化されている。
【００５０】
バウンダリスキャン方式では、ボード上に搭載されている各デバイスの入出力ピンと内部回路間にスキャンレジスタ回路（バウンダリスキャン）を挿入し、さらにコントロール回路と専用ピンを設ける。ボード上では、各デバイスのバウンダリスキャンを接続して、専用ポートを使用してシリアルにデータの入出力を行うことにより、全てのスキャンレジスタのアクセスとコントロールを可能にしている。シリアルに命令やデータを入力し、シリアルに出力されるデータを観測することによって、ボード上にテスト用のプローブを接触させることなく、ボード上のデバイス間の接続テストやデバイス内部のテストを行うことができる。
【００５１】
バウンダリスキャンは、以下のコンポーネントで構成される。
ＴＡＰ（Ｔｅｓｔ  Ａｃｃｅｓｓ  Ｐｏｒｔ）  バウンダリスキャンへのデータの入出力およびコントロールを行うためのポートであり、図２におけるＪＴＡＧインタフェース端子１１に相当する。
【００５２】
ＴＡＰコントローラ  ＴＣＫ端子およびＴＭＳ端子からの入力に応じて状態遷移を行い、テスト回路の制御を行う。
【００５３】
命令レジスタ  テスト命令コードを保持するレジスタで、この値をデコードしてテスト回路の制御信号を生成する。テスト命令コードとして、ＳＡＭＰＬＥ／ＰＲＥＬＯＡＤ命令、ＥＸＴＥＳＴ命令、ＢＹＰＡＳＳ命令などがある。また、上記命令とは別にデバイス独自のプライベート命令を追加することも許されている。この実施の形態１のマイクロコンピュータにおいても内蔵デバッグ機能用にいくつかのプライベート命令を備えている。
【００５４】
データレジスタ
・バイパスレジスタ  ＴＤＩ端子とＴＤＯ端子との間に設けられた１ビットのレジスタで、テスト回路をバイパスするために使用する。
【００５５】
・バウンダリスキャンレジスタ  デバイスの内部回路と各ピンとの間に設けられたシフトレジスタをシリアルに接続した一連のレジスタ。
【００５６】
・上記以外にもデバイス独自のデータレジスタを追加することも許されている。この実施の形態１のマイクロコンピュータにおいても内蔵デバッグ機能用にいくつかのデータレジスタを備えている。
【００５７】
図３はデバッグ事象発生時の処理手順を示す説明図である。
マイクロコンピュータ１には、ユーザモードとデバッグモードの２つの実行モードがあり、ユーザプログラムを実行しているモードがユーザモードであり、ユーザプログラムの実行中にデバッグ事象が発生するとユーザモードからデバッグモードに遷移する。デバッグモードではデバッグツール２から供給されるモニタプログラムを実行する。
【００５８】
デバッグ事象の種類には、デバッグトラップ命令の実行、デバッグ割り込み要求、実行前／実行後プログラムカウンタブレーク要求がある。
【００５９】
デバッグ事象が発生すると、以下の処理をＣＰＵ３およびデバッグモジュール４が自動的に行った後、デバッグモードに遷移する。
【００６０】
・プログラムカウンタ１３ｂの値をプログラムカウンタ退避用レジスタ１３ｃに退避
・ＰＳＷレジスタ１３ｄの値をＰＳＷ退避用レジスタ１３ｅに退避した後、ＰＳＷレジスタ１３ｄの値を更新
・発生したデバッグ事象を示すデバッグ事象発生要因フラグをＪＴＡＧ制御部１５にあるＪＴＡＧレジスタにセット
・デバッグ事象のベクタアドレス（Ｈ’ＦＦＦＦ９０００番地）に分岐
デバッグ事象のベクタアドレスに分岐したら、デバッグツール２は、モニタコード供給機能１６を使用して命令コードをＣＰＵ３に供給することによって、モニタプログラムを実行する。
【００６１】
ユーザモードへの復帰命令（ＲＴＥ命令）を実行することにより、デバッグモードからユーザモードに遷移する。ユーザモードに遷移する際には、以下の処理をＣＰＵ３およびデバッグモジュール４が自動的に行う。
【００６２】
・デバッグ事象発生要因フラグをクリア
・ＰＳＷ退避用レジスタ１３ｅに退避されていた値をＰＳＷレジスタ１３ｄに復帰
・プログラムカウンタ退避用レジスタ１３ｃに退避されていた値をプログラムカウンタ１３ｂに復帰すると共に、その値の番地に分岐する
図４は内蔵領域にマッピングされたデバッグモジュール用領域を示す説明図であり、図において、２１はデバッグモジュール用内蔵Ｉ／Ｏ領域（Ｈ’ＦＦＦＦ８０００〜Ｈ’ＦＦＦＦ９ＦＦＦ）、２２はデバッグモジュール用制御レジスタ領域（Ｈ’ＦＦＦＦ８０００〜Ｈ’ＦＦＦＦ８ＦＦＦ）であり、実行前ＰＣブレーク機能用のレジスタ群、アクセスブレーク機能用のレジスタ群、モニタコード供給機能用のレジスタ群がこの領域に配置されている。２３はモニタコード供給領域（Ｈ’ＦＦＦＦ９０００〜Ｈ’ＦＦＦＦ９ＦＦＦ）であり、モニタコード供給機能にアクセスできる領域である。この領域内での命令フェッチは、全てモニタコード供給機能を使用したＪＴＡＧインタフェース端子１１経由の命令コードをフェッチすることになる。デバッグ事象ベクタエントリ（Ｈ’ＦＦＦＦ９０００〜Ｈ’ＦＦＦＦ９００３）は、デバッグ事象が発生するとこの領域に分岐するものである。
【００６３】
また、２４はツールＲＯＭ領域であり（Ｈ’ＦＦ００３ＦＥ０〜Ｈ’ＦＦ００３ＦＦＦ）、セキュリティコードや内蔵フラッシュ情報が置かれているアドレスを格納する領域である。２５はセキュリティコード格納領域であり、この領域のアドレスとバイト数はツールＲＯＭ領域２４内で指定される。２６は内蔵フラッシュ情報格納領域であり、内蔵フラッシュ書き換え用プログラム（以下、書き換えプログラムと言う）の一つであるＥ／Ｗモード移行プログラムのエントリアドレスと内蔵フラッシュメモリ５のブロック構成の情報を格納する領域であり、この領域のアドレスとバイト数はツールＲＯＭ領域２４内で指定される。
【００６４】
図５はモニタコード供給機能およびＪＴＡＧ制御部のレジスタ構成を示す構成図であり、ここで、モニタコード供給機能１６は、ＪＴＡＧインタフェース端子１１を使用して外部からＣＰＵ３に対して命令コードを供給する機能である。ＣＰＵ３は、デバッグ事象が発生すると、図４に示したモニタコード供給領域２３の先頭であるＨ’ＦＦＦＦ９０００番地へ分岐し、このモニタコード供給機能１６から供給される命令コードを実行するものである。
【００６５】
ＪＴＡＧ制御部１５において、３１はＪＴＡＧインタフェース端子１１でのアクセスを制御するＴＡＰコントローラ、３２はいずれのレジスタを用いてどのようなテストを行うか選択する命令レジスタである。
【００６６】
３３はＭＯＮ＿ＣＯＤＥレジスタ（第１のレジスタ）であり、このＭＯＮ＿ＣＯＤＥレジスタ３３は、デバッグモード時にＪＴＡＧインタフェース端子１１経由でモニタプログラムを実行する場合に、デバッグツール２から供給される命令コードの設定に使用する３２ビットのレジスタである。ＭＯＮ＿ＣＯＤＥレジスタ３３に設定された値は、モニタコード供給機能１６の命令コードバッファ３７に転送される。この時、命令コードバッファ３７の入力ポインタも自動的にインクリメントされるものである。
【００６７】
３４はＭＯＮ＿ＤＡＴＡレジスタ（第２のレジスタ）であり、このＭＯＮ＿ＤＡＴＡレジスタ３４は、デバッグモード時にＪＴＡＧインタフェース端子１１経由でモニタプログラムを実行する場合に、その実行結果をデバッグツール２に出力したり、内蔵フラッシュ情報をデバッグツール２に出力するインタフェースとなる３２ビットのレジスタである。モニタプログラム上でストア命令を使用してモニタコード供給機能１６のＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込みを行うと、その値がＭＯＮ＿ＤＡＴＡレジスタ３４に転送され、ＪＴＡＧインタフェース端子１１経由でデバッグツール２から読み出すことができる。
【００６８】
３５はＭＯＮ＿ＰＡＲＡＭレジスタ（第３のレジスタ）であり、このＭＯＮ＿ＰＡＲＡＭレジスタ３５は、デバッグモード時にＪＴＡＧインタフェース端子１１経由でモニタプログラムを実行する場合に、デバッグツール２から書き換えデータなどのパラメータを渡すためのインタフェースとなる３２ビットのレジスタである。デバッグツール２からＪＴＡＧインタフェース端子１１経由でＭＯＮ＿ＰＡＲＡＭレジスタ３５に書き込みを行うと、モニタコード供給機能１６のＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９に転送され、モニタプログラム上でロード命令を使用してその値を読み出すことができる。
【００６９】
３６はＭＯＮ＿ＡＣＣＥＳＳレジスタであり、このＭＯＮ＿ＡＣＣＥＳＳレジスタ３６は、デバッグモード時にＪＴＡＧインタフェース端子１１経由でモニタプログラムを実行する場合に、アクセス制御情報を設定／格納する４ビットのレジスタである。
【００７０】
ｂｉｔ０  ＭＮＳＴＡＲＴ  モニタコード供給開始ビット（読み出し／書き込み可）
１：命令コード設定済み
０：命令コード未設定
“１”を設定することにより、命令コードバッファ３７に有効な値が設定されたことを示す。すなわち、モニタコード供給機能１６における命令フェッチ要求を受け付けるようになる。
【００７１】
ｂｉｔ１  ＭＮＤＴＶＬＤ  ＦｒｏｎｔＭＯＮ＿ＤＡＴＡ有効ビット（読み出し専用）
１：ＦｒｏｎｔＭＯＮ＿ＤＡＴＡ有効（ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８への書き込みがあり、かつ、ＭＯＮ＿ＤＡＴＡレジスタ３４は未参照）
０：ＦｒｏｎｔＭＯＮ＿ＤＡＴＡ無効（ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８への書き込みがない、またはＭＯＮ＿ＤＡＴＡレジスタ３４を参照した後）
このビットは、ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８への書き込みがあった時、“１”にセットされる。このビットは、以下の条件でゼロクリアされる。
【００７２】
・ＭＯＮ＿ＤＡＴＡレジスタ３４をアクセスした時
・デバッグモードでのＲＴＥ命令実行時
・デバッグ制御部のリセット時（デバッグモジュールのリセット）
ｂｉｔ２  ＭＮＰＲＭＶＬＤ  ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭ有効ビット（読み出し専用）
１：ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭ有効（ＭＯＮ＿ＰＡＲＡＭレジスタ３５は設定済みであるが、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９が未だ読み出されていない）
０：ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭ無効（ＭＯＮ＿ＰＡＲＡＭレジスタ３５が設定されていないか、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９が読み出された後）
このビットは、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９への設定が行われた時に“１”がセットされる。このビットは、以下の条件でゼロクリアされる。
【００７３】
・ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９に対して読み出しがあった時
・デバッグモードでのＲＴＥ命令実行時
・デバッグ制御部のリセット時（デバッグモジュールのリセット）
ｂｉｔ３  ＭＮＣＤＢＵＳＹ  ＭＯＮ＿ＣＯＤＥビジービット（読み出し専用）
１：ＭＯＮ＿ＣＯＤＥへの設定不可
０：ＭＯＮ＿ＣＯＤＥへの設定可
このビットは、次の命令コードをＭＯＮ＿ＣＯＤＥレジスタ３３に設定してもよいかどうかを示すビットである。このビットは、以下のような２つの意味がある。
【００７４】
・ＭＯＮ＿ＣＯＤＥレジスタ３３から命令コードバッファ３７への転送中＝“１”、転送完了＝“０”、命令コードバッファ３７にフェッチされていない命令コードがある＝“１”、ない＝“０”
このビットは、以下の条件で“１”にセットされる。
【００７５】
・ＭＯＮ＿ＣＯＤＥレジスタ３３をアクセスした時
・ＭＮＳＴＡＲＴビットに“１”をセットした時
このビットは、以下の条件でゼロクリアされる。
【００７６】
・ＭＯＮ＿ＣＯＤＥレジスタ３３に書き込んだ値が命令コードバッファ３７に転送された時
・命令コードバッファ３７に格納されている命令が全てＣＰＵ３によってフェッチされた時（注１）
・デバッグモードでのＲＴＥ命令実行時
・デバッグ制御部のリセット時（デバッグモジュールのリセット）
（注１）命令コードバッファ３７のフェッチ完了の判断
命令コードバッファ３７の先頭のワードに対して、２回目の命令フェッチ要求が発生した時を「命令コードバッファ３７の全ての命令コードをフェッチした」と判断する。例えば、命令コードバッファ３７の２ワード目に分岐命令があった場合には、３ワード目、４ワード目に命令コードが設定されていても、２ワード目の分岐命令による分岐先の命令フェッチ要求が、命令コードバッファ３７に対して発生した時点で「全ての命令コードがフェッチされた」ことになる。なお、モニターコード供給機能１６で分岐を行う場合には「必ず分岐先を命令コードバッファ３７の先頭アドレスにしなければならない」という制限がデバッグツール２に対して要求されているものとする。すなわち、デバッグツール２がＭＯＮ＿ＣＯＤＥレジスタ３３に設定する分岐命令の分岐先アドレスは、常に４ワード境界上のアドレス（アドレスの下位４ビット[２８：３１]を“００００”）にする必要がある。この制限によって、モニターコード供給機能１６内で分岐した場合には、必ず命令コードバッファ３７の１ワード目に対する命令フェッチ要求になることが保証される。
【００７７】
また、モニタコード供給機能１６において、３７は命令コードバッファであり、この命令コードバッファ３７は、４ワードで構成され、ＪＴＡＧ制御部１５のＭＯＮ＿ＣＯＤＥレジスタ３３の内容が転送される。命令コードバッファ３７は、（Ｈ’ＦＦＦＦ９０００〜Ｈ’ＦＦＦＦ９ＦＦＦ）にマッピングされており、どのワードが選択されるかは、アドレスの下位２ビットで決定される。
【００７８】
３８はＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタであり、このＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８は、実行結果や内蔵フラッシュ情報などをデバッグツール２に受け渡しするための３２ビットのレジスタである。このＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８の内容がＪＴＡＧ制御部１５のＭＯＮ＿ＤＡＴＡレジスタ３４に転送される。
【００７９】
３９はＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタであり、このＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９は、デバッグツール２からモニタプログラムへの書き換えデータなどのパラメータを受け渡しするための３２ビットのレジスタである。ＪＴＡＧ制御部１５のＭＯＮ＿ＰＡＲＡＭレジスタ３５の内容がこのＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９に転送される。
【００８０】
９ａはアドレスバス、９ｂはデータバスである。
図６は内蔵フラッシュメモリのメモリ領域を示す説明図であり、図において、４１はユーザ領域、４２はブートＲＯＭ領域である。
【００８１】
内蔵フラッシュメモリ５のユーザ領域４１は、５１２Ｋバイトのフラッシュメモリが（Ｈ’００００００００〜Ｈ’０００７ＦＦＦＦ）番地に割り当てられ、１１ブロックに分割されたユーザが使用できる領域である。内蔵フラッシュメモリ５の消去は、一括で全領域消去を行う方法とブロック単位で消去する方法があり、また、内蔵フラッシュメモリ５への書き込みは、ページ単位（１ページ＝２５６バイト）で行うものである。内蔵フラッシュメモリ５の消去および書き込みは、後述するフラッシュＥ／Ｗイネーブルモードへ移行することにより可能となるものである。
【００８２】
内部フラッシュメモリ５のブートＲＯＭ領域４２は、１６Ｋバイトのフラッシュメモリが（Ｈ’ＦＦ００００００〜Ｈ’ＦＦ００３ＦＦＦ）番地に割り当てられ、内臓フラッシュメモリ５に対する書き換えプログラムを格納する領域である。
【００８３】
図７はフラッシュレディステータスレジスタを示す説明図であり、図において、５１はフラッシュレディステータスレジスタであり、内蔵フラッシュメモリ５に設けられた３２ビットのレジスタである。５２はそのフラッシュレディステータスレジスタ５１に設けられたＦＳＴＡＴ（レディステータス）ビットであり、内蔵フラッシュメモリ５に対する消去および書き込みの動作状態を示すものである。
【００８４】
０：消去または書き込み実行中
１：レディ状態
このＦＳＴＡＴビット５２は、図１に示したフラッシュ内部制御回路５ｃによって制御されるものである。
【００８５】
図８はフラッシュメモリ制御レジスタを示す説明図であり、図において、６１はフラッシュメモリ制御レジスタであり、内蔵フラッシュメモリ５に設けられた３２ビットのレジスタである。６２はそのフラッシュメモリ制御レジスタ６１に設けられたＦＥＮＴＲＹ（フラッシュモードエントリ）ビットであり、フラッシュＥ／Ｗイネーブルモードへの移行を制御するためのビットである。このビットを“１”セットすることにより、フラッシュＥ／Ｗイネーブルに移行し、このビットを“０”セットすることにより、通常動作モードに復帰するものである。
【００８６】
このＦＥＮＴＲＹビット６２は、図１に示したフラッシュ内部制御回路５ｃによって制御されるものである。
【００８７】
図９は内蔵フラッシュ書き換えに関する情報を示す説明図であり、図において、ツールＲＯＭ領域２４は、セキュリティコードや内蔵フラッシュ情報が置かれているアドレスを格納する領域であり、図４に示したように内蔵空間に配置されている。
【００８８】
図１０はツールＲＯＭ領域の構成を示す説明図であり、図に示すように、ツールＲＯＭ領域２４の場所は、（Ｈ’ＦＦ００３ＦＥ０〜Ｈ’ＦＦ００３ＦＦＦ）番地であり、このツールＲＯＭ領域２４に各情報が設定済みであることを示すために、（Ｈ’ＦＦ００３ＦＦＣ−Ｆ）番地に固定値（Ｈ’ＤＦ５３４４４９）のコードが埋め込まれている。デバッグツール２は、このコードの値を確認してからツールＲＯＭ領域２４の各情報を使用する。
【００８９】
また、図９および図１０に示すように、セキュリティコード格納領域２５とセキュリティレベルの情報が置かれており、セキュリティコードが設定されている場合、デバッグツール２側でセキュリティコードの比較を行い、一致しない場合にはセキュリティレベルに応じてツールの動作を制限する。
【００９０】
Ｈ’ＦＦ００３ＦＦ０−１番地  セキュリティコードのバイト数
Ｈ’ＦＦ００３ＦＦ２−３番地  セキュリティレベル
Ｈ’００００  レベル０
デバッグツールのリセット以外の動作を許可しない。
【００９１】
Ｈ’０００１  レベル１
内蔵フラッシュの全領域消去を実行しない限り、デバッグツールの動作を
許可しない。
【００９２】
Ｈ’ＦＦ００３ＦＦ４−７番地  セキュリティコード格納領域の先頭アドレス
セキュリティコードがない場合には（Ｈ’ＦＦＦＦＦＦＦＦ）となる。
【００９３】
さらに、図９および図１０に示すように、内蔵フラッシュ情報格納領域２６の先頭アドレスが置かれている。
【００９４】
Ｈ’ＦＦ００３ＦＥ８−ＥＢ番地  内蔵フラッシュ情報格納領域の先頭アドレス
内蔵フラッシュ情報格納領域がない場合にはＨ’ＦＦＦＦＦＦＦＦとなる。
【００９５】
図１１は内蔵フラッシュ情報格納領域の構成を示す説明図であり、図に示すように、内蔵フラッシュ情報格納領域２６の先頭アドレスは、ツールＲＯＭ領域２４のＨ’ＦＦ００３ＦＥ８−ＥＢ番地に置かれている。そして、内蔵フラッシュ情報格納領域２６には、以下の情報が置かれている。
【００９６】
Ｅ／Ｗモード移行プログラムのエントリアドレス（書き換えプログラム情報）
先頭アドレス＋  Ｈ’００〜Ｈ’０３番地：Ｅ／Ｗモード移行プログラムのエントリアドレス
内蔵フラッシュのブロック数
先頭アドレス＋  Ｈ’０４〜Ｈ’０７番地：内蔵フラッシュのブロック数
各ブロック情報
先頭アドレス＋  Ｈ’０８〜Ｈ’０Ｂ番地：ブロック０の先頭アドレス
Ｈ’０Ｃ〜Ｈ’０Ｆ番地：ブロック０のバイト数
Ｈ’１０〜Ｈ’１３番地：ブロック１の先頭アドレス
Ｈ’１４〜Ｈ’１７番地：ブロック１のバイト数
・・・・・              ・・・・・
８ｎ＋Ｈ’０８〜Ｈ’０Ｂ番地：ブロックｎの先頭アドレス
８ｎ＋Ｈ’０Ｃ〜Ｈ’０Ｆ番地：ブロックｎのバイト数
（注）ブロック数＝（ｎ＋１）個
内蔵フラッシュ書き換え時に使用するテンポラリ領域の情報
内蔵フラッシュメモリ５の書き換え時には、フラッシュ書き換え用プログラムの格納や書き込みデータのバッファ用として内蔵ＳＲＡＭ６の一部を使用する。このような内蔵フラッシュメモリ５の書き換え時にテンポラリに使用する領域の先頭アドレスとバイト数を格納する。
【００９７】
デバッグ中に内蔵フラッシュメモリ５の書き換えを行うような場合には、デバッグツール２側でこの領域のデータを内蔵ＳＲＡＭ６から退避できるように、この情報を格納している。
【００９８】
８ｎ＋Ｈ’１０〜Ｈ’１３番地：フラッシュの書き換え用テンポラリ領域の先頭アドレス
８ｎ＋Ｈ’１４〜Ｈ’１７番地：フラッシュの書き換え用テンポラリ領域のバイト数
（注）ブロック数＝（ｎ＋１）個
フラッシュ書き込み用バッファのサイズ（＝ページサイズ）情報
フラッシュ書き込み用バッファのバイト数（＝ページサイズ）を格納する。
【００９９】
８ｎ＋Ｈ’１８〜Ｈ’１Ｂ番地：フラッシュの書き込み用バッファのバイト数（＝ページサイズ）
（注）ブロック数＝（ｎ＋１）個
次に内蔵フラッシュ書き換え用プログラム（書き換えプログラム）の構成について説明する。書き換えプログラムは、図６に示したブートＲＯＭ４２内に格納され、Ｅ／Ｗモード移行プログラム、ブロック消去プログラム（消去プログラム）、ページ書き込みプログラム（書き込みプログラム）、ステータスレディ待ちプログラム、およびＥ／Ｗ終了プログラムからなるものである。以下に、各プログラムの構成について説明する。
【０１００】
Ｅ／Ｗモード移行プログラム
Ｅ／Ｗモード移行プログラムは、内蔵フラッシュメモリ５の書き換えの最初に実行しなければならないプログラムであり、書き換えに必要な各種パラメータをＣＰＵレジスタに設定した後、フラッシュＥ／Ｗイネーブルモードに移行するものである。
【０１０１】
実行方法
モニタコード供給機能１６を使用して、内蔵フラッシュ情報格納領域２６の先頭１ワードに格納されているアドレスに分岐させる。この時、ＭＯＮ＿ＰＡＲＡＭレジスタ３５への設定は必要ない。
【０１０２】
処理内容
（１）ＣＰＵレジスタに各パラメータを設定
Ｒ０  ：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ１  ：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ２  ：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ３  ：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ４  ：Ｈ’ＦＦＦＦ８４００（ＭＯＮ＿ＤＡＴＡレジスタ３４のアドレス）
Ｒ５  ：フラッシュ書き込み用バッファの先頭アドレス−４
Ｒ６  ：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ７  ：フラッシュ書き込み用バッファのバイト数（＝ページサイズ）
Ｒ８  ：ブロック消去プログラムのエントリアドレス
Ｒ９  ：ページ書き込みプログラムのエントリアドレス
Ｒ１０：ステータスレディ待ちのプログラムのエントリアドレス
Ｒ１１：Ｅ／Ｗ終了プログラムのエントリアドレス
Ｒ１２：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ１３：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ１４：パラメータの設定は無し、デバッグツール２が使用可能
Ｒ１５：パラメータの設定は無し、デバッグツール２が使用可能
（２）内蔵フラッシュメモリ５上のフラッシュ書き換えプログラムを内蔵ＳＲＡＭ６上に転送
（３）フラッシュＥ／Ｗイネーブルモードに移行
（４）ＭＯＮ＿ＤＡＴＡレジスタ３４にプログラム正常／エラー終了情報を書き込む
実行終了の確認方法
デバッグツール２は、ＭＯＮ＿ＤＡＴＡレジスタ３４を読み出し、ＭＳＢビット（ｂｉｔ０）の値を確認することによって、Ｅ／Ｗモード移行プログラムが正常終了したか否かを確認できる。
【０１０３】
ブロック消去プログラム
ブロック消去プログラムは、ＭＯＮ＿ＰＡＲＡＭレジスタ３５で指定された内蔵フラッシュメモリ５上のブロックに対して消去プログラムを発行するプログラムである。フラッシュＥ／Ｗイネーブルモードで使用する。
【０１０４】
実行方法
モニタコード供給機能１６を使用して、上記Ｒ８が示すアドレスに分岐させる。この際、消去したいメモリブロックの先頭アドレスをＭＯＮ＿ＰＡＲＡＭレジスタ３５に設定する。内蔵フラッシュメモリ５のブロック構成の情報は、内蔵フラッシュ情報格納領域２６にある。
【０１０５】
処理内容
（１）ＭＯＮ＿ＰＡＲＡＭレジスタ３５で指定されたメモリブロックに対して消去コマンドを発行
（２）プログラムの最後に、ＭＯＮ＿ＤＡＴＡレジスタ３４への書き込みを行う。
【０１０６】
実行終了の確認方法
ＭＯＮ＿ＤＡＴＡレジスタ３４の書き込みはツール（デバッグツール２）側とデバイス（マイクロコンピュータ１）側とのハンドシェイク用である。ＭＯＮ＿ＤＡＴＡレジスタ３４への書き込みがこのプログラムの終了を表す。従って、ＭＯＮ＿ＤＡＴＡレジスタ３４の内容には意味がないが、デバッグツール２は、ＭＯＮ＿ＤＡＴＡレジスタ３４を一旦空読みしてから次の処理を実行する。
【０１０７】
このプログラムの終了は、消去が完了していることを示すものではない。消去の完了を確認するには「ステータスレディ待ちプログラム」を実行する必要がある。
【０１０８】
ページ書き込みプログラム
ページ書き込みプログラムは、ＭＯＮ＿ＰＡＲＡＭレジスタ３５で指定されたページに対してページ書き込みコマンドを発行するプログラムである。フラッシュＥ／Ｗイネーブルモードで使用する。
【０１０９】
実行方法
モニタコード供給機能１６を使用して、上記Ｒ９が示すアドレスに分岐させる。この際、書き込みしたいページの先頭アドレスをＭＯＮ＿ＰＡＲＡＭレジスタ３５に設定する。書き込みデータは、予め内蔵ＳＲＡＭ６上のフラッシュ書き込み用バッファ領域に転送しておく。バッファの先頭アドレスは（Ｒ５値＋４）、バッファサイズ（＝ページサイズ）はＲ７値で示される。この処理は、以下のような命令をモニタコード供給機能１６を使用して実行することによって実現できる。
【０１１０】
ＦＦＦＦ９０００  ＬＤ        Ｒ０，＠（４，Ｒ４）
：（Ｒ４の値＋４）＝Ｈ’ＦＦＦＦ８００４番地を読み出し、読み出してきたデータをＲ０に格納する。すなわち、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭ値（＝書き込みデータ）を読み出してきてＲ０にセットする。
【０１１１】
ＦＦＦＦ９００４  ＳＴ        Ｒ０，＠＋Ｒ５
：Ｒ５の値を＋４してからＲ５値が示す番地にＲ０の値をストアする。すなわち、上記命令で読み出してきた書き込みデータをフラッシュ書き込み用バッファに転送する。
【０１１２】
ＦＦＦＦ９００６  ＡＤＤＩ    Ｒ７，＃−４
：Ｒ７の値を−４する。すなわち、書き込み用バッファのサイズを１ワード分デクリメントする。
【０１１３】
ＦＦＦＦ９００８  ＢＮＥＺ    Ｒ７，ＬＦＦＦＦ９０００
：Ｒ７の値がゼロでない時には、Ｈ’ＦＦＦＦ９０００番地に分岐し、ゼロになるとＨ’ＦＦＦＦ９００Ｃ番地に移る。すなわち、バッファサイズ分の転送が終了するまでループする。
【０１１４】
ＦＦＦＦ９００Ｃ  ＪＭＰ      Ｒ８
：Ｒ８の値が示す番地にジャンプする。すなわち、転送が終了するとステータスレディ待ちプログラムにジャンプする。
【０１１５】
ＦＦＦＦ９００Ｅ  ＮＯＰ
処理内容
（１）フラッシュ書き込み用バッファのデータをＭＯＮ＿ＰＡＲＡＭレジスタ３５で指定されたページに対して書き込みコマンドを発行
（２）ＣＰＵレジスタＲ５，Ｒ７の値を以下の値に設定する。（次のバッファへの転送処理の時にＲ５，Ｒ７の値をそのまま使用できる。）
Ｒ５：フラッシュ書き込み用バッファの先頭アドレス−４
Ｒ７：フラッシュ書き込み用バッファのバイト数（＝ページサイズ）
（３）プログラムの最後に、ＭＯＮ＿ＤＡＴＡレジスタ３４への書き込みを行う。
【０１１６】
実行終了の確認方法
ＭＯＮ＿ＤＡＴＡレジスタ３４の書き込みは、ツール側とデバイス側とのハンドシェイク用である。ＭＯＮ＿ＤＡＴＡレジスタ３４への書き込みがこのプログラムの終了を表す。従って、ＭＯＮ＿ＤＡＴＡレジスタ３４の内容には意味がないが、デバッグツール２は、ＭＯＮ＿ＤＡＴＡレジスタ３４を一旦空読みしてから次の処理を実行する。
【０１１７】
このプログラムの終了は、書き込みが完了していることを示すものではない。書き込みの完了を確認するには「ステータスレディ待ちプログラム」を実行する必要がある。このプログラムの終了後は、フラッシュ書き込み用バッファに次の書き込みデータを書くことができる。
【０１１８】
ステータスレディ待ちプログラム
ステータスレディ待ちプログラムは、ブロック消去プログラムやページ書き込みプログラムを実行した後、消去や書き込みが終了するまで待つためのプログラムである。消去や書き込みが正常終了したかどうかはＭＯＮ＿ＤＡＴＡレジスタ３４に反映する。フラッシュＥ／Ｗイネーブルモードで使用する。
【０１１９】
実行方法
モニタコード供給機能１６を使用して、上記Ｒ１０が示すアドレスに分岐させる。ＭＯＮ＿ＰＡＲＡＭレジスタ３５への設定は必要ない。
【０１２０】
処理内容
（１）フラッシュの消去もしくは書き込み動作が終了するまで待つ
（２）ＭＯＮ＿ＤＡＴＡレジスタ３４にプログラム正常／エラー終了情報を書き込む。
【０１２１】
実行終了の確認方法
デバッグツール２は、ＭＯＮ＿ＤＡＴＡレジスタ３４を読み出し、ＭＳＢビット（ｂｉｔ０）の値を確認することによって、消去や書き込みが正常に行われたかどうかを確認できる。
【０１２２】
Ｅ／Ｗモード終了プログラム
Ｅ／Ｗモード終了プログラムは、フラッシュＥ／Ｗモードイネーブルモードから通常モードに戻るためのプログラムである。内蔵フラッシュ書き換え処理の最後に実行する。
【０１２３】
実行方法
モニタコード供給機能１６を使用して、上記Ｒ１１が示すアドレスに分岐させる。ＭＯＮ＿ＰＡＲＡＭレジスタ３５への設定は必要ない。
【０１２４】
処理内容
（１）通常モードに移行
（２）プログラムの最後に、ＭＯＮ＿ＤＡＴＡレジスタ３４への書き込みを行う。
【０１２５】
実行終了の確認方法
ＭＯＮ＿ＤＡＴＡレジスタ３４の書き込みは、ツール側とデバイス側とのハンドシェイク用である。ＭＯＮ＿ＤＡＴＡレジスタ３４への書き込みがこのプログラムの終了を表す。従って、ＭＯＮ＿ＤＡＴＡレジスタ３４の内容には意味がないが、デバッグツール２は、ＭＯＮ＿ＤＡＴＡレジスタ３４を一旦空読みしてから次の処理を実行する。
【０１２６】
次に動作について説明する。
１．モニタコード供給機能およびＪＴＡＧ制御部の動作
図１２はモニタコード供給機能およびＪＴＡＧ制御部の動作を示すフローチャートであり、まず、上記図５の構成図とこの図１２のフローチャートを参照しながらモニタコード供給機能およびＪＴＡＧ制御部の動作を説明する。
【０１２７】
（１）モニタコードの設定
デバッグツール２は、ＪＴＡＧインタフェース端子１１を通じてＭＯＮ＿ＣＯＤＥレジスタ３３に命令コードを設定する。ＭＯＮ＿ＣＯＤＥレジスタ３３に設定された命令コードは、命令コードバッファ３７に転送されると同時にＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＣＤＢＵＳＹビットに“１”がセットされ、転送完了により“０”がセットされる。１ワード分の命令コードが命令コードバッファ３７のどの段に格納されるかは入力ポインタによって内部制御される。先に設定した順にバッファ＃０〜＃３に格納される。入力ポインタの値は、デバッグモジュールのリセットを行うか、ＭＮＳＴＡＲＴビットに“１”を設定することによりゼロクリアされる（ＳＴ１）。
【０１２８】
（２）命令コードバッファに転送されたことの確認
デバッグツール２は、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＣＤＢＵＳＹビットに“０”がセットされていることを確認する。ＭＮＣＤＢＵＳＹビットに“０”がセットされていれば、ＭＯＮ＿ＣＯＤＥレジスタ３３に設定された命令コードが命令コードバッファ３７に転送されたことを示している。次のＭＯＮ＿ＣＯＤＥレジスタ３３への命令コードの設定は、ＭＮＣＤＢＵＳＹビットに“０”がセットされていることを確認してから行う（ＳＴ２）。
【０１２９】
上記（ＳＴ１）と（ＳＴ２）の処理を最大４回まで任意の回数繰り返す。
なお、命令コードバッファ３７の命令コードは、ＭＯＮ＿ＣＯＤＥレジスタ３３をアクセスしない限り保持される。従って、命令コードバッファ３７に設定した命令コードを再度使用する場合には新規に設定し直す必要がない。ＭＮＳＴＡＲＴビットに“１”を設定すれば、命令コードバッファ３７に保持されている命令コードが再びＣＰＵ３によって実行される。
【０１３０】
（３）パラメータの設定
モニタプログラムがパラメータを必要としない場合にはこの処理は必要ない。
【０１３１】
デバッグツール２は、ＪＴＡＧインタフェース端子１１を通じてＭＯＮ＿ＰＡＲＡＭレジスタ３５にパラメータを設定する。ＭＯＮ＿ＰＡＲＡＭレジスタ３５に設定されたパラメータは、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９に転送されると同時にＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＰＲＭＶＬＤビットに“１”がセットされる。ＣＰＵ３がＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９を読み出すとＭＮＰＲＭＶＬＤビットに“０”がセットされる。ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９の内容は、ＭＯＮ＿ＰＡＲＡＭレジスタ３５の設定を行わない限り保持され、同じパラメータを何度も使用する場合は、新規に設定し直す必要はない（ＳＴ３）。
【０１３２】
（４）モニターコード供給のスタート
デバッグツール２は、ＪＴＡＧインタフェース端子１１を通じてＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”をセットする。ＭＮＳＴＡＲＴビットに“１”がセットされることにより、ＣＰＵ３は命令コードバッファ３７の内容をフェッチできるようになる（ＳＴ４）。
【０１３３】
（５）スタート要求の解除
デバッグツール２は、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“０”をセットする。
【０１３４】
（６）モニタコードがフェッチされたことの確認
デバッグツール２は、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＣＤＢＵＳＹビットに“０”がセットされていることを確認する。ＭＮＣＤＢＵＳＹビットに“０”がセットされていれば、命令コードバッファ３７へ設定した全ての命令のフェッチが完了したことを示す。
【０１３５】
（７）ＭＯＮ＿ＰＡＲＡＭが使用されたことを確認
この処理は、パラメータ設定を行った場合のみ必要である。
【０１３６】
デバッグツール２は、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＰＲＭＶＬＤビットに“０”がセットされていることを確認する。ＭＮＰＲＭＶＬＤビットに“０”がセットされていれば、ＣＰＵ３がＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９を読み出したことを示している。
【０１３７】
（８）ＦｒｏｎｔＭＯＮ＿ＤＡＴＡに書き込みがあったことの確認
この処理は、ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８への書き込みをモニタプログラムが行う場合にのみ必要である。
【０１３８】
デバッグツール２は、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＤＴＶＬＤビットに“１”がセットされていることを確認する。ＭＮＤＴＶＬＤビットに“１”がセットされていれば、ＣＰＵ３がＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込みを行ったことを示している。
【０１３９】
（９）ＦｒｏｎｔＭＯＮ＿ＤＡＴＡの読み出し
この処理は、ＦｒｏｎｔＭＯＮ＿ＤＡＴＡ３８への書き込みをモニタプログラムが行う場合にのみ必要である。
【０１４０】
デバッグツール２がＪＴＡＧインタフェース端子１１を通じてＭＯＮ＿ＤＡＴＡレジスタ３４を読み出すと、ＭＮＤＴＶＬＤビットは自動的にクリアされる。ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８の内容は、ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８への書き込みを行わない限り保持されている（ＳＴ９）。
【０１４１】
２．内蔵フラッシュメモリの書き換え動作
図１３は内蔵フラッシュメモリの書き換え動作の概要を示すフローチャートであり、次に、この図１３のフローチャートを参照しながら内蔵フラッシュメモリ５の書き換え動作の概要を説明する。
【０１４２】
内蔵フラッシュメモリ５の書き換えは、図５に示したＪＴＡＧ制御部１５およびモニタコード供給機能１６を使用して、図６に示した内蔵フラッシュメモリ５内のブートＲＯＭ領域４２に格納された書き換えプログラムを呼び出すことによって行う。デバッグツール２からの書き込みデータの転送もＪＴＡＧ制御部１５のＭＯＮ＿ＰＡＲＡＭレジスタ３５を使用して転送するものである。
【０１４３】
前処理（ＳＴ１１）
デバッグツール２は、フラッシュ書き換え処理の前に、予め処理を行っておくことが必要になる。
【０１４４】
・セキュリティレベルのチェック
・内蔵フラッシュのブロック構成の情報を読み出しておく
・Ｅ／Ｗモード移行プログラムのエントリアドレスを読み出しておく
保持すべきデータの読み出し（ＳＴ１２）
内蔵フラッシュメモリ５への書き込みではブロック単位の消去を伴う。書き込みを行うブロックの中で保持しなければならないデータがある場合では、この段階でフラッシュＥ／Ｗイネーブルモードになる前に読み出しておく必要がある。
【０１４５】
フラッシュＥ／Ｗイネーブルモード移行（ＳＴ１３）
Ｅ／Ｗモード移行プログラムを実行することにより、通常モードからフラッシュＥ／Ｗイネーブルモードに移行する。
【０１４６】
フラッシュ書き換え（ＳＴ１４）
消去のみを行うか、書き込みを行うかで処理が異なる。それぞれの処理の中で必要なプログラムを実行する。
【０１４７】
「ブロック消去プログラム」
「ページ書き込みプログラム」
「ステータスレディプログラム」
通常モード復帰（ＳＴ１５）
「Ｅ／Ｗモード終了プログラム」を実行することにより、フラッシュＥ／Ｗイネーブルモードから通常モードに復帰する。
【０１４８】
次に図１３に示した前処理（ＳＴ１１）、および保持すべきデータの読み出し（ＳＴ１２）について詳細に説明する。
【０１４９】
デバッグツール２は、起動されるとマイクロコンピュータ１に内蔵されている各種情報をＪＴＡＧ制御部１５およびモニタコード供給機能１６を使用して読み出し、セキュリティコードのチェックを行う。
【０１５０】
（１）ツールＲＯＭ設定済み確認コードの読み出し
(i)デバッグツール２から図５に示すＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＣＯＤＥレジスタ３３に命令コードがセットされる。
【０１５１】
(ii)ＭＯＮ＿ＣＯＤＥレジスタ３３にセットされた命令コードを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、命令コードバッファ３７に転送する。
【０１５２】
ツールＲＯＭ設定済み確認コードを読み出して、ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込みを行うプログラムを、上記(i)，(ii)の処理を４回行って命令コードバッファ３７にセットする。
【０１５３】
(iii)デバッグツール２から図５に示すＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”がセットされる。
【０１５４】
(iv)図５に示したＣＰＵ３は、命令コードバッファ３７に転送されたツールＲＯＭ設定済み確認コードの読み出しプログラムを実行し、以下の処理を行う。
【０１５５】
・図１０に示したツールＲＯＭ領域のＨ’ＦＦ００３ＦＦＣ番地のデータを読み出す。
・読み出したデータをＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８（Ｈ’ＦＦＦＦ８０００番地）に書き込む。
【０１５６】
・Ｈ’ＦＦＦＦ９０００番地に分岐し、次のデバッグツール２から供給される命令コードを待つ。
【０１５７】
(v)ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込まれたデータを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＭＯＮ＿ＤＡＴＡレジスタ３４に転送する。
【０１５８】
(vi)デバッグツール２から図５に示すＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＤＡＴＡレジスタ３４のデータが読み出される。
【０１５９】
(vii)デバッグツール２では、ＭＯＮ＿ＤＡＴＡレジスタ３４のデータによって、次のように処理が分けられる。
【０１６０】
・データがＨ’ＤＦ５３４４４９であれば、次の（２）の処理に進む。
・データがＨ’ＤＦ５３４４４９以外であれば、ツールＲＯＭの読み出し処理を終了する。
【０１６１】
（２）セキュリティコードの読み出し
(i)セキュリティコード格納領域の先頭アドレスの読み出し
読み出し番地をツールＲＯＭ領域のＨ’ＦＦ００３ＦＦ４番地に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１０に示した「セキュリティコード格納領域の先頭アドレス」を読み出す。
【０１６２】
(ii)セキュリティコードのバイト数、セキュリティのレベルの読み出し
読み出し番地をツールＲＯＭ領域のＨ’ＦＦ００３ＦＦ０番地に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１０に示した「セキュリティコードのバイト数、セキュリティのレベル」を読み出す。
【０１６３】
(iii)セキュリティコードの読み出し
読み出し番地を上記(i)で得られたセキュリティコード格納領域の先頭アドレスに変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、「セキュリティコード」を読み出す。
【０１６４】
なお、セキュリティコードのバイト数が４バイトを越える場合は、上記（１）の(i)〜(vi)と同様な処理を繰り返すことによって全てのセキュリティコードを得る。
【０１６５】
(iv)セキュリティコードのチェック
デバッグツール２は、デバッグツール２を使用しているユーザに対してセキュリティコードをキー入力してもらう。
【０１６６】
デバッグツール２は、キー入力された値と(iii)で得られた値とを比較し、(ii)で得られたセキュリティのレベルとの組合せで次のように処理が分けられる。
【０１６７】
・キー入力された値と(iii)で得られた値とが一致した場合：次の（３）の処理に進む。
【０１６８】
・キー入力された値と(iii)で得られた値とが不一致、かつ、セキュリティレベル＝“０”の場合：デバッグツール２は、デバッグツール２のリセット以外の動作を許可しない。
【０１６９】
・キー入力された値と(iii)で得られた値とが不一致、かつ、セキュリティレベル＝“１”の場合：ユーザが内蔵フラッシュメモリ５の全領域の消去を実行しない限り、デバッグツール２の動作を許可しない。
【０１７０】
このように、セキュリティチェックを行うことによって、内蔵フラッシュメモリ５上のプログラムやデータを安易に他人に読み出されたり書き換えされたりできないようにすることができる。
【０１７１】
（３）内蔵フラッシュ情報の読み出し
(i)内蔵フラッシュ情報格納領域の先頭アドレスの読み出し
読み出し番地をツールＲＯＭ領域のＨ’ＦＦ００３ＦＥ８番地に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１０に示した「内蔵フラッシュ情報格納領域の先頭アドレス」を読み出す。
【０１７２】
(ii)Ｅ／Ｗモード移行プログラムのエントリアドレスの読み出し
読み出し番地を上記(i)で得られた内蔵フラッシュ情報格納領域の先頭アドレスに変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１１に示した「Ｅ／Ｗモード移行プログラムのエントリアドレス」を読み出す。
【０１７３】
(iii)ブロック数の読み出し
読み出し番地を上記(i)で得られた内蔵フラッシュ情報格納領域の先頭アドレス＋４に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１１に示した「ブロック数」を読み出す。
【０１７４】
(iv)各ブロックの先頭アドレスとバイト数の読み出し
読み出し番地を上記(i)で得られた内蔵フラッシュ情報格納領域の先頭アドレス＋８に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１１に示した「ブロック０の先頭アドレス」を読み出す。
【０１７５】
そして、読み出し番地を４ずつ増加させながら上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１１に示した「各ブロックの先頭アドレスおよびバイト数」を読み出す。
【０１７６】
読み出す領域は、(iii)で得られたブロック数から次のように計算することができる。
「(i)で得られた先頭アドレス＋８」〜「(i)で得られた先頭アドレス＋（８×ｎ＋Ｈ’０Ｃ）」、ただし、ｎ＝（(iii)で得られたブロック数−１）
(v)フラッシュ書き換え用テンポラリ領域の読み出し
読み出し番地を上記(i)で得られた内蔵フラッシュ情報格納領域の先頭アドレス＋（８×ｎ＋Ｈ’１０）に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１１に示した「フラッシュ書き換え用テンポラリ領域の先頭アドレス」を読み出す。
【０１７７】
そして、読み出し番地を上記(i)で得られた内蔵フラッシュ情報格納領域の先頭アドレス＋（８×ｎ＋Ｈ’１４）に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１１に示した「フラッシュ書き換え用テンポラリ領域のバイト数」を読み出す。
【０１７８】
内蔵フラッシュメモリ５の消去および書き込みを行う場合には、フラッシュ書き換えプログラムの格納や書き込みデータのバッファ用として、内蔵ＳＲＡＭ６の一部を使用する。これをフラッシュ書き換え用テンポラリ領域と言う。この領域は、デバッグを行うユーザが使用する領域であるため、デバッグツール２は内蔵フラッシュメモリ５の消去および書き込みを行う前に、ユーザが使用している内蔵ＳＲＡＭ６上のデータを退避する必要がある。デバッグツール２は(v)で得られたフラッシュ書き換え用テンポラリ領域のデータを使用して退避処理を行い、内蔵フラッシュメモリ５の消去および書き込み処理を行った後に復帰処理を行う。
【０１７９】
(vi)フラッシュ書き込み用バッファのバイト数の読み出し
読み出し番地を上記(i)で得られた内蔵フラッシュ情報格納領域の先頭アドレス＋（８×ｎ＋Ｈ’１８）に変更して、上記（１）の(i)〜(vi)と同様な処理を行うことによって、図１１に示した「フラッシュ書き込み用バッファのバイト数」を読み出す。
【０１８０】
フラッシュ書き込み用バッファとは、フラッシュ書き換え用テンポラリ領域のうちの書き込みデータが格納されるバッファ領域である。内蔵フラッシュメモリ５の書き込みを行う場合には、デバッグツール２はページサイズ単位で書き込み処理をループさせるような制御が必要になる。マイクロコンピュータによって異なるページサイズとなる可能性があるため、(vi)で得られたページサイズ情報を使用して、書き込みデータを生成する。
【０１８１】
図１４は内蔵フラッシュメモリの消去動作を示すフローチャートであり、次に、この図１４のフローチャートを参照しながら内蔵フラッシュメモリ５の消去動作を説明する。なお、この図１４に示すフローチャートは、図１３のフラッシュＥ／Ｗイネーブルモード移行（ＳＴ１３）、フラッシュ書き換え（ＳＴ１４）、および通常モード復帰（ＳＴ１５）において、内蔵フラッシュメモリ５の消去動作のみ行った場合の詳細に相当するものである。
【０１８２】
（４）Ｅ／Ｗモード移行プログラムの実行（Ｅ／Ｗモード移行プログラム実行手段）
(i)デバッグツール２から図５に示すＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＣＯＤＥレジスタ３３にＥ／Ｗモード移行プログラムに分岐する命令コードがセットされる（ＳＴ２１）。
【０１８３】
(ii)ＭＯＮ＿ＣＯＤＥレジスタ３３にセットされた命令コードを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、命令コードバッファ３７に転送する（ＳＴ２２）。
【０１８４】
(iii)デバッグツール２から図５に示すＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”がセットされる（ＳＴ２１）。
【０１８５】
(iv)図５に示したＣＰＵ３は、命令コードバッファ３７に転送されたＥ／Ｗモード移行プログラムに分岐する命令コードを実行し、図６に示したブートＲＯＭ領域４２上にあるＥ／Ｗモード移行プログラムに分岐する（ＳＴ２１）。
【０１８６】
(v)ＣＰＵ３は、Ｅ／Ｗモード移行プログラムを実行し、以下の処理を行う（ＳＴ２２）。
【０１８７】
・ＣＰＵ３の各レジスタに各パラメータをセットする（構成で説明したＥ／Ｗモード移行プログラムの処理内容：Ｒ０〜Ｒ１５を参照）。
【０１８８】
・図６に示したブートＲＯＭ４２上にある書き換えプログラム（Ｅ／Ｗモード移行プログラム、ブロック消去プログラム、ページ書き込みプログラム、ステータスレディ待ちプログラム、およびＥ／Ｗ終了プログラム）を図１に示した内蔵ＳＲＡＭ６上に転送する。この書き換えプログラムの内蔵フラッシュメモリ５内のブートＲＯＭ領域４２上から内蔵ＳＲＡＭ６上への転送は、フラッシュＥ／Ｗモードに移行すると、内蔵フラッシュメモリ５からの読み出し動作を行うことができなくなるため、内蔵フラッシュメモリ５上にあるフラッシュ書き換えプログラムを内蔵ＳＲＡＭ６上に退避するためである。
【０１８９】
・内蔵ＳＲＡＭ６に分岐して、さらに以下の処理を引き続いて実行する。
・図８に示したフラッシュメモリ制御レジスタ６１のＦＥＮＴＲＹビット６２に“１”をセットし、内蔵フラッシュメモリ５をフラッシュＥ／Ｗイネーブルモードに移行させる。
【０１９０】
・図５に示したＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８（Ｈ’ＦＦＦＦ８０００番地）にＨ’００００００００を書き込む。
【０１９１】
・Ｈ’ＦＦＦＦ９０００番地に分岐し、次のデバッグツール２から供給される命令コードを待つ。
【０１９２】
(vi)ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込まれたデータを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＭＯＮ＿ＤＡＴＡレジスタ３４に転送すると共に、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＤＴＶＬＤビットを“１”にセットする（ＳＴ２２）。
【０１９３】
(vii)デバッグツール２は、ＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＤＴＶＬＤビットをチェックし、“１”になったらＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＤＡＴＡレジスタ３４の値を読み出す。読み出したデータのｂｉｔ０値が“０”ならば、次の（２）ブロック消去プログラムの実行に移り、ｂｉｔ０値が“１”ならば、エラー処理（ＳＴ２４）を行う（ＳＴ２３）。
【０１９４】
（５）ブロック消去プログラムの実行（消去プログラム実行手段）
(i)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＰＡＲＡＭレジスタ３５に消去したい内蔵フラッシュメモリ５のブロックに対応するアドレスがセットされる（ＳＴ２５）。
【０１９５】
(ii)ＭＯＮ＿ＰＡＲＡＭレジスタ３５にセットされたアドレスを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９に転送する（ＳＴ２６）。
【０１９６】
(iii)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＣＯＤＥレジスタ３３にブロック消去プログラムに分岐する命令コードがセットされる（ＳＴ２５）。
【０１９７】
(iv)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”がセットされる（ＳＴ２５）。
【０１９８】
(v)ＣＰＵ３は、命令コードバッファ３７に転送されたブロック消去プログラムに分岐する命令コードを実行し、内蔵ＳＲＡＭ６上に退避されたブロック消去プログラムに分岐する（ＳＴ２６）。
【０１９９】
(vi)ＣＰＵ３は、ブロック消去プログラムを実行し、以下の処理を行う（ＳＴ２６）。
・ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９（Ｈ’ＦＦＦＦ８００４番地）を読み出す。
【０２００】
・内蔵フラッシュメモリ５に対して消去コマンドを発行する。
図１５は内蔵フラッシュメモリの消去動作の詳細を示すフローチャートであり、このフローチャートを参照しながら、上記消去コマンドに応じた動作を説明する。
【０２０１】
まず、内蔵フラッシュメモリ５の任意のアドレスにブロックイレーズコマンドデータ（Ｈ’２０２０）を書き込み（ＳＴ４１）、上記ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９から読み出した消去したいブロックに対応するアドレスに応じて、消去対象であるブロックの最終偶数アドレスに確認コマンドデータ（Ｈ’Ｄ０Ｄ０）を書き込む（ＳＴ４２）。そして、図１に示したフラッシュ内部制御回路５ｃによって消去対象であるブロックの消去が開始される（ＳＴ４３）。
【０２０２】
・ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８（Ｈ’ＦＦＦＦ８０００番地）にＨ’００００００００を書き込む。
【０２０３】
・Ｈ’ＦＦＦＦ９０００番地に分岐し、次のデバッグツール２から供給される命令コードを待つ。
【０２０４】
(vii)ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込まれたデータを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＭＯＮ＿ＤＡＴＡレジスタ３４に転送すると共に、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＤＴＶＬＤビットを“１”にセットする（ＳＴ２６）。
【０２０５】
(viii)デバッグツール２は、ＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＤＴＶＬＤビットをチェックし“１”になったらＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＤＡＴＡレジスタ３４のデータを読み出す（ＳＴ２７）。
【０２０６】
（６）ステータスレディ待ちプログラムの実行（ステータスレディ待ちプログラム実行手段）
(i)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＣＯＤＥレジスタ３３にステータスレディ待ちプログラムに分岐する命令コードがセットされる（ＳＴ２８）。
【０２０７】
(ii)ＭＯＮ＿ＣＯＤＥレジスタ３３にセットされた命令コードを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、命令コードバッファ３７に転送する（ＳＴ２９）。
【０２０８】
(iii)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”がセットされる（ＳＴ２８）。
【０２０９】
(iv)ＣＰＵ３は、命令コードバッファ３７に転送されたステータスレディ待ちプログラムに分岐する命令コードを実行し、内蔵ＳＲＡＭ６上に退避されたステータスレディ待ちプログラムに分岐する（ＳＴ２９）。
【０２１０】
(v)ＣＰＵ３は、ステータスレディ待ちプログラムを実行し、以下の処理を行う（ＳＴ２９）。
【０２１１】
・図７に示したフラッシュレディステータスレジスタ５１を読み出し、ＦＳＴＡＴビットが“１”になったら、ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８（Ｈ’ＦＦＦＦ８０００番地）にＨ’００００００００を書き込み、ＦＳＴＡＴビットが所定の一定期間に“１”にならなければ、ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８（Ｈ’ＦＦＦＦ８０００番地）にＨ’８０００００００を書き込む。
【０２１２】
(vi)ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込まれたデータを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＭＯＮ＿ＤＡＴＡレジスタ３４に転送すると共に、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＤＴＶＬＤビットを“１”にセットする（ＳＴ２９）。
【０２１３】
(vii)デバッグツール２は、ＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＤＴＶＬＤビットをチェックし“１”になったらＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＤＡＴＡレジスタ３４のデータを読み出す。読み出したデータのｂｉｔ０値が“０”ならば、次の(viii)の実行に移り、ｂｉｔ０値が“１”ならば、エラー処理（ＳＴ３１）を行う（ＳＴ３０）。
【０２１４】
(viii)デバッグツール２によって、消去したいブロック数分だけ、上記ＳＴ２５からＳＴ３０の処理を繰り返す（ＳＴ３２）。
【０２１５】
（７）Ｅ／Ｗモード終了プログラムの実行（Ｅ／Ｗモード終了プログラム実行手段）
(i)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＣＯＤＥレジスタ３３にＥ／Ｗモード終了プログラムに分岐する命令コードがセットされる（ＳＴ３３）。
【０２１６】
(ii)ＭＯＮ＿ＣＯＤＥレジスタ３３にセットされた命令コードを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、命令コードバッファ３７に転送する（ＳＴ３４）。
【０２１７】
(iii)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”がセットされる（ＳＴ３３）。
【０２１８】
(iv)ＣＰＵ３は、命令コードバッファ３７に転送されたＥ／Ｗモード終了プログラムに分岐する命令コードを実行し、内蔵ＳＲＡＭ６上に退避されたＥ／Ｗモード終了プログラムに分岐する（ＳＴ３４）。
【０２１９】
(v)ＣＰＵ３は、Ｅ／Ｗモード終了プログラムを実行し、以下の処理を行う（ＳＴ３４）。
【０２２０】
・図８に示したフラッシュメモリ制御レジスタ６１のＦＥＮＴＲＹビット６２に“０”を書き込み、内蔵フラッシュメモリ５を通常モードに移行させる。
【０２２１】
・ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８（Ｈ’ＦＦＦＦ８０００番地）にＨ’００００００００を書き込む。
【０２２２】
(vi)ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込まれたデータを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＭＯＮ＿ＤＡＴＡレジスタ３４に転送すると共に、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＤＴＶＬＤビットを“１”にセットする（ＳＴ３４）。
【０２２３】
(vii)デバッグツール２は、ＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＤＴＶＬＤビットをチェックし、“１”になったらＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＤＡＴＡレジスタ３４のデータを読み出す（ＳＴ３５）。
【０２２４】
図１６は内蔵フラッシュメモリの書き込み動作を示すフローチャートであり、次に、この図１６のフローチャートを参照しながら内蔵フラッシュメモリ５の書き込み動作を説明する。なお、この図１６に示すフローチャートは、図１３のフラッシュＥ／Ｗイネーブルモード移行（ＳＴ１３）、フラッシュ書き換え（ＳＴ１４）、および通常モード復帰（ＳＴ１５）において、内蔵フラッシュメモリ５の消去および書き込み動作を行った場合の詳細に相当するものである。
【０２２５】
（４）Ｅ／Ｗモード移行プログラムの実行（Ｅ／Ｗモード移行プログラム実行手段）
この動作は、図１４に示した内蔵フラッシュメモリ５の消去動作の（ＳＴ２１）〜（ＳＴ２４）と同一である。
【０２２６】
（５）ブロック消去プログラムの実行（消去プログラム実行手段）
この動作は、図１４に示した内蔵フラッシュメモリ５の消去動作の（ＳＴ２５）〜（ＳＴ２７）と同一である。
【０２２７】
（６）内蔵フラッシュメモリへの書き込みデータの転送
本来ならば、（ＳＴ２７）の後は、消去が終了したかどうかをステータスレディ待ちプログラムを実行して検証すべきであるが、消去に要する時間を利用して、内蔵フラッシュメモリ５への書き込みデータを内蔵ＳＲＡＭ６上のフラッシュ書き込み用バッファに転送する。以下にその動作を説明する。
【０２２８】
(i)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＣＯＤＥレジスタ３３に書き込みデータ転送プログラムの命令コードがセットされる（ＳＴ５１）。
【０２２９】
(ii)ＭＯＮ＿ＣＯＤＥレジスタ３３にセットされた命令コードを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、命令コードバッファ３７に転送する（ＳＴ５２）。
【０２３０】
上記(i)(ii)の処理を４回行って、書き込みデータ転送プログラムを命令コードバッファ３７にセットする。書き込みデータ転送プログラムとは、内蔵フラッシュメモリに書き込みたいデータをデバッグツール２から内蔵ＳＲＡＭ６上のフラッシュ書き込み用バッファに転送するためのプログラムである（構成のページ書き込みプログラムの実行方法を参照）。
【０２３１】
(iii)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＰＡＲＡＭレジスタ３５に書き込みデータが３２ビット分セットされる（ＳＴ５１）。
【０２３２】
(iv)ＭＯＮ＿ＰＡＲＡＭレジスタ３５にセットされた書き込みデータを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９に転送する（ＳＴ５２）。
【０２３３】
(v)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”がセットされる（ＳＴ５１）。
【０２３４】
(vi)ＣＰＵ３は、命令コードバッファ３７にセットされた書き込みデータ転送プログラムを実行し、以下の処理を行う（ＳＴ５２）。
【０２３５】
・ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９（Ｈ’ＦＦＦＦ８００４番地）を読み出す。
【０２３６】
・読み出した書き込みデータを内蔵ＳＲＡＭ６上のフラッシュ書き込み用バッファに書き込む。
【０２３７】
・書き込み先のアドレスを＋４する。
・Ｈ’ＦＦＦＦ９０００番地に分岐し、新たな命令コードが供給されるのを待つ。
【０２３８】
(iii)〜(vi)の処理を繰り返すことによって、１ページ（＝２５６バイト）分の書き込みデータを内蔵ＳＲＡＭ６上のフラッシュ書き込み用バッファに転送する。最終ループの(vi)の処理で、最後にステータスレディ待ちプログラムに分岐する。
【０２３９】
（７）ステータスレディ待ちプログラムの実行（ステータスレディ待ちプログラム実行手段）
この動作は、図１４に示した内蔵フラッシュメモリ５の消去動作の（ＳＴ２８）〜（ＳＴ３１）と同一である。
【０２４０】
（８）ページ書き込みプログラムの実行（書き込みプログラム実行手段）
(i)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＰＡＲＡＭレジスタ３５に書き込み先のアドレスがセットされる（ＳＴ５３）。
【０２４１】
(ii)ＭＯＮ＿ＰＡＲＡＭレジスタ３５にセットされたアドレスを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９に転送する（ＳＴ５４）。
【０２４２】
(iii)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＣＯＤＥレジスタ３３にページ書き込みプログラムに分岐する命令コードがセットされる（ＳＴ５３）。
【０２４３】
(iv)デバッグツール２からＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＳＴＡＲＴビットに“１”がセットされる（ＳＴ５３）。
【０２４４】
(v)ＣＰＵ３は、命令コードバッファ３７に転送されたページ書き込みプログラムに分岐する命令コードを実行し、内蔵ＳＲＡＭ６上に退避されたページ書き込みプログラムに分岐する（ＳＴ５４）。
【０２４５】
(vi)ＣＰＵ３は、ページ書き込みプログラムを実行し、以下の処理を行う（ＳＴ５４）。
【０２４６】
・ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９（Ｈ’ＦＦＦＦ８００４番地）を読み出す。
【０２４７】
・内蔵フラッシュメモリ５に対してページ書き込みコマンドを発行する。
図１７は内蔵フラッシュメモリの書き込み動作の詳細を示すフローチャートであり、このフローチャートを参照しながら、上記ページ書き込みコマンドに応じた動作を説明する。
【０２４８】
まず、内蔵フラッシュメモリ５の任意のアドレスにページプログラムコマンドデータ（Ｈ’４１４１）を書き込む（ＳＴ８１）。フラッシュ書き込み用バッファの先頭１６ビット分のデータを読み出し、ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ３９から読み出した値を書き込み先アドレスとして書き込みを行う（ＳＴ８２）。フラッシュ書き込み用バッファから読み出し先のアドレスとフラッシュへの書き込み先アドレスを順次＋２ずつ増加しながら（ＳＴ８３）、１ページ分（＝２５６バイト）の書き込みを行う（ＳＴ８２〜ＳＴ８４）。１ページ分の書き込みが終了すると、図１に示したフラッシュ内部制御回路５ｃによって１ページ分のデータの内蔵フラッシュメモリ５への書き込みが開始される（ＳＴ８５）。
【０２４９】
・ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８（Ｈ’ＦＦＦＦ８０００番地）にＨ’００００００００を書き込む。
【０２５０】
・Ｈ’ＦＦＦＦ９０００番地に分岐し、次のデバッグツール２から供給される命令コードを待つ。
【０２５１】
(vii)ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ３８に書き込まれたデータを、ＪＴＡＧ制御部１５およびモニタコード供給機能１６の機能により、ＭＯＮ＿ＤＡＴＡレジスタ３４に転送すると共に、ＭＯＮ＿ＡＣＣＥＳＳレジスタ３６のＭＮＤＴＶＬＤビットを“１”にセットする（ＳＴ５４）。
【０２５２】
(viii)デバッグツール２は、ＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＡＣＣＥＳＳレジスタ３６を読み出して、ＭＮＤＴＶＬＤビットをチェックし、“１”になったらＪＴＡＧインタフェース端子１１を介してＭＯＮ＿ＤＡＴＡレジスタ３４の値を読み出す（ＳＴ５５）。
【０２５３】
（９）内蔵フラッシュメモリへの書き込みデータの転送
この動作は、（６）内蔵フラッシュメモリへの書き込みデータの転送と同一である（ＳＴ５６）。
【０２５４】
（１０）ステータスレディ待ちプログラムの実行（ステータスレディ待ちプログラム実行手段）
この動作は、（７）ステータスレディ待ちプログラムの実行と同一である（ＳＴ５６）〜（ＳＴ５９）。
【０２５５】
そして、必要なページ数分だけＳＴ５３〜ＳＴ５８の処理を繰り返し（ＳＴ６０）、必要なブロック数分だけＳＴ２５〜ＳＴ６０の処理を繰り返す（ＳＴ３２）。
【０２５６】
（１１）Ｅ／Ｗモード終了プログラムの実行（Ｅ／Ｗモード終了プログラム実行手段）
この動作は、図１４に示した内蔵フラッシュメモリ５の消去動作の（ＳＴ３３）〜（ＳＴ３５）と同一である。
【０２５７】
なお、上記実施の形態１では、図９に示したように、ツールＲＯＭ領域２４、および書き換えプログラムを内蔵フラッシュメモリ５内のブートＲＯＭ領域４２に設け、セキュリティコード格納領域２５および内蔵フラッシュ情報格納領域２６を任意の空間に設けた。しかし、これらの領域は、ＣＰＵ３からアクセスできる空間であればどの領域に置いても良く、ただし、これらの領域を内蔵フラッシュメモリ５に設けると、マイクロコンピュータ１のチップの製作後に、情報を書き込んだり、書き換えたりすることが可能となる利点がある。
【０２５８】
書き換えプログラムについては、格納場所を内蔵フラッシュメモリ５ではなく、マスクＲＯＭに格納してもよく、この場合には、内蔵フラッシュメモリ５の書き換えの際に内蔵ＳＲＡＭ６上に退避する必要がなく、処理が簡単になるという効果がある。
【０２５９】
なお、上記実施の形態１では、ツールＲＯＭ領域２４内の情報、セキュリティコード格納領域２５内の情報、および内蔵フラッシュ情報格納領域２６内の情報を区別したが、これら３つの情報をまとめて内蔵フラッシュ情報としても良い。
【０２６０】
以上のように、この実施の形態１によれば、デバッグツール２から直接に内蔵フラッシュメモリ５の書き換え制御を行うことができ、デバッグの作業効率を高くすることができるマイクロコンピュータが得られる効果がある。
【符号の説明】
【０２６１】
１  マイクロコンピュータ、２  デバッグツール、３  ＣＰＵ、４  デバッグモジュール、５  内蔵フラッシュメモリ、５ａ  ＦＰ端子、５ｂ  ＯＲ回路（書き換え許可手段）、５ｃ  フラッシュ内部制御回路（書き換え許可手段）、６  内蔵ＳＲＡＭ、７  内蔵周辺Ｉ／Ｏ、８  バス制御回路、９  内部バス、９ａ  アドレスバス、９ｂ  データバス、１１  ＪＴＡＧインタフェース端子（インタフェース，シリアルインタフェース）、１２  端子、１３ａ  デバッグトラップ命令実行機能、１３ｂ  プログラムカウンタ、１３ｃ  プログラムカウンタ退避用レジスタ、１３ｄ  ＰＳＷレジスタ、１３ｅ  ＰＳＷ退避用レジスタ、１３ｆ  汎用レジスタ、１４  実行後ＰＣブレーク機能、１５  ＪＴＡＧ制御部、１６  モニタコード供給機能、１７  アクセスブレーク機能、１８  実行前ＰＣブレーク機能、１９  デバッグ割り込み要求、２１  デバッグモジュール用内蔵Ｉ／Ｏ領域、２２  デバッグモジュール用制御レジスタ領域、２３  モニタコード供給領域、２４  ツールＲＯＭ領域、２６  内蔵フラッシュ情報格納領域、３１  ＴＡＰコントローラ、３２  命令レジスタ、３３  ＭＯＮ＿ＣＯＤＥレジスタ（第１のレジスタ）、３４  ＭＯＮ＿ＤＡＴＡレジスタ（第２のレジスタ）、３５  ＭＯＮ＿ＰＡＲＡＭレジスタ（第３のレジスタ）、３６  ＭＯＮ＿ＡＣＣＥＳＳレジスタ、３７  命令コードバッファ、３８  ＦｒｏｎｔＭＯＮ＿ＤＡＴＡレジスタ、３９  ＦｒｏｎｔＭＯＮ＿ＰＡＲＡＭレジスタ、４１  ユーザ領域、４２  ブートＲＯＭ領域、５１  フラッシュレディステータスレジスタ、５２  ＦＳＴＡＴビット、６１  フラッシュメモリ制御レジスタ、６２  ＦＥＮＴＲＹビット。
【図１】
2010102743.tif 000003
【図２】
2010102743.tif 000004
【図３】
2010102743.tif 000005
【図４】
2010102743.tif 000006
【図５】
2010102743.tif 000007
【図６】
2010102743.tif 000008
【図７】
2010102743.tif 000009
【図８】
2010102743.tif 000010
【図９】
2010102743.tif 000011
【図１０】
2010102743.tif 000012
【図１１】
2010102743.tif 000013
【図１２】
2010102743.tif 000014
【図１３】
2010102743.tif 000015
【図１４】
2010102743.tif 000016
【図１５】
2010102743.tif 000017
【図１６】
2010102743.tif 000018
【図１７】
2010102743.tif 000019