JPWO2012077604A1 - 処理装置、プログラム更新方法、およびプログラム - Google Patents
処理装置、プログラム更新方法、およびプログラム Download PDFInfo
- Publication number
- JPWO2012077604A1 JPWO2012077604A1 JP2012547831A JP2012547831A JPWO2012077604A1 JP WO2012077604 A1 JPWO2012077604 A1 JP WO2012077604A1 JP 2012547831 A JP2012547831 A JP 2012547831A JP 2012547831 A JP2012547831 A JP 2012547831A JP WO2012077604 A1 JPWO2012077604 A1 JP WO2012077604A1
- Authority
- JP
- Japan
- Prior art keywords
- program
- boot loader
- area
- stored
- rewriting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/654—Updates using techniques specially adapted for alterable solid state memories, e.g. for EEPROM or flash memories
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
Abstract
第1領域と第2領域を有する不揮発性メモリを備え、第1領域の現メインプログラムを新メインプログラムに、第2領域の現第1ブートローダを新第1ブートローダに更新するプログラム更新動作を行う処理装置であり、プログラム更新動作は、現第1ブートローダに基づいて、第1領域の現メインプログラムを第2ブートローダに書き換え、第2ブートローダに基づいて、第2領域の現第1ブートローダを新第1ブートローダに書き換え、新第1ブートローダに基づいて、第1領域の第2ブートローダを新メインプログラムに書き換える動作である処理装置とする。
Description
本発明は、プログラムに基づいて処理を行う処理装置、プログラム更新方法、および処理装置にプログラム更新動作を実行させるプログラムに関する。
従来、各種プログラムに基づいて処理を行う処理装置が、広く利用されている。このような処理装置は通常、CPU[Central Processing Unit]の他にプログラムを格納する不揮発性メモリ(フラッシュメモリ等)を有している。CPUは、不揮発性メモリに格納されているプログラムを適宜リードして実行するようになっており、これにより各種処理が遂行される。
ところで不揮発性メモリには、通常用いられるメインプログラムの他、プログラムの書換などを実行させるプログラム(ブートローダ)が格納されることがある。この場合、格納されているメインプログラムについて機能追加や不具合修正が必要となったときは、ブートローダを用いて、メインプログラムの書換更新を行うことが可能である。
また、格納されているブートローダ自体を更新する必要が生じた場合、このブートローダについても書換更新を行う必要がある。但し、ブートローダの書換の途中に電源の遮断などがなされると、不揮発性メモリにおけるブートローダの格納領域のデータが破壊され、ブートローダのリードが不可能となってしまう。
このような問題を解決するため、特許文献1には、更新前のブートローダを予めFROMに退避させる装置が開示されている。当該装置は、電源遮断などによってブートローダの書換に失敗した場合には、退避させていたブートローダをフラッシュメモリに書き直して、再度ブートローダの書換えを行うようになっている。
しかし当該手法を実現させるにあたっては、ブートローダを退避させるメモリ(ここではFROM)を設けておく必要があり、その分、より多くのメモリが必要となってしまう。また、ブートローダの書換えが失敗したときのために、わざわざメモリを用意しておくのは、冗長であるとも言える。
一方、特許文献2には、ブートローダを退避させるメモリを要せず、ブートローダの書換えの失敗に対応する装置が開示されている。当該装置は、特許文献1に開示されたものに比べ、必要なメモリを少なくすることが可能である点で優れている。
ところで特許文献2に開示されたものによれば、ブートローダの格納領域とメインプログラムの格納領域の移動が発生する。しかし、CPUがプログラムをリードする際に、そのプログラムに対応した特定のアドレスへのアクセスがなされる場合には、このような移動が発生すると、リード処理が正しく行われなくなってしまう。またメモリ容量の制限や、消去領域のブロック構成などにより、プログラムの格納領域を移動させることが出来ない場合もある。
本発明は上述した問題に鑑み、ブートローダを退避させるためのメモリ等を要せず、安全に、かつ、ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムとブートローダの更新を行うことが可能となる処理装置の提供を目的とする。また本発明は、当該処理装置に関するプログラム更新方法、およびプログラムの提供を目的とする。
上記目的を達成するため本発明に係る処理装置は、プログラムを格納する第1領域と、第1領域でのプログラムの書換を実行させる第1ブートローダを格納する第2領域と、を有する不揮発性メモリを備え、第1領域に格納されているメインプログラムに基づいて処理を行う処理装置であって、新メインプログラム、新第1ブートローダ、および第2領域でのプログラムの書換を実行させる第2ブートローダが用意された状況において、第1領域に格納されている現メインプログラムを新メインプログラムに、第2領域に格納されている現第1ブートローダを新第1ブートローダに、それぞれ更新するプログラム更新動作を行うものであり、前記プログラム更新動作は、現第1ブートローダに基づいて、第1領域に格納されている現メインプログラムを第2ブートローダに書き換える第1更新動作、第1領域に書き込まれた第2ブートローダに基づいて、第2領域に格納されている現第1ブートローダを新第1ブートローダに書き換える第2更新動作、および、第2領域に書き込まれた新第1ブートローダに基づいて、第1領域に格納されている第2ブートローダを新メインプログラムに書き換える第3更新動作、を含む構成とする。
本構成によれば、プログラム更新動作を行うことにより、ブートローダを退避させるためのメモリ等を要せず、安全に、かつ、ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムとブートローダの更新を行うことが可能となる。
また上記構成としてより具体的には、起動時において、第1状態および第2状態の何れか一方となるフラグが第1状態であるときは、第1領域に格納されているプログラムに基づいて動作し、該フラグが第2状態であるときは、第2領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行うものであり、前記第1ブートローダは、第1領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムであり、前記第2ブートローダは、第2領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムである構成としてもよい。
また上記構成としてより具体的には、前記第1ブートローダは、第1領域でのプログラムの書換を実行させる書換部と、前記フラグ判定動作を実行させる判定部と、を有している構成としてもよい。
また上記構成としてより具体的には、前記第1ブートローダは、第1領域でのプログラムの書換を実行させる書換部を有する一方、前記フラグ判定動作を実行させるプログラムを有していない構成としてもよい。
また本発明に係るプログラム更新方法は、プログラムを格納する第1領域と、第1領域でのプログラムの書換を実行させる第1ブートローダを格納する第2領域と、を有する不揮発性メモリを備え、第1領域に格納されているメインプログラムに基づいて処理を行う処理装置が、プログラムを更新する方法であって、新メインプログラム、新第1ブートローダ、および第2領域でのプログラムの書換を実行させる第2ブートローダが用意された状況において、第1領域に格納されている現メインプログラムを新メインプログラムに、第2領域に格納されている現第1ブートローダを新第1ブートローダに、それぞれ更新する方法であり、現第1ブートローダに基づいて、第1領域に格納されている現メインプログラムを第2ブートローダに書き換える第1更新ステップ、第1領域に書き込まれた第2ブートローダに基づいて、第2領域に格納されている現第1ブートローダを新第1ブートローダに書き換える第2更新ステップ、および、第2領域に書き込まれた新第1ブートローダに基づいて、第1領域に格納されている第2ブートローダを新メインプログラムに書き換える第3更新ステップ、を含む方法とする。
また本発明に係るプログラムは、第1領域および第2領域を有する不揮発性メモリを備えた処理装置に、プログラムの更新を行わせるプログラムであって、起動時において、第1状態および第2状態の何れか一方となるフラグが第1状態であるときは、第1領域に格納されているプログラムに基づいて動作し、前記フラグが第2状態であるときは、第2領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行わせるプログラムと、第1領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、第2領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、を有するプログラムとする。
上述した通り本発明に係る処理装置によれば、プログラム更新動作を行うことにより、ブートローダを退避させるためのメモリ等を要せず、安全に、かつ、ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムとブートローダの更新を行うことが可能となる。
本発明の実施形態について、第1実施形態および第2実施形態を例に挙げて、以下に説明する。
1.第1実施形態
[マイコンの構成等について]
図1は、本実施形態に係るマイコン[マイクロコンピュータ]の概略的な構成図である。本図に示すように当該マイコン2は、通信I/F3、CPU4、およびフラッシュメモリ5を備えている。なおマイコン2は、PC[Personal Computer]1やEEPROM[Electrically Erasable Programmable ROM]6に接続されている。
[マイコンの構成等について]
図1は、本実施形態に係るマイコン[マイクロコンピュータ]の概略的な構成図である。本図に示すように当該マイコン2は、通信I/F3、CPU4、およびフラッシュメモリ5を備えている。なおマイコン2は、PC[Personal Computer]1やEEPROM[Electrically Erasable Programmable ROM]6に接続されている。
通信I/F3は、PC1等との通信を可能とするものであり、例えばCAN[Controller Area Network]やLAN[Local Area Network]によって形成されている。またCPU4は、プログラムに基づいて各種処理を実行するものである。
フラッシュメモリ5は、プログラム等を書換可能に格納する不揮発性メモリである。なお以降、説明の簡略化のため、フラッシュメモリ5が有するプログラムの格納領域は、「第1ブロック」と「第2ブロック」の二つであるとして説明を行う。これらのブロックの具体的な形態については特に限定されない。
CPU4は、フラッシュメモリ5に格納されているプログラムをリードして、実行することが可能となっている。またCPU4は、通信I/F3を介してPC1との双方向通信を行うことが可能となっている。
EEPROM6は、「0」および「1」の何れか一方となるブートフラグを、更新可能に保持する。CPU4は、EEPROM6に適宜アクセスして、ブートフラグを参照したり、更新したりすることが可能となっている。
[各種プログラムについて]
次に、マイコン2の動作に関わる各種のプログラムについて説明する。マイコン2の動作に関わるプログラムとしては、「メインプログラム」、「第1ブートローダ」、「第2ブートローダ」、および「初期プログラム」などが存在する。
次に、マイコン2の動作に関わる各種のプログラムについて説明する。マイコン2の動作に関わるプログラムとしては、「メインプログラム」、「第1ブートローダ」、「第2ブートローダ」、および「初期プログラム」などが存在する。
「メインプログラム」は、CPU4に通常動作(通常状態で行われるべき各種動作)を実行させるプログラムである。すなわちマイコン2は、起動動作を経て通常状態となっているとき、メインプログラムに従って動作することになる。なおメインプログラムは、マイコン2がPC1からプログラム更新命令を受けたときに、ブートフラグを「1」にセットして再起動を開始する動作を、CPU4に実行させるようになっている(後述のステップS1を参照)。
「第1ブートローダ」は、「判定部」と「書換部」の二つのプログラムに小分けされている。
「判定部」は、(1)ブートフラグの状態を判定する動作、(2)判定結果が「1」のときに、第2ブロックに格納されている第1ブートローダの書換部をリードして実行を開始する動作、および(3)判定結果が「0」のときに、第1ブロックに格納されているプログラムをリードして実行を開始する動作を、CPU4に実行させるプログラムである(後述のステップS12〜S14、S22〜S23、およびS32〜S33を参照)。
「書換部」は、(1)第1ブロックに格納されているプログラムを消去する動作、(2)当該消去の後、PC1に第2ブートローダまたはメインプログラムの送信要求を行い、この要求に応じて送信されてきたプログラムを、第1ブロックにライトする動作、(3)ライトの動作が正常終了したか否かを判定する動作、(4)正常終了したときは、ブートフラグを「0」にリセットして再起動を開始する動作、および(5)正常終了していないときは判定部(既にCPU4がリードしているもの、或いは、第2ブロックに格納されているもの)に基づく動作を再度行う動作を、CPU4に実行させるプログラムである(後述のステップS15〜S18、およびS34〜S37を参照)。
また書換部に基づく上記(2)の動作がなされるにあたっては、第2ブートローダが未だライトされていないとき(後述する1回目書換動作の実行時)には、第2ブートローダの送信要求がなされ、第2ブートローダが既にライトされているとき(後述する3回目書換動作の実行時)には、メインプログラムの送信要求がなされるようになっている。
このことについては、例えばマイコン2に、第2ブートローダがライトされたか否かを記録しておく手段を設けること等により、実現可能である。またPC1が、当該送信要求を受ける度に第2ブートローダを既に送信したか否かを判別し、未だ送信していない場合には第2ブートローダを送信し、既に送信している場合にはメインプログラムを送信するようになっていてもよい。この場合、書換部に基づく上記(2)の動作における送信要求は、第2ブートローダとメインプログラムの何れの送信を要求すべきかに関わらず、同じものとすることが可能である。
「第2ブートローダ」は、(1)第2ブロックに格納されているプログラムを消去する動作、(2)当該消去の後、PC1に第1ブートローダの送信要求を行い、この要求に応じて送信されてきた第1ブートローダを、第2ブロックにライトする動作、(3)ライトの動作が正常終了したか否かを判定する動作、(4)正常終了したときは、ブートフラグを「1」にセットして再起動を開始する動作、および(5)正常終了していないときは判定部(既にCPU4がリードしているもの、或いは、第2ブロックに格納されているもの)に基づく動作を再度行う動作を、CPU4に実行させるプログラムである(後述のステップS24〜S27を参照)。
なお書換部による上記(5)の動作、もしくは第2ブートローダによる上記(5)の動作について、正常終了していないという判定が予め指定された回数だけ続いた場合には、重大な異常が発生したとみなして、プログラム更新動作が中止されるようにしても構わない。また書換部による上記(2)の動作および第2ブートローダによる上記(2)の動作においては、PC1から送信されてくるプログラムは少しずつ(例えば、64バイトずつ)受取られ、その度に第1ブロックまたは第2ブロックにライトされる。これにより、PC1からのプログラムの受取りに用いられるメモリ(例えばCPU4に付属するメモリ)の容量が小さくても、当該動作を十分に実行することが可能となっている。
「初期プログラム」は、マイコン2の起動時において、CPU4によって最初に実行されるプログラムである。初期プログラムは、第2ブロックに格納されている第1ブートローダの判定部をリードして実行を開始する動作を、CPU4に実行させるプログラムである(後述のステップS11、S21、およびS31を参照)。初期プログラムはCPU4に固定的に格納されており、フラッシュメモリ5等からのリードを要することなく、CPU4によって実行可能となっている。
そして通常時、図2に示すように、フラッシュメモリ5の第1ブロックにはメインプログラムが、第2ブロックには第1ブートローダが、それぞれ格納された状態となっている。また同じく通常時、ブートフラグは「0」にセットされている。
またPC1は、例えばプログラムの開発元からのダウンロード等によって、新たなバージョンのメインプログラムおよび第1ブートローダ、ならびに第2ブートローダを、取得することが可能となっている。そしてPC1は、ユーザからマイコンのバージョンアップ実行指示を受けると、マイコン2にプログラム更新命令を出す。またPC1は、マイコン2からのプログラムの送信要求があると、これに応じて、マイコン2にプログラムを送信するようになっている。
[マイコンのバージョンアップについて]
ところで機能追加や不具合修正などのため、フラッシュメモリ5に現在格納されているメインプログラムおよび第1ブートローダ(現メインプログラム、および現第1ブートローダ)の各々を、新たなバージョンのもの(新メインプログラム、および新第1ブートローダ)に更新しようとする場合、すなわちマイコン2のバージョンアップを行おうとする場合がある。
ところで機能追加や不具合修正などのため、フラッシュメモリ5に現在格納されているメインプログラムおよび第1ブートローダ(現メインプログラム、および現第1ブートローダ)の各々を、新たなバージョンのもの(新メインプログラム、および新第1ブートローダ)に更新しようとする場合、すなわちマイコン2のバージョンアップを行おうとする場合がある。
このような場合、ユーザは、PC1にマイコンのバージョンアップ実行指示を与え、マイコン2にプログラム更新動作を実行させることにより、当該更新を実現することが可能である。なおこのプログラム更新動作は、図3〜図5の各フローチャートに示すように、1回目書換動作から3回目書換動作までの3回の書換動作から成る。マイコン2をバージョンアップさせるための動作の流れについて、図3〜図5の各フローチャートを参照しながら、以下に説明する。
先述したようにPC1は、マイコンのバージョンアップ実行指示を受けると、マイコン2にプログラム更新命令を出す。このときマイコン2側では、CPU4は、メインプログラムに基づいて動作するようになっている。具体的には、CPU4は、ブートフラグを「1」にセットして、再起動を開始する(ステップS1)。
なおこの時点でPC1およびマイコン2が保有しているプログラムの種類は、図2に示す通りである。すなわち、フラッシュメモリ5の第1ブロックには現メインプログラムが、第2ブロックには現第1ブートローダが、それぞれ格納されている。またPC1は、新メインプログラム、新第1ブートローダ、および第2ブートローダを保有している。つまりこれらのプログラムが、予め用意されている。
そして再起動がなされたことにより、CPU4は先ず、初期プログラムに基づいて動作する。具体的には、CPU4は、第2ブロックに格納されている、現第1ブートローダの判定部をリードして実行を開始する(ステップS11)。
すなわちCPU4は、先ずブートフラグの状態が「0」と「1」の何れであるかを判定する(ステップS12)。なお、通常通りプログラム更新動作が進んでいる場合、ブートフラグは現時点で「1」となっている。そしてCPU4は、判定結果が「1」のとき(ステップS12のY)、第2ブロックに格納されている、現第1ブートローダの書換部をリードして実行を開始する(ステップS14)。一方、判定結果が「0」のとき(ステップS12のN)、CPU4は、第1ブロックに格納されている、現メインプログラムをリードして実行を開始する(ステップS13)。
ステップS13の動作が実行された場合は、プログラム更新動作は終了し、CPU4は以降、通常動作(現メインプログラムに基づく動作)を行うことになる。一方、ステップS14の動作が実行された場合は、CPU4は、現第1ブートローダの書換部に基づいて動作する。
具体的には、CPU4は、第1ブロックに格納されている現メインプログラムを消去する動作(ステップS15)、当該消去の後、PC1から受取った第2ブートローダを、第1ブロックにライトする動作(ステップS16)、および、当該ライトの動作が正常終了したか否かを判定する動作(ステップS17)を行う。
そして更にCPU4は、正常終了したときは(ステップS17のY)、ブートフラグを「0」にリセットして再起動を開始する動作(ステップS18)、および、正常終了していないときは(ステップS17のN)、判定部に基づく動作(ステップS12)を再度行う動作を行う。
ステップS18の動作がなされることで1回目書換動作は完了し、引き続き、2回目書換動作が開始される。なおこの時点でフラッシュメモリ5に格納されているプログラムの種類は、図6の(A)に示す通りである。すなわち、フラッシュメモリ5の第1ブロックには第2ブートローダが、第2ブロックには現第1ブートローダが、それぞれ格納されている。
次に、2回目書換動作について説明する。再起動がなされたことにより(ステップS18)、CPU4は、先ず初期プログラムに基づいて動作する。具体的には、CPU4は、第2ブロックに格納されている、現第1ブートローダの判定部をリードして実行を開始する(ステップS21)。
すなわちCPU4は、先ずブートフラグの状態が「0」と「1」の何れであるかを判定する(ステップS22)。なお、通常通りプログラム更新動作が進んでいる場合、ブートフラグは現時点で「0」となっている。そしてCPU4は、判定結果が「1」のとき(ステップS22のY)、第2ブロックに格納されている、現第1ブートローダの書換部をリードして実行を開始する。すなわちこのときは、先述したステップS14の動作のやり直しが行われる。一方、判定結果が「0」のとき(ステップS22のN)、CPU4は、第1ブロックに格納されている、第2ブートローダをリードして実行を開始する(ステップS23)。
ステップS23の動作が実行された場合は、CPU4は、第2ブートローダに基づいて動作する。具体的には、CPU4は、第2ブロックに格納されている現第1ブートローダを消去する動作(ステップS24)、当該消去の後、PC1から受取った新第1ブートローダを、第2ブロックにライトする動作(ステップS25)、および、当該ライトの動作が正常終了したか否かを判定する動作(ステップS26)を行う。
そして更にCPU4は、正常終了したときは(ステップS26のY)、ブートフラグを「1」にセットして再起動を開始する動作(ステップS27)、および、正常終了していないときは(ステップS26のN)、判定部に基づく動作(ステップS22)を再度行う動作を行う。
ステップS27の動作がなされることで2回目書換動作は完了し、引き続き、3回目書換動作が開始される。なおこの時点でフラッシュメモリ5に格納されているプログラムの種類は、図6の(B)に示す通りである。すなわち、フラッシュメモリ5の第1ブロックには第2ブートローダが、第2ブロックには新第1ブートローダが、それぞれ格納されている。
次に、3回目書換動作について説明する。再起動がなされたことにより(ステップS27)、CPU4は、先ず初期プログラムに基づいて動作する。具体的には、CPU4は、第2ブロックに格納されている、新第1ブートローダの判定部をリードして実行を開始する(ステップS31)。
すなわちCPU4は、先ずブートフラグの状態が「0」と「1」の何れであるかを判定する(ステップS32)。なお、通常通りプログラム更新動作が進んでいる場合、ブートフラグは現時点で「1」となっている。そしてCPU4は、判定結果が「1」のとき(ステップS32のY)、第2ブロックに格納されている、新第1ブートローダの書換部をリードして実行を開始する(ステップS33)。一方、判定結果が「0」のとき(ステップS32のN)、CPU4は、第1ブロックに格納されている、第2ブートローダをリードして実行を開始する。すなわちこのときは、先述したステップS23の動作のやり直しが行われる。
ステップS33の動作が実行された場合は、CPU4は、新第1ブートローダの書換部に基づいて動作する。具体的には、CPU4は、第1ブロックに格納されている第2ブートローダを消去する動作(ステップS34)、当該消去の後、PC1から受取った新メインプログラムを、第1ブロックにライトする動作(ステップS35)、および、当該ライトの動作が正常終了したか否かを判定する動作(ステップS36)を行う。
そして更にCPU4は、正常終了したときは(ステップS36のY)、ブートフラグを「0」にリセットして再起動を開始する動作(ステップS37)、および、正常終了していないときは(ステップS36のN)、判定部に基づく動作(ステップS32)を再度行う動作を行う。
ステップS37の動作がなされることで3回目書換動作は完了し、プログラム更新動作は完了する。この時点でフラッシュメモリ5に格納されているプログラムの種類は、図6の(C)に示す通りである。すなわち、フラッシュメモリ5の第1ブロックには新メインプログラムが、第2ブロックには新第1ブートローダが、それぞれ格納されている。
なおその後、CPU4は、再起動がなされたことにより(ステップS37)、初期プログラムに基づいて動作する。このときブートフラグの状態は「0」であるため、CPU4は、第1ブロックに格納されている、新メインプログラムをリードして実行を開始する。その結果、以降は、新メインプログラムに基づいた通常動作が行われることになる。
[プログラム更新動作の特長等について]
上述した通りマイコン2は、プログラム更新動作を行うことにより、フラッシュメモリ5に格納されているメインプログラムおよび第1ブートローダの両方を、新たなバージョンのものに更新することが可能となっている。
上述した通りマイコン2は、プログラム更新動作を行うことにより、フラッシュメモリ5に格納されているメインプログラムおよび第1ブートローダの両方を、新たなバージョンのものに更新することが可能となっている。
また上述した説明から明らかな通り、プログラム更新動作によれば、何れかのブートローダ(第1ブートローダまたは第2ブートローダ)をフラッシュメモリ5の何れかのブロック(第1ブロックまたは第2ブロック)に格納させた状態が、プログラム更新動作の実行中において維持される。そしてこの格納されているブートローダに基づいて、他方のブロックに対する書換が行われる。
そのため、仮にブートローダの書換の途中に電源の遮断などがなされ、当該書換がなされていたブロックのデータが破壊されても、CPU4はその後、他方のブロックに格納されているブートローダをリードする(これにより、書換のやり直し等を行う)ことが可能であり、ブートローダのリードが不可能となってしまう事態は回避される。このようにマイコン2は、各プログラムの更新を安全に行うことが可能となっている。
なおプログラム更新動作によれば、ブートローダを退避させるメモリを要することなく、このようなブートローダのリードが可能となっている。このようにマイコン2は、ブートローダを退避させるメモリを設けた場合に比べ、必要なメモリを少なくすることが可能となっている。
またプログラム更新動作によれば、第1ブートローダの格納領域とメインプログラムの格納領域の移動は発生しない。すなわち第1ブロックにはメインプログラムが、第2ブロックには第1ブートローダが、それぞれ格納された状態が維持される。
そのため、CPU4がプログラムをリードする際に、そのプログラムに対応した特定のアドレスへのアクセスを行う場合であっても、プログラム更新動作の実行によってリード処理に支障が生じることは回避される。また、メインプログラムの開発者は、メインプログラムの格納領域の変更を考慮すること(プログラム更新動作の実行を考慮した設計変更など)は必要無く、メインプログラムの開発を効率よく行うことが可能である。
またメモリ容量の制限や、消去領域のブロック構成などにより、フラッシュメモリ5においてプログラムの格納領域を移動させることが出来ない場合であっても、メインプログラムと第1ブートローダの双方の更新が可能である。
なお第1ブートローダの判定部は、簡単な動作を実行させるだけで良いため簡単な構成となっており、フラッシュメモリ5の使用容量もごく僅かである。従って、判定部の書換は非常に短時間で実施可能であるため、判定部の書換の途中で電源遮断などに遭遇することは極めて少ないといえる。
2.第2実施形態
ところで先述したように、第1ブートローダの判定部は簡単な構成であるため、バージョンアップの必要性が乏しいケースも考えられる。そこでこのようなケースに対応するため、プログラム更新動作においては、第1ブートローダの判定部の更新が省略されるようにしても構わない。
ところで先述したように、第1ブートローダの判定部は簡単な構成であるため、バージョンアップの必要性が乏しいケースも考えられる。そこでこのようなケースに対応するため、プログラム更新動作においては、第1ブートローダの判定部の更新が省略されるようにしても構わない。
このようにする場合の実施形態を、第2実施形態として以下に説明する。なお本実施形態の説明は、第1実施形態と異なる点に重点を置き、共通する点については説明を省略することがある。
図7は、第2実施形態に係るマイコン2の概略的な構成図である。なお本実施形態のマイコン2は、補助フラッシュメモリ7が設けられた点を除き、第1実施形態に係るマイコン2と基本的に同等の構成である。但し本実施形態では、第1ブートローダは書換部のみを有し、判定部を有していない。その代わりに図8に示すように、この判定部と同等の内容である判定プログラムが、補助フラッシュメモリ7に予め格納されている。
そして本実施形態の「第2ブートローダ」は、(1)第2ブロックに格納されているプログラムを消去する動作、(2)当該消去の後、PC1に第1ブートローダ(書換部のみ)の送信要求を行い、この要求に応じて送信されてきた第1ブートローダを第2ブロックにライトする動作、(3)ライトの動作が正常終了したか否かを判定する動作、(4)正常終了したときは、ブートフラグを「1」にセットして再起動を開始する動作、および(5)正常終了していないときは判定プログラム(既にCPU4がリードしているもの、或いは、補助フラッシュメモリ7に格納されているもの)に基づく動作を再度行う動作を、CPU4に実行させるプログラムとなっている。
また本実施形態の「初期プログラム」は、補助フラッシュメモリ7に格納されている判定プログラムをリードして実行を開始する動作を、CPU4に実行させるプログラムとなっている。
そのためフラッシュメモリ5には、第1ブートローダとしては書換部だけが格納され、プログラム更新動作が実行される度に、新たなバージョンのものに更新される。一方で、補助フラッシュメモリ7に格納されている判定プログラムは、プログラム更新動作が実行されても書き換えられない。
このように本実施形態に係るプログラム更新動作によれば、判定プログラム、すなわち第1実施形態における判定部に相当するプログラムについては、更新が省略されるようになっている。そのため、マイコン2におけるプログラム更新動作の処理負担を、軽減させることが可能となっている。
3.その他
以上までに説明した通り、マイコン2(処理装置)は、プログラムを格納する第1ブロック(第1領域)と、第1ブロックでのプログラムの書換を実行させる第1ブートローダを格納する第2ブロック(第2領域)と、を有するフラッシュメモリ5(不揮発性メモリ)を備え、第1ブロックに格納されているメインプログラムに基づいて処理を行う。
以上までに説明した通り、マイコン2(処理装置)は、プログラムを格納する第1ブロック(第1領域)と、第1ブロックでのプログラムの書換を実行させる第1ブートローダを格納する第2ブロック(第2領域)と、を有するフラッシュメモリ5(不揮発性メモリ)を備え、第1ブロックに格納されているメインプログラムに基づいて処理を行う。
またマイコン2は、新メインプログラム、新第1ブートローダ、および第2ブロックでのプログラムの書換を実行させる第2ブートローダが用意された(PC1から適宜受取ることができる)状況において、第1ブロックに格納されている現メインプログラムを新メインプログラムに、第2ブロックに格納されている現第1ブートローダを新第1ブートローダに、それぞれ更新するプログラム更新動作を行う。
そしてこのプログラム更新動作は、現第1ブートローダに基づいて、第1ブロックに格納されている現メインプログラムを第2ブートローダに書き換える1回目書換動作(第1更新動作)、第1ブロックに書き込まれた第2ブートローダに基づいて、第2ブロックに格納されている現第1ブートローダを新第1ブートローダに書き換える2回目書換動作(第2更新動作)、および、第2ブロックに書き込まれた新第1ブートローダに基づいて、第1ブロックに格納されている第2ブートローダを新メインプログラムに書き換える3回目書換動作(第3更新動作)を含んでいる。
そのためマイコン2は、プログラム更新動作を行うことにより、ブートローダを退避させるためのメモリを要せず、安全に、かつ、第1ブートローダの格納領域とメインプログラムの格納領域の移動が発生しないように、メインプログラムと第1ブートローダの更新を行うことが可能となっている。
またマイコン2は、より具体的には、「0」および「1」の何れか一方となるフラグが「0」であるときは、第1ブロックに格納されているプログラムに基づいて動作し、該フラグが「1」であるときは、第2ブロックに格納されているプログラムに基づいて動作すること(「フラグ判定動作」とする)を行う。
そして第1ブートローダは、第1ブロックに格納されているプログラムを、自身に対応している用意されたプログラム(第2ブートローダまたはメインプログラム)に書き換えさせるとともに、フラグの状態を変更させた上で、再起動を実行させるプログラムである。また第2ブートローダは、第2ブロックに格納されているプログラムを、自身に対応している用意されたプログラム(第1ブートローダ)に書き換えさせるとともに、フラグの状態を変更させた上で、再起動を実行させるプログラムである。
また第1実施形態における第1ブートローダは、マイコン2(CPU4)に対して、第1ブロックでのプログラムの書換を実行させる書換部と、フラグ判定動作を実行させる判定部と、を有している。また第2実施形態における第1ブートローダは、マイコン2(CPU4)に対して、第1ブロックでのプログラムの書換を実行させる書換部を有している一方、フラグ判定動作を実行させるプログラムは有していない。第2実施形態では、フラグ判定動作を実行させるプログラムは判定プログラムとして、補助フラッシュメモリ7に格納され、プログラム更新動作によっては書き換えられないようになっている。
以上、本発明の実施形態について説明したが、本発明はこの内容に限定されるものではない。また本発明の実施形態は、本発明の主旨を逸脱しない限り、種々の改変を加えることが可能である。
本発明は、プログラムに基づいて処理を行う各種装置に利用することができる。
1 PC
2 マイコン(処理装置)
3 通信I/F
4 CPU
5 フラッシュメモリ(不揮発性メモリ)
6 EEPROM
7 補助フラッシュメモリ
2 マイコン(処理装置)
3 通信I/F
4 CPU
5 フラッシュメモリ(不揮発性メモリ)
6 EEPROM
7 補助フラッシュメモリ
Claims (6)
- プログラムを格納する第1領域と、第1領域でのプログラムの書換を実行させる第1ブートローダを格納する第2領域と、を有する不揮発性メモリを備え、
第1領域に格納されているメインプログラムに基づいて処理を行う処理装置であって、
新メインプログラム、新第1ブートローダ、および第2領域でのプログラムの書換を実行させる第2ブートローダが用意された状況において、第1領域に格納されている現メインプログラムを新メインプログラムに、第2領域に格納されている現第1ブートローダを新第1ブートローダに、それぞれ更新するプログラム更新動作を行うものであり、
前記プログラム更新動作は、
現第1ブートローダに基づいて、第1領域に格納されている現メインプログラムを第2ブートローダに書き換える第1更新動作、
第1領域に書き込まれた第2ブートローダに基づいて、第2領域に格納されている現第1ブートローダを新第1ブートローダに書き換える第2更新動作、および、
第2領域に書き込まれた新第1ブートローダに基づいて、第1領域に格納されている第2ブートローダを新メインプログラムに書き換える第3更新動作、
を含むことを特徴とする処理装置。 - 起動時において、第1状態および第2状態の何れか一方となるフラグが第1状態であるときは、第1領域に格納されているプログラムに基づいて動作し、該フラグが第2状態であるときは、第2領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行う請求項1に記載の処理装置であって、
前記第1ブートローダは、
第1領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムであり、
前記第2ブートローダは、
第2領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えさせるとともに、前記フラグの状態を変更させた上で、再起動を実行させるプログラムであることを特徴とする処理装置。 - 前記第1ブートローダは、
第1領域でのプログラムの書換を実行させる書換部と、
前記フラグ判定動作を実行させる判定部と、
を有していることを特徴とする請求項2に記載の処理装置。 - 前記第1ブートローダは、
第1領域でのプログラムの書換を実行させる書換部を有する一方、
前記フラグ判定動作を実行させるプログラムを有していないことを特徴とする請求項2に記載の処理装置。 - プログラムを格納する第1領域と、第1領域でのプログラムの書換を実行させる第1ブートローダを格納する第2領域と、を有する不揮発性メモリを備え、第1領域に格納されているメインプログラムに基づいて処理を行う処理装置が、プログラムを更新する方法であって、
新メインプログラム、新第1ブートローダ、および第2領域でのプログラムの書換を実行させる第2ブートローダが用意された状況において、第1領域に格納されている現メインプログラムを新メインプログラムに、第2領域に格納されている現第1ブートローダを新第1ブートローダに、それぞれ更新する方法であり、
現第1ブートローダに基づいて、第1領域に格納されている現メインプログラムを第2ブートローダに書き換える第1更新ステップ、
第1領域に書き込まれた第2ブートローダに基づいて、第2領域に格納されている現第1ブートローダを新第1ブートローダに書き換える第2更新ステップ、および、
第2領域に書き込まれた新第1ブートローダに基づいて、第1領域に格納されている第2ブートローダを新メインプログラムに書き換える第3更新ステップ、
を含むことを特徴とするプログラム更新方法。 - 第1領域および第2領域を有する不揮発性メモリを備えた処理装置に、プログラムの更新を行わせるプログラムであって、
起動時において、第1状態および第2状態の何れか一方となるフラグが第1状態であるときは、第1領域に格納されているプログラムに基づいて動作し、前記フラグが第2状態であるときは、第2領域に格納されているプログラムに基づいて動作する、フラグ判定動作を行わせるプログラムと、
第1領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、
第2領域に格納されているプログラムを、自身に対応している用意されたプログラムに書き換えるとともに、前記フラグの状態を変更させた上で、再起動を実行する動作を行わせるプログラムと、
を有することを特徴とするプログラム。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2010273187 | 2010-12-08 | ||
JP2010273187 | 2010-12-08 | ||
PCT/JP2011/077937 WO2012077604A1 (ja) | 2010-12-08 | 2011-12-02 | 処理装置、プログラム更新方法、およびプログラム |
Publications (1)
Publication Number | Publication Date |
---|---|
JPWO2012077604A1 true JPWO2012077604A1 (ja) | 2014-05-19 |
Family
ID=46207092
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012547831A Pending JPWO2012077604A1 (ja) | 2010-12-08 | 2011-12-02 | 処理装置、プログラム更新方法、およびプログラム |
Country Status (2)
Country | Link |
---|---|
JP (1) | JPWO2012077604A1 (ja) |
WO (1) | WO2012077604A1 (ja) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2017151510A (ja) * | 2016-02-22 | 2017-08-31 | Kyb株式会社 | コントローラ |
CN111488168B (zh) * | 2019-12-25 | 2023-09-12 | 湖北航天飞行器研究所 | 一种基于boot二次加载的武器***控制软件安全升级方法 |
CN111580842A (zh) * | 2020-04-16 | 2020-08-25 | 北京遥感设备研究所 | 一种车载毫米波雷达应用程序在线升级方法及*** |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004318350A (ja) * | 2003-04-15 | 2004-11-11 | Matsushita Electric Ind Co Ltd | 制御プログラムの更新方法 |
JP4868216B2 (ja) * | 2006-01-19 | 2012-02-01 | 日本電気株式会社 | ファームウェア更新回路およびファームウェア更新方法 |
JP2007316800A (ja) * | 2006-05-24 | 2007-12-06 | Mitsubishi Electric Corp | 車載プログラム書換え制御装置 |
-
2011
- 2011-12-02 WO PCT/JP2011/077937 patent/WO2012077604A1/ja active Application Filing
- 2011-12-02 JP JP2012547831A patent/JPWO2012077604A1/ja active Pending
Also Published As
Publication number | Publication date |
---|---|
WO2012077604A1 (ja) | 2012-06-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102023908B (zh) | 一种引导程序备份方法及装置 | |
US7664923B2 (en) | Method and system for updating software | |
WO2022007656A1 (zh) | Bootloader软件更新方法、装置、嵌入式控制器以及存储介质 | |
JP6185772B2 (ja) | 情報処理装置、その制御方法、及びプログラム | |
WO2010035596A1 (ja) | ファームウェア更新装置及び方法 | |
JP6070360B2 (ja) | 情報処理装置およびその処理方法 | |
JP2019128946A (ja) | ファームウェアの更新方法及びこの方法を用いる電子装置 | |
JP6074064B2 (ja) | 電子機器 | |
CN110580167A (zh) | 一种***升级方法、智能设备及服务器 | |
WO2012077604A1 (ja) | 処理装置、プログラム更新方法、およびプログラム | |
CN111026417A (zh) | 一种嵌入式设备的升级方法及嵌入式设备 | |
CN110688141A (zh) | 固件更新方法 | |
JP6575157B2 (ja) | ファームウェアのダウンロード方法及びファームウェア組込機器 | |
JP6192089B2 (ja) | 情報処理装置、情報処理装置の制御方法及び制御プログラム | |
JP2002189609A (ja) | アクシデントに適応したソフトウェア更新方式および方法 | |
JPH1063497A (ja) | プログラム更新方法 | |
JP2002175193A (ja) | プログラム書き換え装置及びプログラム書き換え方法 | |
JP5158883B2 (ja) | ファームウェア更新方法及びファームウェア更新装置 | |
KR102434126B1 (ko) | Plc 프로그램 처리 장치 | |
JP5418348B2 (ja) | 情報処理装置およびカラオケ装置 | |
JP2002007152A (ja) | ダウンロード方法および装置 | |
JP7491765B2 (ja) | ファームウェア更新システムおよびファームウェア更新方法 | |
JPH06222986A (ja) | メモリ制御装置 | |
CN113126883B (zh) | 一种数据处理方法、***及存储介质 | |
JP2011108161A (ja) | 情報処理装置 |