(57)【特許請求の範囲】
【請求項１】
マイクロコンピュータのメモリ空間に配置された少なくとも１つの書き換え可能な不揮発性メモリと、
マイクロコンピュータ立上げ用の初期プログラム、およびこの初期プログラムを前記不揮発性メモリに転送するための転送プログラムを格納するブートＲＯＭと、
ＲＡＭと、
少なくとも、前記不揮発性メモリに何もプログラムが格納されていないときに、前記初期プログラムを前記転送プログラムに基づいて前記不揮発性メモリに転送し、その後、ブートＲＯＭをマイクロコンピュータのメモリ空間から排除する制御手段とを備えており、
前記不揮発性メモリは、複数のブロックに分割されており、データを上書きするために当該領域のデータの消去が必要で、しかも、ブロック単位で消去を行うものであり、
前記各ブロックの中には、プログラム領域として使用されるブロックと、データ領域として使用されるブロックとがあり、前記不揮発性メモリのプログラム領域には割り込み処理のプログラムが格納され、
前記制御手段は、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、上記不揮発性メモリのデータ領域の更新中であるか否かを判定し、更新中であれば、当該不揮発性メモリに対して更新動作を中断するコマンドを発行し、更新中であるか否かに拘わらず、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能であり、さらに、割り込み処理が終了すると、更新処理の中断中か否かを判定し、中断中であれば、上記不揮発性メモリに対して、書き込み／消去を再開するコマンドを発行すると共に、
前記不揮発性メモリは、この不揮発性メモリに格納されたプログラムを前記ＲＡＭに転送するための転送プログラムを格納しており、
前記制御手段は、さらに、前記ＲＡＭに格納されたプログラムを実行可能であり、前記転送プログラムに基づいて、前記不揮発性メモリに格納されたプログラムをＲＡＭに転送し、このＲＡＭに格納されたプログラムを実行するときに、前記初期プログラムに含まれる割り込み処理の先頭番地を不揮発性メモリ上からＲＡＭ上に移動させるとともに、前記ＲＡＭに転送されて格納されたプログラムに基づいて、前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を行うことを特徴とする不揮発性メモリ内蔵マイクロコンピュータ。
【請求項２】
ＲＡＭと、
マイクロコンピュータのメモリ空間に配置され、割り込み処理の先頭番地、および格納した第１プログラムを前記ＲＡＭに転送するための転送プログラムを格納する少なくとも１つの書き換え可能な不揮発性メモリと、
前記ＲＡＭに格納されたプログラムを実行可能であり、前記転送プログラムに基づいて、前記第１プログラムを不揮発性メモリからＲＡＭに転送し、このＲＡＭに格納された第１プログラムを実行するときに、前記割り込み処理の先頭番地を不揮発性メモリ上からＲＡＭ上に移動させるとともに、前記ＲＡＭに格納された第１プログラムに基づいて、前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を行う制御手段とを備え、
前記不揮発性メモリは、複数のブロックに分割されており、データを上書きするために当該領域のデータの消去が必要で、しかも、ブロック単位で消去を行うものであり、
前記各ブロックの中には、プログラム領域として使用されるブロックと、データ領域として使用されるブロックとがあり、前記不揮発性メモリのプログラム領域には割り込み処理のプログラムが格納され、
前記制御手段は、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、上記不揮発性メモリのデータ領域の更新中であるか否かを判定し、更新中であれば、当該不揮発性メモリに対して更新動作を中断するコマンドを発行し、更新中であるか否かに拘わらず、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能であり、さらに、割り込み処理が終了すると、更新処理の中断中か否かを判定し、中断中であれば、上記不揮発性メモリに対して、書き込み／消去を再開するコマンドを発行することを特徴とする不揮発性メモリ内蔵マイクロコンピュータ。
【請求項３】
プログラム領域とデータ領域とが同一の前記不揮発性メモリ上に設定され、前記プログラム領域には同一の不揮発性メモリのデータ領域を使用することを指令する第２プログラムが格納され、前記制御手段は、前記第２プログラムに基づいて、前記データ領域をデータ格納用として使用するものであることを特徴とする請求項１または２に記載の不揮発性メモリ内蔵マイクロコンピュータ。
【請求項４】
前記制御手段は、前記ＲＡＭに格納されたプログラムに基づいて、前記不揮発性メモリまたはＲＡＭの所定領域からデータを読み出し、このデータを前記不揮発性メモリの所定領域に書き込むことを特徴とする請求項１または２に記載の不揮発性メモリ内蔵マイクロコンピュータ。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、例えばＥＥＰＲＯＭ、フラッシュメモリあるいはＦｅＲＡＭなどの書き換え可能な不揮発性メモリを内蔵した不揮発性メモリ内蔵マイクロコンピュータに関するものである。
【０００２】
【従来の技術】
不揮発性メモリ内蔵マイクロコンピュータである例えば１チップマイクロコンピュータ（以下、１チップマイコンと称する）としては、従来からＥＥＰＲＯＭ内蔵の１チップマイコンが知られており、このマイコンはＩＣカード用として広く普及している。このＩＣカード用の１チップマイコンのメモリマップは、例えば図１６のようになっている。
【０００３】
このメモリマップにおいては、アドレス００００Ｈ〜７ＦＦＦＨに３２ｋバイトのＲＯＭ(Read Only Memory)領域が配置され、アドレス８０００Ｈ〜９ＦＦＦＨに８ｋバイトのＥＥＰＲＯＭ領域が配置され、アドレスＦＦ００Ｈ〜ＦＦＦＦＨに２５６バイトのＲＡＭ領域が配置されている。
【０００４】
アドレス００００Ｈはスタートアドレスであり、アドレス００００Ｈ〜０００ＦＨは割り込みベクタに割り当てられている。この１チップマイコンのプログラムは、マイコンがリセット動作をするとＲＯＭの先頭番地に分岐し、また割り込みが発生するとＲＯＭの割り込み処理領域に分岐する。即ち、このマイコンでは、立ち上がり時に、ＲＯＭの先頭番地からプログラムを読み出す。また、割り込み処理はプログラム実行中に頻繁に行われるが、その度にプログラムはＲＯＭの割り込み処理領域に戻る必要がある。したがって、このような１チップマイコンでは、プログラムがあらかじめ上記のＲＯＭ領域に存在している必要がある。なお、ＥＥＰＲＯＭ領域はデータ領域としてもプログラム領域としても使用可能である。
【０００５】
一方、上記ＥＥＰＲＯＭとは別の不揮発性メモリとして、従来、フラッシュメモリを内蔵した１チップマイコンが数多く市場に流通している。このフラッシュメモリ内蔵の１チップマイコンのメモリマップは、例えば図１７のようになっている。
【０００６】
このメモリマップにおいては、アドレス００００Ｈ〜７ＦＦＦＨに３２ｋバイトのフラッシュメモリ領域が配置され、アドレスＦＦ００Ｈ〜ＦＦＦＦＨに２５６バイトのＲＡＭ(Random Access Memory)領域が配置されている。
【０００７】
このメモリマップでは、図１６に示したＥＥＰＲＯＭ内蔵のＩＣカード用の１チップマイコンと同様に、アドレス００００Ｈがスタートアドレス、アドレス００００Ｈ〜０００ＦＨが割り込みベクタに割り当てられている。フラッシュメモリは例えば４ｋバイトごとに８個のブロック（ブロック０〜ブロック７）に分割されおり、これら各ブロック毎の一括消去は物理的に可能である。このような１チップマイコンにおいて、不揮発性メモリであるフラッシュメモリの領域は、全てプログラム領域であることが前提となっている。即ち、フラッシュメモリに格納されたプログラムを実行中には、フラッシュメモリに対して書き込みおよび消去を行わないことが前提となっている。
【０００８】
上記１チップマイコンのフラッシュメモリにプログラムを書き込むには次のような方法がある。
第１の方法は、汎用のＰＲＯＭライターを使用する方法である。この方法においては、ＰＲＯＭライターのソケットにソケットアダプタを介して１チップマイコンを内蔵するデバイスを差し込み、１チップマイコンの外部端子を介して、フラッシュメモリに直接データを書き込むのが一般的である。
【０００９】
第２の方法は、１チップマイコンが内蔵しているシリアルコミュニケーションインターフェイス（以下、ＳＣＩと称する）を介してデータを書き込む方法であり、この方法は一般に汎用されている。
【００１０】
上記第２の方法を実施するための構成を示すと図１８のようになる。同図において、１チップマイコン１０１は、変換ボード１０２を介して、パーソナルコンピュータ（以下、パソコンと称する）１０３と接続される。パソコン１０３に格納されている書き込み用プログラムコードは、データ線１０４を介して変換ボード１０２に転送され、さらに変換ボード１０２からシリアルデータ線１０５を介して１チップマイコン１０１のＳＣＩ１０６に取り込まれる。上記プログラムコードは、ＳＣＩ１０６から内部バス１０７を介してフラッシュメモリ１０８に送られ、ここに書き込まれる。このとき、フラッシュメモリ１０８の制御はＣＰＵ１０９が行い、この制御のためのプログラムはＲＯＭ１１０またはＲＡＭ１１１に格納されている。
【００１１】
【発明が解決しようとする課題】
ところが、図１６に示したＩＣカード用の１チップマイコンの場合、ＥＥＰＲＯＭは主にデータ格納用として使用され、プログラムは、ＥＥＰＲＯＭにも一部格納されるものの、大半は書き換えができないＲＯＭに格納されている。この場合には、ＲＯＭに格納されているプログラムを書き換えることができないため、プログラムの大幅な変更はできない。特に、ＩＣカードにおいてそのＯＳ等がＲＯＭに格納されている場合、ＯＳ等のバージョンアップは困難である。
【００１２】
また、近年、マルチアプリケーション用のＩＣカードが提案されているものの、そのＩＣカードに備えられる１チップマイコンが上記のような構成であれば、ＩＣカード発行後に別のアプリケーションプログラムを多数書き込むことは困難である。
【００１３】
さらに、ＲＯＭに格納されているプログラムとは別に、ＥＥＰＲＯＭ内に追加的にプログラムを格納し、このプログラムに基づいて、同一のＥＥＰＲＯＭをデータ領域として使おうとする場合にも、プログラムを前述のように一旦ＲＯＭ上に分岐してから上記処理を行う必要がある。これは、メモリデバイス（ＥＥＰＲＯＭ）をＣＰＵ側から見た場合、ハード的には、読み出し時と書き込み時とにおいて同じアドレスとなり、同一アドレスに対して読み出しと書き込みとを同時に行なうことができないからである。また、上記追加プログラムとしてのアクセスプログラムはＲＯＭに転送して格納することができないため、ＲＯＭに格納されているアクセスプログラムは自由に変更することができない。したがって、この場合にもあらかじめＲＯＭに格納されているプログラム、即ち書き込み／消去のルーチンを使用することになるため、上記追加プログラムに基づき、その追加プログラムが格納されている同一のＥＥＰＲＯＭに対してデータの書き込み／消去を行うことはできない。
【００１４】
一方、前記のフラッシュメモリ内蔵の１チップマイコンでは、フラッシュメモリがプログラムＲＯＭとの置き換えを前提として設けられている。したがって、同一のフラッシュメモリをプログラム領域とデータ領域とに使用するのは困難である。
【００１５】
また、フラッシュメモリをＲＯＭの代用として使用している場合、ＲＯＭが無いので、プログラムをＲＡＭ上に転送して格納すれば、フラッシュメモリに対して書き込み／消去は実行することができる。しかしながら、このようにプログラムを単にＲＡＭ上に転送することによってフラッシュメモリの一部をデータ領域として使おうとした場合には、次のような問題が発生する。
【００１６】
プログラムをフラッシュメモリからＲＡＭに転送し、このＲＡＭ上のプログラムに基づいてフラッシュメモリのデータ領域に書き込み／消去を行っているときに、他のブロックから割り込み要求信号が発生すると（例えば図１８においてＳＣＩ１０６から割り込み要求信号１１２が発生すると）、プログラムはフラッシュメモリ上の割り込みベクタに分岐しようとする。このときフラッシュメモリは書き込み／消去中であるため、割り込みベクタの読み出しができず、システムは暴走することになる。特に、通常、フラッシュメモリを含む不揮発性メモリにおいて、書き込みおよび消去は時間を要し、ＣＰＵの書き込みおよび読み出しのサイクルと比較して長時間となるという点から、この問題は顕著となる。この点は、書き込み消去のサイクルがＣＰＵのサイクルと同一でない限り、不揮発性メモリ（ＦｅＲＡＭも含む）が何であっても同様である。したがって、従来のフラッシュメモリ内蔵１チップマイコンでは、同一のフラッシュメモリをプログラム領域とデータ領域との両方に使うのは困難である。
【００１７】
また、特開平８−２７８８９５号には、不揮発性メモリ内蔵１チップマイコンにおいて、フラッシュメモリに対してデータの書き込み／消去を行っているときに割り込みが発生した場合、割り込みベクタの飛び先を自動的にＲＡＭや他のメモリに移して暴走をさける構成が開示されている。
【００１８】
しかしながら、この発明は、前述した汎用フラッシュメモリ内蔵マイコンに外部からデータを書き込むときのシステム安定を図る手法である。即ち、この発明においては、フラッシュメモリに格納されたプログラムに基づいて、同一フラッシュメモリのデータ領域に対してデータの書き込み／消去を行う構成については何ら検討されていない。
【００１９】
また、上記発明の構成が有する機能を活性化するためには、マイコンを通常のユーザーモードとは異なるモードにする必要があり、この点においても上記課題を解決するための構成としては不適当である。
【００２０】
また、特開平５−３４２３７４号には、最初にプログラムをダウンロードする手法について開示されている。この本発明は、フラッシュメモリ内蔵マイコンにプログラムデータをダウンロードする手法であり、前記従来の発明と同様、マイコンを通常のユーザーモードとは異なるモードにする必要がある。即ち、この発明の機能を通常モードで使用した場合、割り込みベクタがブートＲＯＭ内に存在しているため、ユーザープログラム（ユーザーが任意に追加したプログラム）内で割り込み処理を自由に変更することができない。
【００２１】
本発明は、上記の問題点を解決するためになされたものであり、不揮発性メモリに新たに格納したプログラムを実行することができる不揮発性メモリ内蔵マイクロコンピュータの提供を目的としている。
【００２２】
また、本発明のさらなる目的は、不揮発性メモリに新たに格納した上記プログラムに基づいて、同一の不揮発性メモリをデータ領域としても使用することができる、即ち、同一の不揮発性メモリをプログラム領域とデータ領域との両方に使用することができる不揮発性メモリ内蔵マイクロコンピュータの提供を目的としている。
【００２３】
【課題を解決するための手段】
上記の課題を解決するために、本発明の不揮発性メモリ内蔵マイクロコンピュータは、マイクロコンピュータのメモリ空間に配置された少なくとも１つの書き換え可能な不揮発性メモリと、マイクロコンピュータ立上げ用の初期プログラム、およびこの初期プログラムを前記不揮発性メモリに転送するための転送プログラムを格納するブートＲＯＭと、ＲＡＭと、少なくとも、前記不揮発性メモリに何もプログラムが格納されていないときに、前記初期プログラムを前記転送プログラムに基づいて前記不揮発性メモリに転送し、その後、ブートＲＯＭをマイクロコンピュータのメモリ空間から排除する制御手段とを備えており、前記不揮発性メモリは、複数のブロックに分割されており、データを上書きするために当該領域のデータの消去が必要で、しかも、ブロック単位で消去を行うものであり、
前記各ブロックの中には、プログラム領域として使用されるブロックと、データ領域として使用されるブロックとがあり、前記不揮発性メモリのプログラム領域には割り込み処理のプログラムが格納され、前記制御手段は、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、上記不揮発性メモリのデータ領域の更新中であるか否かを判定し、更新中であれば、当該不揮発性メモリに対して更新動作を中断するコマンドを発行し、更新中であるか否かに拘わらず、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能であり、さらに、割り込み処理が終了すると、更新処理の中断中か否かを判定し、中断中であれば、上記不揮発性メモリに対して、書き込み／消去を再開するコマンドを発行すると共に、前記不揮発性メモリは、この不揮発性メモリに格納されたプログラムを前記ＲＡＭに転送するための転送プログラムを格納しており、前記制御手段は、さらに、前記ＲＡＭに格納されたプログラムを実行可能であり、前記転送プログラムに基づいて、前記不揮発性メモリに格納されたプログラムをＲＡＭに転送し、このＲＡＭに格納されたプログラムを実行するときに、前記初期プログラムに含まれる割り込み処理の先頭番地を不揮発性メモリ上からＲＡＭ上に移動させるとともに、前記ＲＡＭに転送されて格納されたプログラムに基づいて、前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を行うことを特徴としている。
【００２４】
上記構成によれば、不揮発性メモリに何もプログラムが格納されていないときには、ブートＲＯＭに格納されている転送プログラムに基づいて、制御手段がブートＲＯＭに格納されている初期プログラムを不揮発性メモリに転送し、このプログラムが不揮発性メモリに格納される。その後、ブートＲＯＭがマイクロコンピュータのメモリ空間から排除される。
【００２５】
これにより、製造直後なにもデータが格納されていない不揮発性メモリに対し、ブートＲＯＭから容易に初期プログラムを転送して格納することができる。
【００２６】
また、新たなプログラムを不揮発性メモリに追加的に格納した場合において、制御手段はブートＲＯＭを考慮する必要がなく、この追加プログラムを適切に実行することができる。
【００２７】
さらに、割り込み処理の先頭番地を不揮発性メモリ上に配置することが可能となるので、不揮発性メモリ上において、ＯＳ等を含むプログラムを頻繁に書き換えたり、追加した場合でも、これら新たなプログラムの実行中に割り込み処理を行なうことができる。したがって、プログラムの変更の柔軟性を高めることができる。
【００２８】
また、上記構成によれば、転送プログラムに基づいて不揮発性メモリに格納されているプログラム、例えば外部装置から不揮発性メモリ上にダウンロードされた、例えば不揮発性メモリに対して書き込みおよび消去を行なうためのプログラムがＲＡＭに転送され、このプログラムを実行するときには、割り込み処理の先頭番地が不揮発性メモリ上からＲＡＭ上に移動する。
【００２９】
これにより、不揮発性メモリからＲＡＭに転送され、格納されたプログラムに基づき、不揮発性メモリをデータ領域としてこのデータ領域に対する処理、例えば不揮発性メモリに対するデータの書き込みと消去との少なくとも一方の処理が可能となる。また、この処理は、ＲＡＭ上のプログラムに基づいて行なわれるので、不揮発性メモリ上で別のプログラムが実行中であっても、その処理に影響を与えることなく行なうことができる。
【００３０】
また、ＲＡＭ上において不揮発性メモリから転送されたプログラムを実行中に割り込みが発生した場合であっても、プログラムが暴走することなく、その割り込み処理を適切に行なうことができる。
【００３１】
本発明の他の不揮発性メモリ内蔵マイクロコンピュータは、ＲＡＭと、マイクロコンピュータのメモリ空間に配置され、割り込み処理の先頭番地、および格納した第１プログラムを前記ＲＡＭに転送するための転送プログラムを格納する少なくとも１つの書き換え可能な不揮発性メモリと、前記ＲＡＭに格納されたプログラムを実行可能であり、前記転送プログラムに基づいて、前記第１プログラムを不揮発性メモリからＲＡＭに転送し、このＲＡＭに格納された第１プログラムを実行するときに、前記割り込み処理の先頭番地を不揮発性メモリ上からＲＡＭ上に移動させるとともに、前記ＲＡＭに格納された第１プログラムに基づいて、前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を行う制御手段とを備え、前記不揮発性メモリは、複数のブロックに分割されており、データを上書きするために当該領域のデータの消去が必要で、しかも、ブロック単位で消去を行うものであり、前記各ブロックの中には、プログラム領域として使用されるブロックと、データ領域として使用されるブロックとがあり、前記不揮発性メモリのプログラム領域には割り込み処理のプログラムが格納され、前記制御手段は、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、上記不揮発性メモリのデータ領域の更新中であるか否かを判定し、更新中であれば、当該不揮発性メモリに対して更新動作を中断するコマンドを発行し、更新中であるか否かに拘わらず、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能であり、さらに、割り込み処理が終了すると、更新処理の中断中か否かを判定し、中断中であれば、上記不揮発性メモリに対して、書き込み／消去を再開するコマンドを発行することを特徴としている。
【００３２】
上記構成によれば、不揮発性メモリに格納された第１プログラム、例えば外部装置から不揮発性メモリ上にダウンロードされた、例えば不揮発性メモリに対して書き込みおよび消去を行なうためのユーザープログラムが転送プログラムに基づいてＲＡＭに転送され、ＲＡＭ上において第１プログラムを実行するときには、割り込み処理の先頭番地が不揮発性メモリ上からＲＡＭ上に移動する。
【００３３】
これにより、不揮発性メモリからＲＡＭに転送され、格納された第１プログラムに基づき、不揮発性メモリをデータ領域としてこのデータ領域に対する処理、例えば不揮発性メモリに対するデータの書き込みと消去との少なくとも一方の処理が可能となる。また、この処理は、ＲＡＭ上の第１プログラムに基づいて行なわれるので、不揮発性メモリ上で別のプログラムが実行中であっても、その処理に影響を与えることなく行なうことができる。
【００３４】
また、ＲＡＭ上において第１プログラムを実行中に割り込みが発生した場合であっても、プログラムが暴走することなく、その割り込み処理を適切に行なうことができる。
【００３５】
上記不揮発性メモリ内蔵マイクロコンピュータにおいては、さらに、プログラム領域とデータ領域とが同一の前記不揮発性メモリ上に設定され、前記プログラム領域には同一の不揮発性メモリのデータ領域を使用することを指令する第２プログラムが格納され、前記制御手段は、前記第２プログラムに基づいて、前記データ領域をデータ格納用として使用するものであることを特徴としている。
【００３６】
上記構成によれば、第２プログラムに基づいて、同一の不揮発性メモリをプログラム領域とデータ領域との両方に容易に使用することができる。
【００３７】
具体的には、第２プログラムに基づいて、例えば、不揮発性メモリの指定アドレスと指定データ数とＲＡＭの指定アドレス情報とにより、不揮発性メモリの指定アドレスから指定データ数分のデータを連続的に読み出し、ＲＡＭに格納する。そして、このデータをＲＡＭから連続的に読み出し、不揮発性メモリのデータ領域の指定アドレスに書き込むことができる。
【００３８】
上記不揮発性メモリ内蔵マイクロコンピュータにおいては、さらに、前記制御手段が、前記ＲＡＭに格納されたプログラムに基づいて、前記不揮発性メモリまたはＲＡＭの所定領域からデータを読み出し、このデータを前記不揮発性メモリの所定領域に書き込むことを特徴としている。
【００３９】
上記構成によれば、ＲＡＭに格納されたプログラムに基づいて、不揮発性メモリまたはＲＡＭの所定領域からデータを読み出し、このデータを不揮発性メモリの所定領域に書き込むことができる。また、この処理は、ＲＡＭ上のプログラムに基づいて行なわれるので、不揮発性メモリ上で別のプログラムが実行中であっても、その処理に影響を与えることなく行なうことができる。
【００４０】
上記不揮発性メモリ内蔵マイクロコンピュータにおいては、さらに、前記不揮発性メモリには割り込み処理のプログラムが格納され、前記制御手段が、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能であることを特徴としている。
【００４１】
上記構成によれば、制御手段は、ＲＡＭに格納されたプログラムに基づいて不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、上記の処理を中断するとともに、割り込み処理の先頭番地に基づいて制御を不揮発性メモリに格納された割り込み処理のプログラムに移し、このプログラムを実行する。これにより、割り込みが発生した場合に、その割り込み処理を適切に行なうことができる。
【００４２】
【発明の実施の形態】
〔実施の形態１〕
本発明の実施の一形態を図１ないし図５に基づいて以下に説明する。
本発明の実施の形態における不揮発性メモリ内蔵マイクロコンピュータとしての１チップマイクロコンピュータ（以下、１チップマイコンと称する）は、図２に示す構成を有している。この１チップマイコンは例えばＩＣカードとして構成されている。図２において、１チップマイコン１は、各種プログラムを実行するＣＰＵ２（制御手段）と、ＲＡＭ３と、不揮発性メモリ（半導体不揮発性メモリ）としてのフラッシュメモリ４とブートＲＯＭ５とシリアルコミュニケーションインターフェイス（以下、ＳＣＩと称する）６とを有している。
【００４３】
この１チップマイコン１では、書き換え可能な不揮発性メモリとしてフラッシュメモリ４を内蔵しているが、このフラッシュメモリ４に代えて他の書き換え可能な不揮発性メモリ、例えばＥＥＰＲＯＭやＦｅＲＡＭを内蔵していてもよい。なお、１チップマイコン１をデータの書き換えを前提とした例えばＩＣカードとして構成する場合、フラッシュメモリ（不揮発性メモリ）４は、書き換え可能回数が１０万回程度であることが好ましい。
【００４４】
上記１チップマイコン１の製造直後のメモリマップは、例えば図３のようになっている。即ち、アドレス００００Ｈ〜０ＦＦＦＨに例えば４ｋバイトのブートＲＯＭ領域（ブートＲＯＭ５）が設定され、アドレス０ＦＦＦＨ〜７ＦＦＦＨに例えば３２ｋバイトのフラッシュメモリ領域（フラッシュメモリ４）が配置され、アドレスＦＦ００Ｈ〜ＦＦＦＦＨに例えば２５６バイトのＲＡＭ領域（ＲＡＭ３）が配置されている。
【００４５】
アドレス００００Ｈはスタートアドレスであり、アドレス００００Ｈ〜０００ＦＨは割り込みベクタに割り当てられている。また、フラッシュメモリ４は例えば４ｋバイトごとに８個のブロック（ブロック０〜ブロック７）に分割されている。これら各ブロック毎の一括消去は物理的に可能である。
【００４６】
図３に示す状態では、上記のようにブートＲＯＭ５（ブートＲＯＭ領域）が有効になっており、１チップマイコン１のリセット直後はブートＲＯＭ５に格納されている初期プログラムが実行される。ブートＲＯＭ５には、また、フラッシュメモリ４にプログラムを転送して格納するための転送プログラムが格納されている。割り込み処理の先頭番地はブートＲＯＭ上にあり、割り込み処理のプログラムはブートＲＯＭに格納されている。
【００４７】
上記転送プログラムに基づいて、ブートＲＯＭ５からフラッシュメモリ４への、ブートＲＯＭ５に格納されているプログラムの転送が終了すると、プログラム（制御）をフラッシュメモリ４に分岐させて、ブートＲＯＭ５をメモリ空間から排除する。上記プログラムの転送動作は、フラッシュメモリ４に何もプログラムが格納されていないときに行なわれる。このときのメモリマップは、図４に示すものとなる。このとき、割り込み処理の先頭番地はフラッシュメモリ４上に存在し、割込処理の番地はフラッシュメモリ４に転送されたプログラムの中で自由に設定可能である。
【００４８】
また、上記のように、フラッシュメモリ４にプログラムを転送した後、このプログラムに基づいて同一のフラッシュメモリ４に対してデータの書き込みや消去を行うには、つまり、同一のフラッシュメモリ４をプログラム領域とデータ領域との両方に使用するには、割り込み処理の先頭番地（割り込みベクタ）、およびフラッシュメモリ４のデータ領域に対する書き込み／消去プログラム（第１プログラム）をフラッシュメモリ４からＲＡＭ３に転送し、ここに格納する。
【００４９】
フラッシュメモリ４からＲＡＭ３に転送されるプログラムには、上記のものに加え、さらに詳細には、割り込み処理プログラムに対する前処理プログラム（例えば、フラッシュメモリ４に対する書き込み／消去の中断処理プログラム）、フラッシュメモリ４上の割り込み処理プログラムへの分岐処理プログラム、および割り込み処理終了後に実行される、割り込み処理プログラムに対する後処理プログラム（例えば、フラッシュメモリ４に対する書き込み／消去の再開処理プログラム）が含まれる。
【００５０】
上記処理を行なった後のメモリマップは、図５に示すものとなる。この場合、割り込み処理の先頭番地はＲＡＭ３上にあり、フラッシュメモリ４への書き込み／消去中に割り込みが発生しても、ＲＡＭ３に格納された割り込み処理の先頭番地に基づいて、割り込み処理を開始することができるようになっている。なお、このときにも、図５に示すように、ブートＲＯＭ５はメモリ空間から排除されている。
【００５１】
次に、１チップマイコン１において、電源が投入されてリセット動作を行った直後に、ブートＲＯＭ５から不揮発性メモリとしてのフラッシュメモリ４へ制御が移行する動作を図１のフローチャートに基づいて説明する。
【００５２】
先ず、１チップマイコン１は、電源が投入されると、所定のリセット動作を行う（Ｓ２０１）。このリセット動作が完了すると、ＣＰＵ２は、メモリ空間においてブートＲＯＭ５が有効となるようにセットする（Ｓ２０２）。この結果、        メモリマップは図３に示す構成となる。次に、ＣＰＵ２は、プログラムカウンタをブートＲＯＭ５のアドレスにセットする（Ｓ２０３）。
【００５３】
Ｓ２０３の処理後、１チップマイコン１、即ちＣＰＵ２は、ブートＲＯＭ５に格納されているプログラムの実行を開始する（Ｓ２０４）。
【００５４】
このとき、先ず、ＣＰＵ２は、フラッシュメモリ４に既にブートＲＯＭ５からプログラムが転送されて格納されているか否かを判定する（Ｓ２０５）。この結果、フラッシュメモリ４にプログラムが既に格納されていればＳ２０７に進む一方、まだ格納されていなければ、ブートＲＯＭ５に格納されている転送プログラムに基づいて、ブートＲＯＭ５に格納されているプログラムをフラッシュメモリ４に転送し、ここに書き込む（Ｓ２０６）。
【００５５】
次に、ＣＰＵ２は、そのメモリ空間において、ブートＲＯＭ５を排除する一方、フラッシュメモリ４を有効にセットする（Ｓ２０７）。この結果、メモリマップは、図４に示す構成となる。
【００５６】
次に、ＣＰＵ２は、プログラムカウンタをフラッシュメモリ４のアドレスにセットする（Ｓ２０８）。この処理以後、ＣＰＵ２は、フラッシュメモリ４に格納されたプログラムの実行を開始する（Ｓ２０９）。
【００５７】
その後、フラッシュメモリ４に記憶されているデータの更新を可能とするため、フラッシュメモリ４に格納された転送プログラムに基づいて、フラッシュメモリ４の更新系のプログラム（書き込み／消去プログラム）および割り込みベクタをＲＡＭ３に転送し、格納する（Ｓ２１０）。このときのメモリマップは、図５に示すものとなる。
【００５８】
なお、上記の例では、ブートＲＯＭ５が独立して存在している場合について示したが、ブートＲＯＭ５を有していない構成として、ブートＲＯＭ５に格納すべきプログラムが、予めフラッシュメモリ４に格納されている構成であってもよい。この場合には、上記Ｓ２０２〜Ｓ２０８の動作は不要である。
【００５９】
また、フラッシュメモリ４にユーザーが任意に選択した例えばアプリケーションプログラムや、バージョンアップされたＯＳ等のプログラム（ユーザープログラム）を格納する場合には、先述の図１８によって説明したように、１チップマイコン１を変換ボード１０２を介してパソコン１０３と接続して行なう。この場合、ブートＲＯＭ５またはこれに変わる不揮発性メモリ（フラッシュメモリ４）が有効となり、これに格納された制御プログラムを用いて、パソコン１０３から供給されるユーザープログラムが不揮発性メモリ（フラッシュメモリ４）に書き込まれる。
【００６０】
以上の構成により、ユーザーが任意に例えばアプリケーションプログラムをフラッシュメモリ４内に取り込み、そのアプリケーションプログラムを実行すること、即ちそのアプリケーションプログラムに基づいて、同一のフラッシュメモリ４のデータ領域を書き換えることが可能となる。
【００６１】
また、上記のように、同一のフラッシュメモリ（不揮発性メモリ）４にプログラム領域とデータ領域とを設定可能であることから、これら各領域を別チップとして設ける必要がない。したがって、１チップマイコン１、即ちこの１チップマイコン１からなる例えばＩＣカードを小型化することができる。
【００６２】
〔実施の形態２〕
本発明の実施の他の形態を図６ないし図１５に基づいて以下に説明する。
本実施の形態における１チップマイコンは、図６に示す構成を有している。即ち、１チップマイコン１１は、各種プログラムを実行するＣＰＵ２を備えるとともに、メモリとしてＲＡＭ３と１個の書き換え可能な不揮発性メモリ１４（半導体不揮発性メモリ）とブートＲＯＭ５とを備え、さらに前記ＳＣＩ６を備えている。
【００６３】
上記１チップマイコン１１のメモリ構成は、前記図１にて説明した動作を経た後、図７に示すものとなる。ＲＡＭ３および不揮発性メモリ１４は、ＣＰＵ２のアドレス空間に割り当てられており、ＣＰＵ２から各メモリに対して、読み出しアクセスおよび書き込みアクセスが可能となっている。不揮発性メモリ１４のプログラム領域には、前記ブートＲＯＭ５に格納されていたプログラムが格納される。このプログラムはＣＰＵ２が実行可能である。
【００６４】
不揮発性メモリ１４としては、プログラムに基づいてＣＰＵ２が出力するコマンドによって動作を制御可能なものが使用されている。上記コマンドは、不揮発性メモリ１４を読み出しモードに設定するコマンド、不揮発性メモリ１４を書き込みモードに設定するコマンド、不揮発性メモリ１４を消去モードに設定するコマンド、不揮発性メモリ１４の書き込み／消去を中断するコマンド、不揮発性メモリ１４の書き込み／消去を再開するコマンド、不揮発性メモリ１４の書き込み／消去の終了を監視するコマンドである。
【００６５】
不揮発性メモリ１４は、各々４ｋバイトのブロックＡ〜Ｆにより構成されている。不揮発性メモリ１４に書き込まれているデータの消去は、上記の各ブロック単位にて行われる。
【００６６】
上記ブロックＡには、１チップマイコン１１のシステムプログラムであるオペレーティングシステムやモニタシステムが格納されている。
【００６７】
ブロックＢには、ユーザーアプリケーションプログラムが格納されている。このアプリケーションプログラムからブロックＡのシステムプログラムのコマンドを呼び出すことができる。
【００６８】
ブロックＣ〜Ｅは、データ領域（データ領域１〜３）として使用される。
ブロックＦはバックアップ領域として使用される。このバックアップ領域には、上記データ領域の一部を書き換える場合などに、保存が必要なデータが一時的に格納される。
【００６９】
ＲＡＭ３は、１チップマイコン１１における割り込みベクタ領域と、不揮発性メモリ１４に対するデータの書き込み動作や消去動作を行うためのプログラム、即ち書き込み／消去プログラムを格納するための不揮発性メモリ書き込み／消去プログラム領域と、システムプログラムを実行する際の作業領域となるシステムプログラム作業領域と、ユーザー領域とから構成されている。
【００７０】
割り込みベクタ、および不揮発性メモリ１４に対する書き込み／消去プログラムは、最初、不揮発性メモリ１４のシステムプログラム領域に格納されており、図１において説明したように、システムプログラムに基づいて、あらかじめＲＡＭ３へ転送される。
【００７１】
不揮発性メモリ１４に対する読み出しアクセスおよび書み込みアクセスは図８によって示される。不揮発性メモリ１４へのアクセスは、システムプログラムのコマンドに基づいてＣＰＵ２により行われる。
【００７２】
上記処理（各アクセス）は、システムプログラムからのコマンドの発行（Ｐ１）により開始される。上記コマンドは、コマンドインターフェースによって解析され（Ｐ２）、不揮発性メモリ１４からデータを読み出すコマンドを参照系コマンドとし、不揮発性メモリ１４に対しデ一タを書き込みあるいは消去するコマンド（第２プログラム）を更新系コマンドとして処理する。これら各コマンドは、不揮発性メモリ１４に格納されており、不揮発性メモリ１４上から実行される。
【００７３】
上記の参照系コマンドが発行された場合、不揮発性メモリ１４に対する読み出しルーチン（Ｐ３）に制御が移り、不揮発性メモリ１４のデータ領域を読み出す（Ｐ４）。
【００７４】
一方、更新系コマンドが発行された場合、不揮発性メモリ１４上において、データの書き込み／消去に必要なパラメータ設定の処理を行った後、ＲＡＭ３にあらかじめ格納されている、不揮発性メモリ１４の書き込み／消去ルーチン（Ｐ５）に制御が移る。
【００７５】
即ち、上記の更新系コマンドが発行された場合、本実施の形態の１チップマイコン１１では、単一の不揮発性メモリ１４を使用しているため、このままでは、不揮発性メモリ１４に格納されているプログラムを実行しながら、同一の不揮発性メモリ１４に対するデータの書き込みや消去を行うことができない。そこで、これらの処理を行うときには、上記のようにあらかじめＲＡＭ３に転送して格納されている、不揮発性メモリ１４に対する書き込み／消去ルーチン（Ｐ５）へ制御が移り、不揮発性メモリ１４のデータ領域に対する書き込み／消去動作（Ｐ４）が行われる。
【００７６】
この書き込み／消去動作は、不揮発性メモリ１４からデータを読み出すときに比べ、書き込みにおいて例えば数百倍の時間が必要であり、またブロック単位の消去において秒単位の時間が必要な場合がある。一例をあげると、１バイトの読み出しは数十ｎｓｅｃであるのに対し、１バイトの書き込みは数μｓｅｃ〜数十μｓｅｃ、６４ｋバイトの１ブロック消去では数百ｍｓｅｃ必要である。ここで、例えば１ブロック消去に６００ｍｓｅｃかかるとすると、ブロックを３個消去した場合には約１．８ｓｅｃを要する。
【００７７】
このように書き込み／消去動作は長時間を要するため、不揮発性メモリ１４に対するＲＡＭ３上での書き込み／消去ルーチンの実行中には、割り込みの発生を監視するようにしている。
【００７８】
割り込みが発生すれば、上記書き込み／消去ルーチンを中断して、不揮発性メモリ１４上の割込み処理ルーチンを実行する（Ｐ６）。割り込み処理が終了すると、再びＲＡＭ３上の不揮発性メモリ１４に対する書き込み／消去ルーチンへ制御が戻り、この書き込み／消去動作を再開する。
【００７９】
次に、１チップマイコン１１における不揮発性メモリ１４からデータを連続的に読み出す動作を図９のフローチャートに基づいて説明する。
【００８０】
先ず、不揮発性メモリ１４からの連続的なデータの読み出しを指令する連続読み出しコマンドが発行されると（Ｓ１）、ＣＰＵ２は、このコマンドがシステムプログラムから呼び出したものであるか否かを判定する（Ｓ２）。
【００８１】
この結果、システムプログラムから呼び出したものでなければ、Ｓ１２に分岐して処理を中止する。一方、上記コマンドがシステムプログラムから呼び出したものであった場合、データ読み出し元の不揮発性メモリ１４のアドレスを変数ＳＲＣに設定する（Ｓ３）。
【００８２】
次に、不揮発性メモリ１４からの読み出しデータのＲＡＭ格納アドレスを変数ＤＳＴに設定するとともに（Ｓ４）、不揮発性メモリ１４からのデータ読み出し数を変数ＣＮＴに設定する（Ｓ５）。
【００８３】
次に、データ読み出し数ＣＮＴが０か否かを判定し（Ｓ６）、０であればＳ１３に分岐して処理を中止する。一方、データ読み出し数ＣＮＴが０でなければ、ＣＰＵ２は、不揮発性メモリ１４に対して読み出しモードに設定するコマンドを発行することにより、不揮発性メモリ１４を読み出しモードに設定する（Ｓ７）。
【００８４】
次に、不揮発性メモリ１４のアドレスＳＲＣからデータを読み出し、ＲＡＭ３のアドレスＤＳＴに格納する（Ｓ８）。その後、アドレスＳＲＣとアドレスＤＳＴを次のデータを読み出すためのアドレスに更新し（Ｓ９）、読み出し数ＣＮＴを１減ずる（Ｓ１０）。
【００８５】
次に、不揮発性メモリ１４からのデータの読み出し数、即ち変数ＣＮＴが０か否かを判定することにより、最後までデータを呼び出したかどうかを判断する。この結果、データを最後まで読み出していなければ、Ｓ８〜Ｓ１１の動作を繰り返し、データを最後まで読み出すと処理を終了する（Ｓ１３）。
【００８６】
次に、１チップマイコン１１における不揮発性メモリ１４またはＲＡＭ３の指定された領域から連続的にデータを読み出し、不揮発性メモリ１４の指定された領域ヘデータを書き込む動作を図１０のフローチャートに基づいて説明する。
【００８７】
先ず、不揮発性メモリ１４ヘのデータの連続的な書き込みを指令するコマンドが発行されると（Ｓ２１）、ＣＰＵ２は、このコマンドがシステムプログラムから呼び出したものであるか否かを判定する（Ｓ２２）。
【００８８】
この結果、システムプログラムから呼び出したものでなければ、Ｓ３３に分岐して処理を中止する。一方、上記コマンドがシステムプログラムから呼び出したものであれば、データ読み出し元である不揮発性メモリ１４またはＲＡＭ３のアドレスを変数ＳＲＣに設定する（Ｓ２３）。
【００８９】
次に、不揮発性メモリ１４ヘの書き込みデータの格納アドレスを変数ＤＳＴに設定するとともに（Ｓ２４）、不揮発性メモリ１４へのデータの書き込み数を変数ＣＮＴに設定する（Ｓ２５）。
【００９０】
次に、データ書き込み数ＣＮＴが０か否かを判定し（Ｓ２６）、０であればＳ３４に分岐して処理を終了する。一方、データ書き込み数ＣＮＴが０でなければ、不揮発性メモリ１４の更新中を示すフラグを１に設定する（Ｓ２７）。また、割り込みを禁止とする（Ｓ２８）。
【００９１】
このように、割り込みを禁止するのは、次のＳ２９の動作により制御がＲＡＭ３上のルーチンに移ったときに、割り込みの発生によって不用意に不揮発性メモリ１４上の割り込み処理ルーチンを実行させないためである。ここまでの処理は、不揮発性メモリ１４上のプログラム（不揮発性メモリ１４に格納されているプログラム）によって実行される。
【００９２】
ここで、不揮発性メモリ１４に格納されたプログラムを不揮発性メモリ１４上で実行しながら、データを同一の不揮発性メモリ１４ヘ書き込むことはできない。したがって、この後、あらかじめシステムプログラムに基づいて不揮発性メモリ１４からＲＡＭ３に転送されてここに格納されたプログラム、即ちＲＡＭ内ルーチンに制御を移す（Ｓ２９）。
【００９３】
ＲＡＭ内ルーチンの処理が終了すると、禁止していた割り込みを再び許可し、再び不揮発性メモリ１４上のプログラムに制御を移す（Ｓ３０）。
【００９４】
次に、不揮発性メモリ１４の更新中フラグを０にリセットし（Ｓ３１）、不揮発性メモリ１４に対する書き込み動作を終了する（Ｓ３２）。
【００９５】
次に、図１０におけるＳ２９に示したＲＡＭ内ルーチンの動作を図１１フローチャートに基づいて説明する。ここでの動作は、不揮発性メモリ１４に対するデータの書き込みまたは消去を行うものである。
【００９６】
不揮発性メモリ１４上のプログラムからＲＡＭ３上のプログラムに制御が移ると、先ず、ＣＰＵ２は、プログラムから呼び出したコマンドが書き込みコマンドまたは消去コマンドの何れであるかを判定する（Ｓ４１）。上記書き込みコマンドは、不揮発性メモリ１４のデータ領域へのデータの書き込みを指令するものであり、上記消去コマンドは、不揮発性メモリ１４のデータ領域に書き込まれているデータの消去を指令するものである。
【００９７】
上記判定の結果、書き込みコマンドであれば、ＣＰＵ２は、不揮発性メモリ１４を読み出しモードに設定するコマンドを発行することにより、不揮発性メモリ１４を読み出しモードとする（Ｓ４２）。そして、ＣＰＵ２は、変数ＳＲＣに設定されているアドレスからデータを読み出す（Ｓ４３）。
【００９８】
次に、ＣＰＵ２は、不揮発性メモリ１４を書き込みモードに設定するコマンドを発行することにより、不揮発性メモリ１４を書き込みモードとする（Ｓ４４）。そして、ＣＰＵ２は、変数ＤＳＴに設定されている不揮発性メモリ１４のアドレスヘ、Ｓ４３において読み出したデータを書き込む（Ｓ４５）。これにより、不揮発性メモリ１４ヘの書き込みが開始される。
【００９９】
次に、次回のデータ書き込みのために、ＳＲＣアドレスとＤＳＴアドレスを更新するとともに（Ｓ４６）、書き込み数ＣＮＴを１減じる（Ｓ４７）。
【０１００】
次に、不揮発性メモリ１４ヘのデータ書き込みは時間がかかるため、割り込みを許可し（Ｓ４８）、ＣＰＵ２は、不揮発性メモリ１４への書き込み動作の終了を監視するコマンドを発行することにより、この動作の終了を待つ（Ｓ４９）。上記書き込み動作が終了するまでの間に優先度の高い割り込みが発生すると、後述する図１２の割り込み処理ルーチンヘ制御が移る。
【０１０１】
その後、ＣＰＵ２は、不揮発性メモリ１４ヘの書き込み動作の終了を検出すると、割り込みを禁止する（Ｓ５０）。
【０１０２】
次に、ＣＰＵ２は、今回の不揮発性メモリ１４ヘの書き込み動作でエラーが発生したか否かを判定する（Ｓ５１）。エラー有りと判定した場合、Ｓ５４へ進み、ＣＰＵ２は、不揮発性メモリ１４に対して読み出しモードに設定するコマンドを発行することにより、不揮発性メモリ１４を読み出しモードとし、ＲＡＭ内ルーチンの処理を終了する（Ｓ５５）。
【０１０３】
また、Ｓ５１の判定において、上記エラーが発生せずに不揮発性メモリ１４ヘの書き込み動作が正常に終了した場合、不揮発性メモリ１４に対する処理を指令したコマンドが書き込みコマンドであれば（Ｓ５２）、Ｓ５３に進み、消去コマンドであれば、Ｓ５４に進む。
【０１０４】
Ｓ５３では、不揮発性メモリ１４へのデータの書き込み残の数を示す変数ＣＮＴが０か否かを判定することにより、最後までデータを書き込んだか否かを判定する（Ｓ５３）。このとき、最後までデータを書き込んでいなければ、Ｓ４２〜Ｓ５２の動作を繰り返す。一方、最後までデータを書き込んでいれば、Ｓ５４へ進み、不揮発性メモリ１４を読み出しモードに設定し、ＲＡＭ内ルーチンの動作を終了する（Ｓ５５）。
【０１０５】
次に、図１１に示したＲＡＭ内ルーチンでのＳ４９の動作において不揮発性メモリ１４ヘの書き込み動作の終了を監視しているときに、割り込みが発生した場合の動作を図１２フローチャートに基づいて説明する。
【０１０６】
Ｓ４９のループ内において、割り込みが発生すると、図７に示したＲＡＭ３内の割り込みベクタから、対応する割り込み処理ルーチンのアドレスをＣＰＵ２が読み出す。これにより、制御は不揮発性メモリ１４内に格納された割り込み処理ルーチンヘ移る。
【０１０７】
なお、前述のように、不揮発性メモリ１４からＲＡＭ３へは、割り込み処理の先頭番地（割り込みベクタ）、不揮発性メモリ１４のデータ領域に対する書き込み／消去プログラムに加えて、さらに、割り込み処理プログラムに対する前処理プログラム（例えば、不揮発性メモリ１４に対する書き込み／消去の中断処理プログラム）、不揮発性メモリ１４上の割り込み処理プログラムへの分岐処理プログラム、および割り込み処理終了後に実行される、割り込み処理プログラムに対する後処理プログラム（例えば、不揮発性メモリ１４に対する書き込み／消去の再開処理プログラム）が予め転送されている。
【０１０８】
上記割り込み処理では、先ず、割り込みが発生したとき、不揮発性メモリ１４の更新中、即ち不揮発性メモリ１４に対する書き込み／消去中であるか否かを判定する（Ｓ６１）。不揮発性メモリ１４の更新中であれば、ＣＰＵ２は、不揮発性メモリ１４に対して更新動作を中断するコマンドを発行することにより、その処理を中断する。即ち、ＣＰＵ２は、割り込みベクタの内容から、ＲＡＭ３上に存在する割り込み処理に対する前処理ルーチン（割り込み処理対する前処理の先頭アドレス）へ制御を分岐して、不揮発性メモリ１４に対する書き込み／消去の中断処理を行なう。一方、不揮発性メモリ１４が更新中でない場合は、Ｓ６２の処理をスキップしてＳ６３へ進む。
【０１０９】
Ｓ６３では、ＣＰＵ２が不揮発性メモリ１４に対して、読み出しモードに設定するコマンドを発行することにより、不揮発性メモリ１４を読み出しモードとする。
【０１１０】
ここで、ＣＰＵ２は、不揮発性メモリ１４に格納されている割り込み処理ルーチンを実行できるようになるため、不揮発性メモリ１４上のプログラムヘ制御を移し、即ち不揮発性メモリ１４上に存在する割り込み処理のアドレスへ制御を分岐し、割り込み処理を実行する（Ｓ６４）。
【０１１１】
その後、不揮発性メモリ１４上での上記の割り込み処理が終了すると、再びＲＡＭ３に格納されたプログラムヘ復帰し、ＣＰＵ２は、不揮発性メモリ１４の更新処理の中断中であるか否かを判定する（Ｓ６５）。
【０１１２】
この結果、不揮発性メモリ１４の更新処理の中断中でなければＳ６７へ進み、割り込み処理ルーチンを終了する。また、不揮発性メモリ１４に対する更新処理の中断中であれば、ＣＰＵ２は、不揮発性メモリ１４に対して、書き込み／消去を再開するコマンドを発行することにより、不揮発性メモリ１４の更新処理を再開する（Ｓ６６）。即ち、ＣＰＵ２は、ＲＡＭ３上の、割り込み処理に対する後処理ルーチン（割り込み処理に対する後処理の先頭アドレス）へ制御を分岐し、上記更新処理を再開する。次に、この更新処理が終了すれば、割り込み処理ルーチンを終了する（Ｓ６７）。その後、図１１におけるＳ４９のループに復帰する。
【０１１３】
上記の動作により、不揮発性メモリ１４の更新中に発生した割り込み要因に対して、正確に割り込み処理を実行することが可能になる。
【０１１４】
次に、不揮発性メモリ１４における指定したブロックの消去動作を図１３フローチャートに基づいて説明する。
【０１１５】
先ず、不揮発性メモリ１４に対する消去コマンドが発行されると（Ｓ７１）、ＣＰＵ２は、このコマンドがシステムプログラムから呼び出したものであるか否かを判定する（Ｓ７２）。
【０１１６】
この結果、システムプログラムから呼び出したものでなければ、Ｓ８０に分岐して処理を中止する。一方、上記コマンドがシステムプログラムから呼び出したものであれば、不揮発性メモリ１４における消去するブロックのアドレスを変数ＤＳＴに設定する（Ｓ７３）。次に、ＣＰＵ２は、不揮発性メモリ１４の更新中フラグを１にセットし（Ｓ７４）、その後、割り込みを禁止する（Ｓ７５）。
【０１１７】
このように、割り込みを禁止するのは、次のＳ７６の動作により制御がＲＡＭ３上のルーチンに移ったときに、割り込みの発生によって不用意に不揮発性メモリ１４上の割り込み処理ルーチンを実行させないためである。ここまでの処理は、不揮発性メモリ１４上のプログラムによって実行される。
【０１１８】
ここで、不揮発性メモリ１４上のプログラムを実行しながら、不揮発性メモリ１４の任意のブロックを消去することはできない。したがって、この後、あらかじめシステムプログラムに基づいてＲＡＭ３に転送されてここに格納されたプログラム、即ちＲＡＭ内ルーチンに制御を移す（Ｓ７６）。
【０１１９】
ＲＡＭ内ルーチンの処理が終了すると、禁止していた割り込みを再び許可し、再び不揮発性メモリ１４上のプログラム、即ち不揮発性メモリ１４におけるブロック消去動作に制御を移す（Ｓ７７）。
【０１２０】
次に、不揮発性メモリ１４の更新中フラグを０にリセットし（Ｓ７８）、不揮発性メモリ１４におけるブロック消去動作を終了する（Ｓ７９）。
【０１２１】
上記Ｓ７６におけるＲＡＭ内ルーチンの動作は、前記図１１のフローチャートに示したものである。このフローチャートのＳ４１において、今回は消去コマンドであるので、Ｓ５６に進み、ＣＰＵ２が不揮発性メモリ１４を消去するコマンドを発行することにより、変数ＤＳＴに設定された不揮発性メモリ１４のアドレスを含む１ブロックの消去が開始される。
【０１２２】
次に、不揮発性メモリ１４の１ブロックの消去動作は時間がかかるため、割り込みを許可し（Ｓ４８）、ＣＰＵ２は、割り込みの発生を監視しながら、上記消去動作の完了を待つ（Ｓ４９）。なお、割り込みが発生したときの動作は、前記図１２のフローチャートに基づいて説明した通りである。
【０１２３】
その後、ＣＰＵ２は、不揮発性メモリ１４における１ブロックの消去動作の終了を検出すると、割り込みを禁止する（Ｓ５０）。
【０１２４】
次に、ＣＰＵ２は、今回の不揮発性メモリ１４における１ブロックの消去動作でエラーが発生したか否かを判定する（Ｓ５１）。エラー有りと判定した場合、Ｓ５４へ進み、ＣＰＵ２は、不揮発性メモリ１４に対して読み出しモードに設定するコマンドを発行することにより、不揮発性メモリ１４を読み出しモードとし、ＲＡＭ内ルーチンの処理を終了する（Ｓ５５）。
【０１２５】
また、Ｓ５１の判定において、上記エラーが発生せずに不揮発性メモリ１４における１ブロックの消去動作が正常に終了した場合、不揮発性メモリ１４に対する処理を指令したコマンドが消去コマンドであれば（Ｓ５２）、Ｓ５４へ進み、ここでの上記した動作を経て、ＲＡＭ内ルーチンの処理を終了する（Ｓ５５）。
【０１２６】
次に、不揮発性メモリ１４に対するデータの上書き動作（更新動作）の詳細を図１４のフローチャートおよび図１５に基づいて説明する。
不揮発性メモリ１４にデータを上書きするためには、不揮発性メモリ１４における上書き領域のデータを消去する必要がある。本実施の形態の１チップマイコン１１が備える不揮発性メモリ１４は、１ブロック毎の消去を行うものである。したがって、ブロック内の任意の領域だけを消去するには、特別な手順が必要となる。
【０１２７】
図１５では、上記不揮発性メモリ１４の任意の領域を消去するための手順を説明している。不揮発性メモリ１４に対する上書き動作は、最初に上書き対象領域を消去した後、その領域に対して連続書き込みを行うものとなる。図１４におけるＳ９３からＳ１０１の処理は、図１５（ａ）に示すシーケンス１から図１５（ｄ）に示すシーケンス４の処理手順に相当する。処理を各シーケンスに分割しているのは、それぞれのシーケンスに時間がかかるため、シーケンス毎にシステムプログラムの処理を実行できるようにするためである。なお、例えば図１５（ａ）に示すブロックＣ〜Ｅは、図７におけるデータ領域１〜３としてのブロックＣ〜Ｅに対応する。
【０１２８】
図１４において、システムプログラムに基づいて、不揮発性メモリ１４ヘのデータ上書きコマンドが発行されると（Ｓ９１）、ＣＰＵ２は、先ず、上書き対象領域の消去を行う。
【０１２９】
このときには、シーケンス番号を１にセットし（Ｓ９２）、消去対象ブロック（ブロックＣ〜Ｅ）のうちの消去対象領域（ブロックＤ）を除くバックアップ対象領域１，２（ブロックＣ，Ｅ）のそれぞれのスタートアドレスとサイズを算出する（Ｓ９３）。
【０１３０】
次に、必要に応じてシステムプログラムまたはユーザープログラムの処理を実行する（Ｓ９４）。
【０１３１】
次に、任意領域を消去するための消去動作シーケンスがすべて完了したかどうかを判定する（Ｓ９５）。このとき、シーケンス番号が０でなければ、まだシーケンス処理中であるので、シーケンス番号に応じてＳ９６〜Ｓ９９へ進む。
【０１３２】
シーケンス番号が１のとき、Ｓ９６では、図１５（ａ）に示すように、Ｓ９２において算出したバックアップ対象領域１，２のスタートアドレスとサイズに基づき、不揮発性メモリ１４への連続書き込み動作により、バックアップ用のブロック（バックアップブロック）ヘの書き込みが行われる。バックアップ用のブロックとしては、たとえば図７に示した不揮発性メモリ１４におけるバックアップ領域（Ｆブロック）を使用する。なお、このバックアップ領域内のデータはあらかじめ消去しておく。
【０１３３】
上記バックアップ動作が完了すると、次のシーケンスに移るために、Ｓ１００においてシーケンス番号をプラス１にして、Ｓ９４からの動作を繰り返す。
【０１３４】
シーケンス番号が２のときには、Ｓ９７において、図１５（ｂ）に示すように、消去対象領域を含む消去対象ブロック内のデータを消去する。
【０１３５】
シーケンス番号が３のときには、Ｓ９８において、図１５（ｃ）に示すように、Ｓ９６の動作でバックアップしたバックアップ領域１，２を元の消去対象ブロック内に書き戻す。
【０１３６】
シーケンス番号が４のときには、Ｓ９９において、図１５（ｄ）に示すように、バックアップブロック内のデータを全て消去する。
【０１３７】
以上の一連の動作により、不揮発性メモリ１４の任意領域の消去動作が完了する。
【０１３８】
次に、Ｓ１０１では、シーケンス番号を０にクリアし、Ｓ９４、Ｓ９５を経てＳ１０２へ進む。このＳ１０２では、不揮発性メモリ１４の図１５（ｃ）に示した消去済み領域（ブロックＤ）にデータを書き込む。これにより、不揮発性メモリ１４のデータ上書き動作が完了する（Ｓ１０３）。
【０１３９】
以上に記載した１チップマイコン１，１１では、１個の不揮発性メモリを、プログラムを格納するプログラム領域、またはデータの格納、書き換えが行なわれるデータ領域の何れか一方のみに使用するのではなく、同時にこれら両領域として使用することができる。特に、大容量の不揮発性メモリを搭載した場合には、上記両領域としての使用が有効となる。
【０１４０】
また、不揮発性メモリを同時に上記両領域として使用できることにより、この１チップマイコン１，１１を備えた例えばＩＣカードは、複数のチップを備える必要がなく、小型化が可能である。
【０１４１】
さらに、例えば上記１チップマイコン１，１１を備えたＩＣカードにおいて、大容量の不揮発性メモリを搭載した場合に、プログラムの容量やデータ領域をダイナミックに変化させて使用することができる。これにより、非常に柔軟性に富んだセキュリティの高いＩＣカードとすることができるとともに、ＩＣカードにおいて、ダイナミックに書き換え可能なマルチアプリケーションシステムを実現することができる。
【０１４２】
即ち、例えばＩＣカード用途でマルチアプリケーションを実行可能な大容量メモリ搭載版が従来考えられているが、プログラムは依然としてＲＯＭ上にあり、使用が制限されるものしかできていないのが現状である。これに対し、本１チップマイコン１，１１を使用すれば、ＩＣカード発行後にでも真の意味でダイナミックにアプリケーションの追加および消去が可能であるばかりか、ＯＳのバージョンアップさえ容易にできるシステムを実現することができる。
【０１４３】
本発明の不揮発性メモリ内蔵マイクロコンピュータは、少なくとも１つの書き換え可能な不揮発性メモリと、マイクロコンピュータ立上げ用の初期プログラム、およびこの初期プログラムを前記不揮発性メモリに転送するための転送プログラムを格納するブートＲＯＭと、前記不揮発性メモリに何もプログラムが格納されていないときに、前記初期プログラムを前記転送プログラムに基づいて前記不揮発性メモリに転送する制御手段とを備えている構成としてもよい。
【０１４４】
これにより、製造直後なにもデータが格納されていない不揮発性メモリに対し、ブートＲＯＭから容易にデータを転送して格納することができる。
【０１４５】
【発明の効果】
以上のように、本発明の不揮発性メモリ内蔵マイクロコンピュータは、マイクロコンピュータのメモリ空間に配置された少なくとも１つの書き換え可能な不揮発性メモリと、マイクロコンピュータ立上げ用の初期プログラム、およびこの初期プログラムを前記不揮発性メモリに転送するための転送プログラムを格納するブートＲＯＭと、ＲＡＭと、少なくとも、前記不揮発性メモリに何もプログラムが格納されていないときに、前記初期プログラムを前記転送プログラムに基づいて前記不揮発性メモリに転送し、その後、ブートＲＯＭをマイクロコンピュータのメモリ空間から排除する制御手段とを備えており、前記不揮発性メモリは、複数のブロックに分割されており、データを上書きするために当該領域のデータの消去が必要で、しかも、ブロック単位で消去を行うものであり、前記各ブロックの中には、プログラム領域として使用されるブロックと、データ領域として使用されるブロックとがあり、前記不揮発性メモリのプログラム領域には割り込み処理のプログラムが格納され、前記制御手段は、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、上記不揮発性メモリのデータ領域の更新中であるか否かを判定し、更新中であれば、当該不揮発性メモリに対して更新動作を中断するコマンドを発行し、更新中であるか否かに拘わらず、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能であり、さらに、割り込み処理が終了すると、更新処理の中断中か否かを判定し、中断中であれば、上記不揮発性メモリに対して、書き込み／消去を再開するコマンドを発行すると共に、前記不揮発性メモリは、この不揮発性メモリに格納されたプログラムを前記ＲＡＭに転送するための転送プログラムを格納しており、前記制御手段は、さらに、前記ＲＡＭに格納されたプログラムを実行可能であり、前記転送プログラムに基づいて、前記不揮発性メモリに格納されたプログラムをＲＡＭに転送し、このＲＡＭに格納されたプログラムを実行するときに、前記初期プログラムに含まれる割り込み処理の先頭番地を不揮発性メモリ上からＲＡＭ上に移動させるとともに、前記ＲＡＭに転送されて格納されたプログラムに基づいて、前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を行う構成である。
【０１４６】
これにより、製造直後なにもデータが格納されていない不揮発性メモリに対し、ブートＲＯＭから容易に初期プログラムを転送して格納することができる。
【０１４７】
また、新たなプログラムを不揮発性メモリに追加的に格納した場合において、制御手段はブートＲＯＭを考慮する必要がなく、この追加プログラムを適切に実行することができる。
【０１４８】
さらに、割り込み処理の先頭番地を不揮発性メモリ上に配置することが可能となるので、不揮発性メモリ上において、ＯＳ等を含むプログラムを頻繁に書き換えたり、追加した場合でも、これら新たなプログラムの実行中に割り込み処理を行なうことができる。したがって、プログラムの変更の柔軟性を高めることができるという効果を奏する。
【０１４９】
また、これにより、不揮発性メモリからＲＡＭに転送され、格納されたプログラムに基づき、不揮発性メモリをデータ領域としてこのデータ領域に対する処理、例えば不揮発性メモリに対するデータの書き込みと消去との少なくとも一方の処理が可能となる。また、この処理は、ＲＡＭ上のプログラムに基づいて行なわれるので、不揮発性メモリ上で別のプログラムを実行中であっても、その処理に影響を与えることなく行なうことができる。
【０１５０】
また、ＲＡＭ上において不揮発性メモリから転送されたプログラムを実行中に割り込みが発生した場合であっても、プログラムが暴走することなく、その割り込み処理を適切に行なうことができるという効果を奏する。
【０１５１】
本発明の他の不揮発性メモリ内蔵マイクロコンピュータは、ＲＡＭと、マイクロコンピュータのメモリ空間に配置され、割り込み処理の先頭番地、および格納した第１プログラムを前記ＲＡＭに転送するための転送プログラムを格納する少なくとも１つの書き換え可能な不揮発性メモリと、前記ＲＡＭに格納されたプログラムを実行可能であり、前記転送プログラムに基づいて、前記第１プログラムを不揮発性メモリからＲＡＭに転送し、このＲＡＭに格納された第１プログラムを実行するときに、前記割り込み処理の先頭番地を不揮発性メモリ上からＲＡＭ上に移動させるとともに、前記ＲＡＭに格納された第１プログラムに基づいて、前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を行う制御手段とを備え、前記不揮発性メモリは、複数のブロックに分割されており、データを上書きするために当該領域のデータの消去が必要で、しかも、ブロック単位で消去を行うものであり、前記各ブロックの中には、プログラム領域として使用されるブロックと、データ領域として使用されるブロックとがあり、前記不揮発性メモリのプログラム領域には割り込み処理のプログラムが格納され、前記制御手段は、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、上記不揮発性メモリのデータ領域の更新中であるか否かを判定し、更新中であれば、当該不揮発性メモリに対して更新動作を中断するコマンドを発行し、更新中であるか否かに拘わらず、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能であり、さらに、割り込み処理が終了すると、更新処理の中断中か否かを判定し、中断中であれば、上記不揮発性メモリに対して、書き込み／消去を再開するコマンドを発行する構成である。
【０１５２】
これにより、不揮発性メモリからＲＡＭに転送され、格納された第１プログラムに基づき、不揮発性メモリをデータ領域としてこのデータ領域に対する処理、例えば不揮発性メモリに対するデータの書き込みと消去との少なくとも一方の処理が可能となる。また、この処理は、ＲＡＭ上の第１プログラムに基づいて行なわれるので、不揮発性メモリ上で別のプログラムを実行中であっても、その処理に影響を与えることなく行なうことができる。
【０１５３】
また、ＲＡＭ上において第１プログラムを実行中に割り込みが発生した場合であっても、プログラムが暴走することなく、その割り込み処理を適切に行なうことができるという効果を奏する。
【０１５４】
上記不揮発性メモリ内蔵マイクロコンピュータにおいては、さらに、プログラム領域とデータ領域とが同一の前記不揮発性メモリ上に設定され、前記プログラム領域には同一の不揮発性メモリのデータ領域を使用することを指令する第２プログラムが格納され、前記制御手段は、前記第２プログラムに基づいて、前記データ領域をデータ格納用として使用する構成である。
【０１５５】
これにより、上記何れかの構成による効果に加え、第２プログラムに基づいて、同一の不揮発性メモリをプログラム領域とデータ領域との両方に容易に使用することができるという効果を奏する。
【０１５６】
上記不揮発性メモリ内蔵マイクロコンピュータにおいては、さらに、前記制御手段が、前記ＲＡＭに格納されたプログラムに基づいて、前記不揮発性メモリまたはＲＡＭの所定領域からデータを読み出し、このデータを前記不揮発性メモリの所定領域に書き込む構成である。
【０１５７】
これにより、上記何れかの構成による効果に加え、ＲＡＭに格納されたプログラムに基づいて、不揮発性メモリまたはＲＡＭの所定領域からデータを読み出し、このデータを不揮発性メモリの所定領域に書き込むことができる。また、この処理は、ＲＡＭ上のプログラムに基づいて行なわれるので、不揮発性メモリ上で別のプログラムを実行中であっても、その処理に影響を与えることなく行なうことができるという効果を奏する。
【０１５８】
上記不揮発性メモリ内蔵マイクロコンピュータにおいては、さらに、前記不揮発性メモリには割り込み処理のプログラムが格納され、前記制御手段が、前記ＲＡＭに格納されたプログラムに基づいて前記不揮発性メモリに対するデータの書き込みと消去との少なくとも一方を実行中に割り込みが発生したとき、前記割り込み処理の先頭番地に基づいて制御を前記不揮発性メモリに格納された割り込み処理のプログラムに分岐可能である構成である。
【０１５９】
これにより、上記何れかの構成による効果に加え、割り込みが発生した場合に、その割り込み処理を適切に行なうことができるという効果を奏する。
【図面の簡単な説明】
【図１】  本発明の実施の一形態における１チップマイクロコンピュータのリセット動作直後の動作を示すフローチャートである。
【図２】  図１に示した動作を行う１チップマイクロコンピュータの構成を示すブロック図である。
【図３】  図２に示した１チップマイクロコンピュータのメモリ構成を示す説明図である。
【図４】  図３に示したメモリ構成において、ブートＲＯＭが排除されたときのメモリ構成を示す説明図である。
【図５】  図４に示したメモリ構成において、ＲＡＭに制御が移ったときのメモリ構成を示す説明図である。
【図６】  本発明の実施の他の形態における１チップマイクロコンピュータの構成を示すブロック図である。
【図７】  図６に示した１チップマイクロコンピュータのメモリ構成を示す説明図である。
【図８】  図７に示したメモリ構成において不揮発性メモリに対する読み出しおよび書き込み動作を行うための構成を示すブロック図である。
【図９】  図７に示した不揮発性メモリからのデータの連続的な読み出し動作を示すフローチャートである。
【図１０】  図６に示した不揮発性メモリまたはＲＡＭの指定領域からデータを読み出し、このデータを不揮発性メモリの指定領域ヘ書き込む動作を示すフローチャートである。
【図１１】  図１０に示したＲＡＭ内ルーチンの動作を示すフローチャートである。
【図１２】  不揮発性メモリに対する図１１に示した書き込み／消去動作中に発生した割り込みの処理ルーチンを示すフローチャートである。
【図１３】  図６に示した不揮発性メモリに対するデータの消去動作を示すフローチャートである。
【図１４】  図６に示した不揮発性メモリに対するデータの上書き動作の詳細を示すフローチャートである。
【図１５】  図１５（ａ）は、不揮発性メモリに対する図１４に示したシーケンス１の処理を示す説明図、図１５（ｂ）は同シーケンス２の処理を示す説明図、図１５（ｃ）は同シーケンス３の処理を示す説明図、図１５（ｄ）は同シーケンス４の処理を示す説明図である。
【図１６】  従来のＩＣカード用ＥＥＰＲＯＭ内蔵マイクロコンピュータのメモリ構造を示す説明図である。
【図１７】  従来のフラッシュメモリ内蔵マイクロコンピュータのメモリ構造を示す説明図である。
【図１８】  従来のフラッシュメモリ内蔵マイクロコンピュータヘのデータ書き込み方法を示すブロック図である。
【符号の説明】
１    １チップマイクロコンピュータ
２    ＣＰＵ（制御手段）
３    ＲＡＭ
４    フラッシュメモリ（不揮発性メモリ）
５    ブートＲＯＭ
６    シリアルコミュニケーションインターフェイス
１１    １チップマイクロコンピュータ
１４    不揮発性メモリ
【図１】
0003727485.tif 000002
【図２】
0003727485.tif 000003
【図３】
0003727485.tif 000004
【図４】
0003727485.tif 000005
【図５】
0003727485.tif 000006
【図６】
0003727485.tif 000007
【図７】
0003727485.tif 000008
【図８】
0003727485.tif 000009
【図９】
0003727485.tif 000010
【図１０】
0003727485.tif 000011
【図１１】
0003727485.tif 000012
【図１２】
0003727485.tif 000013
【図１３】
0003727485.tif 000014
【図１４】
0003727485.tif 000015
【図１５】
0003727485.tif 000016
【図１６】
0003727485.tif 000017
【図１７】
0003727485.tif 000018
【図１８】
0003727485.tif 000019