(57)【要約】【課題】コストアップを招くことなく、プログラムの更新処理での不具合により正常動作できないという障害を回避し、正常動作が可能なエリアに格納してあるプログラムに切り替えて正常なシステムの運用を実行すること。【解決手段】ＥＥＰＲＯＭ５０２のプログラム格納領域を二等分し、それぞれ領域の先頭側をＢｏｏｔプログラムを格納するＢｏｏｔエリアとし、残りの領域を修正や改良時の更新対象となるＡｐｐプログラムを格納するＡｐｐエリアとし、起動時に、Ｂｏｏｔプログラムに問題がなければＢｏｏｔエリアとＡｐｐエリアとを切り替え、Ａｐｐプログラムに問題があれば、ＢｏｏｔエリアとＡｐｐエリアとの切り替えは行わず、該Ｂｏｏｔプログラムの整合性チェックを行い、問題がなければ該Ｂｏｏｔプログラムのまま運用を開始し、問題があればアラーム処理を実行してプログラムの運用を停止するようにした。【選択図】図１
2010157026.tif 000002
【特許請求の範囲】
【請求項１】
書き換え可能な記憶手段のプログラム格納領域を二等分し、それぞれ領域の先頭側を起動用プログラムを格納する起動用エリアとし、残りの領域を修正や改良時の更新対象となる通常動作用プログラムを格納する通常動作用エリアとし、
前記起動用プログラムより起動して前記通常動作用プログラムの整合性チェックを行い、
該通常動作用プログラムの整合性チェックに問題がなければ前記起動用エリアと前記通常動作用エリアのアドレスを切り替え、該通常動作用プログラムにて通常動作を開始し、
前記通常動作用プログラムの整合性チェックに問題があれば、前記起動用エリアと前記通常動作用エリアとのアドレスの切り替えは行わず、該起動用プログラムの整合性チェックを行い、
該起動用プログラムの整合性チェックに問題がなければ該起動用プログラムのまま運用を開始し、
前記起動用プログラムの整合性チェックに問題があればプログラムの運用を停止する
ことを特徴とするプログラムエリア切替方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｏｎｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）内の領域をＢｏｏｔエリアとＡｐｐエリアとに分け、それぞれのエリアに格納したプログラムを切り替えて使用するプログラムエリア切替方法に関する。
【背景技術】
【０００２】
従来より、不揮発性メモリの一種であり、ＵＶ（紫外線）等を用いずに電圧の付加の変化等の電気的な操作にてデータの消去や書き換えが可能となっているＲＯＭであるＥＥＰＲＯＭが、マイコン（マイクロコントローラ、ＭＰＵ、ＣＰＵ）のプログラムやデータの記憶のために用いられている。
【０００３】
ここで、図１１〜図１３を用い、従来のＥＥＰＲＯＭを用いたプログラムの更新方法について説明する。
図１１はマイコンを用いたコンピュータシステム（以下、マイコンシステムという）に、１つのＥＥＰＲＯＭが備えられ、そのＥＥＰＲＯＭに１つのプログラムが格納されている場合を示す。図１２はマイコンシステムのメモリマップ（メモリ空間）を示し、図１３はマイコンシステムのプログラムの更新処理を示している。
【０００４】
まず、図１１に示すように、マイコンシステム１は、ＥＥＰＲＯＭやフラッシュメモリや磁気メモリ等を含む電気的に書き換え可能な不揮発性の記憶装置のＲＯＭ（リード・オンリー・メモリー）であるＥＥＰＲＯＭ１０２と、このＥＥＰＲＯＭ１０２に格納されたプログラムの演算処理を実行しシステムの動作制御を実行するマイコンであるＣＰＵ１０１と、このＣＰＵ１０１のメインメモリでプログラムの演算処理を行うための作業エリアとなるＲＡＭ１０３と、アドレスバスのアドレス値からアクセス対象のＥＥＰＲＯＭ１０２やＲＡＭ１０３への選択信号１０６及び１０７を送出するアドレスデコード回路１０４と、ＣＰＵ１０１とＥＥＰＲＯＭ１０２とＲＡＭ１０３とアドレスデコード回路１０４の間でアドレスやデータを転送するためのアドレス／データバス１０５等から構成されている。なお、符号１０８はアドレス／データバス１０５以外のＩ／Ｏ等で接続された外部機器を示している。
【０００５】
また、図１２に示すように、マイコンシステム１のメモリマップでは、該メモリマップ上のアドレスにおいて、０００００番地（十六進数表記。以下、番地についての表記は同様に表記する）から７ＦＦＦＦ番地までをＥＥＰＲＯＭ１０２に割り当てられたプログラムエリア２０２とする。また、８００００番地からＢＦＦＦＦ番地までをＲＡＭ１０３に割り当てられた作業エリア２０３とする。
そして、ＣＰＵ１０１が所定のトリガ（引き金）により割り込み処理を実行するための飛び先情報を格納する割り込みベクタテーブル２０１が、プログラムエリア２０２の先頭０００００番地から始まる場所に配置されている。なお、以下、０００００番地を先頭（上位）アドレスとして説明する。
【０００６】
ところで、ＥＥＰＲＯＭ１０２は、０００００番地から７ＦＦＦＦ番地までの分割されていない１つの十分なプログラムエリア２０２を持ち、このプログラムエリア２０２にプログラムを格納するのが一般的である。
ＥＥＰＲＯＭ１０２に格納のプログラムに修正や改良の必要性が生じた場合、ＥＥＰＲＯＭ１０２を備えたマイコンシステム１では、外部機器１０８によるダウンロード２５１によってプログラムを更新することができる。
【０００７】
図１３を参照して説明すると、マイコンシステム１のプログラム更新処理においては、ＣＰＵ１０１の制御により外部機器１０８より更新プログラムのダウンロード２５１が開始されると、そのダウンロード２５１された更新プログラムは一旦ＲＡＭ１０３の作業エリア２０３に格納される。
そして、ＣＰＵ１０１は、格納された更新プログラムについてチェックサム等を計算する整合性チェック２５２を実行し、整合性に問題がなければＥＥＰＲＯＭ１０２のプログラムエリア２０２に転送２５３し、プログラムの更新を実行する。
【０００８】
ところが、更新しようとする新しいプログラムに何らかの不備や不具合があったり、ＥＥＰＲＯＭ１０２への転送２５３中に何らかの通信不具合や停電等で更新処理が正常に完了しないことがあると、更新プログラムや元のプログラムに支障を生じることがある。
このような場合、ＥＥＰＲＯＭ１０２内のプログラムは正常に動作せず、運用動作が停止したり、動作不能に至ることが発生する可能性がある。
【０００９】
なお、ダウンロード２５１等によるプログラム更新機能を備え、物理的ショックによる部品の脱落等を防ぐよう品質向上等も考慮しているマイコンシステム１の場合、一般的にＥＥＰＲＯＭ１０２はプリント基板に直に半田付けされていることが多い。
ここで、プログラムの不具合や支障のうち、プログラムの先頭に格納する重要な基本部分やプログラム更新処理に関係する部分に支障を生じた場合、以降、ダウンロード２５１によるプログラムの更新は一切不可能となる。
このように更新処理に関係する部分に支障を生じた場合は、修理のため、正常なプリント基板への交換や、プリント基板よりそのＥＥＰＲＯＭ１０２を取り外して正常なプログラムを格納したＥＥＰＲＯＭを新たに実装しなければならなくなる。
【００１０】
また、プログラムの更新が屋外等のフィールド環境であった場合、整合性チェック２５２にて更新プログラムのＥＥＰＲＯＭ１０２のプログラムエリア２０２へ転送２５３を開始する前に、整合性の不備や不具合を発見できたとしても、更新プログラムを格納するＥＥＰＲＯＭ１０２のプログラムエリア２０２は１つで、空きエリアや予備プログラム等の回避方法や手段もなく、正常動作する他の更新プログラムの事前準備も困難となる。よって、修理・改修に時間がかかり、長時間にわたってシステムの動作が停止するといった重大な問題が発生する。
【００１１】
次に、図１４及び図１５を用い、マイコンシステムに２つのＥＥＰＲＯＭが組み込まれている場合について説明する。図１４はマイコンシステムに２つのＥＥＰＲＯＭが組み込まれ、それぞれのＥＥＰＲＯＭにプログラムが格納されている場合を示し、図１５はマイコンシステムのメモリマップを示している。
【００１２】
まず、図１４に示すように、マイコンシステム３は、電気的にプログラム書き換え可能なＥＥＰＲＯＭ３０２、３０３と、これらのＥＥＰＲＯＭ３０２、３０３に格納されたプログラムの演算処理を実行しシステムの動作制御を実行するＣＰＵ３０１と、このＣＰＵ３０１のメインメモリでプログラムの演算処理等を行うための作業領域となるＲＡＭ３０４と、アドレスバスのアドレス値からアクセス対象のＥＥＰＲＯＭ３０２、３０３やＲＡＭ３０４への選択信号３０７〜３０９を送出するアドレスデコード回路３０５と、ＣＰＵ３０１とＥＥＰＲＯＭ３０２、３０３とＲＡＭ３０４とアドレスデコード回路３０５との間でアドレスやデータを転送するためのアドレス／データバス３０６等から構成されている。
【００１３】
また、図１５に示すように、マイコンシステム３のメモリマップでは、ＥＥＰＲＯＭ３０２、３０３が連続したアドレス空間に備えられている。すなわち、マイコンシステム３のメモリマップには、プログラムエリア４０２、４０４を有し、たとえば０００００番地から３ＦＦＦＦ番地までをＥＥＰＲＯＭ３０２のプログラムエリア４０２とし、４００００番地から７ＦＦＦＦ番地までをＥＥＰＲＯＭ３０３のプログラム２エリア４０４として配置している。
【００１４】
また、それぞれのプログラムエリア４０２、４０４にプログラム１とプログラム２とを格納し、８００００番地からＢＦＦＦＦ番地までをＲＡＭ３０４を使用する作業エリア４０５とする。そして、割り込み処理を実行するための飛び先情報を格納するプログラム１用割り込みベクタテーブル４０１をプログラム１エリア４０２の先頭０００００番地から始まる場所に配置し、プログラム２用割り込みベクタテーブル４０３をプログラム２エリア４０４の先頭４００００番地から始まる場所に配置している。
【００１５】
ここで、連続したアドレス空間にプログラムエリア４０２、４０４を持った２個のＥＥＰＲＯＭ３０２、３０３のプログラムエリア４０２、４０４のそれぞれにプログラム１、２を格納する構成において、上記同様にプログラムを更新しようとする場合、たとえば一方のプログラムエリア４０２に格納のプログラム１を更新対象として設定しておき、もう一方のプログラムエリア４０４に格納のプログラム２は更新対象外として既に格納されているプログラムのままとする。
【００１６】
上記同様に、更新しようとする新しいプログラムに何らかの不備や不具合があったり、プログラムエリア４０２への転送中に何らかの通信不具合や停電等で更新処理が正常に完了せず、更新プログラムや元のプログラムに支障を生じた場合でも、正常に動作するプログラムエリア４０４のプログラム２が残っている。このため、プログラムエリア４０４のプログラム２の内容をプログラムエリア４０２に転送して複写したり、プログラムエリア４０４のプログラム２を使用して起動するように工夫して対処すれば、上記の問題点である動作不能に至ることや、ＥＥＰＲＯＭの交換、あるいは長時間にわたってのシステムの動作停止等が未然に防げる可能性がある。
【００１７】
しかし、ＥＥＰＲＯＭ３０２、３０３が２つ必要となることや、アドレスデコード回路３０５が複雑化かつ大規模化となってしまうことから、全体的にコストアップするという問題が発生する。
【００１８】
ちなみに、特許文献１では、実行中の第１のプログラムから待機中の第２のプログラムに切替える時は切替要求によりＣＰＵをリセットし、第２のプログラムで立上げることにより切替え、この切替えに失敗した時は自動的に第１のプログラムの立上動作をくり返すプログラム切替方式において、第２のプログラムの切替えに失敗した時は自動的にＣＰＵをリセットしこれを保持することにより第１のプログラムの立上動作を１回で停止するようにしたプログラム切替方式を提案している。
【００１９】
【特許文献１】特開平０６−０７５８０２号公報
【発明の開示】
【発明が解決しようとする課題】
【００２０】
特許文献１では、プログラムメモリの切替失敗後の再立上げに失敗した場合、これ以降の切替動作を停止し、不要な切替動作のくり返しを防止することができるが、ダウンロード時におけるプログラムの更新における不具合や不備についての対策については開示していない。
【００２１】
すなわち、上述したように、ダウンロード時におけるプログラムの更新は、屋外等のフィールド環境で行われる場合もあり、更新しようとする新しいプログラムに何らかの不具合や不備が混在している場合や、更新処理中に何らかの通信不具合や停電等で更新プログラムや元のプログラムに支障を生じた場合、その場で復旧が困難となり、長時間システムの動作が停止する障害が発生する可能性があるという問題があった。
【００２２】
この場合、上述したように、２つのＥＥＰＲＯＭ３０２、３０３を用いることで、たとえば長時間にわたってのシステムの動作停止等を未然に防げる可能性があるが、ＥＥＰＲＯＭ３０２、３０３が２つ必要となることや、アドレスデコード回路３０５が複雑化かつ大規模化となってしまうことから、全体的にコストアップしてしまうという問題もあった。
【００２３】
本発明は、このような状況に鑑みてなされたものであり、コストアップを招くことなく、プログラムの更新処理での不具合により正常動作できないという障害を回避し、しかも更新したプログラムに不具合や不備があった場合であっても、正常動作が可能なエリアに格納してあるプログラムに切り替えて正常なシステムの運用を実行することができるプログラムエリア切替方法を提供することを目的とする。
【課題を解決するための手段】
【００２４】
本発明のプログラムエリア切替方法は、書き換え可能な記憶手段のプログラム格納領域を二等分し、それぞれ領域の先頭側を起動用プログラムを格納する起動用エリアとし、残りの領域を修正や改良時の更新対象となる通常動作用プログラムを格納する通常動作用エリアとし、前記起動用プログラムより起動して前記通常動作用プログラムの整合性チェックを行い、該通常動作用プログラムの整合性チェックに問題がなければ前記起動用エリアと前記通常動作用エリアとを切り替え、該通常動作用プログラムにて通常動作を開始し、前記通常動作用プログラムの整合性チェックに問題があれば、前記起動用エリアと前記通常動作用エリアとの切り替えは行わず、該起動用プログラムの整合性チェックを行い、該起動用プログラムの整合性チェックに問題がなければ該起動用プログラムのまま運用を開始し、前記起動用プログラムの整合性チェックに問題があればアラーム処理を実行してプログラムの運用を停止することを特徴とする。
【発明の効果】
【００２５】
本発明のプログラムエリア切替方法によれば、書き換え可能な記憶手段のプログラム格納領域を二等分し、それぞれ領域の先頭側を起動用プログラムを格納する起動用エリアとし、残りの領域を修正や改良時の更新対象となる通常動作用プログラムを格納する通常動作用エリアとし、起動時に、通常動作用プログラムに問題がなければ起動用エリアと通常動作用エリアとを切り替え、通常動作用プログラムに問題があれば、起動用エリアと通常動作用エリアとの切り替えは行わず、該起動用プログラムの整合性チェックを行い、問題がなければ該起動用プログラムのまま運用を開始し、問題があればアラーム処理を実行してプログラムの運用を停止するようにしたので、コストアップを招くことなく、プログラムの更新処理での不具合により正常動作できないという障害を回避し、しかも更新したプログラムに不具合や不備があった場合であっても、正常動作が可能なエリアに格納してあるプログラムに切り替えて正常なシステムの運用を実行することができる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施形態の詳細について説明する。図１は、本発明の一実施形態に係るプログラムエリア切替方法が適用されるマイコンシステムを説明するための図である。
【００２７】
図１に示すように、マイコンシステム５は、電気的にプログラム書き換え可能なＥＥＰＲＯＭ５０２と、このＥＥＰＲＯＭ５０２に格納されたプログラムの演算処理を実行しシステムの動作制御を実行するＣＰＵ５０１と、このＣＰＵ５０１のメインメモリでプログラムの演算処理等を行うための作業領域となるＲＡＭ５０３と、アドレスバスのアドレス値からアクセス対象のＥＥＰＲＯＭ５０２やＲＡＭ５０３への選択信号を送出するアドレスデコード回路５０４と、ＣＰＵ５０１からのエリア切り替え制御信号５０８とＡ１８アドレス信号５１０とを取り込み、ＥＥＰＲＯＭ５０２に対してエリア切り替え信号５０７を送出してエリア切り替えを行うエリア切り替え回路５０５と、ＣＰＵ５０１とＥＥＰＲＯＭ５０２とＲＡＭ５０３とアドレスデコード回路５０４との間でアドレスやデータを転送するためのアドレス／データバス５０６等から構成されている。
なお、ＥＥＰＲＯＭ５０２は狭義のＥＥＰＲＯＭだけではなく、ＮＯＲ型フラッシュメモリ、その他のフラッシュメモリ、磁気記憶メモリ等のように外部からプログラムの書き換え可能なメモリであって、マイコンのＲＯＭ用途のメモリに対しても用いることができる。
【００２８】
ここで、ＥＥＰＲＯＭ５０２は１つのプログラム容量の２倍以上ある領域のものを用意し、領域を二等分して使用する。さらに、ＥＥＰＲＯＭ５０２のＡ１８アドレス端子は上記のアドレス／データバス５０６には接続せず、上記のエリア切り替え回路５０５から送出されるエリア切り替え信号５０７に接続する。
【００２９】
エリア切り替え回路５０５は、ＣＰＵ５０１からのエリア切り替え制御信号５０８と、Ａ１８アドレス信号５１０とを取り込み、ＥＥＰＲＯＭ５０２のＡ１８アドレス端子に対してエリア切り替え信号５０７を送出して、ＣＰＵ５０１制御によるエリア切り替えを行う。
【００３０】
アドレスデコード回路５０４は、アドレス／データバス５０６を取り込み、ＣＰＵ５０１がアクセスするＥＥＰＲＯＭ５０２に対する選択信号５０９やＲＡＭ５０３に対する選択信号５１１を適時に送出する。
【００３１】
図２は、エリア切り替え回路５０５を示す図であり、ＣＰＵ５０１からのエリア切り替え制御信号５０８と、Ａ１８アドレス信号５１０とを取り込み、ＸＯＲ(排他的論理和)制御によってＥＥＰＲＯＭ５０２のＡ１８アドレス端子に対してエリア切り替え信号５０７を送出するようになっている。
つまり、エリア切り換え信号５０７は、本実施形態では、メモリマップのアドレスのうち１８ビット目であるＡ１８を示す値を変化させるものである。すなわち、アドレス空間で１８ビット分の番地において、Ａ１８を示す値が"０"の場合は０００００番地から３ＦＦＦＦ番地を示す。逆に、アドレス空間で１８ビット分の番地において、Ａ１８を示す値が"１"の場合は、４００００番地から７ＦＦＦＦ番地を示す。
そして、上述のＸＯＲ制御により、本実施形態では、エリア切り換え制御信号５０８の値により、後述するＢｏｏｔエリア９０２とＡｐｐエリア９０４とを切り換えるエリア切り換えを行う
【００３２】
図３は、ＥＥＰＲＯＭ５０２のアドレス切り替え制御を行うエリア切り替え回路５０５の入力信号と出力信号の関係を示している。
ここで、図３（ａ）はＣＰＵ５０１からのエリア切り替え制御信５０８がオフ("０")でＡ１８アドレス信号５１０が"０"の場合でエリア切り替えがオフとなり、図３（ｂ）はＣＰＵ５０１からのエリア切り替え制御信５０８がオン（"１"）でＡ１８アドレス信号５１０が"０"の場合でエリア切り替えがオンとなり、図３（ｃ）はＣＰＵ５０１からのエリア切り替え制御信５０８がオフ("０")でＡ１８アドレス信号５１０が"１"の場合でエリア切り替えがオンとなり、図３（ｄ）はＣＰＵ５０１からのエリア切り替え制御信５０８がオン（"１"）でＡ１８アドレス信号５１０が"１"の場合でエリア切り替えがオフとなることを示している。
【００３３】
すなわち、ＣＰＵ５０１からのエリア切り替え制御信５０８のオフ("０")／オン（"１"）と、Ａ１８アドレス信号５１０の"０"／"１"との組み合わせにより、ＥＥＰＲＯＭ５０２のＡ１８アドレス端子に対するエリア切り替え信号５０７が変化し、ＥＥＰＲＯＭ５０２に対するアドレス制御が４通りあることを示している。
【００３４】
図４は、エリア切り替え回路５０５によるＥＥＰＲＯＭ５０２のアドレス真理値表を示すものである。すなわち、たとえばＣＰＵ５０１からのエリア切り替え制御信号５０８がオフ設定"０"で、ＣＰＵ５０１が制御するＡ１８アドレス５１０が"０"で０００００番地から３ＦＦＦＦ番地を制御しようとする場合、エリア切り替え回路５０５のＸＯＲ(排他的論理和)によってエリア切り替え信号５０７はオフとなり、エリア切り換え回路５０５にてエリア切り換えは行われず、実際のＥＥＰＲＯＭ５０２のＡ１８アドレス端子は"０"で０００００番地から３ＦＦＦＦ番地の制御となる。
【００３５】
また、ＣＰＵ５０１からのエリア切り替え制御信号５０８がオン設定"１"で、ＣＰＵ５０１が制御するＡ１８アドレス５１０が"０"で０００００番地から３ＦＦＦＦ番地を制御しようとする場合、エリア切り替え回路５０５のＸＯＲ(排他的論理和)によって、エリア切り換え回路にてエリア切り換えが行われエリア切り替え信号５０７はオンとなり、実際のＥＥＰＲＯＭ５０２のＡ１８アドレス端子は"１"で４００００番地から７ＦＦＦＦ番地の制御となる。
【００３６】
また、ＣＰＵ５０１からエリア切り替え制御信号５０８がオフ設定"０"で、ＣＰＵ５０１が制御するＡ１８アドレスが"１"で４００００番地から７ＦＦＦＦ番地を制御しようとする場合、エリア切り替え回路５０５のＸＯＲ(排他的論理和)によって実際のＥＥＰＲＯＭ５０２のＡ１８アドレス端子はＡ１８アドレスが示す"１"となり、エリア切り換え回路にてエリア切り換えは行われず、４００００番地から７ＦＦＦＦ番地の制御になる。
【００３７】
また、ＣＰＵ５０１からのエリア切り替え信号５０８がオン設定"１"で、ＣＰＵ５０１が制御するＡ１８アドレス５１０が"１"で４００００番地から７ＦＦＦＦ番地を制御しようとする場合、エリア切り替え回路５０５のＸＯＲ(排他的論理和)によって実際のＥＥＰＲＯＭ５０２のＡ１８アドレス端子は"０"となり、エリア切り換え回路５０５にてエリア切り換えが行われ、０００００番地から３ＦＦＦＦ番地の制御になる。
【００３８】
このように、ＣＰＵ５０１からのエリア切り替え制御信号５０８がオン"１"である場合は、実際のＥＥＰＲＯＭ５０２のＡ１８アドレス端子が反転し、当初制御しようとしていたアドレスが切り替えられることで、エリア切り替えが実現される。
【００３９】
図５は、マイコンシステム５のメモリマップを示すものである。同図に示すメモリマップは、たとえば従来方式と同等の０００００番地から７ＦＦＦＦ番地までのプログラム格納領域を二等分して使用し、先頭側の０００００番地から３ＦＦＦＦ番地までを起動用プログラムであるＢｏｏｔプログラムを格納するＢｏｏｔエリア９０２とし、後方側の４００００番地から７ＦＦＦＦ番地までを通常動作用プログラムであるＡｐｐプログラムを格納するＡｐｐエリア９０４として配置し、それぞれに予めＢｏｏｔプログラムとＡｐｐプログラムとが格納されている場合を示している。
【００４０】
それぞれの割り込み処理を実行するための飛び先情報を格納するＢｏｏｔエリア９０２用割り込みベクタテーブル９０１をＢｏｏｔエリア９０２の先頭０００００番地から始まる場所に配置する。また、Ａｐｐエリア９０４用割り込みベクタテーブル９０３をＡｐｐエリア９０４の先頭４００００番地から始まる場所に配置する。
そして、８００００番地からＢＦＦＦＦ番地をＲＡＭ５０３上の作業エリア９０５とする。
【００４１】
図６は、マイコンシステム５のプログラム更新処理をメモリマップ上で示したものであり、通常、Ａｐｐエリア９０４に格納するＡｐｐプログラムのみを更新の対象とする。
ＣＰＵ５０１の制御により外部機器５１２による更新プログラムのダウンロード９５１を開始し、ダウンロード９５１された更新プログラムは一旦ＲＡＭ５０３の作業エリア９０５に格納される。
【００４２】
格納された更新プログラムは整合性チェック９５２が実行され、整合性に問題がなければＥＥＰＲＯＭ５０２のＡｐｐエリア９０４に転送９５３することで、プログラムの更新が実現される。
【００４３】
図７は、マイコンシステム５のエリア切り替え処理をメモリマップ上で示したものである。同図に示すように、起動時は必ず先頭側０００００番地から３ＦＦＦＦ番地までがＢｏｏｔエリア９０２として配置され、後方側４００００番地から７ＦＦＦＦ番地までがＡｐｐエリア９０４として配置され、必ずＢｏｏｔプログラム起動で動作を開始している。
また、ＣＰＵ５０１の制御によるエリア切り替え回路５０５よりエリア切り替え信号５０７が送出されると、エリア切り替え９６１を実行し、Ａｐｐエリア９０４が先頭側０００００番地から３ＦＦＦＦ番地までと、Ｂｏｏｔエリア９０２が後方側４００００番地から７ＦＦＦＦ番地までとして起動時とは逆に配置され、通常の動作時はＡｐｐプログラム起動となって動作する。
【００４４】
次に、マイコンシステム５におけるプログラムエリア切替方法を、図８のフローチャートを用いて説明する。なお、図８において、一点鎖線の左側が起動時におけるＢｏｏｔエリア９０２のプログラムの流れを示しており、その右側が通常動作時におけるＡｐｐエリア９０４のプログラムの流れを示している。
【００４５】
まず、電源オン又はリセット再起動による起動時には（ステップＳ１００１）、常にＢｏｏｔエリア９０２のＢｏｏｔプログラム先頭０００００番地より実行する（ステップＳ１００２）。その後、ＢｏｏｔプログラムでＣＰＵレジスタやＩ／Ｏボード等の初期設定を実行する（ステップＳ１００３）。
【００４６】
次いで、ダウンロードモードであるか判定を実行し（ステップＳ１００４）、ダウンロードモードであれば更新プログラムをダウンロード９５１し（ステップＳ１００５）、作業エリア９０５であるＲＡＭ５０３に一旦格納する。
【００４７】
次いで、更新プログラムの整合性チェック９５２を実行し（ステップＳ１００６）、整合性に問題があればプログラムの更新処理を停止し（ステップＳ１００７）、動作を停止する（ステップＳ１００８）。一方、ステップＳ１００６にて更新プログラムの整合性チェック９５２に整合性に問題がなければ、更新プログラムをＲＡＭ５０３からＥＥＰＲＯＭ５０２のＡｐｐエリア９０４に転送９５３し（ステップＳ１００９）、Ａｐｐプログラムの更新を実行する。更新完了後、通常モードに戻しリセット等による再起動を実行する（ステップＳ１０１０）。
【００４８】
一方、ステップＳ１００４にてダウンロードモードでなければ、Ａｐｐエリア９０４のＡｐｐプログラムの整合性チェック９５２を実行し（ステップＳ１０１１）、整合性に問題がなければＣＰＵ５０１はエリア切り替え制御信号５０８をエリア切り替えオンに設定する（ステップＳ１０１２）。
【００４９】
このとき、エリア切り替え回路５０５はエリア切り替え制御信号５０８と、アドレス／データバス５０６からのＡ１８アドレス信号５１０とを取り込み、ＸＯＲ(排他的論理和)によってＥＥＰＲＯＭ５０２のＡ１８アドレス端子に対して切り替え制御を行い、のエリア切り替え信号５０７として送出する。
【００５０】
エリア切り替え９６１を実行すると、Ｂｏｏｔエリア９０２として配置していた０００００番地から３ＦＦＦＦ番地へのアクセスは、エリア切り替え９６１により実際には４００００番地から７ＦＦＦＦ番地へのアクセスに変わり、結果的に４００００番地から７ＦＦＦＦ番地に配置しているＡｐｐエリア９０４へのアクセスとなる。
【００５１】
一方、Ａｐｐエリア９０４として配置していた４００００番地から７ＦＦＦＦ番地へのアクセスは、エリア切り替え９６１により実際には０００００番地から３ＦＦＦＦ番地へのアクセスに変わり、結果的に０００００番地から３ＦＦＦＦ番地に配置しているＢｏｏｔエリア９０２へのアクセスとなる。
【００５２】
このようにして、ＣＰＵ５０１がＥＥＰＲＯＭ５０２に対しアクセスするアドレスをエリア切り替え回路５０５により切り替えてエリア切り替え９６１を実現する。
【００５３】
その後、プログラムポインタを０００００番地に移動して戻し（ステップＳ１０１３）、Ａｐｐエリア９０４の先頭番地からプログラムの実行を行う。次いで、ＡｐｐプログラムでのＣＰＵレジスタやＩ／Ｏポート等の初期設定を実行する（ステップＳ１０１４）。次いで、Ａｐｐプログラムでの動作に関わる初期設定を実行し（ステップＳ１０１５）、最終的にＡｐｐプログラムでの運用の動作開始となる（ステップＳ１０１６）。
【００５４】
このように、Ｂｏｏｔプログラムでの起動後は常にＡｐｐプログラムに切り替えて、Ａｐｐプログラムでの運用動作を実行する。
【００５５】
一方、ステップＳ１０１１のＡｐｐプログラムの整合性チェックにて、Ａｐｐプログラムの整合性に問題があれば、続いて起動中のＢｏｏｔプログラムの整合性チェック９５２を実行する（ステップＳ１０１７）。Ｂｏｏｔプログラムの整合性に問題がなければＡｐｐエリア９０４へのエリア切り替え９６１は実行せず、Ｂｏｏｔプログラム起動のままとし、その後、Ｂｏｏｔプログラムでの動作に関わる初期設定を実行し（ステップＳ１０１８）、最終的に、Ｂｏｏｔプログラムでの運用の動作開始となる（ステップＳ１０１９）。
【００５６】
一方、ステップＳ１０１７のＢｏｏｔプログラムの整合性チェック９５２にて、万が一、Ｂｏｏｔプログラムの整合性にも問題があれば、異常状態と判断し、可能な限りのアラーム出力処理を実行した後（ステップＳ１０２０）、最終的に動作を停止する（ステップＳ１００８）。
【００５７】
次に、プログラムの整合性チェックを、図９及び図１０を用いて説明する。ここで、図９はマイコンシステム５のＡｐｐエリアのメモリマップを示す図であり、図１０は図９のメモリマップにおけるチェックコードの内容を説明するための図である。
【００５８】
まず、図９に示すように、たとえばＥＥＰＲＯＭ５０２の起動時における４００００番地から７ＦＦＦＦ番地までのＡｐｐエリア９０４のメモリマップにおいて、更新対象であるＡｐｐエリア９０４におけるプログラム領域は、実領域として２５６ｋバイトから３バイト差し引いた領域が使用可能であり、領域末尾の３バイトはプログラムの整合性チェック９５２に使用するチェック用データであるチェックコードが格納される。
【００５９】
プログラムの整合性チェックは、図１０に示すチェックコードの内容に示されるように、チェックのために算出されたコード内容を確認することでＡｐｐプログラムの整合性が確認される。
【００６０】
すなわち、Ａｐｐエリア９０４のＡｐｐプログラムを更新するための更新プログラム作成時のチェック方法として、７ＦＦＦＤ番地から７ＦＦＦＦ番地までの３つのチェックコードＸＸ，ＹＹ，ＺＺの初期値は共に"ＦＦ"に割り当てる。その後、先頭４００００番地から７ＦＦＦＦ番地のチェックコードＹＹまでの和を求め、その和の「１の補数」の下位１バイトをチェックコードＺＺの値として割り当てる。
【００６１】
よって、先頭４００００番地から７ＦＦＦＦ番地のチェックコードＺＺまでの和は"００"となる。その後、割り当てたチェックコードＺＺの値より、チェックコードＸＸ及びチェックコードＹＹの値を求める。チェックコードＸＸはチェックコードＺＺに"１"を加算して求められる値であり、チェックコードＹＹはチェックコードＺＺの「１の補数」の下位バイトとしてで求められる値である。
【００６２】
こうすると、結果的に、先頭４００００番地から末尾７ＦＦＦＦ番地のチェックコードＺＺまでの和の値は"００"のままとなる。
【００６３】
以上のように、更新プログラム作成時は３つのチェックコードＸＸ，ＹＹ，ＺＺの値を割り当て、かつ先頭４００００番地から末尾７ＦＦＦＦ番地のチェックコードＺＺまでの和の値が"００"となっていることを確認する。
【００６４】
続いて、チェックコードを付与して作成した更新プログラムをダウンロード９５１して更新した後の、毎回の起動時におけるＡｐｐプログラムの整合性チェック方法について説明する。
【００６５】
まず、先頭４００００番地から末尾７ＦＦＦＦ番地のチェックコードＺＺまでの和の値が"００"となっているか確認する。その後、７ＦＦＦＦ番地のチェックコードＹＹがチェックコードＺＺの「１の補数」の値となっているか確認する。さらに、先頭番地から２つ分である４００００番地と４０００１番地の値が共に初期値の"ＦＦ"以外の値となっているか確認する。
【００６６】
これは、Ａｐｐエリア用９０４用割り込みベクタテーブル９０３、Ｂｏｏｔ用割り込みベクタテーブル９０１には、割り込み処理を実行するための飛び先情報等が格納されているため、先頭番地から２つ分においては"ＦＦ"の値となることはありえないためである。
【００６７】
このように、毎回の起動時においては上記のようにエリアに格納されているプログラムが正しいものであるか確認する。
【００６８】
以上のように、更新プログラム作成時と毎回の起動時における２つの整合性チェック方法は、仮に先頭番地から途中番地までの計算にて意図している結果が得られ、その後の末尾番地までの整合性チェック９５２が未実行で終了することがないように、末尾番地のバイト値までチェックを実施しなければならない方法としている。
【００６９】
このように、本実施形態では、書き換え可能な記憶手段としてのＥＥＰＲＯＭ５０２のプログラム格納領域を二等分し、それぞれ領域の先頭側を起動用プログラムであるＢｏｏｔプログラムを格納するＢｏｏｔエリアとし、残りの領域を修正や改良時の更新対象となる通常動作用プログラムであるＡｐｐプログラムを格納するＡｐｐエリアとし、起動時に、Ｂｏｏｔプログラムに問題がなければＢｏｏｔエリアとＡｐｐエリアとを切り替える。また、Ａｐｐプログラムに問題があれば、ＢｏｏｔエリアとＡｐｐエリアとの切り替えは行わず、該Ｂｏｏｔプログラムの整合性チェックを行い、問題がなければ該Ｂｏｏｔプログラムのまま運用を開始する。そして、問題があればアラーム処理を実行してプログラムの運用を停止するようにした。
これにより、コストアップを招くことなく、プログラムの更新処理での不具合により正常動作できないという障害を回避し、しかも更新したプログラムに不具合や不備があった場合であっても、正常動作が可能なエリアに格納してあるプログラムに切り替えて正常なシステムの運用を実行することができる。
【００７０】
すなわち、本実施形態では、１つのＥＥＰＲＯＭ５０２を使用した従来と同様のマイコンシステム５としているため、複雑な構成や回路とはならず、しかもＥＥＰＲＯＭ５０２の領域を２つに分けるだけによって容易にプログラムの不具合や動作不能等の障害発生から回避できる。このようにすると、屋外等のフィールド環境におけるプログラム更新作業においても、長時間のシステム動作停止や修理、改修等の不具合を発生させず、信頼性の向上を実現することができる。
【００７１】
また、本実施形態では、エリア切り替え回路５０５がＣＰＵ５０１からのエリア切り替え制御信号５０８と、Ａ１８アドレス信号５１０とを取り込み、ＸＯＲ(排他的論理和)によってＥＥＰＲＯＭ５０２のＡ１８アドレス端子に対してエリアを切り替えた信号５０７を送出するようになっているため、非常にシンプルな回路構成とすることができ、ＥＥＰＲＯＭ５０２の各エリアに格納するプログラムも単純なプログラムで良いことから、複雑な方法は必要とせず、全体的にコスト削減を図ることができる。
【図面の簡単な説明】
【００７２】
【図１】本発明の一実施形態に係るプログラムエリア切替方法が適用されるマイコンシステムを説明するための図である。
【図２】図１のエリア切り替え回路を説明するための図である。
【図３】図１のエリア切り替え回路によるＥＥＰＲＯＭにおけるアドレス制御の真理値を示す図である。
【図４】図１のエリア切り替え回路によるＥＥＰＲＯＭのアドレス真理値表を示す図である。
【図５】図１のマイコンシステムのメモリマップを示す図である。
【図６】図１のマイコンシステムのプログラム更新処理をメモリマップ上で示す図である。
【図７】図１のマイコンシステムのエリア切り替え処理をメモリマップ上で示す図である。
【図８】図１のマイコンシステムにおけるプログラムエリア切替方法を説明するめたのフローチャートである。
【図９】図１のマイコンシステムのＡｐｐエリアのメモリマップを示す図である。
【図１０】図９のメモリマップにおけるチェックコードの内容を説明するための図である。
【図１１】従来のマイコンシステムに１つのＥＥＰＲＯＭが組み込まれ、そのＥＥＰＲＯＭに１つのプログラムが格納されている場合を示す図である。
【図１２】図１１のマイコンシステムのメモリマップを示す図である。
【図１３】図１１のマイコンシステムのプログラム更新処理を示す図である。
【図１４】従来のマイコンシステムに２つのＥＥＰＲＯＭが組み込まれ、それぞれのＥＥＰＲＯＭにプログラムが格納されている場合を示す図である。
【図１５】図１４のマイコンシステムのメモリマップを示す図である。
【符号の説明】
【００７３】
５  マイコンシステム
５０１  ＣＰＵ
５０２  ＥＥＰＲＯＭ
５０３  ＲＡＭ
５０４  アドレスデコード回路
５０５  エリア切り替え回路
５０６  アドレス／データバス
９０１  Ｂｏｏｔ用割り込みベクタテーブル
９０２  Ｂｏｏｔエリア
９０３  Ａｐｐ用割り込みベクタテーブル
９０４  Ａｐｐエリア
９０５  作業エリア
【図１】
2010157026.tif 000003
【図２】
2010157026.tif 000004
【図３】
2010157026.tif 000005
【図４】
2010157026.tif 000006
【図５】
2010157026.tif 000007
【図６】
2010157026.tif 000008
【図７】
2010157026.tif 000009
【図８】
2010157026.tif 000010
【図９】
2010157026.tif 000011
【図１０】
2010157026.tif 000012
【図１１】
2010157026.tif 000013
【図１２】
2010157026.tif 000014
【図１３】
2010157026.tif 000015
【図１４】
2010157026.tif 000016
【図１５】
2010157026.tif 000017