説明

マイクロコンピュータ

【課題】不揮発性メモリの書換えが失敗した場合に、外部端子を介してモード切替えを行わずとも書換えプログラムを再起動できるマイクロコンピュータを提供する。
【解決手段】マイコンのCPUが書換えプログラムを実行すると、最初にフラッシュメモリのFLASHステータス0をクリアしてから当該メモリの全領域の書換えを行ない、最後にFLASHステータス0に書換え完了コードを書込む。そして、CPUが判定プログラムを実行すると、最初にフラッシュメモリのFLASHステータス0を読出し(ステップS1)、そのデータが書換え完了コードに一致しない場合(「NO」)、CPUはIDステータス2_1,2_2の読出しデータが共にIDコードに一致することを確認すると(ステップS5,「YES」)、書換えプログラムを再度実行する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、アプリケーションプログラムが記憶される書換え可能な不揮発性の第1メモリの書換えを、オンボード若しくはオンチップ上で実行可能に構成されるマイクロコンピュータに関する。
【背景技術】
【0002】
図12は、車両制御用のECU(Electronic Control Unit)を示すものである。ECU1は、基板2上にマイクロコンピュータ3やその他の図示しない周辺回路が搭載されて構成されている。そのマイコン3の制御プログラムは、フラッシュメモリ4のように書換え可能な不揮発性メモリに格納されている場合がある。そして、CPU5により実行されるフラッシュメモリ4上の制御プログラムは、デバッグやバージョンアップのため必要に応じて書換えを行うようにしている。
【0003】
フラッシュメモリ4の書換えを行う場合は、マイコン3を書換え用のモードに設定してリセットすることで、例えばマイコン3上のROM6に格納されている書換え用プログラムを起動し、CPU5が図示しない外部の書換え装置より転送されたデータを書き込む。例えば、特許文献1には、上記のようなフラッシュメモリの書換えに関する技術が開示されている。
【特許文献1】特開2000−20178号公報
【発明の開示】
【発明が解決しようとする課題】
【0004】
ところで、マイコンに対して外部よりリセットをかけることが可能な構成であれば、フラッシュメモリの書換えを行っている途中に電源電圧が低下したり、書換え装置との間の通信線が断線するなどして書換えが失敗しても、マイコンをリセットすることで書換え用プログラムを起動し、同じ手順を繰り返すことで書換えを再試行すれば良い。
しかしながら、フィールドにおいて実際にECUが動作している場合は外部よりリセット制御を行う必要はないことから、リセットを行うための端子を余分に設けるのは冗長であり、コストの増大に繋がる。そこで、ECUについてはパワーオンリセットのみが作用するように構成するのが好ましい。
【0005】
そして、ECUは、フィールドでは車両のバッテリからの電源供給を常時受けている状態にあるため、基本的にパワーオンリセットが発生することもない。また、リセットが発生しなければ、マイコンの動作モードを「書換えモード」等に切換える機会もないことから、モード切替え用の端子も不要となるはずである。
ところが、上記のような構成を想定すると、フラッシュメモリの書換えが途中で失敗すると書換えプログラムを起動する手段がなくなるため、フラッシュメモリの書換えを再度行うことができなくなってしまう。
【0006】
例えば、ECUがフラッシュメモリに書き込まれているアプリケーションプログラムを実行している通常動作状態で、外部の書込み装置より書換え指令が与えられたことを認識して書換えプログラムを起動すれば、1回は書換えを行うことができる。しかし、上記の書換えが途中で失敗すれば、それ以降アプリケーションプログラムは正常に実行されなくなるので、ECU上のCPUは書換え指令を認識することもできなくなる。従って、実際にはマイコンの端子数を減らすことが困難であった。
【0007】
本発明は上記事情に鑑みてなされたものであり、その目的は、不揮発性メモリの書換えが失敗した場合に、外部端子を介してモード切替えを行わずとも書換えプログラムを再起動できるマイクロコンピュータを提供することにある。
【課題を解決するための手段】
【0008】
請求項1記載のマイクロコンピュータによれば、CPUにより書換えプログラムが実行されると、最初に第1メモリの書換えチェック領域をクリアしてから当該メモリの全領域の書換えを行ない、最後に書換えチェック領域に書換え完了コードを書込む。そして、CPUにより判定プログラムが実行されると、最初に第1メモリの書換えチェック領域を読出す。
ここで、書換えチェック領域のデータが書換え完了コードに一致する場合は、第1メモリの書換えは正常に完了していることを示すので、CPUはアプリケーションプログラムを実行する。一方、前記データが書換え完了コードに一致しない場合は、第1メモリの書換えが途中で失敗したことを示すので、CPUは書換えプログラムを再度実行する。
【0009】
即ち、例えばマイクロコンピュータのパワーオンリセットが解除されると、CPUが最初に判定プログラムを実行するように設定しておけば、書換えチェック領域を参照することで第1メモリのアプリケーションプログラムが正常に書き換えられているか否かを判定でき、書換えが失敗していた場合は再試行することができる。従って、第1メモリの書換えを再試行するために、マイコンの外部端子としてリセット端子やモード設定用の端子を設ける必要がなくなり、マイコンのパッケージを小型化してコストの低下を図ることができる。
【0010】
請求項2記載のマイクロコンピュータによれば、CPUにより書換えプログラムが実行されると、第1メモリの2つの書換え許可ID領域に同一のIDコードが書込まれる。そして、CPUが判定プログラムを実行した場合に、書換えチェック領域より読み出されたデータが書換え完了コードに一致しなければ第1,第2書換え許可ID領域を夫々読出し、両者のデータが共に前記IDコードに一致すれば書換えプログラムを実行する。即ち、上記のようにIDコードが一致すれば、当該メモリに書き込みを行った主体は第1メモリに対する正当なアクセス権を有していることが確認されるので、不正な書き込みを防止することができる。
【0011】
請求項3記載のマイクロコンピュータによれば、CPUにより書換えプログラムが実行されると、第1メモリの2つのブロックに設定される第1,第2書換え許可ID領域に、同一のIDコードを書込み、CPUが判定プログラムを実行した場合に書換えチェック領域より読み出されたデータが書換え完了コードに一致しなければ、2つのブロックについて、第1,第2書換え許可ID領域を夫々読出す。そして、何れか一方のブロックにおける両者の読出しデータが共にIDコードに一致すれば書換えプログラムを実行する。
【0012】
即ち、第1メモリの2つのブロックについては、同時に消去や書き込みが行われることはない。そして、第1メモリの書換えが途中で失敗すると、そのタイミングによっては一方のブロックが書換えられていない場合が想定されるので、IDコードが確認できなくなる。そこで、書換えプログラムにおいて、2つのブロックに対して同じようにIDコードを書き込むようにして、各ブロック毎にIDコードの一致を判定すれば、何れか一方のブロックで確実に一致を確認することができる。
【0013】
請求項4記載のマイクロコンピュータによれば、CPUにより部分書換えプログラムが実行されると、最初に第1メモリの部分書換えチェック領域をクリアしてから当該メモリの書換えを開始位置から前記終了位置まで行ない、最後に部分書換えチェック領域に部分書換え完了コードを書込む。そして、CPUが判定プログラムを実行し、書換えチェック領域より読み出したデータが書換え完了コードに一致する場合は、続いてフラグ格納領域を参照し、許可が設定されていれば第1メモリの部分書換えチェック領域を読出す。
その読み出しデータが部分書換え完了コードに一致する場合はアプリケーションプログラムを実行し、前記データが部分書換え完了コードに一致しない場合は部分書換えプログラムを実行する。従って、第1メモリの一部だけを書換えている途中でその書換えが失敗した場合についても、請求項1と同様の効果を得ることができる。
【0014】
請求項5記載のマイクロコンピュータによれば、CPUが書換えプログラムを実行すると、第1メモリの第1,第2書換え許可ID領域に同一のIDコードを書込むと共に、フラグ格納領域への部分書換えの許可/禁止設定,開始位置及び終了位置の書き込み設定も行う。そして、CPUが判定プログラムを実行し、書換えチェック領域より読み出したデータが書換え完了コードに一致すれば、第1,第2書換え許可ID領域を夫々読出し、両者の読出しデータが共にIDコードに一致すればフラグ格納領域を参照する。従って、第1メモリの部分書き換えを行なう場合についても、IDコードの一致確認を行うことができる。
【0015】
請求項6記載のマイクロコンピュータによれば、請求項1における書換えチェック領域を全書換えチェック領域として、第1メモリには、請求項4における部分書換えの許可/禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが、前記全書換えチェック領域と共に当該第1メモリについて定められている最小書込み単位内のサイズで設定される。また、第1メモリの全書換え,部分書き換えについては、夫々請求項1,4と同様に実行される。ここで、「最小書込み単位」とは、1回のライトサイクルにおいて第1メモリに書き込まれるデータの最小サイズであり、マイクロコンピュータの設計仕様に応じて定められる。
【0016】
そして、CPUにより判定プログラムが実行されると、最初に第1メモリの全書換えチェック領域を読出し、そのデータが全書換え完了コードに一致しない場合は全書換えプログラムを実行する。また、前記データが全書換え完了コードに一致すれば続いてフラグ格納領域を参照し、許可が設定されていれば部分書換えチェック領域を読出し、そのデータが部分書換え完了コードに一致すればアプリケーションプログラムを実行し、前記データが部分書換え完了コードに一致しない場合は部分書換えプログラムを実行する。
即ち、第1メモリの部分書き換えに関する情報は、少なくとも全書換えが1回完了した後に意味を成すので、部分書き換え情報を、全書換えチェック領域と共に最小書込み単位内のサイズで持たせれば、情報量を低減して有効に利用できる。その結果、判定プログラムの実行をより短時間内に完了することができる。
【0017】
請求項7記載のマイクロコンピュータによれば、部分書換えチェック領域に、その次に部分書き換えを行なう対象とする領域について、部分書換えの許可/禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とを最小書込み単位内のサイズで設定し、その部分書換えチェック領域を1つ以上配置する。従って、部分書換えを、アドレスが不連続となる複数の領域についても行なうことができる。
【0018】
請求項8記載のマイクロコンピュータによれば、CPUは、判定プログラムを、リセット時に実行するので、第1メモリに対する書き込みが正常に行なわれているか否かをリセットが解除された場合にチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラムの実行を停止して、プログラムの暴走を未然に防止することができる。
【0019】
請求項9記載のマイクロコンピュータによれば、CPUは、判定プログラムを、低消費電力モードが解除された時点(ウエイクアップ時)に実行するので、第1メモリに対する書き込みが正常に行なわれているか否かをウエイクアップ時にチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラムの実行を停止して、プログラムの暴走を未然に防止することができる。
【発明を実施するための最良の形態】
【0020】
(第1実施例)
以下、本発明の第1実施例について図1乃至図5を参照して説明する。図5は、本発明のマイクロコンピュータ11の構成を示すブロック図である。マイコン11は、例えば、マイコン3と同様に車両制御用ECUを構成するもので、CPU12を中心として、ROM(第2メモリ)13,RAM14,フラッシュメモリ(第1メモリ)15,フラッシュコントローラ16,通信回路17などを備えており、これらはアドレスバス18及びデータバス19を介して接続されている。
【0021】
フラッシュメモリ15には、CPU12によって実行されるECUとしての制御プログラムであるユーザプログラム20が記憶されるようになっている。ROM13には、フラッシュメモリ15にユーザプログラム20を書き込むための書換えプログラム21と、ユーザプログラム20,書換えプログラム21の何れを実行するかを決定するため、フラッシュメモリ15のステータスを判定する判定プログラム22が記憶されている。フラッシュコントローラ16は、CPU12がフラッシュメモリ15にアクセスする場合に、フラッシュメモリ15のブロック管理やエラー訂正処理などを行なうものである。
【0022】
通信回路17は、例えば、UARTやその他のシリアル通信、又はCAN等の車内LANなどのプロトコルに対応した通信インターフェイスであり、フラッシュメモリ15のユーザ(アプリケーション)プログラム20を書換える場合には、外部の書換え装置23との間で通信を行うようになっている。そして、書換え装置23より転送された書換えデータ24は、RAM14に書き込まれる。
【0023】
次に、本実施例の作用について図1乃至図3も参照して説明する。尚、フラッシュメモリ15に対するユーザプログラム20の最初の書き込みは、ROMライタなどを使用して予め行われていることを前提とする(或いは、後述する図1のステップS6において「NO」と判断された場合に、ユーザプログラム20に分岐することに替えて書換えプログラム21に分岐させることで、フラッシュメモリ15に対する最初の書き込みを行なわせることも可能である)。
【0024】
図2は、フラッシュメモリ15のメモリマップを示すもので、図3は、書換えプログラム21による全書換え処理の手順、及びその書換え処理に伴うフラッシュメモリ15の状態変化を示すものである。図2に示すように、フラッシュメモリ15は、例えば、64Kバイトを単位とするブロック0〜nに分割されており、書換え処理もブロックを単位として行われる。
そして、先頭ブロック0には、「全書換え」の完了を示す「FLASHステータス0(書換えチェック領域)」と「ID領域2」とが配置され、終了ブロックnには「ID領域1」が配置されるようになっている。また、ブロック6は、一例として「部分書換え」が行われる場合の先頭ブロックに設定されており、「部分書換え」の完了を示す「FLASHステータス1(部分書換えチェック領域)」が配置されている。
【0025】
「FLASHステータス0」には、全書換え処理が完了した段階で、所定のデータ、例えば55AA…55AAHが書き込まれる。「FLASHステータス1」も同様に、部分書換え処理が完了した段階で、例えば「55AA…55AA(以下、データ値はHEXで示す)」が書き込まれる。「ID領域2」と「ID領域1」には同じデータが書き込まれるようになっており、後述する照合確認のために使用される。
これらの「ID領域」には、フラッシュメモリ15の書換えを許可するIDやパスワードなどが格納され、当該領域の先頭と末尾には、同一のIDステータス(IDコード)1,2が書き込まれる。また、部分書換えの許可/禁止を設定するためのフラグ格納領域と、部分書換えの開始ブロック番号,終了ブロック番号を格納する領域や、その他プログラムIDやパスワードなどが格納される。
【0026】
<全書換え処理>
図3に示す全書換え処理において、CPU12は、最初にブロック0の「FLASHステータス0」にデータ「0000…0000」を書き込んでクリアしてから、各ブロック0,…,6,…,n毎に、「消去」、「書込み」、「ベリファイ」を順次行ってゆく。そして、最後に「FLASHステータス0」にデータ「55AA…55AA」を書き込んで処理を終了する。
尚、ID領域2,1の「部分書換え」に関するデータは、後に「部分書換え」を行なうケースがあるか否かに応じて、この段階で許可/禁止の設定や、開始,終了ブロック番号の設定を書き込んでおくようにする。
【0027】
また、図3には、全書換え処理の進行に伴い、「FLASHステータス0,1」,ID領域2,1の「IDステータス1,2」の書き込みデータが変化する状態を示している。フラッシュメモリ15に既に書き込みが行われていると、「FLASHステータス0」のデータは「55AA…55AA」になっている。そして、最初にデータ「0000…0000」が書き込まれるが、次のブロック0の消去で「FFFF…FFFF」に変化し、次の「書込み」では「FLASHステータス0」の書き込みは行わないようにして、上記データ値を維持する。そして、最後の書込み処理で「55AA…55AA」に戻る。従って、全書換え処理中の「FLASHステータス0」は、「55AA…55AA」以外の値になっている。
【0028】
また、「FLASHステータス1」も、既に書き込みが行われている状態では初期値が「55AA…55AA」になっているが、ブロック6の消去で「FFFF…FFFF」に変化し、次の「書込み」で「55AA…55AA」に書き戻される。ID領域2の「IDステータス2_1,2_2」も、初期値は「55AA…55AA」、ブロック0の消去で「FFFF…FFFF」、次の「書込み」で「55AA…55AA」に書き戻される。ID領域1の「IDステータス1_1,1_2」も、同様に初期値は「55AA…55AA」、ブロックnの消去で「FFFF…FFFF」、次の「書込み」で「55AA…55AA」に書き戻される。
【0029】
尚、全書換え処理中の「ベリファイ」において書込みエラーが検出されると、CPU12はその時点で内部リセットを発生させてリセットベクタから実行を開始し、判定プログラム22、即ち、図1に示すフラッシュステータス判定処理を実行するようになっている。また、例えば、全書換え処理を開始してから終了するまでの時間をタイマによりカウントし、所定時間内に処理が終了しない場合(タイムアウト)に内部リセットを発生させても良い。図1において、CPU12は、フラッシュメモリ15の「FLASHステータス0」を読み出して、そのデータ値が書換え完了コード「55AA…55AA」に一致するかどうかを判定する(ステップS1)。
【0030】
「FLASHステータス0」のデータ値が書換え完了コードに一致しなければ(「NO」)、CPU12は、ID領域2の「IDステータス2_1,2_2」が何れも正常コード「55AA…55AA」であるか否かを判断する(ステップS5)。そして、何れも正常コードであれば(「YES」)、ID領域2に書き込まれているIDやパスワードは有効であると判定し、書換えプログラム21の実行を開始する。この場合、書換えプログラム21は、ID領域2に書き込まれているIDやパスワードについて認証を行い、その認証結果が「OK」であれば図3のフローチャートの処理を開始する。
【0031】
また、ステップS5において「NO」と判断すると、CPU12はステップS6に移行し、ID領域1の「IDステータス1_1,1_2」が何れも正常コード「55AA…55AA」であるか否かを判断する。そして、何れも正常コードであれば(「YES」)、ID領域1に書き込まれているIDやパスワードは有効であると判定し、書換えプログラム21の実行を開始する。
即ち、図3に示すように、ID領域2,1の何れか一方について、正しく書き込みが行われない状態で全書換え処理が終了すると、そのIDステータスは「FFFF…FFFFF」となっており、正常なデータが書き込まれていない。しかし、他方のID領域には必ず正常なデータが書き込まれているので、何れか有効な方を選択するようにしている。
【0032】
また、ID領域2,1の何れも正常なデータでない場合(ステップS6,「NO」)、CPU12はユーザプログラム20を実行する。この場合は、何らかの理由により、ユーザプログラム20に対する一番最初の書き込みが正常に行われていなかったか、或いはフラッシュメモリ15の一部やバス18,19に故障が発生した、といったような異常状態と推定される。
従って、このまま書換えを実行すると、フラッシュメモリ15に異常なデータが書き込まれるおそれがあることから、ユーザプログラム20に分岐する。そして、当該プログラム20に用意されているメモリチェックルーチンが正常であれば、そのチェックルーチンによりフラッシュメモリ15のチェックサムを計算する。その結果、異常が判定されればエラー処理を行う。この場合、フラッシュメモリ15に正常な書き込みを行うことは不能であるから、必要に応じて部品交換などの処置を行うようにする。
【0033】
<部分書換え処理>
また、図4は、フラッシュメモリ15の部分書換え処理を示す。部分書換え処理については、前述したように、フィールドにおいてECU−マイコン11に電源が投入された状態のまま、ユーザプログラム20の一部を書換えてバージョンアップを行う場合を想定している。従って、マイコン11がユーザプログラム20を実行している状態で、書換え装置23を接続し、その書換え装置23が部分書換え指令を発行すると、ユーザプログラム20中においてその部分書換え指令を認識し、図4の部分書換え処理を実行する。また、フラッシュメモリ15のブロック0は、部分書換えの対象としないように予め決定されている。
【0034】
図4は、ブロック6の部分書換えを行なう場合であり、ID領域の開始ブロック番号,終了ブロック番号は何れも「6」に設定されている。尚、部分書換えプログラムは、書換えプログラム21の一部となっている。CPU12は、最初にブロック6の「FLASHステータス1」にデータ「0000…0000」を書き込んでクリアしてから、ブロック6の「消去」、「書込み」、「ベリファイ」を順次行う。そして、最後に「FLASHステータス1」にデータ「55AA…55AA」を書き込んで処理を終了する。
【0035】
また、図4には、部分書換え処理の進行に伴い、「FLASHステータス1」の書き込みデータが変化する状態を示している。尚、ブロック6のみしか書換えを行なわないため、「FLASHステータス0」,ID領域2,1の「IDステータス1,2」のデータは「55AA…55AA」のままである。
【0036】
この場合、フラッシュメモリ15に既に書き込みが行われているので、「FLASHステータス1」のデータは「55AA…55AA」になっている。そして、最初にデータ「0000…0000」が書き込まれるが、次のブロック6の消去で「FFFF…FFFF」に変化し、次の「書込み」では「FLASHステータス1」の書き込みは行わず、上記データ値を維持する。そして、最後の書込み処理で「55AA…55AA」に戻る。従って、部分書換え処理中の「FLASHステータス0」は、「55AA…55AA」以外の値になっている。
【0037】
また、部分書換えにおけるブロック6の「ベリファイ」において書込みエラーが検出された場合も、CPU12は同様にその時点で内部リセットを発生させてリセットベクタから実行を開始し、図1に示すフラッシュステータス判定処理を実行する。この場合、「FLASHステータス0」のデータ値は書換え完了コードに一致するので、CPU12はステップS1で「YES」と判定し、ステップS5と同様にID領域2の「IDステータス2_1,2_2」が何れも正常コードであるか否かを判断する(ステップS2)。
【0038】
ID領域2のステータスが正常コードであれば(「YES」)、CPU12は同領域において部分書換えが「許可」に設定されているか否かを判断する(ステップS3)。そして、「許可」に設定されていれば(「YES」)、ブロック6の「FLASHステータス1」を読出し、データ値が書換え完了コード「55AA…55AA」に一致するか否かを判断する(ステップS4)。書換え完了コードに一致しなければ(「NO」)書換えプログラム21に分岐し、図4の部分書換え処理を再試行する。
【0039】
尚、部分書換え処理の場合、ブロック0は書換え対象より外されているので、基本的にステップS2では「YES」と判断されるはずであり、「NO」と判断されるのは、ステップS6で「NO」と判断される場合と同様に異常な状態である。従って、同様にユーザプログラム20に分岐し、メモリチェックルーチンを実行する。また、ステップS5,S6のように、ブロックnのID領域1の確認を重ねて行う必要はない。
【0040】
また、CPU12における内部リセットの発生は、その他、ウォッチドックタイマなどにより暴走を検知した場合やバスエラーなどによっても発生するので、その場合も図1の判定処理は実行される。この時、フラッシュメモリ15の書換えが正常に行われていれば、判定処理ではステップS1〜S4において何れも「YES」と判定されるので、CPU12は判定処理を抜けてユーザプログラム20へ分岐し、当該プログラム20を実行する。また、ステップS3において、部分書換え処理が「禁止」に設定されている場合も(「NO」)、ユーザプログラム20に分岐する。
【0041】
以上のように本実施例によれば、マイコン11のCPU12により書換えプログラム21が実行されると、最初にフラッシュメモリ15のFLASHステータス0をクリアしてから当該メモリ15の全領域の書換えを行ない、最後にFLASHステータス0に書換え完了コード「55AA…55AA」を書込む。そして、CPU12が判定プログラム22を実行すると、最初にフラッシュメモリ15のFLASHステータス0を読出し、そのデータが書換え完了コードに一致しない場合、CPU12は書換えプログラム21を再度実行する。
【0042】
即ち、CPU12が判定プログラム22を実行してFLASHステータス0を参照すれば、フラッシュメモリ15のユーザプログラム20が正常に書き換えられているか否かを判定でき、書換えが失敗していた場合は再試行できる。従って、フラッシュメモリ15の書換えを再試行するために、マイコン11の外部端子としてリセット端子やモード設定用の端子を設ける必要がなくなり、マイコン11のパッケージを小型化してコストの低下を図ることができる。
【0043】
また、CPU12が書換えプログラム21を実行すると、フラッシュメモリ15の2つのIDステータス2_1,2_2に同一のIDコードを書込み、判定プログラム22を実行した場合に、FLASHステータス0のデータが書換え完了コードに一致しなければIDステータス2_1,2_2を夫々読出し、両者のデータが共に前記IDコードに一致すれば書換えプログラム21を実行するので、メモリ15に書き込みを行った主体が正当なアクセス権を有していることを確認して、不正な書き込みを防止できる。
【0044】
更に、フラッシュメモリ15の2つのブロック0,nに設定されるIDステータス2,1に同一のIDコードを書込み、CPU12が判定プログラム22を実行し、FLASHステータス0のデータが書換え完了コードに一致しなければ、2つのブロック0,nについてIDステータス2,1を夫々読出し、何れか一方のブロックで両者の読出しデータが共にIDコードに一致すれば書換えプログラム21を実行する。従って、フラッシュメモリ15の書換えが途中で失敗した場合でも、何れか一方のブロックで確実にIDコードの一致を確認できる。
【0045】
また、CPU12により書換えプログラム21の一部である部分書換えプログラムが実行されると、最初にフラッシュメモリ15のFLASHステータス1をクリアし、当該メモリの書換えを開始位置から終了位置まで行ない、最後に部分FLASHステータス1に部分書換え完了コード「55AA…55AA」を書込む。
そして、CPU12が判定プログラム22を実行し、FLASHステータス1のデータが書換え完了コードに一致する場合は、続いてフラグ格納領域を参照し、許可が設定されていればFLASHステータス1を読出す。その読み出しデータが部分書換え完了コードに一致しない場合は部分書換えプログラムを実行するので、フラッシュメモリ15の一部だけを書換えている途中でその書換えが失敗した場合について、全領域書換えの場合と同様の効果を得ることができる。例えば、フィールドにおいてユーザプログラム20の一部を書換えてバージョンアップを図る場合などに有効である。
【0046】
加えて、CPU12が書換えプログラム21を実行すると、フラッシュメモリ15のIDステータス2_1,2_2に同一のIDコードを書込むと共にフラグ格納領域への部分書換えの許可/禁止設定,開始位置及び終了位置の書き込み設定も行う。そして、CPU12が判定プログラム22を実行し、FLASHステータス0より読み出したデータが書換え完了コードに一致すれば、IDステータス2_1,2_2を夫々読出し、両者の読出しデータが共にIDコードに一致すればFLASHステータ1を参照するので、フラッシュメモリ15の部分書き換えを行なう場合についても、IDコードの一致確認を行うことができる。
【0047】
更にまた、CPU12は、判定プログラム22を、リセット時に実行するので、フラッシュメモリ15に対する書き込みが正常に行なわれているか否かをリセットが解除された場合にチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラム20の実行を停止して、プログラム20の暴走を未然に防止することができる。
【0048】
(第2実施例)
図6乃至図9は本発明の第2実施例を示すものであり、第1実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分について説明する。図6は、第1実施例の図2相当図である。第2実施例では、先頭ブロック0の冒頭16バイトに、「FLASHステータス0」と共に、部分書換えの許可/禁止を設定するためのフラグ格納領域と、部分書換えの開始ブロック番号,終了ブロック番号を格納する領域とが配置されている。そして、「ID領域2」,「ID領域1」は削除されている。また、終了ブロックnについては、第1実施例と異なり、格別な領域設定は行われていない。ブロック6は、第1実施例と同様に「部分書換え」が行われる場合の先頭ブロックに設定され、「FLASHステータス1」が配置されている。
【0049】
尚、16バイトは、フラッシュコントローラ16がフラッシュメモリ15に対してデータの書込みを行う場合の最小書込み単位として設定されているサイズである。即ち、CPU12がフラッシュメモリ15に1バイトのデータを書き込む場合でも、フラッシュコントローラ16はエラーチェックを行なうため、上記1バイトデータのアドレスを含む連続した16バイトのデータを単位として、書込み(リード・モディファイ・ライト)を行なうようになっている。
【0050】
次に、第2実施例の作用について説明する。
<全書換え処理>
図7に示す全書換え処理において、部分書換え許可禁止フラグは「許可」=「01H」,部分書換え開始ブロック/終了ブロックは「0006H」に設定されている。CPU12は、最初にブロック0の「FLASHステータス0」にデータ「0000…0000」を書き込んでクリアすると共に、部分書換え許可禁止フラグ,部分書換え開始ブロック/終了ブロックの格納領域もゼロクリアする。そして、第1実施例と同様に、各ブロック0,…,6,…,n毎に、「消去」、「書込み」、「ベリファイ」を順次行ってゆく。そして、最後に「FLASHステータス0」にデータ「55AA…55AA」を書き込むと共に、部分書換え許可禁止フラグを「01H」に、部分書換え開始ブロック/終了ブロックに「0006H」を書き込んで処理を終了する。すなわち、「FLASHステータス0,1」に関しては、データ値の変化は第1実施例と全く同様である。
【0051】
<部分書換え処理>
また、図8は、フラッシュメモリ15の部分書換え処理を示す。部分書換え処理についても、「FLASHステータス1」に関するデータ値の変化は第1実施例と全く同様である。そして、「FLASHステータス0」,部分書換え許可禁止フラグの状態、並びに部分書換え開始ブロック/終了ブロックの値は初期値のまま変化しない。
図9は、図1相当のフラッシュステータス判定処理であり、ステップS1,S3,S4のみとなっている。すなわち、第2実施例ではIDステータスが正常コードであるか否かをチェックしないため、判定処理が簡単になっている。
【0052】
以上のように第2実施例によれば、部分書換えの許可/禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とを、全書換えチェック領域と共にフラッシュメモリ15の最小書込み単位のサイズで設定した。即ち、フラッシュメモリ15の部分書き換えに関する情報は、少なくとも全書換えが1回完了した後に意味を成すので、部分書き換え情報を、全書換えチェック領域と共に最小書込み単位のサイズで持たせれば、情報量を低減した上で有効に利用することができる。
【0053】
また、本発明に関連する従来技術の1つに、国際公開第WO2004/031966号パンフレットに開示されているものがある。この従来技術では、複数のブロック(最小消去単位)からなるメモリについて、どのブロックが消去済みであるかを判断するため、各ブロックにフラグを設けてそのフラグの状態を判定することで、消去済みであるか否かを決定するようにしている。しかしながら、マイコンの起動時に各ブロック毎に設けられているフラグの状態を判定すると、判定に時間を要するためプログラムの起動が遅れることになり、その起動遅れは、メモリのブロック数が増加するのに伴って大きくなってしまう。
【0054】
データメモリとしての用途では、起動時にはそのメモリを使用するホストマイコン自体が初期化を行なうため、その間にメモリの判定を行うことも可能である。ところが、プログラムメモリとしての用途では、メモリの処理により起動が遅れることは、プログラム,即ち、マイコン自体の起動が遅れることに繋がってしまう。
これに対して、第2実施例によれば、フラッシュメモリ15について第1実施例のようにIDコードをチェックしないので、判定プログラムの実行をより短時間内に完了することができる。
【0055】
(第3実施例)
図10及び図11は本発明の第3実施例を示すものであり、第2実施例と異なる部分のみ説明する。第3実施例は、部分書換えを行うブロックが複数ある場合に対応した処理を示す。図10に示すように、部分書換えを行うブロックが「6,11」の2ブロックであるとする。この場合、ブロック0のFLASHステータス0には、第2実施例と同様にブロック6の部分書換え(1)を行うための情報が配置され、ブロック6のFLASHステータス1には、ブロック11の部分書換え(2)を行うための情報,すなわち、部分書換え(2)の許可/禁止を設定するためのフラグ格納領域と、部分書換えの開始ブロック番号,終了ブロック番号を格納する領域とが計16バイトで配置されている。
【0056】
そして、ブロック11には、部分書換えチェック領域としてFLASHステータス2が配置されており、そのFLASHステータス2と共に、更に続けて部分書換えを行う場合に対応して、部分書換え(3)を行うための情報が計16バイトで配置されている。部分書換え(3)を行わない場合、許可/禁止設定フラグは「禁止」に設定される。
図11は、図9相当図であり、図9におけるステップS3,S4が、部分書換え(1)に対応するステップS3’,S4’となっている。続いて、部分書換え(2)に対応する判断ステップが、ステップS11,S12として配置されている。
【0057】
尚、部分書換えが最大2ブロックまでと規定されている場合は図11に示す判定処理で対応すれば良く、部分書換えが最大3ブロックまで行われる場合は、ステップS12に続いて、部分書換え(3)に対応する判断ステップを、ステップS13,S14として配置すれば良い。その場合、第3実施例のケースでは、部分書換え(3)の許可/禁止設定フラグが「禁止」に設定されるため、ステップS13で(NO)と判断してユーザプログラムに移行することになる。
【0058】
以上のように第3実施例によれば、ブロック6の部分書換えチェック領域に、その次に部分書き換えを行なう対象とする領域について、部分書換えの許可/禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とを最小書込み単位のサイズで設定し、その部分書換えチェック領域を1つ以上配置するので、部分書換えを、アドレスが不連続となる複数のブロックについても行なうことができる。
【0059】
本発明は上記し又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形が可能である。
ブロックnに、ブロック0と同じID領域を設け、ステップS5,S6で二重にチェックする処理は、必要に応じて行えば良い。また、ブロック0におけるIDコードのチェックも、必要に応じて行えば良い。
FLASHステータス0,1やID領域2,1をフラッシュメモリ15のどこに配置するかは、適宜変更して実施しても良い。
書換え完了コードやIDコードのデータ値についても、適宜変更して実施可能である。
ブロック0を、部分書き換えの対象としても良い。
フラッシュメモリ15のブロック容量は、64Kバイトに限らない。
第1メモリは、ブロック単位で書換えを行うものに限ることはない。また、書き換えを行なう際に、「ベリファイ」処理はメモリの仕様に応じて実施すれば良い。
更に、ステップS2におけるチェックも必要に応じて行えば良い。
部分書換え処理についても、仕様上必要とされる場合に実施すれば良い。
書換えデータ24は、RAM14に一括転送される場合に限らず、書換え装置23より順次送信されるデータを受信しながら書換えを行っても良い。
【0060】
マイコン11が、動作用クロックの供給を停止した状態で待機する低消費電力モード(スリープ,ストップモード)を実行可能に構成されている場合、CPU12は、判定プログラム22を、低消費電力モードの解除(ウエイクアップ)時に実行するようにしても良い。斯様に構成すれば、フラッシュメモリ15に対する書き込みが正常に行なわれているか否かをウエイクアップ時にもチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラム20の実行を停止して、プログラム20の暴走を未然に防止することができる。
最小書き込み単位は、16バイトに限ることはなく、マイクロコンピュータの個別の仕様に応じて適宜変更すれば良い。
フラッシュコントローラ16も、必要に応じて設ければ良く、CPU12が直接フラッシュメモリ15に書き込みを行っても良い。
第2,第3実施例における「FLASHステータス0,1」等と、部分書換えに関する情報との合計サイズは、最小書き込み単位より小さくても良い。
車両制御用のECUを構成するマイクロコンピュータに限ることなく、書換え可能な不揮発性メモリを備えているマイクロコンピュータであれば適用可能である。
【図面の簡単な説明】
【0061】
【図1】本発明の第1実施例であり、フラッシュステータス判定処理の内容を示すフローチャート
【図2】フラッシュメモリのメモリマップ
【図3】書換えプログラムによる全書換え処理の手順、及びその書換え処理に伴うフラッシュメモリの状態変化を示す図
【図4】部分書換え処理に対応する図3相当図
【図5】マイクロコンピュータの構成を示すブロック図
【図6】本発明の第2実施例を示す図2相当図
【図7】図3相当図
【図8】図4相当図
【図9】図1相当図
【図10】本発明の第3実施例を示す図6相当図
【図11】図9相当図
【図12】従来のECUにおけるフラッシュメモリの書換え状態を示す図
【符号の説明】
【0062】
図面中、11はマイクロコンピュータ、12はCPU、13はROM(第2メモリ)、15はフラッシュメモリ(第1メモリ)、20はユーザプログラム(アプリケーションプログラム)、21は書換えプログラム(部分書換えプログラム)を示す。

