(57)【要約】【課題】正常でないプログラムコードを使用して装置を起動させようとした場合であっても、そのプログラムコードが正常でないことを検出でき、元の正常なプログラムコードによって装置を起動させる。【解決手段】本発明の通信装置は、プログラムコードを格納する複数のメモリ領域と、複数のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する複数のカウンタを備える。また、プログラムコードを展開する動作用メモリと、制御部と、通信部を備える。制御部は、前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択する。そして、運用の為のプログラムコードでの装置の起動の失敗回数が閾値を超えた場合、前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを選択する。【選択図】      図１
2014003472.tif 000002
【特許請求の範囲】
【請求項１】
プログラムコードを格納する複数のメモリ領域を有する第１の不揮発性メモリと、
前記複数のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する複数のカウンタを有する第２の不揮発性メモリと、
前記複数のメモリ領域の何れかのプログラムコードを展開する動作用メモリと、
前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択し、前記運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行い、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードを格納していたメモリ領域に対応する前記複数の何れかのカウンタに格納し、前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する制御部と、
外部から受信するデータを前記制御部に送出すると共に、前記制御部から出力されるデータを外部へ送信する通信部と、
を備えていることを特徴とする通信装置。
【請求項２】
前記第２の不揮発性メモリは、さらに、前記複数のメモリ領域の何れのプログラムコードを、運用の為のプログラムコードとするかを定める運用面情報記憶部を有し、
前記制御部は、前記運用面情報記憶部に記憶されているメモリ領域から運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行い、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードを格納していたメモリ領域に対応する前記複数の何れかのカウンタに格納し、前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、
ことを特徴とする請求項１に記載の通信装置。
【請求項３】
前記通信装置は、さらに、タイマを備え、
前記制御部は、前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択すると共に、前記通信装置の電源投入時からの経過時間を前記タイマで計測し、前記経過時間が予め指定しておいた指定値を超えたかを判定し、指定値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、
ことを特徴とする請求項１に記載の通信装置。
【請求項４】
前記通信装置は、さらに、リアルタイムクロックを備え、
前記制御部は、前記複数のメモリ領域の何れか一方のプログラムコードを運用の為のプログラムコードとして選択すると共に、前記リアルタイムクロックの現在時刻を参照し、前記リアルタイムクロックの現在時刻が、前記運用の為のプログラムコードをバージョンアップした時刻から予め指定した時間が経過しているかを判定し、指定した時間が経過している場合、前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、
ことを特徴とする請求項１に記載の通信装置。
【請求項５】
複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択し、
前記運用の為のプログラムコードを動作用メモリに展開して動作させることにより装置の起動を行い、
前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードを格納していたメモリ領域に対応する複数の何れかのカウンタに格納し、
前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、
ことを特徴とする起動プログラムコード選択方法。
【請求項６】
前記複数のメモリ領域の何れのプログラムコードを、運用の為のプログラムコードとするかを定める運用面情報を記憶し、
前記運用面情報に記憶されているメモリ領域から運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行い、
前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードを格納していたメモリ領域に対応する前記複数の何れかのカウンタに格納し、
前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、
ことを特徴とする請求項５に記載の起動プログラムコード選択方法。
【請求項７】
前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択すると共に、前記装置の電源投入時からの経過時間を計測し、
前記経過時間が予め指定しておいた指定値を超えたかを判定し、
指定値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、
ことを特徴とする請求項５に記載の起動プログラムコード選択方法。
【請求項８】
前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択すると共に、前記装置の現在時刻を参照し、
前記現在時刻が、前記運用の為のプログラムコードをバージョンアップした時刻から予め指定した時間が経過しているかを判定し、
指定した時間が経過している場合、前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、
ことを特徴とする請求項５に記載の起動プログラムコード選択方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の起動プログラムコードを有する通信装置および起動プログラムコード選択方法に関する。
【背景技術】
【０００２】
近年、通信機能を有する通信装置においては、通信装置を動作させるためのプログラムコードのバージョンアップを行うために、プログラムコードを外部のサーバなどからダウンロードできるようにしているものが多くなってきている。ここで、通信装置とは、携帯電話機やＰＨＳ（Personal Handyphone System：ピーエッチエス）端末あるいはスマートフォンなどの移動体通信端末を指すものとする。或いは、通信装置は、通信機能を有するタブレット型端末や、通信機能を有するパーソナルコンピュータなど、であってもよい。
【０００３】
そして、プログラムコードのバージョンアップを確実に行わせるため、通信装置の内部に、プログラムコードを格納するメモリを２面備えているものも多くなってきている（例えば、特許文献１参照。）。
【０００４】
上述した特許文献１「ソフトウェア更新方法および移動端末装置」には以下の記載がなされている。
【０００５】
すなわち、移動端末装置に、本体プログラムコード＃１、＃２を保持するメモリ領域を２面設ける。本体プログラムコードのバージョンアップ等のためのプログラムコード更新時には、１面の本体プログラムコードを更新対象としてプログラムコード更新処理を実行する。この更新が失敗した時には、他面の本体プログラムコードを用いて移動端末装置の動作を行わせることができる。また、他面の本体プログラムコードを更新対象として、プログラムコード更新を再度実行することができる。このことにより、本体プログラムコードを移動端末装置の外部に退避することなく、プログラムコードの更新処理を行うことができる、としている。また、プログラムコード更新処理の失敗時にも、他面の本体プログラムコードを用いて移動端末装置の動作を行わせることができるため、移動端末装置の使用が長時間制限されるようなことにはならない、としている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００７−１８９３３２号公報（第７〜１１頁、図１〜１０）
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上述した特許文献１に記載の手法においては、プログラムコードの更新が失敗した時には、更新を行わない他面の本体プログラムコードを用いて移動端末装置の動作を行わせることが出来るようになっている。しかし、プログラムコードの更新が失敗した場合であって、かつ、更新の失敗を検出できなかった場合には、以下のように動作してしまう、という課題を有している。すなわち、更新が失敗したにも拘わらず失敗を検出できていないため、プログラムコードは正常に更新されたものと見なし、このプログラムコードを使用して、移動端末装置を起動させようと動作してしまう、という課題を有している。つまり、正常でないプログラムコードを使用して移動端末装置を起動させようと動作し、正常に起動できず、結果的には起動の繰り返しに陥ってしまう、という課題を有している。
【０００８】
なお、プログラムコードの更新が失敗した場合で、かつ、更新の失敗を検出できない場合とは、以下のような状況において起こり得るものである。すなわち、通常、更新したプログラムコードの正当性は、データの信頼性を検査するために算出した値であるところのチェックサムや、ＣＲＣ（Cyclic Redundancy Check：巡回冗長検査）などの誤り検出データを用いて確認するようにしている。ところが、更新したプログラムコードに不正なコードが紛れ込んでいる場合であっても、誤り検出データは、正常なプログラムコードにおいて算出されたデータと同じである、といった場合も起こり得るものである。このような場合には、不正プログラムコードが紛れ込んでいることを検出することは出来ない。そして、不正プログラムコードが紛れ込んでいるプログラムコードを、正常なプログラムコードであると見なし、その結果、起動の失敗を繰り返すこととなってしまう。
【０００９】
本発明は上述した課題を解決するためになされたものである。従って、本発明の目的は、正常でないプログラムコードを使用して装置を起動させようとした場合であっても、そのプログラムコードが正常でないことを検出でき、元の正常なプログラムコードによって起動させることを可能とする、通信装置および起動プログラムコード選択方法、を提供することにある。
【課題を解決するための手段】
【００１０】
本発明の通信装置は、プログラムコードを格納する複数のメモリ領域を有する第１の不揮発性メモリを備えている。また、前記複数のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する複数のカウンタを有する第２の不揮発性メモリを備えている。さらに、前記複数のメモリ領域の何れかのプログラムコードを展開する動作用メモリと、制御部を備えている。前記制御部は、前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択する。次に、前記運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行う。ここで、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードを格納していたメモリ領域に対応する前記複数の何れかのカウンタに格納する。そして、前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する。またさらに、外部から受信するデータを前記制御部に送出すると共に、前記制御部から出力されるデータを外部へ送信する通信部を備えている。
【００１１】
本発明の起動プログラムコード選択方法は、複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択し、前記運用の為のプログラムコードを動作用メモリに展開して動作させることにより装置の起動を行う。そして、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードを格納していたメモリ領域に対応する複数の何れかのカウンタに格納する。ここで、前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外の何れかのメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、ようになっている。
【発明の効果】
【００１２】
本発明によれば、正常でないプログラムコードを使用して装置を起動させようとした場合であっても、そのプログラムコードが正常でないことを検出でき、元の正常なプログラムコードによって起動させることが可能となる。
【図面の簡単な説明】
【００１３】
【図１】本発明の通信装置の第１の実施形態を示すブロック図である。
【図２】第１の実施形態の動作について説明するフローチャートである。
【図３】本発明の通信装置の第２の実施形態を示すブロック図である。
【図４】第２の実施形態の動作について説明する第１のフローチャートである。
【図５】第２の実施形態の動作について説明する第２のフローチャートである。
【図６】本発明の通信装置の第３の実施形態を示すブロック図である。
【図７】第３の実施形態の動作について説明するフローチャートである。
【図８】本発明の通信装置の第４の実施形態を示すブロック図である。
【図９】第４の実施形態の動作について説明するフローチャートである。
【発明を実施するための形態】
【００１４】
次に、本発明の実施形態について図面を参照して説明する。
[第１の実施形態]
図１は、本発明の通信装置の第１の実施形態を示すブロック図である。
【００１５】
なお、本実施形態における通信装置とは、携帯電話機やＰＨＳ端末、或いは、スマートフォンなどの移動体通信端末を指すものとする。或いは、通信装置は、通信機能を有するタブレット型端末や、通信機能を有するパーソナルコンピュータなど、であってもよい。
【００１６】
図１に示す通信装置１００は、通信部１０、不揮発性メモリ２０、不揮発性メモリ３０、動作用メモリ４０、制御部５０を備えている。
【００１７】
通信部１０は、通信装置１００の外部との通信を行う部分であり、制御部５０から出力される音声やテキスト或いは映像などのデータを外部へ送信し、外部から受信するデータを制御部５０に送出する。通信部１０は、無線によって外部との通信を行うものであってもよいし、有線によって外部との通信を行うものであってもよい。
【００１８】
不揮発性メモリ２０は、通信装置１００を動作させるためのプログラムコードを格納するメモリである。そして、不揮発性メモリ２０は２つのメモリ領域、すなわち、＃１メモリ領域２１と＃２メモリ領域２２、を有している。＃１メモリ領域２１には通信装置１００を動作させるための第１のプログラムコード、すなわち、＃１プログラムコード、が格納される。また、＃２メモリ領域２２には通信装置１００を動作させるための第２のプログラムコード、すなわち、＃２プログラムコード、が格納される。なお、不揮発性メモリ２０は、図示しないブートローダ（boot loader）も格納しているものとする。ブートローダは、周知のように、通信装置１００の電源投入後に、＃１メモリ領域２１或いは＃２メモリ領域２２の何れかのプログラムコードを動作用メモリ４０に読み込むためのプログラムである。
【００１９】
不揮発性メモリ２０は、メモリの内容を書き換え可能で、かつ、電源を切ってもメモリ内のデータが消えない半導体メモリであるところのフラッシュメモリ（flash memory）で構成されるとよい。
【００２０】
本実施形態においては、＃１プログラムコードを格納する＃１メモリ領域２１を、運用面とし、＃２プログラムコードを格納する＃２メモリ領域２２を、退避面とするものとする。なお、運用面のプログラムコードは、通信装置１００を起動させる際、優先的に動作用メモリ４０に展開されるようにしている。そして、運用面のプログラムコードでの起動が失敗した場合には、退避面のプログラムコードで通信装置１００を起動させるようになっている。つまり、通信装置１００の電源投入後には、優先的に運用面のプログラムコードで通信装置１００の起動を行い、運用面のプログラムコードでの起動が失敗した場合には、退避面のプログラムコードで通信装置１００の起動を行わせるようにしている。
【００２１】
不揮発性メモリ３０は、回数をカウントして記憶する２つのカウンタ、すなわち、＃１カウンタ３１と＃２カウンタ３２、を格納するメモリである。＃１カウンタ３１は、＃１メモリ領域２１の＃１プログラムコードで通信装置１００の起動を行い、その起動が失敗した場合の失敗回数を記憶する。また、＃２カウンタ３２は、＃２メモリ領域２２の＃２プログラムコードで通信装置１００の起動を行い、その起動が失敗した場合の失敗回数を記憶する。
【００２２】
動作用メモリ４０は、通信装置１００を動作させるプログラムコードを記憶するメモリである。そして、動作用メモリ４０に記憶されるプログラムコードを実行することにより、通信装置１００の動作が行われるようになっている。なお、動作用メモリ４０に記憶されるプログラムコードは、＃１メモリ領域２１の＃１プログラムコードか、或いは、＃２メモリ領域２２の＃２プログラムコードの何れか一方のプログラムコードである。なお、動作用メモリ４０は、メモリの内容を書き換え可能であるが、電源を切った場合にはメモリ内のデータが失われるＲＡＭ（random access memory：ラム）で構成される。
【００２３】
制御部５０は、通信装置１００全体の動作制御を行い、ＣＰＵ（central processing unit：中央処理装置）を備えている。特に、制御部５０は、通信装置１００の電源投入時に、不揮発性メモリ２０内の運用面に格納されている＃１プログラムコードを動作用メモリ４０に展開し記憶させる。そして、動作用メモリ４０に記憶されたプログラムコードを動作させることにより、通信装置１００の起動を行う。通信装置１００の起動が成功した場合には、そのまま、通信装置１００の動作を継続させる。通信装置１００の起動が失敗した場合には、その失敗回数を不揮発性メモリ３０の＃１カウンタ３１に記憶させる。次に、再度、運用面に格納されている＃１プログラムコードを動作用メモリ４０に展開し記憶させ、通信装置１００の起動を行う。ここでも通信装置１００の起動が失敗した場合には、その失敗回数を不揮発性メモリ３０の＃１カウンタ３１に記憶させる。そして、＃１カウンタ３１に記憶された失敗回数が、予め定めておいた閾値を超えた場合には、不揮発性メモリ２０内の退避面に格納されている＃２プログラムコードを動作用メモリ４０に展開し記憶させるよう動作する。
【００２４】
次に、図２を参照して、本実施形態の動作について説明する。
【００２５】
図２は、第１の実施形態の動作について説明するフローチャートである。
【００２６】
なお、本実施形態においては、上述したように、＃１プログラムコードを格納する＃１メモリ領域２１を、運用面とし、＃２プログラムコードを格納する＃２メモリ領域２２を、退避面とするものとする。そして、＃１メモリ領域２１には、通信装置１００の外部のサーバなどからダウンロードしたプログラムコードが、＃１プログラムコードとして格納されているものとする。また、＃２メモリ領域２２には、＃１プログラムコードでの通信装置１００の起動が失敗した場合に、通信装置１００を確実に起動させ得る緊急用のプログラムコードが、＃２プログラムコードとして格納されているものとする。さらに、＃１プログラムコードでの起動の失敗回数を記憶する＃１カウンタ３１、及び、＃２プログラムコードでの起動の失敗回数を記憶する＃２カウンタ３２、の内容は、共に「０」であるものとする。
【００２７】
図２において、図１に示した通信装置１００の電源が投入されると（図２のステップＳ１）、通信装置１００の制御部５０は以下のように動作する。
【００２８】
すなわち、制御部５０は、不揮発性メモリ３０に記憶されている起動の失敗回数について、運用面からチェックを行う。つまり、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値（例えば、「２」であるとする）を超えているか否かの判定を行う（ステップＳ２）。
【００２９】
起動の失敗回数が閾値を超えてはいない場合（ステップＳ２でＮｏ）、＃１カウンタ３１の内容を「１」だけインクリメントする（ステップＳ３）。そして、運用面の＃１プログラムコードを、動作用メモリ４０に展開し記憶させる（ステップＳ４）。次に、＃１プログラムコードの動作用メモリ４０への展開が成功したか否かの判定を行う（ステップＳ５）。展開が成功したか否かの判定は、不揮発性メモリ２０のブートローダが正常に終了した場合に成功したものとし、ブートローダが正常に終了しなかった場合には不成功と判定するものとする。
【００３０】
展開が不成功であった場合（ステップＳ５でＮｏ）、ステップＳ２に戻り、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００３１】
展開が成功した場合（ステップＳ５でＹｅｓ）、動作用メモリ４０に展開したプログラムコードで、通信装置１００の起動処理を行う（ステップＳ６）。そして、通信装置１００の起動が成功したか否かの判定を行う（ステップＳ７）。起動が成功したか否かの判定は、通信装置１００が、起動後に最初に行うべき動作を開始した場合に起動が成功したものと判定するようにすればよい。起動後に最初に行うべき動作とは、例えば、通信装置１００がメニュー画面を表示する、といった動作のことである。
【００３２】
起動が成功しなかった場合（ステップＳ７でＮｏ）、ステップＳ２に戻り、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００３３】
起動が成功した場合（ステップＳ７でＹｅｓ）、＃１カウンタ３１の内容を「０」に戻し（ステップＳ８）、通信装置１００の動作をそのまま継続させることにより、通信装置１００に通信機能を提供させるよう動作させる（ステップＳ９）。
【００３４】
なお、本実施形態においては、上述したように、展開が不成功であった場合（ステップＳ５でＮｏ）や起動が成功しなかった場合（ステップＳ７でＮｏ）には、ステップＳ２に戻るようにしている。これは、＃１プログラムコードが何らかの理由により不正なプログラムコードになっていることを示しており、通信装置１００を正常に起動させることができない場合を示すものである。そして、ステップＳ２以降の動作を繰り返すことにより、＃１カウンタ３１の値は、いつか閾値を超えるようになる。＃１カウンタ３１の値が閾値を超えた場合には、制御部５０は、運用面の＃１プログラムコードによる通信装置１００の正常な起動に失敗したものと見なすよう動作する。そして、制御部５０は、後述するように、退避面の＃２プログラムコードによる通信装置１００の起動に切り替えるよう動作するようになる。
【００３５】
図２に戻り、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えている場合（ステップＳ２でＹｅｓ）、退避面での起動の失敗回数を示す＃２カウンタ３２のチェックを行う。すなわち、＃２カウンタに記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う（ステップＳ１２）。
【００３６】
起動の失敗回数が閾値を超えている場合（ステップＳ１２でＹｅｓ）、制御部５０は動作を終了し、通信装置１００の起動を行わない。この場合は、運用面と退避面のプログラムコードが共に不正なプログラムコードであったことを示している。
【００３７】
起動の失敗回数が閾値を超えてはいない場合（ステップＳ１２でＮｏ）、＃２カウンタ３２の内容を「１」だけインクリメントする（ステップＳ１３）。そして、退避面の＃２プログラムコードを、動作用メモリ４０に展開し記憶させる（ステップＳ１４）。次に、＃２プログラムコードの動作用メモリ４０への展開が成功したか否かの判定を行う（ステップＳ１５）。
【００３８】
展開が不成功であった場合（ステップＳ１５でＮｏ）、ステップＳ１２に戻り、＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００３９】
展開が成功した場合（ステップＳ１５でＹｅｓ）、動作用メモリ４０に展開したプログラムコードで、通信装置１００の起動処理を行う（ステップＳ１６）。そして、通信装置１００の起動が成功したか否かの判定を行う（ステップＳ１７）。
【００４０】
起動が成功しなかった場合（ステップＳ１７でＮｏ）、ステップＳ１２に戻り、＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００４１】
起動が成功した場合（ステップＳ１７でＹｅｓ）、＃２カウンタ３２の内容を「０」に戻し（ステップＳ１８）、通信装置１００の動作をそのまま継続させることにより、通信装置１００に通信機能を提供させるよう動作させる（ステップＳ１９）。
【００４２】
以上説明したように、第１の実施形態においては、制御部５０は、運用面の＃１プログラムコードで通信装置１００が起動するか否かの監視を行っている。そして、＃１プログラムコードでの通信装置１００の起動が失敗した場合は、退避面の＃２プログラムコードで通信装置１００を起動させるよう切り替えるようになっている。従って、退避面に緊急用のプログラムコードを格納しておくことで、通信装置１００を確実に起動させることが出来る。
【００４３】
以上、本発明の第１の実施形態の動作について説明した。
【００４４】
尚、上述した実施形態においては、通信装置１００の不揮発性メモリ２０は、２つのメモリ領域（＃１メモリ領域２１、＃２メモリ領域２２）を有する、として説明したが、これを以下のように変更してもよい。
【００４５】
すなわち、不揮発性メモリ２０は複数のメモリ領域、すなわち、＃１メモリ領域、＃２メモリ領域、・・・、＃ｎメモリ領域、を有するものとする。そして、複数のメモリ領域の各々には、通信装置１００を動作させるためのプログラムコード、すなわち、＃１プログラムコード、＃２プログラムコード、・・・、＃ｎプログラムコード、が格納される。ここで、＃１プログラムコードを格納する＃１メモリ領域を、運用面とする。そして、＃２プログラムコードを格納する＃２メモリ領域を第１優先の退避面、＃３プログラムコードを格納する＃３メモリ領域を第２優先の退避面、とする（以下同様）。
【００４６】
この変更に伴い、不揮発性メモリ３０は、複数のカウンタ、すなわち、＃１カウンタ、＃２カウンタ、・・・、＃ｎカウンタ、を格納するように変更する。ここで、複数のカウンタ（＃１カウンタ、＃２カウンタ、・・・、＃ｎカウンタ）の各々は、複数のメモリ領域（＃１メモリ領域、＃２メモリ領域、・・・、＃ｎメモリ領域）の各々に対応しているものとする。
【００４７】
そして、通信装置１００の制御部５０は、通信装置１００を起動する際、以下のように動作する。
【００４８】
すなわち、制御部５０は、運用面の＃１プログラムコードで通信装置１００が起動するか否かの監視を行っている。そして、＃１プログラムコードでの通信装置１００の起動が失敗した場合は、第１優先の退避面の＃２プログラムコードで通信装置１００を起動させるよう切り替える。この時さらに、制御部５０は、第１優先の退避面の＃２プログラムコードで通信装置１００が起動するか否かの監視を行う。そして、＃２プログラムコードでの通信装置１００の起動が失敗した場合は、第２優先の退避面の＃３プログラムコードで通信装置１００を起動させるよう切り替える。以下同様に動作するようにする。
【００４９】
ここで、第１優先の退避面に、第１の緊急用のプログラムコードを格納し、第２優先の退避面に、第２の緊急用のプログラムコードを格納（以下同様）しておく。このようにすれば、複数の緊急用のプログラムコードで通信装置１００の起動を行うことが出来るため、通信装置１００を、より一層確実に起動させることが出来る。
【００５０】
以上説明したように、本実施形態の通信装置１００は、プログラムコードを格納する複数のメモリ領域（＃１メモリ領域２１、＃２メモリ領域２２、・・・）を有する第１の不揮発性メモリ（不揮発性メモリ２０）を備えている。また、前記複数のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する複数のカウンタ（＃１カウンタ３１、＃２カウンタ３２、・・・）を有する第２の不揮発性メモリ（不揮発性メモリ３０）を備えている。さらに、前記複数のメモリ領域の何れかのプログラムコードを展開する動作用メモリ（動作用メモリ４０）と、制御部（制御部５０）を備えている。そして、制御部は、前記複数のメモリ領域の何れかのプログラムコードを運用の為のプログラムコードとして選択し、前記運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行う。ここで、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードに対応する前記複数の何れかのカウンタに格納する。そして、前記何れかのカウンタに格納された失敗回数が閾値を超えた場合に前記運用のためのプログラムコードを格納していたメモリ領域以外のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する。またさらに、外部から受信するデータを前記制御部に送出すると共に、前記制御部から出力されるデータを外部へ送信する通信部を備えている。
【００５１】
従って、本実施形態によれば、正常でないプログラムコードを使用して装置を起動させようとした場合であっても、そのプログラムコードが正常でないことを検出でき、元の正常なプログラムコードによって起動させることが可能となる。
[第２の実施形態]
次に、図１に示した第１の実施形態の変形例としての本発明による第２の実施形態について説明する。
【００５２】
第２の実施形態における通信装置は、第１の実施形態においては＃１メモリ領域２１に固定的であった運用面を、＃１メモリ領域２１或いは＃２メモリ領域２２の何れか一方に選択できるようにした点でのみ、第１の実施形態と異なるものである。
【００５３】
図３は、本発明の通信装置の第２の実施形態を示すブロック図である。図３は、図１に示した通信装置１００の不揮発性メモリ３０に、運用面情報記憶部３３を追加した点で第１の実施形態と異なっている。従って、図３において、図１の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
【００５４】
図３に示す通信装置１００−２は、図１と同様に、通信部１０、不揮発性メモリ２０、不揮発性メモリ３０−２、動作用メモリ４０、制御部５０−２を備えている。
【００５５】
通信部１０、不揮発性メモリ２０、動作用メモリ４０は、第１の実施形態と同様であるため、その説明を省略する。
【００５６】
不揮発性メモリ３０−２は、＃１カウンタ３１と＃２カウンタ３２に加え、運用面情報記憶部３３を格納している。
【００５７】
＃１カウンタ３１と＃２カウンタ３２は、第１の実施形態と同様であるため、その説明を省略する。
【００５８】
運用面情報記憶部３３は、不揮発性メモリ２０の＃１メモリ領域２１と＃２メモリ領域２２の何れを運用面とするか、を定める情報を記憶する。例えば、＃１メモリ領域２１を運用面とする場合には、運用面情報記憶部３３には＃１メモリ領域２１が記憶される。また、＃２メモリ領域２２を運用面とする場合には、運用面情報記憶部３３には＃２メモリ領域２２が記憶される。運用面情報記憶部３３に記憶されないメモリ領域は退避面であるものとして扱われるようにしている。
【００５９】
制御部５０−２は、通信装置１００−２全体の動作制御を行い、ＣＰＵを備えている。特に、制御部５０−２は、第１の実施形態の制御部５０の動作に加え、通信装置１００−２の電源投入時に、運用面情報記憶部３３を参照して、運用面が＃１メモリ領域２１或いは＃２メモリ領域２２の何れであるかを判定する。そして、運用面に格納されているプログラムコードを動作用メモリ４０に展開し記憶させるよう動作する。
【００６０】
次に、図４、図５を参照して、第２の実施形態の動作について説明する。
【００６１】
図４は、第２の実施形態の動作について説明する第１のフローチャートである。
【００６２】
なお、図４は、第２の実施形態の通信装置１００−２が、外部のサーバからバージョンアップのためのプログラムコードをダウンロードし、＃１メモリ領域２１或いは＃２メモリ領域２２の何れかに格納する際の動作を示すものである。ここで、不揮発性メモリ３０−２の運用面情報記憶部３３には、＃１メモリ領域２１と＃２メモリ領域２２の何れを運用面とするかを定める情報が記憶されているものとする。
【００６３】
図４において、通信装置１００−２は動作中であり、外部のサーバからバージョンアップのためのプログラムコードのダウンロードを開始したものとする。通信装置１００−２の制御部５０−２は、先ず、運用面情報記憶部３３を参照し、運用面が＃１メモリ領域２１になっているか否かの判定を行う（図４のステップＳ２１）。
【００６４】
運用面が＃１メモリ領域２１になっている場合（ステップＳ２１でＹｅｓ）、制御部５０−２は、外部のサーバからバージョンアップ用プログラムコードをダウンロードし、運用面ではない退避面（＃２メモリ領域２２）へ格納する（ステップＳ２２）。そして、運用面を＃２メモリ領域２２へ変更する（ステップＳ２３）。すなわち、制御部５０−２は、運用面情報記憶部３３に＃２メモリ領域２２を記憶する。そして、ダウンロード処理を終了する。
【００６５】
一方、運用面が＃１メモリ領域２１になっていない場合（ステップＳ２１でＮｏ）、運用面は＃２メモリ領域２２である。そこで、制御部５０−２は、外部のサーバからバージョンアップ用プログラムコードをダウンロードし、運用面ではない退避面（＃１メモリ領域２１）へ格納する（ステップＳ２５）。そして、運用面を＃１メモリ領域２１へ変更する（ステップＳ２６）。すなわち、制御部５０−２は、運用面情報記憶部３３に＃１メモリ領域２１を記憶する。そして、ダウンロード処理を終了する。
【００６６】
次に、図５を参照して、通信装置１００−２の起動時の処理について説明する。
【００６７】
図５は、第２の実施形態の動作について説明する第２のフローチャートである。
【００６８】
図５において、図３に示した通信装置１００−２の電源が投入されると（図５のステップＳ３１）、通信装置１００−２の制御部５０−２は以下のように動作する。
【００６９】
すなわち、制御部５０−２は、運用面情報記憶部３３を参照し、運用面が＃１メモリ領域２１になっているか否かの判定を行う（図５のステップＳ３１−１）。
【００７０】
運用面が＃１メモリ領域２１になっている場合（ステップＳ３１−１でＹｅｓ）、制御部５０−２は、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う（ステップＳ３２）。
【００７１】
起動の失敗回数が閾値を超えてはいない場合（ステップＳ３２でＮｏ）、制御部５０−２は、第１の実施形態と同様に動作する。すなわち、制御部５０−２は、＃１カウンタ３１の内容を「１」だけインクリメントする（ステップＳ３３）。そして、運用面の＃１プログラムコードを、動作用メモリ４０に展開し記憶させる（ステップＳ３４）。次に、＃１プログラムコードの動作用メモリ４０への展開が成功したか否かの判定を行う（ステップＳ３５）。
【００７２】
展開が不成功であった場合（ステップＳ３５でＮｏ）、ステップＳ３２に戻り、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００７３】
展開が成功した場合（ステップＳ３５でＹｅｓ）、動作用メモリ４０に展開したプログラムコードで、通信装置１００−２の起動処理を行う（ステップＳ３６）。そして、通信装置１００−２の起動が成功したか否かの判定を行う（ステップＳ３７）。
【００７４】
起動が成功しなかった場合（ステップＳ３７でＮｏ）、ステップＳ３２に戻り、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００７５】
起動が成功した場合（ステップＳ３７でＹｅｓ）、＃１カウンタ３１の内容を「０」に戻し（ステップＳ３８）、通信装置１００−２の動作をそのまま継続させることにより、通信装置１００−２に通信機能を提供させるよう動作させる（ステップＳ３９）。
【００７６】
＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えている場合（ステップＳ３２でＹｅｓ）、制御部５０−２は、運用面を＃２メモリ領域へ変更する（ステップＳ４０）。すなわち、制御部５０−２は、運用面情報記憶部３３に＃２メモリ領域２２を記憶させる。そして、後述するステップＳ５３へ進む。
【００７７】
運用面が＃１メモリ領域２１になっていない場合（ステップＳ３１−１でＮｏ）、運用面は＃２メモリ領域２２であるため、制御部５０−２は、＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う（ステップＳ５２）。
【００７８】
起動の失敗回数が閾値を超えてはいない場合（ステップＳ５２でＮｏ）、制御部５０−２は、第１の実施形態と同様に動作する。すなわち、制御部５０−２は、＃２カウンタ３２の内容を「１」だけインクリメントする（ステップＳ５３）。そして、運用面の＃２プログラムコードを、動作用メモリ４０に展開し記憶させる（ステップＳ５４）。次に、＃２プログラムコードの動作用メモリ４０への展開が成功したか否かの判定を行う（ステップＳ５５）。
【００７９】
展開が不成功であった場合（ステップＳ５５でＮｏ）、ステップＳ５２に戻り、＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００８０】
展開が成功した場合（ステップＳ５５でＹｅｓ）、動作用メモリ４０に展開したプログラムコードで、通信装置１００−２の起動処理を行う（ステップＳ５６）。そして、通信装置１００−２の起動が成功したか否かの判定を行う（ステップＳ５７）。
【００８１】
起動が成功しなかった場合（ステップＳ５７でＮｏ）、ステップＳ５２に戻り、＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を再度行うよう動作する。
【００８２】
起動が成功した場合（ステップＳ５７でＹｅｓ）、＃２カウンタ３２の内容を「０」に戻し（ステップＳ５８）、通信装置１００−２の動作をそのまま継続させることにより、通信装置１００−２に通信機能を提供させるよう動作させる（ステップＳ５９）。
【００８３】
＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えている場合（ステップＳ５２でＹｅｓ）、制御部５０−２は、運用面を＃１メモリ領域へ変更する（ステップＳ６０）。すなわち、制御部５０−２は、運用面情報記憶部３３に＃１メモリ領域２１を記憶させる。そして、ステップＳ３３へ進む。
【００８４】
以上説明したように、第２の実施形態においては、制御部５０−２は、運用面のプログラムコードで通信装置１００−２が起動するか否かの監視を行っている。そして、運用面のプログラムコードでの通信装置１００−２の起動が失敗した場合は、運用面を、それまでの退避面へ切り替えるようになっている。従って、退避面に、バージョンアップ前まで正常に動作していたプログラムコードを格納しておくことで、通信装置１００−２を確実に起動させることが出来る。
【００８５】
以上、本発明の第２の実施形態の動作について説明した。
【００８６】
前述したように、本発明の第２の実施形態は、図１に示した第１の実施形態の通信装置１００の不揮発性メモリ３０に、運用面情報記憶部３３を追加した点だけが異なるものである。従って、以下において第２の実施形態に特有の箇所に関してのみ説明するものとする。
【００８７】
以上説明したように、本実施形態の通信装置１００−２は、外部との通信を行う通信部（通信部１０）を備えている。また、プログラムコードを格納する第１および第２のメモリ領域（＃１メモリ領域２１、＃２メモリ領域２２）を有する第１の不揮発性メモリ（不揮発性メモリ２０）を備えている。さらに、前記第１および第２のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する第１および第２のカウンタ（＃１カウンタ３１、＃２カウンタ３２）を有する第２の不揮発性メモリ（不揮発性メモリ３０−２）を備えている。またさらに、前記第１或いは第２のメモリ領域の何れか一方のプログラムコードを展開する動作用メモリ（動作用メモリ４０）と、制御部（制御部５０−２）を備えている。さらにまた、第２の不揮発性メモリは、さらに、第１或いは第２のメモリ領域の何れのプログラムコードを、運用の為のプログラムコードとするかを定める運用面情報記憶部を有している。
【００８８】
そして、前記制御部は、前記運用面情報記憶部に記憶されているメモリ領域から運用の為のプログラムコードを前記動作用メモリに展開して動作させることにより装置の起動を行う。ここで、前記運用の為のプログラムコードでの起動が失敗した場合その失敗回数を、前記運用の為のプログラムコードに対応する前記第１或いは第２の何れか一方のカウンタに格納する。そして、前記何れか一方のカウンタに格納された失敗回数が閾値を超えた場合に他方のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する、よう動作する。
【００８９】
このことにより、運用の為のプログラムコードを、第１或いは第２のメモリ領域の何れかから選択して動作用メモリに展開することが可能となり、かつ、運用の為のプログラムコードを有するメモリ領域を変えることが可能となる。そして、バージョンアップの直前まで正常に動作していたプログラムコードを有するメモリ領域を退避面とし、運用面のメモリ領域に、バージョンアップした新たなプログラムコードを格納させることができる。つまり、運用面のメモリ領域にバージョンアップした新たなプログラムコードを格納した場合であっても、退避面のメモリ領域には、バージョンアップの直前まで正常に動作していたプログラムコードを格納することができる。
【００９０】
従って、本実施形態によれば、バージョンアップした新たなプログラムコードが正常に動作しない場合であっても、バージョンアップの直前まで正常に動作していたプログラムコードで通信装置を起動させることが可能となる。
[第３の実施形態]
次に、図１に示した第１の実施形態の変形例としての本発明による第３の実施形態について説明する。
【００９１】
図６は、本発明の通信装置の第３の実施形態を示すブロック図である。図６は、図１に示した通信装置１００の制御部５０に、タイマ６０を追加した点でのみ、第１の実施形態と異なるものである。従って、図６において、図１の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
【００９２】
図６に示す通信装置１００−３は、通信部１０、不揮発性メモリ２０、不揮発性メモリ３０、動作用メモリ４０、制御部５０−３、タイマ６０を備えている。
【００９３】
通信部１０、不揮発性メモリ２０、不揮発性メモリ３０、動作用メモリ４０は、第１の実施形態と同様であるため、その説明を省略する。
【００９４】
タイマ６０は、計測スタート時からの経過時間を計測する。
【００９５】
制御部５０−３は、通信装置１００−３全体の動作制御を行い、ＣＰＵを備えている。特に、制御部５０−３は、第１の実施形態の制御部５０の動作に加え、通信装置１００−３の電源投入時からの経過時間をタイマ６０で計測する。そして、計測した経過時間が、予め指定しておいた指定値を超えたかを判定する。指定値を超えた場合、動作用メモリ４０に展開するプログラムコードを運用面から退避面に切り替えるよう動作する。
【００９６】
次に、第３の実施形態の動作について説明する。
【００９７】
図７は、第３の実施形態の動作について説明するフローチャートである。
【００９８】
上述したように、第３の実施形態においては、制御部５０−３は、通信装置１００−３の電源投入時からの経過時間をタイマ６０で計測する。そして、計測した経過時間が、予め指定しておいた指定値を超えたかを判定する。指定値を超えた場合、動作用メモリ４０に展開するプログラムコードを運用面から退避面に切り替えるよう動作する点でのみ、第１の実施形態と異なっている。従って、図７において、第１の実施形態の動作の図２の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
【００９９】
図７において、通信装置１００−３の電源が投入されると（図７のステップＳ１）、通信装置１００−３の制御部５０−３は以下のように動作する。
【０１００】
すなわち、制御部５０−３は、タイマ６０による計測をスタートさせる（ステップＳ１−２）。そして、タイマ６０の値が、予め指定しておいた指定値（例えば、「６０秒」であるとする）を超えたかの判定を行う（ステップＳ１−３）。
【０１０１】
タイマ６０の値が、予め指定しておいた指定値を超えていない場合（ステップＳ１−３でＮｏ）、制御部５０−３は、第１の実施形態で説明したと同様に、不揮発性メモリ３０に記憶されている起動の失敗回数について、運用面からチェックを行う。つまり、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う（ステップＳ２）。そして、その後は、第１の実施形態と同様の動作を行う。従って、図７のステップＳ３からステップＳ９までの動作については、以下のように説明を簡略化する。
【０１０２】
すなわち、図７のステップＳ３からステップＳ７まで動作し、動作用メモリ４０への＃１プログラムコードの展開が成功し（ステップＳ５でＹｅｓ）、かつ、動作用メモリ４０のプログラムコードでの起動が成功した場合（ステップＳ７でＹｅｓ）、以下のように動作する。つまり、第１の実施形態と同様に、制御部５０−３は、通信装置１００−３の動作をそのまま継続させることにより、通信装置１００−３に通信機能を提供させるよう動作させる（ステップＳ９）。
【０１０３】
一方、ステップＳ３からステップＳ７までの動作中に、動作用メモリ４０への＃１プログラムコードの展開が不成功であった場合（ステップＳ５でＮｏ）、或いは、動作用メモリ４０のプログラムコードでの起動が不成功であった場合（ステップＳ７でＮｏ）、ステップＳ１−３に戻る。そして、タイマ６０の値が、予め指定しておいた指定値を超えたかの判定を再度行うよう動作する。
【０１０４】
タイマ６０の値が、予め指定しておいた指定値を超えている場合（ステップＳ１−３でＹｅｓ）、制御部５０−３は、第１の実施形態で説明したと同様に、不揮発性メモリ３０に記憶されている起動の失敗回数について、退避面でのチェックを行う。つまり、＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う（ステップＳ１２）。そして、その後は、第１の実施形態と同様の動作を行う。従って、図７のステップＳ１３からステップＳ１９までの動作については説明を省略するものとする。
【０１０５】
なお、図７においては、不揮発性メモリ３０の＃１カウンタ３１及び＃２カウンタ３２に記憶されている起動の失敗回数をチェックしながら、動作するものとして説明した。しかし、起動の失敗回数のチェックは行わないようにしてもよい。このようにすれば、通信装置１００−３の電源投入時からの経過時間が、予め指定しておいた指定値を超えた場合にだけ、動作用メモリ４０に展開するプログラムコードを、運用面から退避面に切り替えるようになる。
【０１０６】
上述したように、本実施形態においては、タイマ６０の値が、予め指定しておいた指定値を超えた場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるよう動作する。
【０１０７】
従って、本実施形態によれば、タイマ６０の値が、予め指定しておいた指定値を超えた場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるようになる。
【０１０８】
以上、本発明の第３の実施形態の動作について説明した。
【０１０９】
前述したように、本発明の第３の実施形態の通信装置１００−３の制御部５０−３は、通信装置１００−３の電源投入時からの経過時間をタイマ６０で計測する。そして、計測した経過時間が、予め指定しておいた指定値を超えたかを判定する。指定値を超えた場合、動作用メモリ４０に展開するプログラムコードを運用面から退避面に切り替えるよう動作する点でのみ、第１の実施形態と異なっている。従って、以下において第３の実施形態に特有の箇所に関してのみ説明するものとする。
【０１１０】
以上説明したように、本実施形態の通信装置１００−３は、外部との通信を行う通信部（通信部１０）を備えている。また、プログラムコードを格納する第１および第２のメモリ領域（＃１メモリ領域２１、＃２メモリ領域２２）を有する第１の不揮発性メモリ（不揮発性メモリ２０）を備えている。さらに、前記第１および第２のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する第１および第２のカウンタ（＃１カウンタ３１、＃２カウンタ３２）を有する第２の不揮発性メモリ（不揮発性メモリ３０−２）を備えている。またさらに、前記第１或いは第２のメモリ領域の何れか一方のプログラムコードを展開する動作用メモリ（動作用メモリ４０）と、制御部（制御部５０−３）と、タイマ（タイマ６０）を備えている。
【０１１１】
そして、前記制御部は、前記第１或いは第２のメモリ領域の何れか一方のプログラムコードを運用の為のプログラムコードとして選択すると共に、前記通信装置の電源投入時からの経過時間を前記タイマで計測する。次に、前記経過時間が予め指定しておいた指定値を超えたかを判定し、指定値を超えた場合に他方のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する。
【０１１２】
従って、本実施形態によれば、一方のメモリ領域のプログラムコードでの起動が、指定値で示される一定時間の間不可能となった場合、他方のメモリ領域のプログラムコードで装置を起動させることが可能となる。
[第４の実施形態]
次に、図１に示した第１の実施形態の変形例としての本発明による第４の実施形態について説明する。
【０１１３】
図８は、本発明の通信装置の第４の実施形態を示すブロック図である。図８は、図１に示した通信装置１００の制御部５０に、ＲＴＣ（Real-Time Clock：リアルタイムクロック）７０を追加している。また、不揮発性メモリ３０には、バージョンアップ時刻記憶部３４を追加している。そして、第４の実施形態は、前記した点でのみ、第１の実施形態と異なるものである。従って、図８において、図１の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
【０１１４】
図８に示す通信装置１００−４は、通信部１０、不揮発性メモリ２０、不揮発性メモリ３０−４、動作用メモリ４０、制御部５０−４、ＲＴＣ７０を備えている。
【０１１５】
通信部１０、不揮発性メモリ２０、動作用メモリ４０は、第１の実施形態と同様であるため、その説明を省略する。
【０１１６】
不揮発性メモリ３０−４は、＃１カウンタ３１と＃２カウンタ３２に加え、バージョンアップ時刻記憶部３４を格納している。
【０１１７】
＃１カウンタ３１と＃２カウンタ３２は、第１の実施形態と同様であるため、その説明を省略する。
【０１１８】
バージョンアップ時刻記憶部３４は、＃１メモリ領域２１或いは＃２メモリ領域２２のプログラムコードを、外部のサーバなどからダウンロードしたプログラムコードでバージョンアップした時刻、を記憶する。
【０１１９】
ＲＴＣ７０は、通信装置１００−４の時計であり、通信装置１００−４の電源が切られていても現在時刻を刻み続けるようになっている。
【０１２０】
制御部５０−４は、通信装置１００−４全体の動作制御を行い、ＣＰＵを備えている。特に、制御部５０−４は、第１の実施形態の制御部５０の動作に加え、通信装置１００−４のプログラムコードをバージョンアップした際の時刻を、バージョンアップ時刻記憶部３４に記憶させる。そして、通信装置１００−４の起動を、運用面のプログラムコードで行う。ここで、運用面のプログラムコードでの通信装置１００−４の起動が不成功であった場合、ＲＴＣ７０の現在時刻を参照する。ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過している場合、制御部５０−４は、退避面のプログラムコードによる通信装置１００−４の起動に切り替えるよう動作する。
【０１２１】
次に、第４の実施形態の動作について説明する。
【０１２２】
なお、通信装置１００−４の不揮発性メモリ２０の運用面（＃１メモリ領域２１であるものとする）には、外部のサーバから、バージョンアップのためのプログラムコードがダウンロードされているものとする。そして、不揮発性メモリ３０のバージョンアップ時刻記憶部３４には、バージョンアップのためのプログラムコードをダウンロードした時刻が記憶されているものとする。
【０１２３】
図９は、第４の実施形態の動作について説明するフローチャートである。
【０１２４】
上述したように、第４の実施形態においては、制御部５０−４は、通信装置１００−４の起動を、運用面のプログラムコードで行う。ここで、運用面のプログラムコードでの通信装置１００−４の起動が不成功であった場合、ＲＴＣ７０の現在時刻を参照する。ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過している場合、制御部５０−４は、退避面のプログラムコードによる通信装置１００−４の起動に切り替えるよう動作する点でのみ、第１の実施形態と異なっている。従って、図９において、第１の実施形態の動作の図２の構成要素に対応するものは同一の参照数字または符号を付し、その説明を極力省略するものとする。
【０１２５】
図９において、通信装置１００−４の電源が投入されると（図９のステップＳ１）、通信装置１００−４の制御部５０−４は以下のように動作する。
【０１２６】
すなわち、制御部５０−４は、ＲＴＣ７０の現在時刻を参照する。ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間（例えば、「２４時間」であるとする）が経過しているかの判定を行う（ステップＳ１−５）。
【０１２７】
予め指定した時間が経過していない場合（ステップＳ１−５でＮｏ）、制御部５０−４は、第１の実施形態で説明したと同様に、不揮発性メモリ３０に記憶されている起動の失敗回数について、運用面からチェックを行う。つまり、＃１カウンタ３１に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う（ステップＳ２）。そして、その後は、第１の実施形態と同様の動作を行う。従って、図９のステップＳ３からステップＳ９までの動作については、以下のように説明を簡略化する。
【０１２８】
すなわち、図９のステップＳ３からステップＳ７まで動作し、動作用メモリ４０への＃１プログラムコードの展開が成功し（ステップＳ５でＹｅｓ）、かつ、動作用メモリ４０のプログラムコードでの起動が成功した場合（ステップＳ７でＹｅｓ）、以下のように動作する。つまり、第１の実施形態と同様に、制御部５０−４は、通信装置１００−４の動作をそのまま継続させることにより、通信装置１００−４に通信機能を提供させるよう動作させる（ステップＳ９）。
【０１２９】
一方、ステップＳ３からステップＳ７までの動作中に、動作用メモリ４０への＃１プログラムコードの展開が不成功であった場合（ステップＳ５でＮｏ）、或いは、動作用メモリ４０のプログラムコードでの起動が不成功であった場合（ステップＳ７でＮｏ）、ステップＳ１−５に戻る。そして、ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過しているかの判定を再度行うよう動作する。ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過している場合（ステップＳ１−５でＹｅｓ）、制御部５０−４は、第１の実施形態で説明したと同様の動作を行う。すなわち、制御部５０−４は、不揮発性メモリ３０に記憶されている起動の失敗回数について、退避面でのチェックを行う。つまり、＃２カウンタ３２に記憶されている起動の失敗回数が、予め定めておいた閾値を超えているか否かの判定を行う（ステップＳ１２）。そして、その後は、第１の実施形態と同様の動作を行う。従って、図９のステップＳ１３からステップＳ１９までの動作については説明を省略するものとする。
【０１３０】
なお、図９においては、不揮発性メモリ３０の＃１カウンタ３１及び＃２カウンタ３２に記憶されている起動の失敗回数をチェックしながら、動作するものとして説明した。しかし、起動の失敗回数のチェックは行わないようにしてもよい。このようにすれば、通信装置１００−４の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過している場合にだけ、動作用メモリ４０に展開するプログラムコードを、運用面から退避面に切り替えるようになる。
【０１３１】
上述したように、本実施形態においては、ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過している場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるよう動作する。
【０１３２】
従って、本実施形態によれば、ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過している場合、運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるようになる。
【０１３３】
以上、本発明の第４の実施形態の動作について説明した。
【０１３４】
前述したように、本発明の第４の実施形態の通信装置１００−４の制御部５０−４は、ＲＴＣ７０の現在時刻が、バージョンアップ時刻記憶部３４に記憶されている時刻から、予め指定した時間が経過しているかの判定を行う。予め指定した時間が経過している場合、制御部５０−４は、動作用メモリ４０に展開するプログラムコードを運用面から退避面に切り替え、退避面のプログラムコードでの起動を行わせるよう動作する点でのみ、第１の実施形態と異なっている。従って、以下において第４の実施形態に特有の箇所に関してのみ説明するものとする。
【０１３５】
以上説明したように、本実施形態の通信装置１００−４は、外部との通信を行う通信部（通信部１０）を備えている。また、プログラムコードを格納する第１および第２のメモリ領域（＃１メモリ領域２１、＃２メモリ領域２２）を有する第１の不揮発性メモリ（不揮発性メモリ２０）を備えている。さらに、前記第１および第２のメモリ領域のプログラムコードでの起動の失敗回数を前記メモリ領域のそれぞれに対応して格納する第１および第２のカウンタ（＃１カウンタ３１、＃２カウンタ３２）を有する第２の不揮発性メモリ（不揮発性メモリ３０−２）を備えている。またさらに、前記第１或いは第２のメモリ領域の何れか一方のプログラムコードを展開する動作用メモリ（動作用メモリ４０）と、制御部（制御部５０−４）と、リアルタイムクロック（ＲＴＣ７０）を備えている。
【０１３６】
そして、前記制御部は、前記第１或いは第２のメモリ領域の何れか一方のプログラムコードを運用の為のプログラムコードとして選択すると共に、前記リアルタイムクロックの現在時刻を参照する。そして、前記リアルタイムクロックの現在時刻が、バージョンアップ時刻から予め指定した時間が経過しているかを判定する。指定した時間が経過している場合、他方のメモリ領域のプログラムコードを運用の為のプログラムコードとして選択する。
【０１３７】
従って、本実施形態によれば、一方のメモリ領域のプログラムコードでの起動が、バージョンアップ時刻から予め指定した時間不可能となった場合、他方のメモリ領域のプログラムコードで装置を起動させることが可能となる。
【符号の説明】
【０１３８】
１０    通信部
２０    不揮発性メモリ
２１    ＃１メモリ領域
２２    ＃２メモリ領域
３０    不揮発性メモリ
３１    ＃１カウンタ
３２    ＃２カウンタ
３３    運用面情報記憶部
３４    バージョンアップ時刻記憶部
４０    動作用メモリ
５０    制御部
６０    タイマ
７０    ＲＴＣ
１００    通信装置
【図１】
2014003472.tif 000003
【図２】
2014003472.tif 000004
【図３】
2014003472.tif 000005
【図４】
2014003472.tif 000006
【図５】
2014003472.tif 000007
【図６】
2014003472.tif 000008
【図７】
2014003472.tif 000009
【図８】
2014003472.tif 000010
【図９】
2014003472.tif 000011