(57)【要約】【課題】不揮発性メモリの書換えが失敗した場合に、外部端子を介してモード切替えを行わずとも書換えプログラムを再起動できるマイクロコンピュータを提供する。【解決手段】マイコンのＣＰＵが書換えプログラムを実行すると、最初にフラッシュメモリのＦＬＡＳＨステータス０をクリアしてから当該メモリの全領域の書換えを行ない、最後にＦＬＡＳＨステータス０に書換え完了コードを書込む。そして、ＣＰＵが判定プログラムを実行すると、最初にフラッシュメモリのＦＬＡＳＨステータス０を読出し（ステップＳ１）、そのデータが書換え完了コードに一致しない場合（「ＮＯ」）、ＣＰＵはＩＤステータス２＿１，２＿２の読出しデータが共にＩＤコードに一致することを確認すると（ステップＳ５，「ＹＥＳ」）、書換えプログラムを再度実行する。【選択図】図１
2008165729.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムが記憶されている書換え可能な不揮発性の第１メモリと、この第１メモリの書換えを行なうための書換えプログラム，及び前記第１メモリの書換え判定を行うための判定プログラムが記憶されている第２メモリと、前記各プログラムを読み出して実行するＣＰＵとを備えてなるマイクロコンピュータにおいて、
前記ＣＰＵにより前記書換えプログラムが実行されると、最初に前記第１メモリの書換えチェック領域をクリアしてから当該メモリの全領域の書換えを行ない、最後に前記書換えチェック領域に書換え完了コードを書込み、
前記ＣＰＵにより前記判定プログラムが実行されると、最初に前記第１メモリの書換えチェック領域を読出し、読み出されたデータが前記書換え完了コードに一致する場合は前記アプリケーションプログラムを実行し、前記データが前記書換え完了コードに一致しない場合は前記書換えプログラムを実行することを特徴とするマイクロコンピュータ。
【請求項２】
前記ＣＰＵにより前記書換えプログラムが実行されると、前記第１メモリの第１，第２書換え許可ＩＤ領域に、同一のＩＤコードを書込み、
前記ＣＰＵにより前記判定プログラムが実行され、前記第１メモリの書換えチェック領域より読み出されたデータが前記書換え完了コードに一致しない場合は、前記第１，第２書換え許可ＩＤ領域を夫々読出し、両者の読出しデータが共に前記ＩＤコードに一致する場合は、前記書換えプログラムを実行することを特徴とする請求項１記載のマイクロコンピュータ。
【請求項３】
前記第１メモリの書換えが、所定容量のブロックを単位として行われる場合、
前記ＣＰＵにより前記書換えプログラムが実行されると、前記第１メモリの２つのブロックに設定される第１，第２書換え許可ＩＤ領域に、同一のＩＤコードを書込み、
前記ＣＰＵにより前記判定プログラムが実行され、前記第１メモリの書換えチェック領域より読み出されたデータが前記書換え完了コードに一致しない場合は、前記２つのブロックについて、前記第１，第２書換え許可ＩＤ領域を夫々読出し、何れか一方のブロックにおける両者の読出しデータが共に前記ＩＤコードに一致する場合は、前記書換えプログラムを実行することを特徴とする請求項２記載のマイクロコンピュータ。
【請求項４】
前記第２メモリには、前記第１メモリの部分書換えを行なうための部分書換えプログラムも記憶されており、
前記第１メモリには、前記部分書換えの許可／禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが設定され、
前記ＣＰＵにより前記部分書換えプログラムが実行されると、最初に前記第１メモリの部分書換えチェック領域をクリアしてから当該メモリの書換えを前記開始位置から前記終了位置まで行ない、最後に前記部分書換えチェック領域に部分書換え完了コードを書込み、
前記ＣＰＵにより前記判定プログラムが実行され、前記第１メモリの書換えチェック領域より読み出されたデータが前記書換え完了コードに一致する場合は、続いて前記フラグ格納領域を参照し、前記許可が設定されていれば前記部分書換えチェック領域を読出し、読み出されたデータが前記部分書換え完了コードに一致する場合は前記アプリケーションプログラムを実行し、前記データが前記部分書換え完了コードに一致しない場合は前記部分書換えプログラムを実行することを特徴とする請求項１乃至３の何れかに記載のマイクロコンピュータ。
【請求項５】
前記ＣＰＵにより前記書換えプログラムが実行されると、前記第１メモリの第１，第２書換え許可ＩＤ領域に同一のＩＤコードを書込むと共に、前記フラグ格納領域への部分書換えの許可／禁止設定，前記開始位置及び終了位置の書き込み設定も行い、
前記ＣＰＵにより前記判定プログラムが実行され、前記書換えチェック領域より読み出されたデータが前記書換え完了コードに一致する場合は、前記第１，第２書換え許可ＩＤ領域を夫々読出し、両者の読出しデータが共に前記ＩＤコードに一致すると、前記フラグ格納領域を参照することを特徴とする請求項４記載のマイクロコンピュータ。
【請求項６】
アプリケーションプログラムが記憶されている書換え可能な不揮発性の第１メモリと、この第１メモリの全書換えを行なうための全書換えプログラム，及び前記第１メモリの書換え判定を行うための判定プログラムが記憶されている第２メモリと、前記各プログラムを読み出して実行するＣＰＵとを備えてなるマイクロコンピュータにおいて、
前記ＣＰＵにより前記全書換えプログラムが実行されると、最初に前記第１メモリの全書換えチェック領域をクリアしてから当該メモリの全領域の書換えを行ない、最後に前記書換えチェック領域に全書換え完了コードを書込み、
前記第２メモリには、前記第１メモリの部分書換えを行なうための部分書換えプログラムも記憶されており、
前記第１メモリには、前記部分書換えの許可／禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが、前記全書換えチェック領域と共に当該第１メモリについて定められている最小書込み単位内のサイズで設定され、
前記ＣＰＵにより前記部分書換えプログラムが実行されると、最初に前記第１メモリの部分書換えチェック領域をクリアしてから当該メモリの書換えを前記開始位置から前記終了位置まで行ない、最後に前記部分書換えチェック領域に部分書換え完了コードを書込み、
前記ＣＰＵにより前記判定プログラムが実行されると、最初に前記第１メモリの全書換えチェック領域を読出し、読み出されたデータが前記全書換え完了コードに一致しない場合は前記全書換えプログラムを実行し、前記データが前記全書換え完了コードに一致する場合は、続いて前記フラグ格納領域を参照し、前記許可が設定されていれば前記部分書換えチェック領域を読出し、読み出されたデータが前記部分書換え完了コードに一致する場合は前記アプリケーションプログラムを実行し、前記データが前記部分書換え完了コードに一致しない場合は前記部分書換えプログラムを実行することを特徴とするマイクロコンピュータ。
【請求項７】
前記部分書換えチェック領域には、その次に部分書き換えを行なう対象とする領域について、前記部分書換えの許可／禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが前記最小書込み単位内のサイズで設定されており、
前記部分書換えチェック領域を１つ以上備えることを特徴とする請求項６記載のマイクロコンピュータ。
【請求項８】
前記ＣＰＵは、前記判定プログラムを、リセット時に実行することを特徴とする請求項１乃至７の何れかに記載のマイクロコンピュータ。
【請求項９】
前記ＣＰＵは、前記判定プログラムを、低消費電力モードが解除された時点に実行することを特徴とする請求項１乃至８の何れかに記載のマイクロコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションプログラムが記憶される書換え可能な不揮発性の第１メモリの書換えを、オンボード若しくはオンチップ上で実行可能に構成されるマイクロコンピュータに関する。
【背景技術】
【０００２】
図１２は、車両制御用のＥＣＵ（Electronic Control Unit）を示すものである。ＥＣＵ１は、基板２上にマイクロコンピュータ３やその他の図示しない周辺回路が搭載されて構成されている。そのマイコン３の制御プログラムは、フラッシュメモリ４のように書換え可能な不揮発性メモリに格納されている場合がある。そして、ＣＰＵ５により実行されるフラッシュメモリ４上の制御プログラムは、デバッグやバージョンアップのため必要に応じて書換えを行うようにしている。
【０００３】
フラッシュメモリ４の書換えを行う場合は、マイコン３を書換え用のモードに設定してリセットすることで、例えばマイコン３上のＲＯＭ６に格納されている書換え用プログラムを起動し、ＣＰＵ５が図示しない外部の書換え装置より転送されたデータを書き込む。例えば、特許文献１には、上記のようなフラッシュメモリの書換えに関する技術が開示されている。
【特許文献１】特開２０００−２０１７８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、マイコンに対して外部よりリセットをかけることが可能な構成であれば、フラッシュメモリの書換えを行っている途中に電源電圧が低下したり、書換え装置との間の通信線が断線するなどして書換えが失敗しても、マイコンをリセットすることで書換え用プログラムを起動し、同じ手順を繰り返すことで書換えを再試行すれば良い。
しかしながら、フィールドにおいて実際にＥＣＵが動作している場合は外部よりリセット制御を行う必要はないことから、リセットを行うための端子を余分に設けるのは冗長であり、コストの増大に繋がる。そこで、ＥＣＵについてはパワーオンリセットのみが作用するように構成するのが好ましい。
【０００５】
そして、ＥＣＵは、フィールドでは車両のバッテリからの電源供給を常時受けている状態にあるため、基本的にパワーオンリセットが発生することもない。また、リセットが発生しなければ、マイコンの動作モードを「書換えモード」等に切換える機会もないことから、モード切替え用の端子も不要となるはずである。
ところが、上記のような構成を想定すると、フラッシュメモリの書換えが途中で失敗すると書換えプログラムを起動する手段がなくなるため、フラッシュメモリの書換えを再度行うことができなくなってしまう。
【０００６】
例えば、ＥＣＵがフラッシュメモリに書き込まれているアプリケーションプログラムを実行している通常動作状態で、外部の書込み装置より書換え指令が与えられたことを認識して書換えプログラムを起動すれば、１回は書換えを行うことができる。しかし、上記の書換えが途中で失敗すれば、それ以降アプリケーションプログラムは正常に実行されなくなるので、ＥＣＵ上のＣＰＵは書換え指令を認識することもできなくなる。従って、実際にはマイコンの端子数を減らすことが困難であった。
【０００７】
本発明は上記事情に鑑みてなされたものであり、その目的は、不揮発性メモリの書換えが失敗した場合に、外部端子を介してモード切替えを行わずとも書換えプログラムを再起動できるマイクロコンピュータを提供することにある。
【課題を解決するための手段】
【０００８】
請求項１記載のマイクロコンピュータによれば、ＣＰＵにより書換えプログラムが実行されると、最初に第１メモリの書換えチェック領域をクリアしてから当該メモリの全領域の書換えを行ない、最後に書換えチェック領域に書換え完了コードを書込む。そして、ＣＰＵにより判定プログラムが実行されると、最初に第１メモリの書換えチェック領域を読出す。
ここで、書換えチェック領域のデータが書換え完了コードに一致する場合は、第１メモリの書換えは正常に完了していることを示すので、ＣＰＵはアプリケーションプログラムを実行する。一方、前記データが書換え完了コードに一致しない場合は、第１メモリの書換えが途中で失敗したことを示すので、ＣＰＵは書換えプログラムを再度実行する。
【０００９】
即ち、例えばマイクロコンピュータのパワーオンリセットが解除されると、ＣＰＵが最初に判定プログラムを実行するように設定しておけば、書換えチェック領域を参照することで第１メモリのアプリケーションプログラムが正常に書き換えられているか否かを判定でき、書換えが失敗していた場合は再試行することができる。従って、第１メモリの書換えを再試行するために、マイコンの外部端子としてリセット端子やモード設定用の端子を設ける必要がなくなり、マイコンのパッケージを小型化してコストの低下を図ることができる。
【００１０】
請求項２記載のマイクロコンピュータによれば、ＣＰＵにより書換えプログラムが実行されると、第１メモリの２つの書換え許可ＩＤ領域に同一のＩＤコードが書込まれる。そして、ＣＰＵが判定プログラムを実行した場合に、書換えチェック領域より読み出されたデータが書換え完了コードに一致しなければ第１，第２書換え許可ＩＤ領域を夫々読出し、両者のデータが共に前記ＩＤコードに一致すれば書換えプログラムを実行する。即ち、上記のようにＩＤコードが一致すれば、当該メモリに書き込みを行った主体は第１メモリに対する正当なアクセス権を有していることが確認されるので、不正な書き込みを防止することができる。
【００１１】
請求項３記載のマイクロコンピュータによれば、ＣＰＵにより書換えプログラムが実行されると、第１メモリの２つのブロックに設定される第１，第２書換え許可ＩＤ領域に、同一のＩＤコードを書込み、ＣＰＵが判定プログラムを実行した場合に書換えチェック領域より読み出されたデータが書換え完了コードに一致しなければ、２つのブロックについて、第１，第２書換え許可ＩＤ領域を夫々読出す。そして、何れか一方のブロックにおける両者の読出しデータが共にＩＤコードに一致すれば書換えプログラムを実行する。
【００１２】
即ち、第１メモリの２つのブロックについては、同時に消去や書き込みが行われることはない。そして、第１メモリの書換えが途中で失敗すると、そのタイミングによっては一方のブロックが書換えられていない場合が想定されるので、ＩＤコードが確認できなくなる。そこで、書換えプログラムにおいて、２つのブロックに対して同じようにＩＤコードを書き込むようにして、各ブロック毎にＩＤコードの一致を判定すれば、何れか一方のブロックで確実に一致を確認することができる。
【００１３】
請求項４記載のマイクロコンピュータによれば、ＣＰＵにより部分書換えプログラムが実行されると、最初に第１メモリの部分書換えチェック領域をクリアしてから当該メモリの書換えを開始位置から前記終了位置まで行ない、最後に部分書換えチェック領域に部分書換え完了コードを書込む。そして、ＣＰＵが判定プログラムを実行し、書換えチェック領域より読み出したデータが書換え完了コードに一致する場合は、続いてフラグ格納領域を参照し、許可が設定されていれば第１メモリの部分書換えチェック領域を読出す。
その読み出しデータが部分書換え完了コードに一致する場合はアプリケーションプログラムを実行し、前記データが部分書換え完了コードに一致しない場合は部分書換えプログラムを実行する。従って、第１メモリの一部だけを書換えている途中でその書換えが失敗した場合についても、請求項１と同様の効果を得ることができる。
【００１４】
請求項５記載のマイクロコンピュータによれば、ＣＰＵが書換えプログラムを実行すると、第１メモリの第１，第２書換え許可ＩＤ領域に同一のＩＤコードを書込むと共に、フラグ格納領域への部分書換えの許可／禁止設定，開始位置及び終了位置の書き込み設定も行う。そして、ＣＰＵが判定プログラムを実行し、書換えチェック領域より読み出したデータが書換え完了コードに一致すれば、第１，第２書換え許可ＩＤ領域を夫々読出し、両者の読出しデータが共にＩＤコードに一致すればフラグ格納領域を参照する。従って、第１メモリの部分書き換えを行なう場合についても、ＩＤコードの一致確認を行うことができる。
【００１５】
請求項６記載のマイクロコンピュータによれば、請求項１における書換えチェック領域を全書換えチェック領域として、第１メモリには、請求項４における部分書換えの許可／禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とが、前記全書換えチェック領域と共に当該第１メモリについて定められている最小書込み単位内のサイズで設定される。また、第１メモリの全書換え，部分書き換えについては、夫々請求項１，４と同様に実行される。ここで、「最小書込み単位」とは、１回のライトサイクルにおいて第１メモリに書き込まれるデータの最小サイズであり、マイクロコンピュータの設計仕様に応じて定められる。
【００１６】
そして、ＣＰＵにより判定プログラムが実行されると、最初に第１メモリの全書換えチェック領域を読出し、そのデータが全書換え完了コードに一致しない場合は全書換えプログラムを実行する。また、前記データが全書換え完了コードに一致すれば続いてフラグ格納領域を参照し、許可が設定されていれば部分書換えチェック領域を読出し、そのデータが部分書換え完了コードに一致すればアプリケーションプログラムを実行し、前記データが部分書換え完了コードに一致しない場合は部分書換えプログラムを実行する。
即ち、第１メモリの部分書き換えに関する情報は、少なくとも全書換えが１回完了した後に意味を成すので、部分書き換え情報を、全書換えチェック領域と共に最小書込み単位内のサイズで持たせれば、情報量を低減して有効に利用できる。その結果、判定プログラムの実行をより短時間内に完了することができる。
【００１７】
請求項７記載のマイクロコンピュータによれば、部分書換えチェック領域に、その次に部分書き換えを行なう対象とする領域について、部分書換えの許可／禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とを最小書込み単位内のサイズで設定し、その部分書換えチェック領域を１つ以上配置する。従って、部分書換えを、アドレスが不連続となる複数の領域についても行なうことができる。
【００１８】
請求項８記載のマイクロコンピュータによれば、ＣＰＵは、判定プログラムを、リセット時に実行するので、第１メモリに対する書き込みが正常に行なわれているか否かをリセットが解除された場合にチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラムの実行を停止して、プログラムの暴走を未然に防止することができる。
【００１９】
請求項９記載のマイクロコンピュータによれば、ＣＰＵは、判定プログラムを、低消費電力モードが解除された時点（ウエイクアップ時）に実行するので、第１メモリに対する書き込みが正常に行なわれているか否かをウエイクアップ時にチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラムの実行を停止して、プログラムの暴走を未然に防止することができる。
【発明を実施するための最良の形態】
【００２０】
（第１実施例）
以下、本発明の第１実施例について図１乃至図５を参照して説明する。図５は、本発明のマイクロコンピュータ１１の構成を示すブロック図である。マイコン１１は、例えば、マイコン３と同様に車両制御用ＥＣＵを構成するもので、ＣＰＵ１２を中心として、ＲＯＭ（第２メモリ）１３，ＲＡＭ１４，フラッシュメモリ（第１メモリ）１５，フラッシュコントローラ１６，通信回路１７などを備えており、これらはアドレスバス１８及びデータバス１９を介して接続されている。
【００２１】
フラッシュメモリ１５には、ＣＰＵ１２によって実行されるＥＣＵとしての制御プログラムであるユーザプログラム２０が記憶されるようになっている。ＲＯＭ１３には、フラッシュメモリ１５にユーザプログラム２０を書き込むための書換えプログラム２１と、ユーザプログラム２０，書換えプログラム２１の何れを実行するかを決定するため、フラッシュメモリ１５のステータスを判定する判定プログラム２２が記憶されている。フラッシュコントローラ１６は、ＣＰＵ１２がフラッシュメモリ１５にアクセスする場合に、フラッシュメモリ１５のブロック管理やエラー訂正処理などを行なうものである。
【００２２】
通信回路１７は、例えば、ＵＡＲＴやその他のシリアル通信、又はＣＡＮ等の車内ＬＡＮなどのプロトコルに対応した通信インターフェイスであり、フラッシュメモリ１５のユーザ（アプリケーション）プログラム２０を書換える場合には、外部の書換え装置２３との間で通信を行うようになっている。そして、書換え装置２３より転送された書換えデータ２４は、ＲＡＭ１４に書き込まれる。
【００２３】
次に、本実施例の作用について図１乃至図３も参照して説明する。尚、フラッシュメモリ１５に対するユーザプログラム２０の最初の書き込みは、ＲＯＭライタなどを使用して予め行われていることを前提とする（或いは、後述する図１のステップＳ６において「ＮＯ」と判断された場合に、ユーザプログラム２０に分岐することに替えて書換えプログラム２１に分岐させることで、フラッシュメモリ１５に対する最初の書き込みを行なわせることも可能である）。
【００２４】
図２は、フラッシュメモリ１５のメモリマップを示すもので、図３は、書換えプログラム２１による全書換え処理の手順、及びその書換え処理に伴うフラッシュメモリ１５の状態変化を示すものである。図２に示すように、フラッシュメモリ１５は、例えば、６４Ｋバイトを単位とするブロック０〜ｎに分割されており、書換え処理もブロックを単位として行われる。
そして、先頭ブロック０には、「全書換え」の完了を示す「ＦＬＡＳＨステータス０（書換えチェック領域）」と「ＩＤ領域２」とが配置され、終了ブロックｎには「ＩＤ領域１」が配置されるようになっている。また、ブロック６は、一例として「部分書換え」が行われる場合の先頭ブロックに設定されており、「部分書換え」の完了を示す「ＦＬＡＳＨステータス１（部分書換えチェック領域）」が配置されている。
【００２５】
「ＦＬＡＳＨステータス０」には、全書換え処理が完了した段階で、所定のデータ、例えば５５ＡＡ…５５ＡＡＨが書き込まれる。「ＦＬＡＳＨステータス１」も同様に、部分書換え処理が完了した段階で、例えば「５５ＡＡ…５５ＡＡ（以下、データ値はＨＥＸで示す）」が書き込まれる。「ＩＤ領域２」と「ＩＤ領域１」には同じデータが書き込まれるようになっており、後述する照合確認のために使用される。
これらの「ＩＤ領域」には、フラッシュメモリ１５の書換えを許可するＩＤやパスワードなどが格納され、当該領域の先頭と末尾には、同一のＩＤステータス（ＩＤコード）１，２が書き込まれる。また、部分書換えの許可／禁止を設定するためのフラグ格納領域と、部分書換えの開始ブロック番号，終了ブロック番号を格納する領域や、その他プログラムＩＤやパスワードなどが格納される。
【００２６】
＜全書換え処理＞
図３に示す全書換え処理において、ＣＰＵ１２は、最初にブロック０の「ＦＬＡＳＨステータス０」にデータ「００００…００００」を書き込んでクリアしてから、各ブロック０，…，６，…，ｎ毎に、「消去」、「書込み」、「ベリファイ」を順次行ってゆく。そして、最後に「ＦＬＡＳＨステータス０」にデータ「５５ＡＡ…５５ＡＡ」を書き込んで処理を終了する。
尚、ＩＤ領域２，１の「部分書換え」に関するデータは、後に「部分書換え」を行なうケースがあるか否かに応じて、この段階で許可／禁止の設定や、開始，終了ブロック番号の設定を書き込んでおくようにする。
【００２７】
また、図３には、全書換え処理の進行に伴い、「ＦＬＡＳＨステータス０，１」，ＩＤ領域２，１の「ＩＤステータス１，２」の書き込みデータが変化する状態を示している。フラッシュメモリ１５に既に書き込みが行われていると、「ＦＬＡＳＨステータス０」のデータは「５５ＡＡ…５５ＡＡ」になっている。そして、最初にデータ「００００…００００」が書き込まれるが、次のブロック０の消去で「ＦＦＦＦ…ＦＦＦＦ」に変化し、次の「書込み」では「ＦＬＡＳＨステータス０」の書き込みは行わないようにして、上記データ値を維持する。そして、最後の書込み処理で「５５ＡＡ…５５ＡＡ」に戻る。従って、全書換え処理中の「ＦＬＡＳＨステータス０」は、「５５ＡＡ…５５ＡＡ」以外の値になっている。
【００２８】
また、「ＦＬＡＳＨステータス１」も、既に書き込みが行われている状態では初期値が「５５ＡＡ…５５ＡＡ」になっているが、ブロック６の消去で「ＦＦＦＦ…ＦＦＦＦ」に変化し、次の「書込み」で「５５ＡＡ…５５ＡＡ」に書き戻される。ＩＤ領域２の「ＩＤステータス２＿１，２＿２」も、初期値は「５５ＡＡ…５５ＡＡ」、ブロック０の消去で「ＦＦＦＦ…ＦＦＦＦ」、次の「書込み」で「５５ＡＡ…５５ＡＡ」に書き戻される。ＩＤ領域１の「ＩＤステータス１＿１，１＿２」も、同様に初期値は「５５ＡＡ…５５ＡＡ」、ブロックｎの消去で「ＦＦＦＦ…ＦＦＦＦ」、次の「書込み」で「５５ＡＡ…５５ＡＡ」に書き戻される。
【００２９】
尚、全書換え処理中の「ベリファイ」において書込みエラーが検出されると、ＣＰＵ１２はその時点で内部リセットを発生させてリセットベクタから実行を開始し、判定プログラム２２、即ち、図１に示すフラッシュステータス判定処理を実行するようになっている。また、例えば、全書換え処理を開始してから終了するまでの時間をタイマによりカウントし、所定時間内に処理が終了しない場合（タイムアウト）に内部リセットを発生させても良い。図１において、ＣＰＵ１２は、フラッシュメモリ１５の「ＦＬＡＳＨステータス０」を読み出して、そのデータ値が書換え完了コード「５５ＡＡ…５５ＡＡ」に一致するかどうかを判定する（ステップＳ１）。
【００３０】
「ＦＬＡＳＨステータス０」のデータ値が書換え完了コードに一致しなければ（「ＮＯ」）、ＣＰＵ１２は、ＩＤ領域２の「ＩＤステータス２＿１，２＿２」が何れも正常コード「５５ＡＡ…５５ＡＡ」であるか否かを判断する（ステップＳ５）。そして、何れも正常コードであれば（「ＹＥＳ」）、ＩＤ領域２に書き込まれているＩＤやパスワードは有効であると判定し、書換えプログラム２１の実行を開始する。この場合、書換えプログラム２１は、ＩＤ領域２に書き込まれているＩＤやパスワードについて認証を行い、その認証結果が「ＯＫ」であれば図３のフローチャートの処理を開始する。
【００３１】
また、ステップＳ５において「ＮＯ」と判断すると、ＣＰＵ１２はステップＳ６に移行し、ＩＤ領域１の「ＩＤステータス１＿１，１＿２」が何れも正常コード「５５ＡＡ…５５ＡＡ」であるか否かを判断する。そして、何れも正常コードであれば（「ＹＥＳ」）、ＩＤ領域１に書き込まれているＩＤやパスワードは有効であると判定し、書換えプログラム２１の実行を開始する。
即ち、図３に示すように、ＩＤ領域２，１の何れか一方について、正しく書き込みが行われない状態で全書換え処理が終了すると、そのＩＤステータスは「ＦＦＦＦ…ＦＦＦＦＦ」となっており、正常なデータが書き込まれていない。しかし、他方のＩＤ領域には必ず正常なデータが書き込まれているので、何れか有効な方を選択するようにしている。
【００３２】
また、ＩＤ領域２，１の何れも正常なデータでない場合（ステップＳ６，「ＮＯ」）、ＣＰＵ１２はユーザプログラム２０を実行する。この場合は、何らかの理由により、ユーザプログラム２０に対する一番最初の書き込みが正常に行われていなかったか、或いはフラッシュメモリ１５の一部やバス１８，１９に故障が発生した、といったような異常状態と推定される。
従って、このまま書換えを実行すると、フラッシュメモリ１５に異常なデータが書き込まれるおそれがあることから、ユーザプログラム２０に分岐する。そして、当該プログラム２０に用意されているメモリチェックルーチンが正常であれば、そのチェックルーチンによりフラッシュメモリ１５のチェックサムを計算する。その結果、異常が判定されればエラー処理を行う。この場合、フラッシュメモリ１５に正常な書き込みを行うことは不能であるから、必要に応じて部品交換などの処置を行うようにする。
【００３３】
＜部分書換え処理＞
また、図４は、フラッシュメモリ１５の部分書換え処理を示す。部分書換え処理については、前述したように、フィールドにおいてＥＣＵ−マイコン１１に電源が投入された状態のまま、ユーザプログラム２０の一部を書換えてバージョンアップを行う場合を想定している。従って、マイコン１１がユーザプログラム２０を実行している状態で、書換え装置２３を接続し、その書換え装置２３が部分書換え指令を発行すると、ユーザプログラム２０中においてその部分書換え指令を認識し、図４の部分書換え処理を実行する。また、フラッシュメモリ１５のブロック０は、部分書換えの対象としないように予め決定されている。
【００３４】
図４は、ブロック６の部分書換えを行なう場合であり、ＩＤ領域の開始ブロック番号，終了ブロック番号は何れも「６」に設定されている。尚、部分書換えプログラムは、書換えプログラム２１の一部となっている。ＣＰＵ１２は、最初にブロック６の「ＦＬＡＳＨステータス１」にデータ「００００…００００」を書き込んでクリアしてから、ブロック６の「消去」、「書込み」、「ベリファイ」を順次行う。そして、最後に「ＦＬＡＳＨステータス１」にデータ「５５ＡＡ…５５ＡＡ」を書き込んで処理を終了する。
【００３５】
また、図４には、部分書換え処理の進行に伴い、「ＦＬＡＳＨステータス１」の書き込みデータが変化する状態を示している。尚、ブロック６のみしか書換えを行なわないため、「ＦＬＡＳＨステータス０」，ＩＤ領域２，１の「ＩＤステータス１，２」のデータは「５５ＡＡ…５５ＡＡ」のままである。
【００３６】
この場合、フラッシュメモリ１５に既に書き込みが行われているので、「ＦＬＡＳＨステータス１」のデータは「５５ＡＡ…５５ＡＡ」になっている。そして、最初にデータ「００００…００００」が書き込まれるが、次のブロック６の消去で「ＦＦＦＦ…ＦＦＦＦ」に変化し、次の「書込み」では「ＦＬＡＳＨステータス１」の書き込みは行わず、上記データ値を維持する。そして、最後の書込み処理で「５５ＡＡ…５５ＡＡ」に戻る。従って、部分書換え処理中の「ＦＬＡＳＨステータス０」は、「５５ＡＡ…５５ＡＡ」以外の値になっている。
【００３７】
また、部分書換えにおけるブロック６の「ベリファイ」において書込みエラーが検出された場合も、ＣＰＵ１２は同様にその時点で内部リセットを発生させてリセットベクタから実行を開始し、図１に示すフラッシュステータス判定処理を実行する。この場合、「ＦＬＡＳＨステータス０」のデータ値は書換え完了コードに一致するので、ＣＰＵ１２はステップＳ１で「ＹＥＳ」と判定し、ステップＳ５と同様にＩＤ領域２の「ＩＤステータス２＿１，２＿２」が何れも正常コードであるか否かを判断する（ステップＳ２）。
【００３８】
ＩＤ領域２のステータスが正常コードであれば（「ＹＥＳ」）、ＣＰＵ１２は同領域において部分書換えが「許可」に設定されているか否かを判断する（ステップＳ３）。そして、「許可」に設定されていれば（「ＹＥＳ」）、ブロック６の「ＦＬＡＳＨステータス１」を読出し、データ値が書換え完了コード「５５ＡＡ…５５ＡＡ」に一致するか否かを判断する（ステップＳ４）。書換え完了コードに一致しなければ（「ＮＯ」）書換えプログラム２１に分岐し、図４の部分書換え処理を再試行する。
【００３９】
尚、部分書換え処理の場合、ブロック０は書換え対象より外されているので、基本的にステップＳ２では「ＹＥＳ」と判断されるはずであり、「ＮＯ」と判断されるのは、ステップＳ６で「ＮＯ」と判断される場合と同様に異常な状態である。従って、同様にユーザプログラム２０に分岐し、メモリチェックルーチンを実行する。また、ステップＳ５，Ｓ６のように、ブロックｎのＩＤ領域１の確認を重ねて行う必要はない。
【００４０】
また、ＣＰＵ１２における内部リセットの発生は、その他、ウォッチドックタイマなどにより暴走を検知した場合やバスエラーなどによっても発生するので、その場合も図１の判定処理は実行される。この時、フラッシュメモリ１５の書換えが正常に行われていれば、判定処理ではステップＳ１〜Ｓ４において何れも「ＹＥＳ」と判定されるので、ＣＰＵ１２は判定処理を抜けてユーザプログラム２０へ分岐し、当該プログラム２０を実行する。また、ステップＳ３において、部分書換え処理が「禁止」に設定されている場合も（「ＮＯ」）、ユーザプログラム２０に分岐する。
【００４１】
以上のように本実施例によれば、マイコン１１のＣＰＵ１２により書換えプログラム２１が実行されると、最初にフラッシュメモリ１５のＦＬＡＳＨステータス０をクリアしてから当該メモリ１５の全領域の書換えを行ない、最後にＦＬＡＳＨステータス０に書換え完了コード「５５ＡＡ…５５ＡＡ」を書込む。そして、ＣＰＵ１２が判定プログラム２２を実行すると、最初にフラッシュメモリ１５のＦＬＡＳＨステータス０を読出し、そのデータが書換え完了コードに一致しない場合、ＣＰＵ１２は書換えプログラム２１を再度実行する。
【００４２】
即ち、ＣＰＵ１２が判定プログラム２２を実行してＦＬＡＳＨステータス０を参照すれば、フラッシュメモリ１５のユーザプログラム２０が正常に書き換えられているか否かを判定でき、書換えが失敗していた場合は再試行できる。従って、フラッシュメモリ１５の書換えを再試行するために、マイコン１１の外部端子としてリセット端子やモード設定用の端子を設ける必要がなくなり、マイコン１１のパッケージを小型化してコストの低下を図ることができる。
【００４３】
また、ＣＰＵ１２が書換えプログラム２１を実行すると、フラッシュメモリ１５の２つのＩＤステータス２＿１，２＿２に同一のＩＤコードを書込み、判定プログラム２２を実行した場合に、ＦＬＡＳＨステータス０のデータが書換え完了コードに一致しなければＩＤステータス２＿１，２＿２を夫々読出し、両者のデータが共に前記ＩＤコードに一致すれば書換えプログラム２１を実行するので、メモリ１５に書き込みを行った主体が正当なアクセス権を有していることを確認して、不正な書き込みを防止できる。
【００４４】
更に、フラッシュメモリ１５の２つのブロック０，ｎに設定されるＩＤステータス２，１に同一のＩＤコードを書込み、ＣＰＵ１２が判定プログラム２２を実行し、ＦＬＡＳＨステータス０のデータが書換え完了コードに一致しなければ、２つのブロック０，ｎについてＩＤステータス２，１を夫々読出し、何れか一方のブロックで両者の読出しデータが共にＩＤコードに一致すれば書換えプログラム２１を実行する。従って、フラッシュメモリ１５の書換えが途中で失敗した場合でも、何れか一方のブロックで確実にＩＤコードの一致を確認できる。
【００４５】
また、ＣＰＵ１２により書換えプログラム２１の一部である部分書換えプログラムが実行されると、最初にフラッシュメモリ１５のＦＬＡＳＨステータス１をクリアし、当該メモリの書換えを開始位置から終了位置まで行ない、最後に部分ＦＬＡＳＨステータス１に部分書換え完了コード「５５ＡＡ…５５ＡＡ」を書込む。
そして、ＣＰＵ１２が判定プログラム２２を実行し、ＦＬＡＳＨステータス１のデータが書換え完了コードに一致する場合は、続いてフラグ格納領域を参照し、許可が設定されていればＦＬＡＳＨステータス１を読出す。その読み出しデータが部分書換え完了コードに一致しない場合は部分書換えプログラムを実行するので、フラッシュメモリ１５の一部だけを書換えている途中でその書換えが失敗した場合について、全領域書換えの場合と同様の効果を得ることができる。例えば、フィールドにおいてユーザプログラム２０の一部を書換えてバージョンアップを図る場合などに有効である。
【００４６】
加えて、ＣＰＵ１２が書換えプログラム２１を実行すると、フラッシュメモリ１５のＩＤステータス２＿１，２＿２に同一のＩＤコードを書込むと共にフラグ格納領域への部分書換えの許可／禁止設定，開始位置及び終了位置の書き込み設定も行う。そして、ＣＰＵ１２が判定プログラム２２を実行し、ＦＬＡＳＨステータス０より読み出したデータが書換え完了コードに一致すれば、ＩＤステータス２＿１，２＿２を夫々読出し、両者の読出しデータが共にＩＤコードに一致すればＦＬＡＳＨステータ１を参照するので、フラッシュメモリ１５の部分書き換えを行なう場合についても、ＩＤコードの一致確認を行うことができる。
【００４７】
更にまた、ＣＰＵ１２は、判定プログラム２２を、リセット時に実行するので、フラッシュメモリ１５に対する書き込みが正常に行なわれているか否かをリセットが解除された場合にチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラム２０の実行を停止して、プログラム２０の暴走を未然に防止することができる。
【００４８】
（第２実施例）
図６乃至図９は本発明の第２実施例を示すものであり、第１実施例と同一部分には同一符号を付して説明を省略し、以下異なる部分について説明する。図６は、第１実施例の図２相当図である。第２実施例では、先頭ブロック０の冒頭１６バイトに、「ＦＬＡＳＨステータス０」と共に、部分書換えの許可／禁止を設定するためのフラグ格納領域と、部分書換えの開始ブロック番号，終了ブロック番号を格納する領域とが配置されている。そして、「ＩＤ領域２」，「ＩＤ領域１」は削除されている。また、終了ブロックｎについては、第１実施例と異なり、格別な領域設定は行われていない。ブロック６は、第１実施例と同様に「部分書換え」が行われる場合の先頭ブロックに設定され、「ＦＬＡＳＨステータス１」が配置されている。
【００４９】
尚、１６バイトは、フラッシュコントローラ１６がフラッシュメモリ１５に対してデータの書込みを行う場合の最小書込み単位として設定されているサイズである。即ち、ＣＰＵ１２がフラッシュメモリ１５に１バイトのデータを書き込む場合でも、フラッシュコントローラ１６はエラーチェックを行なうため、上記１バイトデータのアドレスを含む連続した１６バイトのデータを単位として、書込み（リード・モディファイ・ライト）を行なうようになっている。
【００５０】
次に、第２実施例の作用について説明する。
＜全書換え処理＞
図７に示す全書換え処理において、部分書換え許可禁止フラグは「許可」＝「０１Ｈ」，部分書換え開始ブロック／終了ブロックは「０００６Ｈ」に設定されている。ＣＰＵ１２は、最初にブロック０の「ＦＬＡＳＨステータス０」にデータ「００００…００００」を書き込んでクリアすると共に、部分書換え許可禁止フラグ，部分書換え開始ブロック／終了ブロックの格納領域もゼロクリアする。そして、第１実施例と同様に、各ブロック０，…，６，…，ｎ毎に、「消去」、「書込み」、「ベリファイ」を順次行ってゆく。そして、最後に「ＦＬＡＳＨステータス０」にデータ「５５ＡＡ…５５ＡＡ」を書き込むと共に、部分書換え許可禁止フラグを「０１Ｈ」に、部分書換え開始ブロック／終了ブロックに「０００６Ｈ」を書き込んで処理を終了する。すなわち、「ＦＬＡＳＨステータス０，１」に関しては、データ値の変化は第１実施例と全く同様である。
【００５１】
＜部分書換え処理＞
また、図８は、フラッシュメモリ１５の部分書換え処理を示す。部分書換え処理についても、「ＦＬＡＳＨステータス１」に関するデータ値の変化は第１実施例と全く同様である。そして、「ＦＬＡＳＨステータス０」，部分書換え許可禁止フラグの状態、並びに部分書換え開始ブロック／終了ブロックの値は初期値のまま変化しない。
図９は、図１相当のフラッシュステータス判定処理であり、ステップＳ１，Ｓ３，Ｓ４のみとなっている。すなわち、第２実施例ではＩＤステータスが正常コードであるか否かをチェックしないため、判定処理が簡単になっている。
【００５２】
以上のように第２実施例によれば、部分書換えの許可／禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とを、全書換えチェック領域と共にフラッシュメモリ１５の最小書込み単位のサイズで設定した。即ち、フラッシュメモリ１５の部分書き換えに関する情報は、少なくとも全書換えが１回完了した後に意味を成すので、部分書き換え情報を、全書換えチェック領域と共に最小書込み単位のサイズで持たせれば、情報量を低減した上で有効に利用することができる。
【００５３】
また、本発明に関連する従来技術の１つに、国際公開第ＷＯ２００４／０３１９６６号パンフレットに開示されているものがある。この従来技術では、複数のブロック（最小消去単位）からなるメモリについて、どのブロックが消去済みであるかを判断するため、各ブロックにフラグを設けてそのフラグの状態を判定することで、消去済みであるか否かを決定するようにしている。しかしながら、マイコンの起動時に各ブロック毎に設けられているフラグの状態を判定すると、判定に時間を要するためプログラムの起動が遅れることになり、その起動遅れは、メモリのブロック数が増加するのに伴って大きくなってしまう。
【００５４】
データメモリとしての用途では、起動時にはそのメモリを使用するホストマイコン自体が初期化を行なうため、その間にメモリの判定を行うことも可能である。ところが、プログラムメモリとしての用途では、メモリの処理により起動が遅れることは、プログラム，即ち、マイコン自体の起動が遅れることに繋がってしまう。
これに対して、第２実施例によれば、フラッシュメモリ１５について第１実施例のようにＩＤコードをチェックしないので、判定プログラムの実行をより短時間内に完了することができる。
【００５５】
（第３実施例）
図１０及び図１１は本発明の第３実施例を示すものであり、第２実施例と異なる部分のみ説明する。第３実施例は、部分書換えを行うブロックが複数ある場合に対応した処理を示す。図１０に示すように、部分書換えを行うブロックが「６，１１」の２ブロックであるとする。この場合、ブロック０のＦＬＡＳＨステータス０には、第２実施例と同様にブロック６の部分書換え（１）を行うための情報が配置され、ブロック６のＦＬＡＳＨステータス１には、ブロック１１の部分書換え（２）を行うための情報，すなわち、部分書換え（２）の許可／禁止を設定するためのフラグ格納領域と、部分書換えの開始ブロック番号，終了ブロック番号を格納する領域とが計１６バイトで配置されている。
【００５６】
そして、ブロック１１には、部分書換えチェック領域としてＦＬＡＳＨステータス２が配置されており、そのＦＬＡＳＨステータス２と共に、更に続けて部分書換えを行う場合に対応して、部分書換え（３）を行うための情報が計１６バイトで配置されている。部分書換え（３）を行わない場合、許可／禁止設定フラグは「禁止」に設定される。
図１１は、図９相当図であり、図９におけるステップＳ３，Ｓ４が、部分書換え（１）に対応するステップＳ３’，Ｓ４’となっている。続いて、部分書換え（２）に対応する判断ステップが、ステップＳ１１，Ｓ１２として配置されている。
【００５７】
尚、部分書換えが最大２ブロックまでと規定されている場合は図１１に示す判定処理で対応すれば良く、部分書換えが最大３ブロックまで行われる場合は、ステップＳ１２に続いて、部分書換え（３）に対応する判断ステップを、ステップＳ１３，Ｓ１４として配置すれば良い。その場合、第３実施例のケースでは、部分書換え（３）の許可／禁止設定フラグが「禁止」に設定されるため、ステップＳ１３で（ＮＯ）と判断してユーザプログラムに移行することになる。
【００５８】
以上のように第３実施例によれば、ブロック６の部分書換えチェック領域に、その次に部分書き換えを行なう対象とする領域について、部分書換えの許可／禁止設定を行うフラグの格納領域と、開始位置及び終了位置を書き込む領域とを最小書込み単位のサイズで設定し、その部分書換えチェック領域を１つ以上配置するので、部分書換えを、アドレスが不連続となる複数のブロックについても行なうことができる。
【００５９】
本発明は上記し又は図面に記載した実施例にのみ限定されるものではなく、以下のような変形が可能である。
ブロックｎに、ブロック０と同じＩＤ領域を設け、ステップＳ５，Ｓ６で二重にチェックする処理は、必要に応じて行えば良い。また、ブロック０におけるＩＤコードのチェックも、必要に応じて行えば良い。
ＦＬＡＳＨステータス０，１やＩＤ領域２，１をフラッシュメモリ１５のどこに配置するかは、適宜変更して実施しても良い。
書換え完了コードやＩＤコードのデータ値についても、適宜変更して実施可能である。
ブロック０を、部分書き換えの対象としても良い。
フラッシュメモリ１５のブロック容量は、６４Ｋバイトに限らない。
第１メモリは、ブロック単位で書換えを行うものに限ることはない。また、書き換えを行なう際に、「ベリファイ」処理はメモリの仕様に応じて実施すれば良い。
更に、ステップＳ２におけるチェックも必要に応じて行えば良い。
部分書換え処理についても、仕様上必要とされる場合に実施すれば良い。
書換えデータ２４は、ＲＡＭ１４に一括転送される場合に限らず、書換え装置２３より順次送信されるデータを受信しながら書換えを行っても良い。
【００６０】
マイコン１１が、動作用クロックの供給を停止した状態で待機する低消費電力モード（スリープ，ストップモード）を実行可能に構成されている場合、ＣＰＵ１２は、判定プログラム２２を、低消費電力モードの解除（ウエイクアップ）時に実行するようにしても良い。斯様に構成すれば、フラッシュメモリ１５に対する書き込みが正常に行なわれているか否かをウエイクアップ時にもチェックすることで、誤った書込み或いはデータ化けなどが発生している場合にユーザプログラム２０の実行を停止して、プログラム２０の暴走を未然に防止することができる。
最小書き込み単位は、１６バイトに限ることはなく、マイクロコンピュータの個別の仕様に応じて適宜変更すれば良い。
フラッシュコントローラ１６も、必要に応じて設ければ良く、ＣＰＵ１２が直接フラッシュメモリ１５に書き込みを行っても良い。
第２，第３実施例における「ＦＬＡＳＨステータス０，１」等と、部分書換えに関する情報との合計サイズは、最小書き込み単位より小さくても良い。
車両制御用のＥＣＵを構成するマイクロコンピュータに限ることなく、書換え可能な不揮発性メモリを備えているマイクロコンピュータであれば適用可能である。
【図面の簡単な説明】
【００６１】
【図１】本発明の第１実施例であり、フラッシュステータス判定処理の内容を示すフローチャート
【図２】フラッシュメモリのメモリマップ
【図３】書換えプログラムによる全書換え処理の手順、及びその書換え処理に伴うフラッシュメモリの状態変化を示す図
【図４】部分書換え処理に対応する図３相当図
【図５】マイクロコンピュータの構成を示すブロック図
【図６】本発明の第２実施例を示す図２相当図
【図７】図３相当図
【図８】図４相当図
【図９】図１相当図
【図１０】本発明の第３実施例を示す図６相当図
【図１１】図９相当図
【図１２】従来のＥＣＵにおけるフラッシュメモリの書換え状態を示す図
【符号の説明】
【００６２】
図面中、１１はマイクロコンピュータ、１２はＣＰＵ、１３はＲＯＭ（第２メモリ）、１５はフラッシュメモリ（第１メモリ）、２０はユーザプログラム（アプリケーションプログラム）、２１は書換えプログラム（部分書換えプログラム）を示す。
【図１】
2008165729.tif 000003
【図２】
2008165729.tif 000004
【図３】
2008165729.tif 000005
【図４】
2008165729.tif 000006
【図５】
2008165729.tif 000007
【図６】
2008165729.tif 000008
【図７】
2008165729.tif 000009
【図８】
2008165729.tif 000010
【図９】
2008165729.tif 000011
【図１０】
2008165729.tif 000012
【図１１】
2008165729.tif 000013
【図１２】
2008165729.tif 000014