【特許請求の範囲】
【請求項1】
アプリケーションプログラムが記憶されている書換え可能な不揮発性の第1メモリと、この第1メモリの書換えを行なうための書換えプログラム,及び前記第1メモリの書換え判定を行うための判定プログラムが記憶されている第2メモリと、前記各プログラムを読み出して実行するCPUとを備えてなるマイクロコンピュータにおいて、
前記CPUにより前記書換えプログラムが実行されると、最初に前記第1メモリの書換えチェック領域をクリアしてから当該メモリの全領域の書換えを行ない、最後に前記書換えチェック領域に書換え完了コードを書込み、
前記CPUにより前記判定プログラムが実行されると、最初に前記第1メモリの書換えチェック領域を読出し、読み出されたデータが前記書換え完了コードに一致する場合は前記アプリケーションプログラムを実行し、前記データが前記書換え完了コードに一致しない場合は前記書換えプログラムを実行することを特徴とするマイクロコンピュータ。
【請求項2】
前記CPUにより前記書換えプログラムが実行されると、前記第1メモリの第1,第2書換え許可ID領域に、同一のIDコードを書込み、
前記CPUにより前記判定プログラムが実行され、前記第1メモリの書換えチェック領域より読み出されたデータが前記書換え完了コードに一致しない場合は、前記第1,第2書換え許可ID領域を夫々読出し、両者の読出しデータが共に前記IDコードに一致する場合は、前記書換えプログラムを実行することを特徴とする請求項1記載のマイクロコンピュータ。
【請求項3】
前記第1メモリの書換えが、所定容量のブロックを単位として行われる場合、
前記CPUにより前記書換えプログラムが実行されると、前記第1メモリの2つのブロックに設定される第1,第2書換え許可ID領域に、同一のIDコードを書込み、
前記CPUにより前記判定プログラムが実行され、前記第1メモリの書換えチェック領域より読み出されたデータが前記書換え完了コードに一致しない場合は、前記2つのブロックについて、前記第1,第2書換え許可ID領域を夫々読出し、何れか一方のブロックにおける両者の読出しデータが共に前記IDコードに一致する場合は、前記書換えプログラムを実行することを特徴とする請求項2記載のマイクロコンピュータ。
【請求項4】
前記第2メモリには、前記第1メモリの部分書換えを行なうための部分書換えプログラムも記憶されており、
前記第1メモリには、前記部分書換えの許可/禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが設定され、
前記CPUにより前記部分書換えプログラムが実行されると、最初に前記第1メモリの部分書換えチェック領域をクリアしてから当該メモリの書換えを前記開始位置から前記終了位置まで行ない、最後に前記部分書換えチェック領域に部分書換え完了コードを書込み、
前記CPUにより前記判定プログラムが実行され、前記第1メモリの書換えチェック領域より読み出されたデータが前記書換え完了コードに一致する場合は、続いて前記フラグ格納領域を参照し、前記許可が設定されていれば前記部分書換えチェック領域を読出し、読み出されたデータが前記部分書換え完了コードに一致する場合は前記アプリケーションプログラムを実行し、前記データが前記部分書換え完了コードに一致しない場合は前記部分書換えプログラムを実行することを特徴とする請求項1乃至3の何れかに記載のマイクロコンピュータ。
【請求項5】
前記CPUにより前記書換えプログラムが実行されると、前記第1メモリの第1,第2書換え許可ID領域に同一のIDコードを書込むと共に、前記フラグ格納領域への部分書換えの許可/禁止設定,前記開始位置及び終了位置の書き込み設定も行い、
前記CPUにより前記判定プログラムが実行され、前記書換えチェック領域より読み出されたデータが前記書換え完了コードに一致する場合は、前記第1,第2書換え許可ID領域を夫々読出し、両者の読出しデータが共に前記IDコードに一致すると、前記フラグ格納領域を参照することを特徴とする請求項4記載のマイクロコンピュータ。
【請求項6】
アプリケーションプログラムが記憶されている書換え可能な不揮発性の第1メモリと、この第1メモリの全書換えを行なうための全書換えプログラム,及び前記第1メモリの書換え判定を行うための判定プログラムが記憶されている第2メモリと、前記各プログラムを読み出して実行するCPUとを備えてなるマイクロコンピュータにおいて、
前記CPUにより前記全書換えプログラムが実行されると、最初に前記第1メモリの全書換えチェック領域をクリアしてから当該メモリの全領域の書換えを行ない、最後に前記書換えチェック領域に全書換え完了コードを書込み、
前記第2メモリには、前記第1メモリの部分書換えを行なうための部分書換えプログラムも記憶されており、
前記第1メモリには、前記部分書換えの許可/禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが、前記全書換えチェック領域と共に当該第1メモリについて定められている最小書込み単位内のサイズで設定され、
前記CPUにより前記部分書換えプログラムが実行されると、最初に前記第1メモリの部分書換えチェック領域をクリアしてから当該メモリの書換えを前記開始位置から前記終了位置まで行ない、最後に前記部分書換えチェック領域に部分書換え完了コードを書込み、
前記CPUにより前記判定プログラムが実行されると、最初に前記第1メモリの全書換えチェック領域を読出し、読み出されたデータが前記全書換え完了コードに一致しない場合は前記全書換えプログラムを実行し、前記データが前記全書換え完了コードに一致する場合は、続いて前記フラグ格納領域を参照し、前記許可が設定されていれば前記部分書換えチェック領域を読出し、読み出されたデータが前記部分書換え完了コードに一致する場合は前記アプリケーションプログラムを実行し、前記データが前記部分書換え完了コードに一致しない場合は前記部分書換えプログラムを実行することを特徴とするマイクロコンピュータ。
【請求項7】
前記部分書換えチェック領域には、その次に部分書き換えを行なう対象とする領域について、前記部分書換えの許可/禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが前記最小書込み単位内のサイズで設定されており、
前記部分書換えチェック領域を1つ以上備えることを特徴とする請求項6記載のマイクロコンピュータ。
【請求項8】
前記CPUは、前記判定プログラムを、リセット時に実行することを特徴とする請求項1乃至7の何れかに記載のマイクロコンピュータ。
【請求項9】
前記CPUは、前記判定プログラムを、低消費電力モードが解除された時点に実行することを特徴とする請求項1乃至8の何れかに記載のマイクロコンピュータ。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate


【公開番号】特開2008−165729(P2008−165729A)
【公開日】平成20年7月17日(2008.7.17)
【国際特許分類】
【出願番号】特願2007−200839(P2007−200839)
【出願日】平成19年8月1日(2007.8.1)
【出願人】(000004260)株式会社デンソー (27,639)
【Fターム(参考)】