(57)【要約】  第１領域と第２領域を有する不揮発性メモリを備え、第１領域の現メインプログラムを新メインプログラムに、第２領域の現第１ブートローダを新第１ブートローダに更新するプログラム更新動作を行う処理装置であり、プログラム更新動作は、現第１ブートローダに基づいて、第１領域の現メインプログラムを第２ブートローダに書き換え、第２ブートローダに基づいて、第２領域の現第１ブートローダを新第１ブートローダに書き換え、新第１ブートローダに基づいて、第１領域の第２ブートローダを新メインプログラムに書き換える動作である処理装置とする。
2012077604.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを格納する第１領域と、第１領域でのプログラムの書換を実行させる第１ブートローダを格納する第２領域と、を有する不揮発性メモリを備え、
第１領域に格納されているメインプログラムに基づいて処理を行う処理装置であって、
新メインプログラム、新第１ブートローダ、および第２領域でのプログラムの書換を実行させる第２ブートローダが用意された状況において、第１領域に格納されている現メインプログラムを新メインプログラムに、第２領域に格納されている現第１ブートローダを新第１ブートローダに、それぞれ更新するプログラム更新動作を行うものであり、
前記プログラム更新動作は、
現第１ブートローダに基づいて、第１領域に格納されている現メインプログラムを第２ブートローダに書き換える第１更新動作、
第１領域に書き込まれた第２ブートローダに基づいて、第２領域に格納されている現第１ブートローダを新第１ブートローダに書き換える第２更新動作、および、
第２領域に書き込まれた新第１ブートローダに基づいて、第１領域に格納されている第２ブートローダを新メインプログラムに書き換える第３更新動作、
を含むことを特徴とする処理装置。
【請求項２】
起動時において、第１状態および第２状態の何れか一方となるフラグが第１状態であるときは、第１領域に格納されているプログラムに基づいて動作し、該フラグが第２状態であるときは、第２領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行う請求項１に記載の処理装置であって、
前記第１ブートローダは、
第１領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムであり、
前記第２ブートローダは、
第２領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムであることを特徴とする処理装置。
【請求項３】
前記第１ブートローダは、
第１領域でのプログラムの書換を実行させる書換部と、
前記フラグ判定動作を実行させる判定部と、
を有していることを特徴とする請求項２に記載の処理装置。
【請求項４】
前記第１ブートローダは、
第１領域でのプログラムの書換を実行させる書換部を有する一方、
前記フラグ判定動作を実行させるプログラムを有していないことを特徴とする請求項２に記載の処理装置。
【請求項５】
プログラムを格納する第１領域と、第１領域でのプログラムの書換を実行させる第１ブートローダを格納する第２領域と、を有する不揮発性メモリを備え、第１領域に格納されているメインプログラムに基づいて処理を行う処理装置が、プログラムを更新する方法であって、
新メインプログラム、新第１ブートローダ、および第２領域でのプログラムの書換を実行させる第２ブートローダが用意された状況において、第１領域に格納されている現メインプログラムを新メインプログラムに、第２領域に格納されている現第１ブートローダを新第１ブートローダに、それぞれ更新する方法であり、
現第１ブートローダに基づいて、第１領域に格納されている現メインプログラムを第２ブートローダに書き換える第１更新ステップ、
第１領域に書き込まれた第２ブートローダに基づいて、第２領域に格納されている現第１ブートローダを新第１ブートローダに書き換える第２更新ステップ、および、
第２領域に書き込まれた新第１ブートローダに基づいて、第１領域に格納されている第２ブートローダを新メインプログラムに書き換える第３更新ステップ、
を含むことを特徴とするプログラム更新方法。
【請求項６】
第１領域および第２領域を有する不揮発性メモリを備えた処理装置に、プログラムの更新を行わせるプログラムであって、
起動時において、第１状態および第２状態の何れか一方となるフラグが第１状態であるときは、第１領域に格納されているプログラムに基づいて動作し、前記フラグが第２状態であるときは、第２領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行わせるプログラムと、
第１領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、
第２領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、
を有することを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムに基づいて処理を行う処理装置、プログラム更新方法、および処理装置にプログラム更新動作を実行させるプログラムに関する。
【背景技術】
【０００２】
従来、各種プログラムに基づいて処理を行う処理装置が、広く利用されている。このような処理装置は通常、ＣＰＵ［Central  Processing  Unit］の他にプログラムを格納する不揮発性メモリ（フラッシュメモリ等）を有している。ＣＰＵは、不揮発性メモリに格納されているプログラムを適宜リードして実行するようになっており、これにより各種処理が遂行される。【０００３】
ところで不揮発性メモリには、通常用いられるメインプログラムの他、プログラムの書換などを実行させるプログラム（ブートローダ）が格納されることがある。この場合、格納されているメインプログラムについて機能追加や不具合修正が必要となったときは、ブートローダを用いて、メインプログラムの書換更新を行うことが可能である。【０００４】
また、格納されているブートローダ自体を更新する必要が生じた場合、このブートローダについても書換更新を行う必要がある。但し、ブートローダの書換の途中に電源の遮断などがなされると、不揮発性メモリにおけるブートローダの格納領域のデータが破壊され、ブートローダのリードが不可能となってしまう。【０００５】
このような問題を解決するため、特許文献１には、更新前のブートローダを予めＦＲＯＭに退避させる装置が開示されている。当該装置は、電源遮断などによってブートローダの書換に失敗した場合には、退避させていたブートローダをフラッシュメモリに書き直して、再度ブートローダの書換えを行うようになっている。【０００６】
しかし当該手法を実現させるにあたっては、ブートローダを退避させるメモリ（ここではＦＲＯＭ）を設けておく必要があり、その分、より多くのメモリが必要となってしまう。また、ブートローダの書換えが失敗したときのために、わざわざメモリを用意しておくのは、冗長であるとも言える。【０００７】
一方、特許文献２には、ブートローダを退避させるメモリを要せず、ブートローダの書換えの失敗に対応する装置が開示されている。当該装置は、特許文献１に開示されたものに比べ、必要なメモリを少なくすることが可能である点で優れている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００５−７８３３６号公報
【特許文献２】特開２００７−１９３５９６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
ところで特許文献２に開示されたものによれば、ブートローダの格納領域とメインプログラムの格納領域の移動が発生する。しかし、ＣＰＵがプログラムをリードする際に、そのプログラムに対応した特定のアドレスへのアクセスがなされる場合には、このような移動が発生すると、リード処理が正しく行われなくなってしまう。またメモリ容量の制限や、消去領域のブロック構成などにより、プログラムの格納領域を移動させることが出来ない場合もある。【００１０】
本発明は上述した問題に鑑み、ブートローダを退避させるためのメモリ等を要せず、安全に、かつ、ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムとブートローダの更新を行うことが可能となる処理装置の提供を目的とする。また本発明は、当該処理装置に関するプログラム更新方法、およびプログラムの提供を目的とする。
【課題を解決するための手段】
【００１１】
上記目的を達成するため本発明に係る処理装置は、プログラムを格納する第１領域と、第１領域でのプログラムの書換を実行させる第１ブートローダを格納する第２領域と、を有する不揮発性メモリを備え、第１領域に格納されているメインプログラムに基づいて処理を行う処理装置であって、新メインプログラム、新第１ブートローダ、および第２領域でのプログラムの書換を実行させる第２ブートローダが用意された状況において、第１領域に格納されている現メインプログラムを新メインプログラムに、第２領域に格納されている現第１ブートローダを新第１ブートローダに、それぞれ更新するプログラム更新動作を行うものであり、前記プログラム更新動作は、現第１ブートローダに基づいて、第１領域に格納されている現メインプログラムを第２ブートローダに書き換える第１更新動作、第１領域に書き込まれた第２ブートローダに基づいて、第２領域に格納されている現第１ブートローダを新第１ブートローダに書き換える第２更新動作、および、第２領域に書き込まれた新第１ブートローダに基づいて、第１領域に格納されている第２ブートローダを新メインプログラムに書き換える第３更新動作、を含む構成とする。【００１２】
本構成によれば、プログラム更新動作を行うことにより、ブートローダを退避させるためのメモリ等を要せず、安全に、かつ、ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムとブートローダの更新を行うことが可能となる。【００１３】
また上記構成としてより具体的には、起動時において、第１状態および第２状態の何れか一方となるフラグが第１状態であるときは、第１領域に格納されているプログラムに基づいて動作し、該フラグが第２状態であるときは、第２領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行うものであり、前記第１ブートローダは、第１領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムであり、前記第２ブートローダは、第２領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムである構成としてもよい。【００１４】
また上記構成としてより具体的には、前記第１ブートローダは、第１領域でのプログラムの書換を実行させる書換部と、前記フラグ判定動作を実行させる判定部と、を有している構成としてもよい。【００１５】
また上記構成としてより具体的には、前記第１ブートローダは、第１領域でのプログラムの書換を実行させる書換部を有する一方、前記フラグ判定動作を実行させるプログラムを有していない構成としてもよい。【００１６】
また本発明に係るプログラム更新方法は、プログラムを格納する第１領域と、第１領域でのプログラムの書換を実行させる第１ブートローダを格納する第２領域と、を有する不揮発性メモリを備え、第１領域に格納されているメインプログラムに基づいて処理を行う処理装置が、プログラムを更新する方法であって、新メインプログラム、新第１ブートローダ、および第２領域でのプログラムの書換を実行させる第２ブートローダが用意された状況において、第１領域に格納されている現メインプログラムを新メインプログラムに、第２領域に格納されている現第１ブートローダを新第１ブートローダに、それぞれ更新する方法であり、現第１ブートローダに基づいて、第１領域に格納されている現メインプログラムを第２ブートローダに書き換える第１更新ステップ、第１領域に書き込まれた第２ブートローダに基づいて、第２領域に格納されている現第１ブートローダを新第１ブートローダに書き換える第２更新ステップ、および、第２領域に書き込まれた新第１ブートローダに基づいて、第１領域に格納されている第２ブートローダを新メインプログラムに書き換える第３更新ステップ、を含む方法とする。【００１７】
また本発明に係るプログラムは、第１領域および第２領域を有する不揮発性メモリを備えた処理装置に、プログラムの更新を行わせるプログラムであって、起動時において、第１状態および第２状態の何れか一方となるフラグが第１状態であるときは、第１領域に格納されているプログラムに基づいて動作し、前記フラグが第２状態であるときは、第２領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行わせるプログラムと、第１領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、第２領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、を有するプログラムとする。
【発明の効果】
【００１８】
上述した通り本発明に係る処理装置によれば、プログラム更新動作を行うことにより、ブートローダを退避させるためのメモリ等を要せず、安全に、かつ、ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムとブートローダの更新を行うことが可能となる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１実施形態に係るマイコンの概略的な構成図である。
【図２】第１実施形態におけるプログラムの格納等に関する説明図である。
【図３】プログラム更新動作に関するフローチャートである。
【図４】プログラム更新動作に関するフローチャートである。
【図５】プログラム更新動作に関するフローチャートである。
【図６】フラッシュメモリによるプログラムの格納状況に関する説明図である。
【図７】本発明の第２実施形態に係るマイコンの概略的な構成図である。
【図８】第２実施形態におけるプログラムの格納等に関する説明図である。
【発明を実施するための形態】
【００２０】
本発明の実施形態について、第１実施形態および第２実施形態を例に挙げて、以下に説明する。
【００２１】
１．第１実施形態
［マイコンの構成等について］
図１は、本実施形態に係るマイコン［マイクロコンピュータ］の概略的な構成図である。本図に示すように当該マイコン２は、通信Ｉ／Ｆ３、ＣＰＵ４、およびフラッシュメモリ５を備えている。なおマイコン２は、ＰＣ［Personal  Computer］１やＥＥＰＲＯＭ［Electrically  Erasable  Programmable  ROM］６に接続されている。
【００２２】
通信Ｉ／Ｆ３は、ＰＣ１等との通信を可能とするものであり、例えばＣＡＮ［Controller  Area  Network］やＬＡＮ［Local  Area  Network］によって形成されている。またＣＰＵ４は、プログラムに基づいて各種処理を実行するものである。
【００２３】
フラッシュメモリ５は、プログラム等を書換可能に格納する不揮発性メモリである。なお以降、説明の簡略化のため、フラッシュメモリ５が有するプログラムの格納領域は、「第１ブロック」と「第２ブロック」の二つであるとして説明を行う。これらのブロックの具体的な形態については特に限定されない。
【００２４】
ＣＰＵ４は、フラッシュメモリ５に格納されているプログラムをリードして、実行することが可能となっている。またＣＰＵ４は、通信Ｉ／Ｆ３を介してＰＣ１との双方向通信を行うことが可能となっている。
【００２５】
ＥＥＰＲＯＭ６は、「０」および「１」の何れか一方となるブートフラグを、更新可能に保持する。ＣＰＵ４は、ＥＥＰＲＯＭ６に適宜アクセスして、ブートフラグを参照したり、更新したりすることが可能となっている。
【００２６】
［各種プログラムについて］
次に、マイコン２の動作に関わる各種のプログラムについて説明する。マイコン２の動作に関わるプログラムとしては、「メインプログラム」、「第１ブートローダ」、「第２ブートローダ」、および「初期プログラム」などが存在する。
【００２７】
「メインプログラム」は、ＣＰＵ４に通常動作（通常状態で行われるべき各種動作）を実行させるプログラムである。すなわちマイコン２は、起動動作を経て通常状態となっているとき、メインプログラムに従って動作することになる。なおメインプログラムは、マイコン２がＰＣ１からプログラム更新命令を受けたときに、ブートフラグを「１」にセットして再起動を開始する動作を、ＣＰＵ４に実行させるようになっている（後述のステップＳ１を参照）。
【００２８】
「第１ブートローダ」は、「判定部」と「書換部」の二つのプログラムに小分けされている。
【００２９】
「判定部」は、（１）ブートフラグの状態を判定する動作、（２）判定結果が「１」のときに、第２ブロックに格納されている第１ブートローダの書換部をリードして実行を開始する動作、および（３）判定結果が「０」のときに、第１ブロックに格納されているプログラムをリードして実行を開始する動作を、ＣＰＵ４に実行させるプログラムである（後述のステップＳ１２〜Ｓ１４、Ｓ２２〜Ｓ２３、およびＳ３２〜Ｓ３３を参照）。
【００３０】
「書換部」は、（１）第１ブロックに格納されているプログラムを消去する動作、（２）当該消去の後、ＰＣ１に第２ブートローダまたはメインプログラムの送信要求を行い、この要求に応じて送信されてきたプログラムを、第１ブロックにライトする動作、（３）ライトの動作が正常終了したか否かを判定する動作、（４）正常終了したときは、ブートフラグを「０」にリセットして再起動を開始する動作、および（５）正常終了していないときは判定部（既にＣＰＵ４がリードしているもの、或いは、第２ブロックに格納されているもの）に基づく動作を再度行う動作を、ＣＰＵ４に実行させるプログラムである（後述のステップＳ１５〜Ｓ１８、およびＳ３４〜Ｓ３７を参照）。
【００３１】
また書換部に基づく上記（２）の動作がなされるにあたっては、第２ブートローダが未だライトされていないとき（後述する１回目書換動作の実行時）には、第２ブートローダの送信要求がなされ、第２ブートローダが既にライトされているとき（後述する３回目書換動作の実行時）には、メインプログラムの送信要求がなされるようになっている。
【００３２】
このことについては、例えばマイコン２に、第２ブートローダがライトされたか否かを記録しておく手段を設けること等により、実現可能である。またＰＣ１が、当該送信要求を受ける度に第２ブートローダを既に送信したか否かを判別し、未だ送信していない場合には第２ブートローダを送信し、既に送信している場合にはメインプログラムを送信するようになっていてもよい。この場合、書換部に基づく上記（２）の動作における送信要求は、第２ブートローダとメインプログラムの何れの送信を要求すべきかに関わらず、同じものとすることが可能である。
【００３３】
「第２ブートローダ」は、（１）第２ブロックに格納されているプログラムを消去する動作、（２）当該消去の後、ＰＣ１に第１ブートローダの送信要求を行い、この要求に応じて送信されてきた第１ブートローダを、第２ブロックにライトする動作、（３）ライトの動作が正常終了したか否かを判定する動作、（４）正常終了したときは、ブートフラグを「１」にセットして再起動を開始する動作、および（５）正常終了していないときは判定部（既にＣＰＵ４がリードしているもの、或いは、第２ブロックに格納されているもの）に基づく動作を再度行う動作を、ＣＰＵ４に実行させるプログラムである（後述のステップＳ２４〜Ｓ２７を参照）。
【００３４】
なお書換部による上記（５）の動作、もしくは第２ブートローダによる上記（５）の動作について、正常終了していないという判定が予め指定された回数だけ続いた場合には、重大な異常が発生したとみなして、プログラム更新動作が中止されるようにしても構わない。また書換部による上記（２）の動作および第２ブートローダによる上記（２）の動作においては、ＰＣ１から送信されてくるプログラムは少しずつ（例えば、６４バイトずつ）受取られ、その度に第１ブロックまたは第２ブロックにライトされる。これにより、ＰＣ１からのプログラムの受取りに用いられるメモリ（例えばＣＰＵ４に付属するメモリ）の容量が小さくても、当該動作を十分に実行することが可能となっている。
【００３５】
「初期プログラム」は、マイコン２の起動時において、ＣＰＵ４によって最初に実行されるプログラムである。初期プログラムは、第２ブロックに格納されている第１ブートローダの判定部をリードして実行を開始する動作を、ＣＰＵ４に実行させるプログラムである（後述のステップＳ１１、Ｓ２１、およびＳ３１を参照）。初期プログラムはＣＰＵ４に固定的に格納されており、フラッシュメモリ５等からのリードを要することなく、ＣＰＵ４によって実行可能となっている。
【００３６】
そして通常時、図２に示すように、フラッシュメモリ５の第１ブロックにはメインプログラムが、第２ブロックには第１ブートローダが、それぞれ格納された状態となっている。また同じく通常時、ブートフラグは「０」にセットされている。
【００３７】
またＰＣ１は、例えばプログラムの開発元からのダウンロード等によって、新たなバージョンのメインプログラムおよび第１ブートローダ、ならびに第２ブートローダを、取得することが可能となっている。そしてＰＣ１は、ユーザからマイコンのバージョンアップ実行指示を受けると、マイコン２にプログラム更新命令を出す。またＰＣ１は、マイコン２からのプログラムの送信要求があると、これに応じて、マイコン２にプログラムを送信するようになっている。
【００３８】
［マイコンのバージョンアップについて］
ところで機能追加や不具合修正などのため、フラッシュメモリ５に現在格納されているメインプログラムおよび第１ブートローダ（現メインプログラム、および現第１ブートローダ）の各々を、新たなバージョンのもの（新メインプログラム、および新第１ブートローダ）に更新しようとする場合、すなわちマイコン２のバージョンアップを行おうとする場合がある。
【００３９】
このような場合、ユーザは、ＰＣ１にマイコンのバージョンアップ実行指示を与え、マイコン２にプログラム更新動作を実行させることにより、当該更新を実現することが可能である。なおこのプログラム更新動作は、図３〜図５の各フローチャートに示すように、１回目書換動作から３回目書換動作までの３回の書換動作から成る。マイコン２をバージョンアップさせるための動作の流れについて、図３〜図５の各フローチャートを参照しながら、以下に説明する。
【００４０】
先述したようにＰＣ１は、マイコンのバージョンアップ実行指示を受けると、マイコン２にプログラム更新命令を出す。このときマイコン２側では、ＣＰＵ４は、メインプログラムに基づいて動作するようになっている。具体的には、ＣＰＵ４は、ブートフラグを「１」にセットして、再起動を開始する（ステップＳ１）。
【００４１】
なおこの時点でＰＣ１およびマイコン２が保有しているプログラムの種類は、図２に示す通りである。すなわち、フラッシュメモリ５の第１ブロックには現メインプログラムが、第２ブロックには現第１ブートローダが、それぞれ格納されている。またＰＣ１は、新メインプログラム、新第１ブートローダ、および第２ブートローダを保有している。つまりこれらのプログラムが、予め用意されている。
【００４２】
そして再起動がなされたことにより、ＣＰＵ４は先ず、初期プログラムに基づいて動作する。具体的には、ＣＰＵ４は、第２ブロックに格納されている、現第１ブートローダの判定部をリードして実行を開始する（ステップＳ１１）。
【００４３】
すなわちＣＰＵ４は、先ずブートフラグの状態が「０」と「１」の何れであるかを判定する（ステップＳ１２）。なお、通常通りプログラム更新動作が進んでいる場合、ブートフラグは現時点で「１」となっている。そしてＣＰＵ４は、判定結果が「１」のとき（ステップＳ１２のＹ）、第２ブロックに格納されている、現第１ブートローダの書換部をリードして実行を開始する（ステップＳ１４）。一方、判定結果が「０」のとき（ステップＳ１２のＮ）、ＣＰＵ４は、第１ブロックに格納されている、現メインプログラムをリードして実行を開始する（ステップＳ１３）。
【００４４】
ステップＳ１３の動作が実行された場合は、プログラム更新動作は終了し、ＣＰＵ４は以降、通常動作（現メインプログラムに基づく動作）を行うことになる。一方、ステップＳ１４の動作が実行された場合は、ＣＰＵ４は、現第１ブートローダの書換部に基づいて動作する。
【００４５】
具体的には、ＣＰＵ４は、第１ブロックに格納されている現メインプログラムを消去する動作（ステップＳ１５）、当該消去の後、ＰＣ１から受取った第２ブートローダを、第１ブロックにライトする動作（ステップＳ１６）、および、当該ライトの動作が正常終了したか否かを判定する動作（ステップＳ１７）を行う。
【００４６】
そして更にＣＰＵ４は、正常終了したときは（ステップＳ１７のＹ）、ブートフラグを「０」にリセットして再起動を開始する動作（ステップＳ１８）、および、正常終了していないときは（ステップＳ１７のＮ）、判定部に基づく動作（ステップＳ１２）を再度行う動作を行う。
【００４７】
ステップＳ１８の動作がなされることで１回目書換動作は完了し、引き続き、２回目書換動作が開始される。なおこの時点でフラッシュメモリ５に格納されているプログラムの種類は、図６の（Ａ）に示す通りである。すなわち、フラッシュメモリ５の第１ブロックには第２ブートローダが、第２ブロックには現第１ブートローダが、それぞれ格納されている。
【００４８】
次に、２回目書換動作について説明する。再起動がなされたことにより（ステップＳ１８）、ＣＰＵ４は、先ず初期プログラムに基づいて動作する。具体的には、ＣＰＵ４は、第２ブロックに格納されている、現第１ブートローダの判定部をリードして実行を開始する（ステップＳ２１）。
【００４９】
すなわちＣＰＵ４は、先ずブートフラグの状態が「０」と「１」の何れであるかを判定する（ステップＳ２２）。なお、通常通りプログラム更新動作が進んでいる場合、ブートフラグは現時点で「０」となっている。そしてＣＰＵ４は、判定結果が「１」のとき（ステップＳ２２のＹ）、第２ブロックに格納されている、現第１ブートローダの書換部をリードして実行を開始する。すなわちこのときは、先述したステップＳ１４の動作のやり直しが行われる。一方、判定結果が「０」のとき（ステップＳ２２のＮ）、ＣＰＵ４は、第１ブロックに格納されている、第２ブートローダをリードして実行を開始する（ステップＳ２３）。
【００５０】
ステップＳ２３の動作が実行された場合は、ＣＰＵ４は、第２ブートローダに基づいて動作する。具体的には、ＣＰＵ４は、第２ブロックに格納されている現第１ブートローダを消去する動作（ステップＳ２４）、当該消去の後、ＰＣ１から受取った新第１ブートローダを、第２ブロックにライトする動作（ステップＳ２５）、および、当該ライトの動作が正常終了したか否かを判定する動作（ステップＳ２６）を行う。
【００５１】
そして更にＣＰＵ４は、正常終了したときは（ステップＳ２６のＹ）、ブートフラグを「１」にセットして再起動を開始する動作（ステップＳ２７）、および、正常終了していないときは（ステップＳ２６のＮ）、判定部に基づく動作（ステップＳ２２）を再度行う動作を行う。
【００５２】
ステップＳ２７の動作がなされることで２回目書換動作は完了し、引き続き、３回目書換動作が開始される。なおこの時点でフラッシュメモリ５に格納されているプログラムの種類は、図６の（Ｂ）に示す通りである。すなわち、フラッシュメモリ５の第１ブロックには第２ブートローダが、第２ブロックには新第１ブートローダが、それぞれ格納されている。
【００５３】
次に、３回目書換動作について説明する。再起動がなされたことにより（ステップＳ２７）、ＣＰＵ４は、先ず初期プログラムに基づいて動作する。具体的には、ＣＰＵ４は、第２ブロックに格納されている、新第１ブートローダの判定部をリードして実行を開始する（ステップＳ３１）。
【００５４】
すなわちＣＰＵ４は、先ずブートフラグの状態が「０」と「１」の何れであるかを判定する（ステップＳ３２）。なお、通常通りプログラム更新動作が進んでいる場合、ブートフラグは現時点で「１」となっている。そしてＣＰＵ４は、判定結果が「１」のとき（ステップＳ３２のＹ）、第２ブロックに格納されている、新第１ブートローダの書換部をリードして実行を開始する（ステップＳ３３）。一方、判定結果が「０」のとき（ステップＳ３２のＮ）、ＣＰＵ４は、第１ブロックに格納されている、第２ブートローダをリードして実行を開始する。すなわちこのときは、先述したステップＳ２３の動作のやり直しが行われる。
【００５５】
ステップＳ３３の動作が実行された場合は、ＣＰＵ４は、新第１ブートローダの書換部に基づいて動作する。具体的には、ＣＰＵ４は、第１ブロックに格納されている第２ブートローダを消去する動作（ステップＳ３４）、当該消去の後、ＰＣ１から受取った新メインプログラムを、第１ブロックにライトする動作（ステップＳ３５）、および、当該ライトの動作が正常終了したか否かを判定する動作（ステップＳ３６）を行う。
【００５６】
そして更にＣＰＵ４は、正常終了したときは（ステップＳ３６のＹ）、ブートフラグを「０」にリセットして再起動を開始する動作（ステップＳ３７）、および、正常終了していないときは（ステップＳ３６のＮ）、判定部に基づく動作（ステップＳ３２）を再度行う動作を行う。
【００５７】
ステップＳ３７の動作がなされることで３回目書換動作は完了し、プログラム更新動作は完了する。この時点でフラッシュメモリ５に格納されているプログラムの種類は、図６の（Ｃ）に示す通りである。すなわち、フラッシュメモリ５の第１ブロックには新メインプログラムが、第２ブロックには新第１ブートローダが、それぞれ格納されている。
【００５８】
なおその後、ＣＰＵ４は、再起動がなされたことにより（ステップＳ３７）、初期プログラムに基づいて動作する。このときブートフラグの状態は「０」であるため、ＣＰＵ４は、第１ブロックに格納されている、新メインプログラムをリードして実行を開始する。その結果、以降は、新メインプログラムに基づいた通常動作が行われることになる。
【００５９】
［プログラム更新動作の特長等について］
上述した通りマイコン２は、プログラム更新動作を行うことにより、フラッシュメモリ５に格納されているメインプログラムおよび第１ブートローダの両方を、新たなバージョンのものに更新することが可能となっている。
【００６０】
また上述した説明から明らかな通り、プログラム更新動作によれば、何れかのブートローダ（第１ブートローダまたは第２ブートローダ）をフラッシュメモリ５の何れかのブロック（第１ブロックまたは第２ブロック）に格納させた状態が、プログラム更新動作の実行中において維持される。そしてこの格納されているブートローダに基づいて、他方のブロックに対する書換が行われる。
【００６１】
そのため、仮にブートローダの書換の途中に電源の遮断などがなされ、当該書換がなされていたブロックのデータが破壊されても、ＣＰＵ４はその後、他方のブロックに格納されているブートローダをリードする（これにより、書換のやり直し等を行う）ことが可能であり、ブートローダのリードが不可能となってしまう事態は回避される。このようにマイコン２は、各プログラムの更新を安全に行うことが可能となっている。
【００６２】
なおプログラム更新動作によれば、ブートローダを退避させるメモリを要することなく、このようなブートローダのリードが可能となっている。このようにマイコン２は、ブートローダを退避させるメモリを設けた場合に比べ、必要なメモリを少なくすることが可能となっている。
【００６３】
またプログラム更新動作によれば、第１ブートローダの格納領域とメインプログラムの格納領域の移動は発生しない。すなわち第１ブロックにはメインプログラムが、第２ブロックには第１ブートローダが、それぞれ格納された状態が維持される。
【００６４】
そのため、ＣＰＵ４がプログラムをリードする際に、そのプログラムに対応した特定のアドレスへのアクセスを行う場合であっても、プログラム更新動作の実行によってリード処理に支障が生じることは回避される。また、メインプログラムの開発者は、メインプログラムの格納領域の変更を考慮すること（プログラム更新動作の実行を考慮した設計変更など）は必要無く、メインプログラムの開発を効率よく行うことが可能である。
【００６５】
またメモリ容量の制限や、消去領域のブロック構成などにより、フラッシュメモリ５においてプログラムの格納領域を移動させることが出来ない場合であっても、メインプログラムと第１ブートローダの双方の更新が可能である。
【００６６】
なお第１ブートローダの判定部は、簡単な動作を実行させるだけで良いため簡単な構成となっており、フラッシュメモリ５の使用容量もごく僅かである。従って、判定部の書換は非常に短時間で実施可能であるため、判定部の書換の途中で電源遮断などに遭遇することは極めて少ないといえる。
【００６７】
２．第２実施形態
ところで先述したように、第１ブートローダの判定部は簡単な構成であるため、バージョンアップの必要性が乏しいケースも考えられる。そこでこのようなケースに対応するため、プログラム更新動作においては、第１ブートローダの判定部の更新が省略されるようにしても構わない。
【００６８】
このようにする場合の実施形態を、第２実施形態として以下に説明する。なお本実施形態の説明は、第１実施形態と異なる点に重点を置き、共通する点については説明を省略することがある。
【００６９】
図７は、第２実施形態に係るマイコン２の概略的な構成図である。なお本実施形態のマイコン２は、補助フラッシュメモリ７が設けられた点を除き、第１実施形態に係るマイコン２と基本的に同等の構成である。但し本実施形態では、第１ブートローダは書換部のみを有し、判定部を有していない。その代わりに図８に示すように、この判定部と同等の内容である判定プログラムが、補助フラッシュメモリ７に予め格納されている。
【００７０】
そして本実施形態の「第２ブートローダ」は、（１）第２ブロックに格納されているプログラムを消去する動作、（２）当該消去の後、ＰＣ１に第１ブートローダ（書換部のみ）の送信要求を行い、この要求に応じて送信されてきた第１ブートローダを第２ブロックにライトする動作、（３）ライトの動作が正常終了したか否かを判定する動作、（４）正常終了したときは、ブートフラグを「１」にセットして再起動を開始する動作、および（５）正常終了していないときは判定プログラム（既にＣＰＵ４がリードしているもの、或いは、補助フラッシュメモリ７に格納されているもの）に基づく動作を再度行う動作を、ＣＰＵ４に実行させるプログラムとなっている。
【００７１】
また本実施形態の「初期プログラム」は、補助フラッシュメモリ７に格納されている判定プログラムをリードして実行を開始する動作を、ＣＰＵ４に実行させるプログラムとなっている。
【００７２】
そのためフラッシュメモリ５には、第１ブートローダとしては書換部だけが格納され、プログラム更新動作が実行される度に、新たなバージョンのものに更新される。一方で、補助フラッシュメモリ７に格納されている判定プログラムは、プログラム更新動作が実行されても書き換えられない。
【００７３】
このように本実施形態に係るプログラム更新動作によれば、判定プログラム、すなわち第１実施形態における判定部に相当するプログラムについては、更新が省略されるようになっている。そのため、マイコン２におけるプログラム更新動作の処理負担を、軽減させることが可能となっている。
【００７４】
３．その他
以上までに説明した通り、マイコン２（処理装置）は、プログラムを格納する第１ブロック（第１領域）と、第１ブロックでのプログラムの書換を実行させる第１ブートローダを格納する第２ブロック（第２領域）と、を有するフラッシュメモリ５（不揮発性メモリ）を備え、第１ブロックに格納されているメインプログラムに基づいて処理を行う。
【００７５】
またマイコン２は、新メインプログラム、新第１ブートローダ、および第２ブロックでのプログラムの書換を実行させる第２ブートローダが用意された（ＰＣ１から適宜受取ることができる）状況において、第１ブロックに格納されている現メインプログラムを新メインプログラムに、第２ブロックに格納されている現第１ブートローダを新第１ブートローダに、それぞれ更新するプログラム更新動作を行う。
【００７６】
そしてこのプログラム更新動作は、現第１ブートローダに基づいて、第１ブロックに格納されている現メインプログラムを第２ブートローダに書き換える１回目書換動作（第１更新動作）、第１ブロックに書き込まれた第２ブートローダに基づいて、第２ブロックに格納されている現第１ブートローダを新第１ブートローダに書き換える２回目書換動作（第２更新動作）、および、第２ブロックに書き込まれた新第１ブートローダに基づいて、第１ブロックに格納されている第２ブートローダを新メインプログラムに書き換える３回目書換動作（第３更新動作）を含んでいる。
【００７７】
そのためマイコン２は、プログラム更新動作を行うことにより、ブートローダを退避させるためのメモリを要せず、安全に、かつ、第１ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムと第１ブートローダの更新を行うことが可能となっている。
【００７８】
またマイコン２は、より具体的には、「０」および「１」の何れか一方となるフラグが「０」であるときは、第１ブロックに格納されているプログラムに基づいて動作し、該フラグが「１」であるときは、第２ブロックに格納されているプログラムに基づいて動作すること（「フラグ判定動作」とする）を行う。
【００７９】
そして第１ブートローダは、第１ブロックに格納されているプログラムを、自身に対応している用意されたプログラム（第２ブートローダまたはメインプログラム）に書き換えさせるとともに、フラグの状態を変更させた上で、再起動を実行させるプログラムである。また第２ブートローダは、第２ブロックに格納されているプログラムを、自身に対応している用意されたプログラム（第１ブートローダ）に書き換えさせるとともに、フラグの状態を変更させた上で、再起動を実行させるプログラムである。
【００８０】
また第１実施形態における第１ブートローダは、マイコン２（ＣＰＵ４）に対して、第１ブロックでのプログラムの書換を実行させる書換部と、フラグ判定動作を実行させる判定部と、を有している。また第２実施形態における第１ブートローダは、マイコン２（ＣＰＵ４）に対して、第１ブロックでのプログラムの書換を実行させる書換部を有している一方、フラグ判定動作を実行させるプログラムは有していない。第２実施形態では、フラグ判定動作を実行させるプログラムは判定プログラムとして、補助フラッシュメモリ７に格納され、プログラム更新動作によっては書き換えられないようになっている。
【００８１】
以上、本発明の実施形態について説明したが、本発明はこの内容に限定されるものではない。また本発明の実施形態は、本発明の主旨を逸脱しない限り、種々の改変を加えることが可能である。
【産業上の利用可能性】
【００８２】
本発明は、プログラムに基づいて処理を行う各種装置に利用することができる。
【符号の説明】
【００８３】
１    ＰＣ
２    マイコン（処理装置）
３    通信Ｉ／Ｆ
４    ＣＰＵ
５    フラッシュメモリ（不揮発性メモリ）
６    ＥＥＰＲＯＭ
７    補助フラッシュメモリ
【図１】
2012077604.tif 000003
【図２】
2012077604.tif 000004
【図３】
2012077604.tif 000005
【図４】
2012077604.tif 000006
【図５】
2012077604.tif 000007
【図６】
2012077604.tif 000008
【図７】
2012077604.tif 000009
【図８】
2012077604.tif 000010
【国際調査報告】
2012077604.tif 000011
2012077604.tif 000012