<実施の形態1>
図1はこの発明の実施の形態1であるフラッシュメモリ内蔵マイコン(マイクロコントローラ)の基本的な構成を示すブロック図である。
同図に示すように、CPU1、フラッシュメモリモジュール2との中間に位置し、両者1,2のインターフェースを制御するフラッシュメモリ制御回路3が設けられる。そして、CPU1、フラッシュメモリモジュール2及びフラッシュメモリ制御回路3はそれぞれアドレスバス4及びデータバス5に接続される。
CPU1はアドレスバス4にアドレス信号AD(20:0)を出力したり、データバス5を介してデータ信号DB(15:0)の授受を行ったりする。さらに、CPU1はリード/ライト制御信号RWB及び命令実行信号EBを出力してフラッシュメモリ制御回路3を制御する。また、CPU1はフラッシュメモリ制御回路3からホールド信号HOLDを受信する。
フラッシュメモリ制御回路3はアドレスバス4を介してアドレス信号AD(20:0)を受信したり、データバス5を介してデータ信号DB(15:0)の授受を行う。さらに、フラッシュメモリ制御回路3は、リードモード信号RDMODE及び各種制御信号(ICE,IWE,IOE)を出力してフラッシュメモリモジュール2の消去/書込み等の書換制御及び読出し制御を行う。また、フラッシュメモリ制御回路3は、フラッシュメモリモジュール2からレディステータス信号RYIBYを受信する。
フラッシュメモリモジュール2はアドレスバス4を介してアドレス信号AD(20:0)を受信したり、データバス5を介してデータ信号DB(15:0)の授受を行う。
レディステータス信号RYIBYは、書換コマンドである消去/書込みコマンドがフラッシュメモリモジュール2内部で受け付けられ、一連の処理が実行されている期間ビジー状態であることを外部から検知可能にするための信号である。したがって、フラッシュメモリ制御回路3は、レディステータス信号RYIBYによって、フラッシュメモリモジュール2内部で書換コマンドが自動実行中か否かを検出することができる。
ホールド信号HOLDはCPU1に対しバス値の固定を要求するためのバス値固定信号であり、フラッシュメモリ制御回路3内で生成される。ホールド信号HOLDがバス値の固定を指示するアクティブ(活性状態)“H”のとき、CPU1は、リード/ライト制御信号RWB、命令実行信号EB、アドレス信号AD(20:0)、データ信号DB(15:0)を含むフラッシュメモリモジュール2のアクセスに必要な信号の信号値を固定する。すなわち、CPU1のフラッシュメモリモジュール2に対するアクセスを不許可状態にする。
[フラッシュメモリモジュール]
図2はフラッシュメモリモジュールの基本構成を示すブロック図である。同図に示すように、フラッシュメモリモジュール2は、マイクロシーケンサ11、チャージポンプ12、メモリデコーダ13、メモリブロック14、及びアドレス/データ/制御信号入力回路15で構成される。
フラッシュメモリモジュール2は、アドレスバス4,データバス5を介してアドレス信号AD(20:0)、データ信号DB(15:O)が、フラッシュメモリ制御回路3から各種制御信号(ICE,IWE,IOE)が入力され、フラッシュメモリモジュール2の内部よりレディステータス信号RYIBYが出力される。
図2に示すように、各種制御信号(ICE,IWE,IOE)は、チップイネーブル信号ICE、コマンド書込み信号IWE、及び読出信号IOEを含み、チップイネーブル信号ICEはフラッシュモジュール選択時、つまりアドレス該当時にアクティブ(活性状態)“L”となる選択信号であり、チップイネーブル信号ICEが“H”(非活性状態)の時はフラッシュメモリへのコマンド書込み及び読出しアクセスは全て無効となる。コマンド書込み信号IWEはフラッシュメモリモジュール2内のマイクロシーケンサ11へのコマンド書込み信号であり、アクティブ“L”期間中アドレスバス4、データバス5のアドレス信号AD(20:0)及びデータ信号DB(15:0)がアドレス/データ/制御信号入力回路15を介してマイクロシーケンサ11に入力され、ラッチされる。
読出信号IOEは、アドレス信号AD(20:0)に応じてフラッシュROMデータ19あるいはステータスレジスタ値20をアクティブ“L”期間中、出力するための信号である。
マイクロシーケンサ11はフラッシュメモリモジュール2ヘの消去/書込み等のコマンド入力が受け付けられた場合に、コマンドの種類に応じてチャージポンプ12、メモリデコーダ13、メモリブロック14に対して行う一連の処理に必要な信号を自動発生する制御回路ブロックである。
チャージポンプ12は各種コマンド処理の過程で必要とされる各種電位レベルを発生可能な電位発生回路群である。
メモリデコーダ13はアドレス信号AD(20:0)と各種コマンド実行過程とに基づき、必要とされるメモリセルの選択を制御する回路ブロックである。
メモリブロック14は複数のメモリセルがアレー状に配置されたブロックである。
図3はフラッシュメモリモジュール2におけるメモリのアドレスマップの一例を示す説明図である。同図に示すように、各ブロック0〜10は独立してブロック消去(ブロック単位の一括消去)が可能である。また、書込みは1アドレス毎に可能である。
図4はフラッシュメモリモジュールにおけるユーザコマンドの一覧を表形式で示す説明図である。同図に示すように、フラッシュメモリモジュール2は、外部からの各種制御信号(ICE,IWE,IOE)とアドレス信号AD(20:0)、データ信号DB(15:O)の入力値によってコマンド入力を受け付けるように構成されている。
なお、各コマンドの書込み(モードがライトのバスサイクル)はコマンド書込信号IWEを“L”にすることで行われ、読み出し(モードがリードのバスサイクル)は読出信号IOEを“L”にすることで行われる。また、読出信号IOEが“L”のときバッファ27が活性状態となりセレクタ28によって選択されるフラッシュROMデータ19あるいはステータスレジスタ20が外部(データバス5等)に出力され、読出信号IOEが“H”のとき、バッファ27が非活性のハイインピーダンス状態となる。
図5はコマンド発行の基本タイミングを示すタイミング図である。図5では自動ブロック消去コマンドのタイミングを示している。同図に示すように、フラッシュメモリの消去、書込みなど書換に関するコマンドは2サイクルのコマンドとなっている。
時刻t51でのコマンド書込信号IWEの“L”から“H”への立ち上がり時にデータ信号DB(15:0)の“20h”、時刻t52でのコマンド書込信号IWEの立ち上がり時にデータ信号DB(15:0)の“D0h”及びアドレス信号AD(20:0)のブロックアドレスBAnを認識することにより、マイクロシーケンサ11はメモリブロック14のブロックアドレスBAnに対する自動ブロック消去コマンドが発行されたことを認識する。
すなわち、ビジー状態を伴う自動ブロック消去コマンドが受け付けられると、マイクロシーケンサ11が処理を開始し、一連の処理が正常に完了するか、あるいは、エラーが発生するまでビジー状態となり、その間レディステータス信号RYIBYとして“L”を出力する。そして、ビジー状態終了時はレディ状態となり、RYIBY=“H”となる。
消去/書込みなどのビジー信号を伴う書換コマンドが発行されビジー状態にあるときは、フラッシュROMリードを行うとレディ/ビジーステータスやエラーステータスをビットとして有するステータスレジスタ20の内容が読み出される「ステータスリードモード」に移行する。
このように、マイクロシーケンサ11は各種制御信号(ICE,IWE,IOE)に基づく制御を実行し、コマンドシーケンス完了後、レディ状態に復帰した時も「ステータスリードモード」が続行されるように制御する。
マイクロシーケンサ11は、レディ状態時、メモリリード移行コマンド(図4参照)が発行されている場合は、入力アドレス(AD(20:0))のフラッシュROMデータ19をリード可能な「メモリリードモード」になるように制御する。
リードモード信号RDMODEは、上記「ステータスリードモード」から「メモリリードモード」に移行するためのパルス入力である。RDMODE=“H”のパルスにてフラッシュメモリモジュール2は「ステータスリードモード」から「メモリリードモード」に移行する。
[CPU]
CPU1は、アドレス信号AD(20:0)、データ信号DB(15:0)、リード/ライト制御出力RWB、バスサイクルが有効であることを示す命令実行信号EBの出力機能を有する中央処理装置である。ここで、リード/ライト制御出力RWBは、“H”のとき「リード」、“L”のとき「ライト」制御を示し、命令実行信号EBは、“H”のとき「無効」、“L”のとき「有効」を示す信号を意味する。
CPU1は、内部にプログラムカウンタを有しており、アドレスを順次発生しながら、フラッシュメモリモジュール2または場合によってはRAM等より、データバス5経由で命令データ(DB(15:0))をフェッチしながら、周辺機能ブロックヘのリード、ライト処理を上記リード/ライト制御信号RWB、命令実行信号EBにより発行することにより行う。
CPU1からフラッシュメモリモジュール2へのアクセスは、ライトアクセスの場合、フラッシュメモリモジュール2のアドレスへの一般的な転送命令によって実現され、リードアクセスの場合はフラッシュメモリモジュール2のアドレスからの一般的な転送命令によって実現される。
本明細書において、CPU1からフラッシュメモリモジュール2へのアクセスを特に「コマンド」と呼ぶ。また、CPU1側から発行されるフラッシュメモリモジュール2の消去,書込みもしくはモード移行の動作を「書換」と総称する。
CPU1は、命令キューを複数命令分備えており、パイプライン処理が可能である。また、分岐命令(JMP)が実行される場合、命令キューにフェッチされているJMP命令より後の命令コードを無効化して、分岐先アドレスの命令実行に移行することができる。
CPU1は、ホールド機能を有し、ホールド信号入力により、アドレス信号AD(20:0),データ信号DB(15:0),リード/ライト制御信号RWB,命令実行信号EBの各信号を固定もしくはハイインピーダンス状態にすることができる。
ここで、CPU1が各種制御信号をハイインピーダンス状態にする場合は、各制御信号の制御権をCPU1が解放することに相当する。
[フラッシュメモリ制御回路]
フラッシュメモリ制御回路3は、CPU1がフラッシュメモリモジュール2を制御するためのインタフェース回路ブロックでバスホールド制御レジスタ22を内部に有している。
(バスホールド制御レジスタ)
バスホールド制御レジスタ22は、CPU1からデータバス5及びアドレスバス4を介して与えられるデータ信号DB(15:0)及びアドレス信号AD(20:0)、並びにリード/ライト制御信号RWBによって、CPU1が実行するプログラムにより書換え可能なレジスタであり、バスホールド信号生成用の先行ホールド信号となるバスホールド制御ビットHOLDRQを備えている。
バスホールド信号HOLDは、データバス5、アドレスバス4を固定するための信号で、HOLDRQ=“H”(セット状態)かつ内部で生成するコマンド書込信号IWE=“L”の条件でアクティブ“H”になるように生成される。
[動作]
この発明の実施の形態1であるフラッシュメモリ内蔵マイコンの動作について述べる。
CPU1はフラッシュメモリモジュール2内に書き込まれているユーザプログラムにより動作する。ユーザプログラムは、フラッシュメモリモジュール2内のメモリブロック14(図2,図3参照)における1ブロックもしくは複数ブロックにわたって配置されている。CPU1はプログラム上の命令を順にフェッチして、パイプライン処理により各命令を実行する。
以下では、CPU1がユーザプログラムにより、プログラムが配置されているブロックと異なるブロックのフラッシュメモリに対する書換コマンドを発行する場合の例として自動ブロック消去コマンドを発行する場合についての動作を説明する。
図6及び図7は実施の形態1のフラッシュメモリ内蔵マイコンによるブロック消去コマンド実行時における各信号の信号変化を示すタイミング図である。同図に示すように、バスサイクルT1〜T9,Tn,T(n+1)それぞれの1バスサイクルが動作クロックCLKの2周期分となっており、1バスサイクル毎に命令フェッチ、命令実行されている。図6及び図7では命令フェッチが命令実行の4バスサイクル前に行われている例を示している。
図6及び図7のようなタイミングで、まず自動ブロック消去コマンドの第一コマンドを発行する前に2バスサイクル以上の長サイクル間バスアクセスを伴わないダミーのコマンドをユーザプログラムに記述しておく。CPU1はまずこの命令をフェッチして命令キューに蓄積し、パイプライン処理により実行するが、フラッシュ書換コマンド直前に長サイクル間バスアクセスを伴わないダミーのコマンドをユーザプログラムに記述することにより、命令キューに空きが出て後続の命令が蓄積されやすくなり、命令キューの有効利用が可能となる。
次に、バスサイクルT5において、データ信号DB(15:0)上のブロック消去の第一コマンド“20h”をフラッシュメモリモジュール2のマイクロシーケンサに書き込む命令(転送命令などを使う)としてCPU1がフェッチ(バスサイクルT1に行われる)後、RWB=“L”、EB=“L”を出力して、フラッシュメモリ制御回路3から所定期間“L”となるコマンド書込信号IWEを生成させ、このコマンド書込信号IWEをフラッシュメモリモジュール2に対して発行する。なお、バスサイクルT5におけるコマンド書込信号IWEの“L”立ち下がり時が第一コマンドの受信時、すなわち自動ブロック消去コマンドの受信開始時となる。ただし、第一コマンドの内容が確定するのは図5で説明したようにコマンド書込信号IWEの“H”立ち上がり時である。
コマンド書込信号IWEは、図6及び図7に示すように、動作クロックCLK=“H”かつRWB=“L”かつEB=“L”で有効になるようにフラッシュ制御回路3内で生成される。フラッシュメモリモジュール2は、コマンド書込信号IWEの立ち上がりタイミングで第一コマンド(“20h”)を受け付ける。
ユーザプログラムでは次のバスサイクルT6で、ブロック消去コマンドの第二コマンドの発行に先行して、バスホールド制御レジスタ22のバスホールド制御ビットHOLDRQをセットする(“H”にする)という、比較的簡単なレジスタセット動作であるレジスタセット命令WRregが実行されるように記述されている。したがって、ブロック消去コマンドの第二コマンドの発行に先行して確実にバスホールド制御ビットHOLDRQを“H”に設定することができる。
フラッシュメモリ制御回路3はホールド信号HOLDの生成回路を内部に有し、当該生成回路は、HOLDRQ=“H”かつコマンド書込信号IWE=“L”の条件でアクティブ(“H”)になるホールド信号HOLDを生成する。なお、ホールド信号HOLDは、データバス5、アドレスバス4、リードライト制御信号群(リード/ライト制御信号RWB,命令実行信号EB)を固定するための信号である。ホールド信号HOLDがアクティブになると次のバスサイクルからホールドが開始され、CPU1はフラッシュメモリモジュール2に対するアクセスが不可能となる。
次のバスサイクルT7で、ユーザプログラムによりブロック消去の第二コマンド(DOh)が発行される。
そして、コマンド書込信号IWE=“L”になった時点から上記論理で動作する生成回路によりバスホールド信号HOLDがアクティブ“H”になり、次のバスサイクルT8からアドレスバス4、データバス5のホールドが開始される。バスホールド制御ビットHOLDRQをホールド信号HOLDに先がけて“H”に設定することにより、ブロック消去コマンドの受信終了時に確実にホールド信号HOLDを“H”にすることができる。
ホールドされるアドレス、データバス値は、CPU1がパイプライン処理をしているためにブロック消去の第二コマンドでないこともある。なお、バスサイクルT7におけるコマンド書込信号IWEの“L”立ち下がりが第二コマンドの受信時、すなわち自動ブロック消去コマンドの受信終了時となる。ただし、第二コマンドの内容が確定するのはコマンド書込信号IWEの“H”立ち上がり時である。
以上により、アドレス信号AD(20:0)、データバスDB(15:0)、リードライト制御信号群の固定が開始され、CPU1のバスアクセスは中断される。
コマンド書込信号IWEの立上りエッジでデータ信号DB(15:0)の値がフラッシュメモリモジュール2内のアドレス/データ/制御信号入力回路15にてラッチされ、マイクロシーケンサ11でコマンドデコード処理がなされる。第二コマンドのコマンド書込信号IWEの立上りエッジでマイクロシーケンサ11はコマンドの種類を識別し、フラッシュメモリモジュール2単体でメモリの自動ブロック消去処理フローを開始するとともに、レディステータス信号RYIBYはビジーを示す“L”を出力する。
フラッシュメモリモジュール2は、コマンドを受理して処理を開始すると、リード時にステータスレジスタ値20の出力がなされる「ステータスリードモード」に移行するので、コマンド処理中にCPU1はフラッシュメモリモジュール2のフラッシュROMデータ19をリードすることは不可能であり、フラッシュメモリモジュール2上のプログラム命令のフェッチも不可能となる。
フラッシュメモリモジュール2が内部のマイクロシーケンサ11によるコマンド処理を実行中はRYIBY=“L”でビジー状態となり、コマンド処理を完了したときにはレディ信号出力RYIBYは“L”から“H”に変化する。
フラッシュ制御回路3はレディステータス信号RYIBYが“L”から“H”に変化後、1バスサイクル以降にホールド信号HOLDを“H”から“L”に変化させて無効にする。
このとき、フラッシュメモリ制御回路3は、フラッシュメモリモジュール2に入力するリードモード設定パルス信号RDMODEを“H”にすることにより、ビジー状態からレディ状態に復帰後、即座に「ステータスリードモード」にあったフラッシュメモリモジュール2をメモリ内容リード可能な「メモリリードモード」に切換えることができる。
このリードモード信号RDMODEは常時“H”にしておくことにより、フラッシュメモリモジュール2がレディ状態時は常に、リードするとメモリ内容がリード可能な「メモリリードモード」に設定することも可能である。
また、リードモード信号RDMODEを、フラッシュ制御回路3内に専用のレジスタを設けてCPU1から設定するように構成することも可能である。すなわち、リードモード信号RDMODEの出力の有効/無効を設定可能にして、状況に応じたリードモード信号RDMODEの利用を実現することができる。
以上によりアドレスバス4、データバス5、各種制御信号の固定はリリースされるので、CPU1は暴走することなく、フラッシュメモリモジュール2に対するアクセスを含む処理を再開することが可能である。
ユーザプログラムにおいて、フラッシュ書換コマンドの第二コマンドの直後に分岐命令(JMP命令)を配置しておけば、JMP命令より後のコマンドは分岐命令実行により、無視されることになり、書換コマンド終了後ホールド解除されてユーザプログラムが再開されるとき、JMP命令は確実にフェッチされて命令キューにキューイングされていた命令であるために安全に処理再開可能である。
あるいは、このJMP命令の替わりにパイプラインクリア命令(PIB命令)をフラッシュ書換第二コマンド直後に配置すれば、PIB命令より後に命令キューにキューイングされていた命令群がクリアされることになり、上記と同様に、書換コマンド終了後ホールド解除されてユーザプログラムが再開されるとき、安全に処理再開可能である。
上記のように、実施の形態1によれば、フラッシュメモリモジュール2の書換えコマンドの処理中は、アドレスバス4、データバス5、各種制御信号がホールドされるため、コマンド処理中にCPU1がフラッシュメモリモジュール2上の命令コードが読めなくなることによる暴走を回避することが可能である。
また、実施の形態1によれば、書換えプログラムがフラッシュメモリモジュール2上に配置されたままでも、そのプログラムを実行しながら他のブロックのフラッシュROM書換え命令の実行が可能であり、従来のようなフラッシュメモリからRAMへのプログラム転送を必要とせず、CPUのプログラム転送負荷を低減可能である。
加えて、従来の第二の状況における第2の方法であるバックグラウンド書換手法で必要とされた複雑な制御回路を必要としないメリットもある。
なお、実施の形態1では自動ブロック消去動作を例に挙げたが、図4に示すように、他に自動書込み、ロックビットプログラム等の複数種の書換動作の実行時に、フラッシュメモリモジュール2はレディステータス信号RYIBYが“L”になるように設定されているため、他の書換動作においても、自動ブロック消去同様の効果を得ることができる。
<実施の形態2>
図8はこの発明の実施の形態2であるフラッシュメモリ内蔵マイコンの基本的な構成を示すブロック図である。
実施の形態2では、CPU1がフラッシュメモリ書換えコマンド発行時に、次サイクルの命令から確実にバスホールドを行うためにレディステータス信号RYIBYによるビジー検出に時間先行して、書換コマンド受付通知信号であるコマンド受付通知信号IPREBUSYを生成する機能を備えたフラッシュメモリモジュール2Aを用いている点が実施の形態1と異なる。
図9及び図10は実施の形態2のフラッシュメモリ内蔵マイコンによるブロック消去コマンド実行時における各信号の信号変化を示すタイミング図である。
以下では、CPU1がユーザプログラムにより、プログラムが配置されているブロックと異なるブロックのフラッシュメモリに対する書換コマンドを発行する場合の例として自動ブロック消去コマンドを発行する場合についての動作を説明する。
図9及び図10のようなタイミングで、バスサイクルT4で、以前のサイクルでCPU1がフェッチした命令が実行され最初にブロック消去の第一コマンド“20h”、RWB=“L”、EB=“L”を出力して、フラッシュメモリモジュール2Aへの書込みを指示する信号が生成される。
このとき、コマンド書込信号IWEは、図6及び図7に示すように、CLK=“H”かつRWB=“L”かつEB=“L”でアクティブ“L”になるようにフラッシュ制御回路3内で生成される。フラッシュメモリモジュール2Aは、コマンド書込信号IWEの立ち上がりタイミングで第一コマンドを受け付ける。
実施の形態2におけるフラッシュメモリモジュール2Aは、第一コマンド受付時、書換コマンドの受付を外部に通知する、書換コマンド受付通知信号であるコマンド受付通知信号IPREBUSYを出力する。コマンド受付通知信号IPREBUSYはすべての2サイクルコマンドにおいて第一コマンド受付時にアクティブ“L”になる信号である。すなわち、コマンド受付通知信号IPREBUSYは負論理で、“H”のとき第一コマンド受付なし、“L”のとき第一コマンド受付を示す出力信号である。
したがって、図9及び図10に示すように、ブロック消去の第一コマンド受付時、すなわち、ブロック消去コマンドの受信開始時に、フラッシュメモリモジュール2Aから出力されるコマンド受付通知信号IPREBUSYは“H”から“L”に変化する。
そして、コマンド受付通知信号IPREBUSYは、RYIBY=“H”のとき、すなわちレディ状態時にネゲートされる(“H”に戻される)。
このコマンド受付通知信号IPREBUSYをステータスレジスタ20の1bitにアサインするか、フラッシュメモリ制御回路3A内の制御レジスタ(図示せず)の1ビットにアサインすることにより、CPU1よりフラッシュメモリモジュール2Aあるいはフラッシュメモリ制御回路3Aからコマンド受付通知信号IPREBUSYに関する情報をリードして検出可能な信号として用いることができ、ユーザプログラムによる参照が可能となり、フラッシュメモリモジュール2Aの制御に利用可能である。
また、フラッシュメモリ制御回路3Aから、各々が書換コマンドの種別に応じて異なる内容となる、複数種の書換コマンドをフラッシュメモリモジュール2Aに発行し、フラッシュメモリモジュール2A内は、複数種の書換コマンドそれぞれに対応して設けられた複数の受付通知信号の論理和によりコマンド受付通知信号IPREBUSYを生成するように構成してもよい。
フラッシュメモリ制御回路3A内のバスホールド信号HOLDの生成回路は、コマンド受付通知信号IPREBUSY=“L”かつコマンド書込信号IWE=“L”の条件でバスホールド信号HOLDがアクティブになるように設計される。
次のバスサイクルT5で、ユーザプログラムによりブロック消去の第二コマンド“D0h”が発行されるが、コマンド書込信号IWE=“L”になった時点から上記論理により動作する生成回路によってバスホールド信号HOLDがアクティブ“H”とされ、次のサイクルからアドレスバス4、データバス5、各種制御信号のホールドが開始される。コマンド受付通知信号IPREBUSYはホールド信号HOLDに先がけてアクティブ“L”に変化することにより、ブロック消去コマンドの受信終了時に確実にホールド信号HOLDを“H”にすることができる。
このとき、ホールドされるアドレス、データバス値は、CPU1がパイプライン処理をしているためにブロック消去の第二コマンドでないこともある。
コマンド書込信号IWEの立上りエッジでデータバス5上のデータ信号DB(15:0)がフラッシュメモリモジュール2A内のアドレス/データ/制御信号入力回路15にてラッチされ、マイクロシーケンサ11内でコマンドデコード処理がなされる。そして、マイクロシーケンサ11は、第二コマンドのコマンド書込信号IWEの立上りエッジではコマンドの種類を識別し、フラッシュメモリのブロック消去処理フローを開始するとともに、レディステータス信号RYIBYはビジーを示す“L”を出力する。
フラッシュメモリモジュール2Aは、コマンドを受理して処理を開始すると、リード時にステータスレジスタ値20の出力がなされる「ステータスリードモード」に移行するので、コマンド処理中にCPU1はフラッシュROMデータ19をリードすることは不可能であり、フラッシュメモリモジュール2A上のプログラム命令のフェッチも不可能となる。
フラッシュメモリモジュール2Aがモジュール内部のマイクロシーケンサ11によるコマンド処理を完了したときにはレディ信号出力RYIBYは“L”から“H”に変化する。
フラッシュ制御回路3AはRYIBY信号が“L”から“H”に変化後、1バスサイクル以降にホールド信号HOLDを“H”から“L”に変化させて無効にする。バスホールドを解除すると中断状態にあったプログラム実行処理が再開される。
このとき、フラッシュメモリモジュール2Aにフラッシュメモリ制御回路3Aからリードモード設定パルス信号RDMODEを“H”入力することにより、ビジー状態からレディ状態に復帰後、即座に「ステータスリードモード」にあったフラッシュメモリモジュール2Aをメモリ内容リード可能な「メモリリードモード」に切換えることができる。
この動作により、実施の形態2は実施の形態1同様、アドレスバス4、データバス5、各種制御信号の固定はリリースされ、CPU1は暴走することなく、処理を再開することが可能である。
また、ユーザプログラムにおいて、フラッシュ書換コマンドの第二コマンドの直後に分岐命令(JMP命令)を配置しておけば、実施の形態1と同様、書換コマンド終了後ホールド解除されてユーザプログラムが再開されるとき、安全に処理再開可能である。
実施の形態2で用いたコマンド受付通知信号IPREBUSYは、自動消去コマンドの第一コマンドがフラッシュメモリモジュール2Aに受け付けられたかを検知できる信号であり、コマンド入力エラーの判定にも使用可能である。ユーザプログラムにおいて、フラッシュ書換コマンドの第一コマンドの直後にコマンド受付通知信号IPREBUSYをチェックする命令(すなわちフラッシュメモリ制御回路3Aの制御レジスタ等に格納されるコマンド受付通知信号IPREBUSYに基づきアサインされたビットをリードする命令)を入れ、CPU1でチェックすれば第一コマンドがフラッシュメモリモジュール2Aに受け付けられたかを判断でき、フラッシュメモリモジュール2Aへのコマンド入力の確度が向上する。
フラッシュメモリ制御回路3Aは、コマンド書込信号IWEの立ち上がり直後のレディステータス信号RYIBYをラッチした信号であるERRCMD信号生成回路とERRCMD信号に対応するビットを有する制御レジスタを備える。
この制御レジスタは、CPU1からリード可能であり、フラッシュ書換コマンドの第2のコマンド発行後にこのERRCMDビットをCPU1がリードし、“H”であればコマンドがエラーとなり、受け付けられなかったことを示す。
さらに、自動消去コマンドの第二コマンドが入力された同一のバスサイクル内でレディステータス信号RYIBYをラッチして、第二コマンドが正常に受け付けられなかった場合に“H”となるエラーコマンド信号ERRCMDを生成し、第二コマンド発行後にエラーコマンド信号ERRCMDをCPU1から読み取れば、第二コマンド発行時のエラーの有無を容易に検出可能である。
本機能は、ノイズ等によりフラッシュ書換コマンドの第一コマンド/第二コマンドの両者ともフラッシュメモリモジュール2に受け付けられなかった場合にも、第二コマンドのエラー検出が可能であるというメリットを有する。
以上のようにこの実施の形態2によれば、実施の形態1と同様、CPU1がフラッシュメモリモジュールに書換えコマンドを発行時、コマンド処理中にCPU1がフラッシュメモリ上の命令コードが読めなくなることによる暴走を回避することが可能であり、書換えプログラムがフラッシュROM上に配置されたままでもそのプログラムを実行しながら他のブロックのフラッシュROM書換えが可能であり、従来のようなフラッシュROMからRAMへのプログラム転送を必要としないメリットがある。
<実施の形態3>
図11はこの発明の実施の形態3であるフラッシュメモリ内蔵マイコンの基本的な構成を示すブロック図である。
同図に示すように、RAM26が追加されている。このRAM26は、アドレスバス4上のアドレス信号AD(20:0)、データバス5上のデータ信号DB(15:0)とリード/ライト制御信号RWB、命令実行信号EBによってCPU1よりリード/ライト可能である。
CPU1は、実施の形態1及び実施の形態2と同様、命令キューを複数命令分備えており、パイプライン処理が可能である。なお、他の構成は図8で示した実施の形態2と同様である。
図12及び図13は実施の形態3のフラッシュメモリ内蔵マイコンによるブロック消去コマンド実行時における各信号の信号変化を示すタイミング図である。なお、バスサイクルT1〜T5,Tn,Tm等の1バスサイクルは実施の形態1,実施の形態2と同様に動作クロックCLKの2クロックサイクル分となっている。
以下では、CPU1がユーザプログラムにより、プログラムが配置されているブロックと異なるブロックのフラッシュメモリに対する書換コマンドを発行する場合の例として自動ブロック消去コマンドを発行する場合についての動作を説明する。
ユーザプログラムにてフラッシュメモリ内容の書換が必要となったとき、次のような手順で実施する。
まず、RAM26にはあらかじめフラッシュメモリモジュール2Aのステータスレジスタ20からデータバス5経由で読み込むレディビット(ビジーステータス信号)をポーリングするプログラムをフラッシュROM2Aより転送しておく。レディビットはフラッシュメモリモジュール2Aがレディ状態の有/無を“H”/“L”で示すフラッシュメモリモジュール2Aのステータス情報である。
図12及び図13に示すように、CPU1がユーザプログラムを実行することにより、ブロック消去コマンドを第一コマンド、第二コマンドの順に入力して、ブロック消去の自動実行を開始する。
フラッシュ書換コマンドの直後に上記ポーリングプログラムの書かれたRAM26のスタート番地へのJMP命令を配置することにより、フラッシュ書換コマンド第二コマンド実行後、CPU1の命令キューにフェッチされていたJMP命令が実行され、RAM26の所定のスタート番地にジャンプする。
フラッシュメモリモジュール2Aにて書換コマンドが実行されているとき、フラッシュメモリモジュール2Aは「ステータスリードモード」となっているので、RAM26上に書かれたポーリングプログラムによりCPU1からフラッシュ制御回路3を通じてフラッシュメモリモジュール2Aにリード命令を発行することでCPU1は、ステータスレジスタ20中のレディビットからフラッシュメモリモジュール2Aの状態(レディ/ビジー)を検出することが可能であり、これによって書換コマンド実行中/終了を判定可能である。
RAM26のポーリングプログラムによりフラッシュ書換コマンド完了を待機し、データバス5経由で読み出されたレディビットの“L”(ビジー状態)→“H”(レディ状態)変化を検出してコマンド完了を検出する。
コマンド完了直後、すなわち、レディステータス信号RYIBYの“L”→“H”変化に同期して、フラッシュメモリ制御回路3Aはリードモード信号RDMODEをアクティブ“H”で出力し、フラッシュメモリモジュール2Aを「ステータスリードモード」から「メモリリードモード」に切り換え、書換コマンド完了後はフラッシュROMデータ19のリードが可能な状態に移行する。
一方、CPU1は、フラッシュ書換コマンド完了後に、再びフラッシュメモリモジュール2A上のプログラム番地にジャンプすれば(例えば、RAM26上のポーリングプログラムサブルーチンの直後に当該ジャンプ命令を記載する等により実現)フラッシュメモリモジュール2A上のプログラムの実行再開が可能である。
以上のように実施の形態3では、フラッシュモジュールのビジーステータスのポーリングプログラムを主とした小容量の領域のみRAM26で使用することにより、フラッシュメモリモジュール2Aの書換が可能となる。
したがって、フラッシュメモリの書換え処理時に書換プログラム用あるいはレジスタ退避用スタックのRAM容量を削減でき、RAM26の容量を必要最小限に最適化できる。
<実施の形態4>
図14はこの発明の実施の形態4であるフラッシュメモリ内蔵マイコンの基本的な構成を示すブロック図である。
同図に示すように、フラッシュメモリモジュール2Bはコマンド受付通知信号IPREBUSY−0〜IPREBUSY−nを出力する。これらコマンド受付通知信号IPREBUSY−0〜IPREBUSY−nはフラッシュメモリモジュール2Bへの書換コマンド種別毎(自動ブロック消去、自動書込などそれぞれのコマンド毎)に個別に割り当てられた信号である。
一方、フラッシュメモリ制御回路3B内に制御レジスタ23が設けられ、制御レジスタ23はコマンド受付通知信号IPREBUSY−0〜IPREBUSY−nの値を内部ビットbit−0〜bit−nとして格納可能であり、制御レジスタ23はCPU1からリードアクセスが可能である。なお、他の構成は図8で示した実施の形態2と同様である。
実施の形態4はこのような構成にすることにより、CPU1が所定のプログラムの実行によりフラッシュメモリモジュール2Bへのコマンドを発行した際に、電気的なノイズ等によりマイクロコンピュータ内部でデータが変化してしまいフラッシュメモリモジュール2Bに別コマンドとして受け付けられるような場合であっても、CPU1がフラッシュメモリモジュール2Bへの書換コマンドの第一コマンド発行後、第二コマンド発行より前に当該書換コマンドに対応するコマンド受付通知信号IPREBUSY−i(i=1〜nのいずれか)が有効になっているか否かを制御レジスタ23のビットbit−iの値をリードしてチェックすることにより、書換コマンドがフラッシュメモリモジュール2Bに正しく受け付けられたか否かを書換コマンド種別単位に判定することができる。
このときホールド信号HOLDの生成は、制御レジスタ23のビットbit−0〜bit−nの論理和信号で制御する。
このように、実施の形態4によれば、CPU1から発行されたフラッシュメモリ向けコマンドと実際にフラッシュメモリモジュール2Bに受け付けられたコマンドの種類が一致しているか否かを確認でき、コマンド発行の確度を向上させることが可能である。
<実施の形態5>
図15はこの発明の実施の形態5であるフラッシュメモリ内蔵マイコンの基本的な構成を示すブロック図である。
実施の形態5は、フラッシュメモリ書換コマンド発行時のバスサイクル、特に第二コマンドのバスサイクルを延長し、1バスサイクル期間内にてコマンド書込信号IWEの立ち上がり後にウエイトサイクルを有するバスタイミングで動作する様に構成したことを特徴とする。
図16及び図17は実施の形態5のフラッシュメモリ内蔵マイコンによるブロック消去コマンド実行時における各信号の信号変化を示すタイミング図である。これらの図では、全バスサイクルが動作クロックCLKの3クロックサイクルで動作するように設定されている。
実施の形態5では、フラッシュ書換コマンドの第二コマンド発行終了後、同一バスサイクル中にウェイトサイクルWTが設けられており、フラッシュメモリ制御回路3C内のホールド信号HOLDの生成回路は、コマンド受付通知信号IPREBUSYがアクティブかつレディステータス信号RYIBYがビジーの条件でアクティブになるように設計される。このホールド信号HOLDにより、次のバスサイクルT6からの停止を開始可能である。
書換コマンド終了時、フラッシュメモリ制御回路3Cはレディステータス信号RYIBYが“L”→“H”に変化した時点から1バスサイクル以降にホールド信号HOLDを“H”から“L”に変化させて無効にする。ホールド信号HOLDを解除すると中断状態にあったプログラム実行処理が再開される。上記以外の構成及び動作は実施の形態2と同様である。
このように、実施の形態5によれば、ホールド信号HOLDの生成をコマンド受付通知信号IPREBUSYとレディステータス信号RYIBYのみで行うことができる。加えて、バスサイクルを他の実施の形態より動作クロックCLKの1周期分多い3周期に設定することにより、フラッシュ書換コマンドの第二コマンド発行終了後、同一バスサイクル中にウェイトサイクルWTを設けることができ、確実にバスサイクルT6以降をホールド期間に設定することができる。
1 CPU、2,2A,2B フラッシュメモリモジュール、3,3A〜3C フラッシュメモリ制御回路、4 アドレスバス、5 データバス、11 マイクロシーケンサ、12 チャージポンプ、13 メモリデコーダ、14 メモリブロック、15 アドレス/データ/制御信号入力回路。