(57)【特許請求の範囲】
【請求項１】
プログラムを格納するプログラムメモリと、前記プログラムメモリに格納されるプログラムの更新を制御する制御手段とを備える電子機器において、
無線で送信される更新用プログラムを受信する受信手段を備え、
前記更新用プログラムは、前記更新用プログラムを複数のブロックに分割したプログラムブロック単位で送信され、
前記プログラムブロックは、該プログラムブロックが構成する更新用プログラムのバージョンを示すバージョン情報、及び該プログラムブロックが前記更新用プログラムを構成するいずれのブロックのものであるかを示すブロックナンバーが付与された形態で送信され、
前記制御手段は、
前記プログラムメモリに格納されるプログラムの更新中でないときに、前記受信手段により前記更新用プログラムを構成する任意のプログラムブロックを受信すると、
プログラムブロックと共に受信したバージョン情報を基に、受信したプログラムブロックが前記プログラムメモリに既に格納されているプログラムよりも新しいバージョンのプログラムを構成するものであるか否かを判断し、
受信したプログラムブロックが、前記プログラムメモリに既に格納されているプログラムよりも新しいバージョンのプログラムを構成するものである場合に、前記プログラムメモリに格納されるプログラムの更新を開始し、受信したプログラムブロックを前記プログラムメモリに格納し、
前記プログラムメモリに格納されるプログラムの更新中であるときに、前記受信手段により前記更新用プログラムを構成する任意のプログラムブロックを受信すると、
プログラムブロックと共に受信したバージョン情報を基に、受信したプログラムブロックが更新中のプログラムを構成するものであるか否かを判断し、プログラムブロックと共に受信したブロックナンバーを基に、受信したプログラムブロックが前記プログラムメモリに既に格納されているか否かを判断し、
受信したプログラムブロックが、更新中のプログラムと同じバージョンのプログラムを構成するものであって、前記プログラムメモリに未だに格納されていない場合には、更新中のプログラムの更新を継続し、受信したプログラムブロックを前記プログラムメモリに格納し、
受信したプログラムブロックが、更新中のプログラムよりも新しいバージョンのプログラムを構成するものである場合には、更新中のプログラムの更新を中止し、受信したプログラムブロックに対応するバージョンのプログラムの更新を開始し、受信したプログラムブロックを前記プログラムメモリに格納し、
更新中のプログラムを構成する全てのプログラムブロックについて前記プログラムメモリに格納し終えると、前記プログラムメモリに格納されるプログラムの更新を完了とし、
受信したプログラムブロックを前記プログラムメモリに格納するとき、前記プログラムメモリに既に格納されている旧いバージョンのプログラムを消去せずに、前記プログラムメモリに既に格納されている旧いバージョンのプログラムの格納領域とは別の格納領域に、受信したプログラムブロックを格納する、
ことを特徴とする電子機器。
【請求項２】
前記制御手段は、
前記プログラムメモリに格納されるプログラムの更新を完了すると、前記プログラムメモリに既に格納されている旧いバージョンのプログラムを残し、前記プログラムメモリに既に格納されている旧いバージョンのプログラムの格納領域をさらに新しいバージョンのプログラムに更新するときのプロクラムブロックの格納領域とする、
ことを特徴とする請求項１に記載の電子機器。
【請求項３】
前記プログラムメモリは、プログラムの更新状況を示す更新状況データをさらに格納し、
前記制御手段は、
前記プログラムメモリに格納されるプログラムの更新を開始すると、前記プログラムメモリに格納されている更新状況データを更新中のプログラムのバージョンを示す値に書換え、前記プログラムメモリに格納されるプログラムの更新を完了すると、前記プログラムメモリに格納されている更新状況データをプログラムの更新中でないことを示す値に書換え、
前記プログラムメモリに格納されている更新状況データを基に、前記プログラムメモリに格納されるプログラムの更新中であるか否かを判断する、
ことを特徴とする請求項１又は請求項２に記載の電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムに基いて動作する電子機器に係り、プログラムの更新機能を有する電子機器に関するものである。
【背景技術】
【０００２】
従来から、電子機器において、電子機器の各種動作をプログラム（電子機器に対する命令や条件、データなどを記述したもの）に基いて制御するようにしたものがある。また、このような電子機器において、プログラムをフラッシュＲＯＭなどの書換え可能なメモリに格納しておき、プログラムを更新（新しいプログラムに書換え）できるようにしたものがある。
【０００３】
従来の電子機器では、プログラムの更新は、例えば、電子機器を有線でインターネットに接続し、インターネット経由で更新用プログラム（新しいバージョンのプログラム）を受信することにより、行われるようになっている。すなわち、従来の電子機器では、ユーザが、電子機器をインターネットに接続し、インターネット経由で更新用プログラムを受信する操作をすることにより、プログラムが更新されるようになっている。
【０００４】
一方、ファイルシステムを経由してファイル単位でファームウェアを更新するようにしたファームウェア更新方法が知られている（例えば特許文献１参照）。フラッシュメモリ内のファームウェアをモジュール単位で管理し、旧いバージョンのファームウェアを消去することなく、新しいバージョンのファームウェアの必要なモジュールのみを書き込んで、ファームウェアを更新するようにしたファームウェア更新方法が知られている（例えば特許文献２参照）。また、ダウンロードした新動作プログラムを旧動作プログラムとは別の記憶領域に格納するようにしたプログラム更新方法が知られている（例えば特許文献３参照）。
【特許文献１】特開２００６−２０２０８６号公報
【特許文献２】特開２００５−３２１８４３号公報
【特許文献３】特開２００２−３３３９９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところが、上述した従来の電子機器においては、プログラムを更新するには、ユーザがプログラムを更新するための作業（例えば、インターネットへの接続や、インターネット経由で更新用プログラムを受信する操作等）をする必要があり、ユーザにとって、プログラムを更新するための作業は煩わしく、使い勝手が悪かった。
【０００６】
そこで、例えば基地局から更新用プログラムを無線で送信し、無線で送信される更新用プログラムを電子機器が受信すると、電子機器が自動的にプログラムの更新を行うようにする構成が考えられる。しかしながら、このような構成においては、単に更新用プログラムの全てを１つのデータとして基地局から無線で送信したのでは、電子機器が更新用プログラムを受信しているときに、受信環境の変動等により、更新用プログラムの受信が途中で途絶える可能性があり、更新用プログラムの受信が途中で途絶えてしまうと、プログラムの更新に失敗してしまう。従って、電子機器が無線で送信される更新用プログラムを受信して自動的にプログラムの更新を行うという構成においては、受信環境の変動等の影響を考慮して、より確実に、プログラムを更新できるようにすることが望まれる。なお、上述した特許文献１乃至特許文献３に開示の内容を適用したとしても、上記の問題を解決することはできない。
【０００７】
本発明は、上記課題を解決するためになされたものであり、ユーザがプログラムを更新するための作業をすることなく、自動的、かつ、より確実にプログラムを更新することができる電子機器を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために請求項１の発明は、プログラムを格納するプログラムメモリと、プログラムメモリに格納されるプログラムの更新を制御する制御手段とを備える電子機器において、無線で送信される更新用プログラムを受信する受信手段を備え、更新用プログラムは、更新用プログラムを複数のブロックに分割したプログラムブロック単位で送信され、プログラムブロックは、該プログラムブロックが構成する更新用プログラムのバージョンを示すバージョン情報、及び該プログラムブロックが更新用プログラムを構成するいずれのブロックのものであるかを示すブロックナンバーが付与された形態で送信され、制御手段は、プログラムメモリに格納されるプログラムの更新中でないときに、受信手段により更新用プログラムを構成する任意のプログラムブロックを受信すると、プログラムブロックと共に受信したバージョン情報を基に、受信したプログラムブロックがプログラムメモリに既に格納されているプログラムよりも新しいバージョンのプログラムを構成するものであるか否かを判断し、受信したプログラムブロックが、プログラムメモリに既に格納されているプログラムよりも新しいバージョンのプログラムを構成するものである場合に、プログラムメモリに格納されるプログラムの更新を開始し、受信したプログラムブロックをプログラムメモリに格納し、プログラムメモリに格納されるプログラムの更新中であるときに、受信手段により更新用プログラムを構成する任意のプログラムブロックを受信すると、プログラムブロックと共に受信したバージョン情報を基に、受信したプログラムブロックが更新中のプログラムを構成するものであるか否かを判断し、プログラムブロックと共に受信したブロックナンバーを基に、受信したプログラムブロックがプログラムメモリに既に格納されているか否かを判断し、受信したプログラムブロックが、更新中のプログラムと同じバージョンのプログラムを構成するものであって、プログラムメモリに未だに格納されていない場合には、更新中のプログラムの更新を継続し、受信したプログラムブロックをプログラムメモリに格納し、受信したプログラムブロックが、更新中のプログラムよりも新しいバージョンのプログラムを構成するものである場合には、更新中のプログラムの更新を中止し、受信したプログラムブロックに対応するバージョンのプログラムの更新を開始し、受信したプログラムブロックをプログラムメモリに格納し、更新中のプログラムを構成する全てのプログラムブロックについてプログラムメモリに格納し終えると、プログラムメモリに格納されるプログラムの更新を完了とし、受信したプログラムブロックをプログラムメモリに格納するとき、プログラムメモリに既に格納されている旧いバージョンのプログラムを消去せずに、プログラムメモリに既に格納されている旧いバージョンのプログラムの格納領域とは別の格納領域に、受信したプログラムブロックを格納するものである。
【０００９】
請求項２の発明は、請求項１に記載の電子機器において、制御手段は、プログラムメモリに格納されるプログラムの更新を完了すると、プログラムメモリに既に格納されている旧いバージョンのプログラムを残し、プログラムメモリに既に格納されている旧いバージョンのプログラムの格納領域をさらに新しいバージョンのプログラムに更新するときのプロクラムブロックの格納領域とするものである。
【００１０】
請求項３の発明は、請求項１又は請求項２に記載の電子機器において、プログラムメモリは、プログラムの更新状況を示す更新状況データをさらに格納し、制御手段は、プログラムメモリに格納されるプログラムの更新を開始すると、プログラムメモリに格納されている更新状況データを更新中のプログラムのバージョンを示す値に書換え、プログラムメモリに格納されるプログラムの更新を完了すると、プログラムメモリに格納されている更新状況データをプログラムの更新中でないことを示す値に書換え、プログラムメモリに格納されている更新状況データを基に、プログラムメモリに格納されるプログラムの更新中であるか否かを判断するものである。
【発明の効果】
【００１２】
請求項１の発明によれば、無線で送信される更新用プログラムを受信すると、そのプログラムがプログラムメモリに格納されて、プログラムが更新される。すなわち、無線で送信される更新用プログラムを受信するだけで、プログラムを更新することができ、ユーザがプログラムを更新するための作業をすることなく、自動的に、プログラムを更新することができる。従って、使い勝手が良く、利便性が優れている。しかも、更新用プログラムは、複数のブロックに分割したプログラムブロック単位で送信され、プログラムブロック単位で受信されてプログラムメモリに格納され、そして、更新用プログラムを構成する全てのプログラムブロックが受信されてプログラムメモリに格納されると、プログラムの更新の完了となる。従って、更新用プログラムを構成する全てのプログラムブロックを１度に受信できなかった場合には、その受信できなかったプログラムブロックについて、その後に受信できれば、プログラムが更新される。すなわち、更新用プログラムを構成する全てのプログラムブロックを１度に受信すること（更新用プログラムの受信が途中で途絶えないこと）がプログラムの更新に必要な条件とはならず、更新用プログラムを構成する全てのプログラムブロックを１度に受信することができなくても、プログラムの更新が可能となり、より確実に、プログラムを更新することができる。また、同じプログラムブロックが無駄に何度もプログラムメモリに格納されることがなく、プログラムメモリのデータ書換処理を軽減することができ、プログラムメモリの破損を抑えることができる。また、同じバージョンの更新用プログラムが無駄に何度もプログラムメモリに格納されることがなく、プログラムメモリのデータ書換処理を軽減することができ、プログラムメモリの破損を抑えることができる。また、新しいバージョンのプログラムに更新された後も、旧いバージョンのプログラムが残される。従って、新しいバージョンのプログラムが起動しない場合に、旧いバージョンのプログラムに基いて、電子機器の各種動作を制御することができる。
【発明を実施するための最良の形態】
【００１６】
以下、本発明を具体化した実施形態による電子機器について図面を参照して説明する。図１（ａ）は、本実施形態による電子機器であるナビゲーション装置の構成を示し、図１（ｂ）は、このナビゲーション装置により表示される地図の表示例を示す。
【００１７】
ナビゲーション装置１は、地図を地名と共に表示する装置であり、画像を表示するためのディスプレイ１１と、音声を出力するためのスピーカ１２と、ユーザによりナビゲーション装置１の各種動作を指示するためにタッチ操作されるタッチパネル１３等を備える。タッチパネル１３は、例えばユーザが指でタッチパネル１３上をタッチすることにより、そのタッチ位置を検出するものであり、透光性を有し、ディスプレイ１１上に重ねて配置されている。従って、ディスプレイ１１に表示される画像は、タッチパネル１３越しに透けて見えるようになっている。ナビゲーション装置１は、例えば自動車内に設置して使用され、また、ユーザが携帯して持ち運びできるようになっている。
【００１８】
ナビゲーション装置１は、ＧＰＳ（Global Positioning System：全地球測位システム）等を利用してナビゲーション装置１の現在位置と移動方向を検出する機能を有しており、ディスプレイ１１に、ナビゲーション装置１の現在位置を含むナビゲーション装置１の現在位置周辺の地図を、地名、及びナビゲーション装置１の現在位置と移動方向と共に表示するようになっている。
【００１９】
図１（ｂ）に示す例では、ディスプレイ１１に、地図を表わす地図画像２１と、地名を示す地名画像２２と、ナビゲーション装置１の現在位置と移動方向を示す矢印画像２３とが表示されている。地図画像２１は、ナビゲーション装置１の現在位置を含むナビゲーション装置１の現在位置周辺の地図を表わしており、地名画像２２は、各々、その表示位置に対応する地域の地名を地名文字列により表示している。矢印画像２３は、その表示位置によりナビゲーション装置１の現在位置を示しており、その表示方向によりナビゲーション装置１の移動方向を示している。ナビゲーション装置１は、このように、地図画像２１により、ナビゲーション装置１の現在位置を含むナビゲーション装置１の現在位置周辺の地図を表示し、地名画像２２により、地名を表示し、矢印画像２３により、ナビゲーション装置１の現在位置と移動方向を表示する。
【００２０】
また、ナビゲーション装置１は、ディスプレイ１１に、ユーザにナビゲーション装置１を操作させるための操作ボタンを表示し、操作ボタンがユーザによりタッチ操作（操作ボタンの表示箇所に対応するタッチパネル１３上の位置がユーザによりタッチ）されることにより、そのタッチ操作に応じて、ナビゲーション装置１の現在位置を含まない別の地域の地図の表示や、表示する地図の拡大、縮小等を行うようになっている。
【００２１】
図１（ｂ）に示す例では、ディスプレイ１１に、地図画像２１、地名画像２２、及び矢印画像２３に加え、操作ボタンを表わす画像としてメニューボタン画像２４が表示されており、メニューボタン画像２４をタッチ操作することにより、各種操作ボタン画像が表示され、それら各種操作ボタン画像をタッチ操作することにより、別の地域の地図の表示や、表示する地図の拡大や縮小等が行われる。ナビゲーション装置１の現在位置を含まない別の地域の地図の表示においては、ナビゲーション装置１の現在位置と移動方向を示す矢印画像２３が表示されない以外は、図１（ｂ）に示す例と同様に、地図を表わす地図画像２１及び地名を示す地名画像２２が表示される。
【００２２】
ナビゲーション装置１は、ナビゲーション装置１を動作させるためのプログラム（ナビゲーション装置１に対する命令や条件、データなどを記述したもの）を格納しており、そのプログラムに基いて、ディスプレイ１１に地図を表示する動作等、ナビゲーション装置１の各種動作を制御するようになっている。また、ナビゲーション装置１は、格納しているプログラムを更新（新しいプログラムに書換え）する機能を有している。プログラムの更新は、例えば、道路や施設の新設、地名変更等に対応して地図や地名を表示させるために、また、ナビゲーション装置１の各種機能を向上させるために行われる。
【００２３】
図２は、ナビゲーション装置１のプログラムの更新方法の概略を示す。ナビゲーション装置１のプログラムの更新は、プログラム送信装置（基地局）２が更新用プログラム（新しいバージョンのプログラム）を無線で送信し、その更新用プログラムをナビゲーション装置１で受信することにより行われる。
【００２４】
ナビゲーション装置１は、プログラム送信装置２から無線で送信される更新用プログラムを受信する機能を有しており、プログラム送信装置２から無線で送信される更新用プログラムを受信すると、自動的に、プログラムを更新するようになっている。ナビゲーション装置１は、多数のユーザに使用されるものであり、ユーザの数に応じて多数のものが存在する。
【００２５】
プログラム送信装置２は、更新用プログラムを無線でブロードキャスト（放送）する。すなわち、プログラム送信装置２は、多数のナビゲーション装置１を個別に特定することなく、多数のナビゲーション装置１に対して一斉に更新用プログラムを送信する。プログラム送信装置２は、例えば、コンサート会場、店舗、道路沿い等に設置され、更新用プログラムを定期的に繰り返してブロードキャストする。
【００２６】
従って、各ナビゲーション装置１は、プログラム送信装置２から送信される更新用プログラムの受信エリア３０内に入ると、プログラム送信装置２から更新用プログラムを受信し、更新用プログラムを受信したタイミングで、自動的に、プログラムを更新することになる。また、更新用プログラムの受信エリア３０内に存在する全てのナビゲーション装置１は、プログラム送信装置２から一斉に更新用プログラムを受信して、一斉にプログラムを更新することになる。プログラム送信装置２による更新用プログラムの送信方法、及びナビゲーション装置１におけるプログラムの更新処理の詳細については後述する。
【００２７】
図３は、ナビゲーション装置１の電気的ブロック構成を示す。ナビゲーション装置１は、上述の構成に加え、位置・方向検出部１４と、プログラムメモリ１５と、無線受信部１６と、ナビゲーション装置１を制御するためのＣＰＵ等からなる制御部１７等を備える。
【００２８】
ディスプレイ１１は、制御部１７による制御のもと、画像を表示する。スピーカ１２は、制御部１７による制御のもと、音声を出力する。タッチパネル１３は、マトリックス状に配列された多数の透明な感圧スイッチにより構成されており、制御部１７による制御のもと、ユーザによるタッチパネル１３上のタッチ位置を検出し、その検出結果を制御部１７に出力する。
【００２９】
位置・方向検出部１４は、ＧＰＳ受信機４１と、地磁気センサ４２と、ジャイロセンサ４３とを有している。ＧＰＳ受信機４１は、ＧＰＳ衛星からの電波を受信して、ナビゲーション装置１の現在位置（緯度及び経度等）を検出する。地磁気センサ４２は、地磁気の方向を検出し、その検出した地磁気の方向を基にナビゲーション装置１の移動方向を絶対方位で検出する。ジャイロセンサ４３は、ナビゲーション装置１の姿勢の変化を検出し、その検出した姿勢の変化を基にナビゲーション装置１の移動方向を相対方位で検出する。位置・方向検出部１４は、これらＧＰＳ受信機４１、地磁気センサ４２、ジャイロセンサ４３の検出結果を制御部１７に出力する。
【００３０】
プログラムメモリ１５は、ナビゲーション装置１を動作させるためのプログラムを格納している。プログラムメモリ１５は、例えばフラッシュＲＯＭから成っており、プログラムメモリ１５に格納しているプログラムは、制御部１７による制御のもと、書き換え可能になっている。無線受信部１６は、プログラム送信装置２から無線で送信される更新用プログラムを受信する。
【００３１】
制御部１７は、プログラムメモリ１５に格納されているプログラムに基いて、ディスプレイ１１に地図を表示する動作等、ナビゲーション装置１の各種動作を制御する。また、制御部１７は、無線受信部１６により更新用プログラムを受信したことを受けて、プログラムメモリ１５に格納されているプログラムの更新を制御する。
【００３２】
図４（ａ）（ｂ）は、プログラム送信装置２による更新用プログラムの送信方法を示し、図５（ａ）（ｂ）、図６（ａ）（ｂ）（ｃ）、図７（ａ）（ｂ）（ｃ）は、ナビゲーション装置１におけるプログラムの更新処理を示す。上述のように、ナビゲーション装置１のプログラムの更新は、プログラム送信装置２が更新用プログラムを無線で送信し、その更新用プログラムをナビゲーション装置１で受信することにより行われる。
【００３３】
プログラム送信装置２は、更新用プログラムを複数のブロック（プログラムブロック）に分割して送信データブロック５０によって送信する。送信データブロック５０は、図４（ａ）に示すように、プログラムブロック６０と、バージョン情報７０と、ブロックナンバー８０とを含んでいる。プログラムブロック６０は、更新用プログラムを複数のブロックに分割したものの中の一つである。バージョン情報７０は、プログラムブロック６０が構成する更新用プログラムのバージョンを示すデータである。ブロックナンバー８０は、プログラムブロック６０が更新用プログラムのいずれのブロックのものであるかを示すデータである。
【００３４】
すなわち、更新用プログラムは、複数の送信データブロック５０を用いて、更新用プログラムを複数のブロックに分割したプログラムブロック６０単位で送信される。そして、各プログラムブロック６０は、各プログラムブロック６０が更新用プログラムを構成するいずれのブロックのものであるかを示すブロックナンバー８０、及びプログラムブロック６０が構成する更新用プログラムのバージョンを示すバージョン情報７０が付与された形態で送信される。本実施形態では、更新用プログラムは、図４（ｂ）に示すように、１０個の送信データブロック５０（５０−１、５０−２、５０−３、・・・、５０−１０）によって、１０個のプログラムブロック６０（６０−１、６０−２、６０−３、・・・、６０−１０）に分割して送信される。
【００３５】
プログラム送信装置２は、送信データブロック５０−１、送信データブロック５０−２、送信データブロック５０−３、・・・、送信データブロック５０−１０の順に各送信データブロック５０を送信する。そして、プログラム送信装置２は、常時、これらの送信データブロック５０を送信する。すなわち、プログラム送信装置２は、送信データブロック５０−１０を送信した後、再び、送信データブロック５０−１から順に各送信データブロック５０を送信することを繰り返す。
【００３６】
送信データブロック５０は、ナビゲーション装置１を個別に特定するための情報を含んでいない。従って、送信データブロック５０は、不特定のナビゲーション装置１（すなわち送信データブロック５０の受信エリア内に存在する全てのナビゲーション装置１）に受信されることになる。
【００３７】
ナビゲーション装置１の制御部１７は、無線受信部１６により更新用プログラム（送信データブロック５０）を受信したことを受けて、プログラムメモリ１５に格納されているプログラムの更新を制御する。
【００３８】
プログラムメモリ１５は、初期の状態においては、図５（ａ）に示すように、ナビゲーション装置１を動作させるためのプログラムとして、バージョン「１．０」のプログラム９１を格納している。バージョン「１．０」のプログラム９１は、プログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」の領域に、プログラム９１のバージョンが「１．０」であることを示すバージョンデータ（不図示）と共に格納されている。また、プログラムメモリ１５は、開始アドレスデータ９２、格納アドレスデータ９３、更新状況データ９４を格納している。開始アドレスデータ９２、格納アドレスデータ９３、更新状況データ９４は、プログラムメモリ１５のアドレス「０ｘ００００」〜「０ｘ１０００」の領域に格納されている。
【００３９】
開始アドレスデータ９２は、ナビゲーション装置１の起動時のプログラムの開始アドレスを示すデータである。図５（ａ）に示す初期の状態では、開始アドレスデータ９２は、「０ｘ１０００」となっており、ナビゲーション装置１を動作させるためのプログラムであるバージョン「１．０」のプログラム９１の開始アドレスがアドレス「０ｘ１０００」であることを示している。
【００４０】
格納アドレスデータ９３は、新しいバージョンのプログラムを格納すべきアドレスを示すデータである。図５（ａ）に示す初期の状態では、格納アドレスデータ９３は、「０ｘ３０００」となっており、新しいバージョンのプログラムをアドレス「０ｘ３０００」〜「０ｘ４０００」の領域に格納することを示している。
【００４１】
更新状況データ９４は、プログラムの更新状況を示すデータであり、プログラムの更新中でないときは、「０．０」とされ、プログラムの更新中であるときは、更新中のプログラムのバージョンを示す値（例えば、更新中のプログラムのバージョンが「１．１」であれば、その値「１．１」）とされる。図５（ａ）に示す初期の状態では、更新状況データ９４は、「０．０」となっており、プログラムの更新中でないことを示している。
【００４２】
このような状態において、図５（ｂ）に示すように、無線受信部１６により送信データブロック５０を受信（すなわちプログラムブロック６０をバージョン情報７０及びブロックナンバー８０と共に受信）したとする。図５（ｂ）に示す例では、送信データブロック５０には、プログラムブロック６０として、バージョン「１．１」のプログラムの４番目のプログラムブロックが含まれており、バージョン情報７０は「１．１」となっており、ブロックナンバー８０は「４」となっている。
【００４３】
制御部１７は、無線受信部１６により送信データブロック５０を受信したことを受けて、まず、プログラムメモリ１５に格納している更新状況データ９４を基に、プログラムの更新中であるか否かを判断する。図５（ｂ）に示す状態（図５（ａ）に示す初期の状態において、送信データブロック５０を受信した状態）では、更新状況データ９４は「０．０」であり、従って、制御部１７は、プログラムの更新中でないと判断する。
【００４４】
続いて、制御部１７は、送信データブロック５０に含まれる（すなわちプログラムブロック６０と共に受信した）バージョン情報７０を基に、受信したプログラムブロック６０がプログラムメモリ１５に既に格納されているバージョン「１．０」のプログラム９１よりも新しいバージョンのプログラムを構成するものであるか否かを判断する。この判断は、送信データブロック５０に含まれるバージョン情報７０と、プログラムメモリ１５に格納されているプログラム９１のバージョンを示すバージョンデータ（プログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」の領域にプログラム９１と共に格納されている）と、を比較することにより行われる。
【００４５】
そして、受信したプログラムブロック６０がプログラムメモリ１５に既に格納されているバージョン「１．０」のプログラム９１よりも新しいバージョンのプログラムを構成するものであれば、制御部１７は、プログラムの更新が必要であると判断し、プログラムの更新を開始し、受信したプログラムブロック６０をプログラムメモリ１５に格納する。
【００４６】
図５（ｂ）に示す状態では、送信データブロック５０に含まれるバージョン情報７０は「１．１」であり、プログラムメモリ１５に格納されているバージョンデータは「１．０」であり、従って、受信したプログラムブロック６０は、プログラムメモリ１５に既に格納されているバージョン「１．０」のプログラム９１よりも新しいバージョンのプログラムを構成するものである。従って、制御部１７は、プログラムの更新が必要であると判断し、プログラムの更新を開始し、受信したプログラムブロック６０をプログラムメモリ１５に格納する。
【００４７】
このとき、制御部１７は、プログラムメモリ１５に格納している格納アドレスデータ９３、及び、送信データブロック５０に含まれる（プログラムブロック６０と共に受信した）ブロックナンバー８０を基に、受信したプログラムブロック６０をプログラムメモリ１５の該当する格納領域に格納する。
【００４８】
図５（ｂ）に示す状態では、格納アドレスデータ９３は「０ｘ３０００」であり、ブロックナンバー８０は「４」である。従って、制御部１７は、図６（ａ）に示すように、受信したプログラムブロック６０を、プログラムメモリ１５のアドレス「０ｘ３０００」〜「０ｘ４０００」の領域を１０個に分割した領域のうちの、４番目の領域に格納する。すなわち、制御部１７は、プログラムメモリ１５に既に格納されているバージョン「１．０」のプログラム９１を消去せずに、バージョン「１．０」のプログラム９１の格納領域とは別の格納領域にプログラムブロック６０を格納する。
【００４９】
また、制御部１７は、受信したプログラムブロック６０をプログラムメモリ１５に格納し終えると、プログラムの更新中であるとして、図６（ａ）に示すように、更新状況データ９４を更新中のプログラムのバージョンを示す値に書換える。図６（ａ）に示す状態では、バージョン「１．１」のプログラムへ更新中であり、従って、制御部１７は、更新状況データ９４を「１．１」に書換える。
【００５０】
その後、図６（ａ）に示す状態において、無線受信部１６により送信データブロック５０を受信すると、その都度、制御部１７は、まず、プログラムメモリ１５に格納している更新状況データ９４を基に、プログラムの更新中であるか否かを判断する。図６（ａ）に示す状態では、更新状況データ９４は「１．１」であり、従って、制御部１７は、バージョン「１．１」のプログラムの更新中であると判断する。そして、制御部１７は、送信データブロック５０に含まれるバージョン情報７０が「１．１」であれば、プログラムの更新を継続し、プログラムメモリ１５に格納している格納アドレスデータ９３、及び、受信した送信データブロック５０に含まれるブロックナンバー８０を基に、受信したプログラムブロック６０をプログラムメモリ１５の該当する格納領域に格納する。
【００５１】
すなわち、制御部１７は、無線受信部１６によりバージョン情報７０が「１．１」である送信データブロック５０を受信すると、その都度、受信したプログラムブロック６０を、上記ブロックナンバー８０が「４」であるプログラムブロック６０と同様に、プログラムメモリ１５のアドレス「０ｘ３０００」〜「０ｘ４０００」の領域を１０個に分割した領域のうちの、該当する領域に格納してゆく。
【００５２】
これにより、図６（ｂ）に示すように、バージョン「１．１」の更新用プログラムを構成する各プログラムブロック６０（ブロックナンバー８０の異なる各プログラムブロック６０）が、プログラムメモリ１５のアドレス「０ｘ３０００」〜「０ｘ４０００」の領域に格納されてゆく。上述のように、送信データブロック５０は、プログラム送信装置２から、各ブロックナンバー８０のものが順に繰り返して送信される。しかし、受信環境等の影響により、受信できない送信データブロック５０がある可能性がある。制御部１７は、受信できた送信データブロック５０に含まれるプログラムブロック６０からプログラムメモリ１５に格納してゆく。
【００５３】
図６（ｂ）に示す状態では、ブロックナンバー８０が「２」「４」「５」「７」「８」「９」「１０」のプログラムブロック６０がプログラムメモリ１５に格納されており、ブロックナンバー８０が「１」「３」「６」のプログラムブロック６０が未だプログラムメモリ１５に格納されていない。また、図６（ｂ）に示す状態では、バージョン「１．１」の更新用プログラムを構成する全てのプログラムブロック６０を格納し終えておらず、従って、制御部１７は、プログラムの更新中であるとして、更新状況データ９４を「１．１」に保持する。
【００５４】
なお、制御部１７は、プログラムブロック６０と共に受信したブロックナンバー８０を基に、受信したプログラムブロック６０と同じプログラムブロック６０がプログラムメモリ１５に未だに格納されていない場合に、受信したプログラムブロック６０をプログラムメモリ１５に格納する。すなわち、制御部１７は、受信したプログラムブロック６０と同じプログラムブロック６０がプログラムメモリ１５に既に格納されている場合には、受信したプログラムブロック６０をもう一度プログラムメモリ１５に格納（上書き）することは行わない。
【００５５】
そして、図６（ｃ）に示すように、バージョン「１．１」の更新用プログラムを構成する全てのプログラムブロック６０についてプログラムメモリ１５のアドレス「０ｘ３０００」〜「０ｘ４０００」の領域に格納し終えると、バージョン「１．１」のプログラム９５（新しいバージョンのプログラム）がアドレス「０ｘ３０００」〜「０ｘ４０００」の領域に格納されたことになる。なお、「０ｘ３０００」〜「０ｘ４０００」の領域には、バージョン「１．１」のプログラム９５と共に、プログラム９５のバージョンが「１．１」であることを示すバージョンデータ（不図示）が格納される。
【００５６】
制御部１７は、図６（ｃ）に示すように、バージョン「１．１」の更新用プログラムを構成する全てのプログラムブロック６０についてプログラムメモリ１５に格納し終えると、開始アドレスデータ９２を「０ｘ３０００」に書換え、格納アドレスデータ９３を「０ｘ１０００」に書換え、更新状況データ９４を「０．０」に書換えて、バージョン「１．１」のプログラム９５の更新を完了とする。バージョン「１．０」のプログラム９１（旧いバージョンのプログラム）は、アドレス「０ｘ１０００」〜「０ｘ２０００」の領域に残される。
【００５７】
開始アドレスデータ９２を「０ｘ３０００」に書換えることにより、以降は、アドレス「０ｘ３０００」〜「０ｘ４０００」に格納されているバージョン「１．１」のプログラム９５に基いてナビゲーション装置１の各種動作が制御される。また、格納アドレスデータ９３を「０ｘ１０００」に書換えることにより、バージョン「１．１」よりも新しいバージョンのプログラムは、アドレス「０ｘ１０００」〜「０ｘ２０００」の格納領域に格納されることになる。また、更新状況データ９４を「０．０」に書換えることにより、プログラムの更新中でないことが示される。
【００５８】
その後、図６（ｃ）に示す状態において、図７（ａ）に示すように、無線受信部１６により送信データブロック５０を受信したとする。図７（ａ）に示す例では、送信データブロック５０には、プログラムブロック６０として、バージョン「１．２」のプログラムの７番目のプログラムブロックが含まれており、バージョン情報７０は「１．２」となっており、ブロックナンバー８０は「７」となっている。
【００５９】
制御部１７は、無線受信部１６により送信データブロック５０を受信したことを受けて、まず、プログラムメモリ１５に格納している更新状況データ９４を基に、プログラムの更新中であるか否かを判断する。図７（ａ）に示す状態（図６（ｃ）に示す状態において、送信データブロック５０を受信した状態）では、更新状況データ９４は「０．０」であり、従って、制御部１７は、プログラムの更新中でないと判断する。
【００６０】
続いて、制御部１７は、送信データブロック５０に含まれる（すなわちプログラムブロック６０と共に受信した）バージョン情報７０を基に、受信したプログラムブロック６０がプログラムメモリ１５に既に格納されているバージョン「１．１」のプログラム９５よりも新しいバージョンのプログラムを構成するものであるか否かを判断する。この判断は、送信データブロック５０に含まれるバージョン情報７０と、プログラムメモリ１５に格納されているプログラム９５のバージョンを示すバージョンデータ（プログラムメモリ１５のアドレス「０ｘ３０００」〜「０ｘ４０００」の領域にプログラム９５と共に格納されている）と、を比較することにより行われる。
【００６１】
そして、受信したプログラムブロック６０がプログラムメモリ１５に既に格納されているバージョン「１．１」のプログラム９５よりも新しいバージョンのプログラムを構成するものであれば、制御部１７は、プログラムの更新が必要であると判断し、プログラムの更新を開始し、受信したプログラムブロック６０をプログラムメモリ１５に格納する。
【００６２】
図７（ａ）に示す状態では、送信データブロック５０に含まれるバージョン情報７０は「１．２」であり、プログラムメモリ１５に格納されているバージョンデータは「１．１」であり、従って、受信したプログラムブロック６０は、プログラムメモリ１５に既に格納されているバージョン「１．１」のプログラム９５よりも新しいバージョンのプログラムを構成するものである。従って、制御部１７は、プログラムの更新が必要であると判断し、プログラムの更新を開始し、受信したプログラムブロック６０をプログラムメモリ１５に格納する。
【００６３】
このとき、制御部１７は、プログラムメモリ１５に格納している格納アドレスデータ９３、及び、送信データブロック５０に含まれる（プログラムブロック６０と共に受信した）ブロックナンバー８０を基に、受信したプログラムブロック６０をプログラムメモリ１５の該当する格納領域に格納する。
【００６４】
図７（ａ）に示す状態では、格納アドレスデータ９３は「０ｘ１０００」であり、ブロックナンバー８０は「７」である。従って、制御部１７は、図７（ｂ）に示すように、プログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」に格納されているバージョン「１．０」のプログラム９１を消去して、受信したプログラムブロック６０を、プログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」の領域を１０個に分割した領域のうちの、７番目の領域に格納する。すなわち、制御部１７は、プログラムメモリ１５に既に格納されているバージョン「１．１」のプログラム９５を消去せずに、バージョン「１．１」のプログラム９５の格納領域とは別の格納領域にプログラムブロック６０を格納する。
【００６５】
また、制御部１７は、受信したプログラムブロック６０をプログラムメモリ１５に格納し終えると、プログラムの更新中であるとして、図７（ｂ）に示すように、更新状況データ９４を更新中のプログラムのバージョンを示す値に書換える。図７（ｂ）に示す状態では、バージョン「１．２」のプログラムの更新中であり、従って、制御部１７は、更新状況データ９４を「１．２」に書換える。
【００６６】
その後、制御部１７は、無線受信部１６によりバージョン情報７０が「１．２」である送信データブロック５０を受信すると、その都度、受信したプログラムブロック６０を、上記ブロックナンバー８０が「７」であるプログラムブロック６０と同様に、プログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」の領域を１０個に分割した領域のうちの、該当する領域に格納してゆく。
【００６７】
これにより、バージョン「１．２」の更新用プログラムを構成する各プログラムブロック６０（ブロックナンバー８０の異なる各プログラムブロック６０）が、プログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」の領域に格納されてゆく。
【００６８】
そして、図７（ｃ）に示すように、バージョン「１．２」の更新用プログラムを構成する全てのプログラムブロック６０についてプログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」の領域に格納し終えると、バージョン「１．２」のプログラム９６（新しいバージョンのプログラム）がアドレス「０ｘ１０００」〜「０ｘ２０００」の領域に格納されたことになる。なお、「０ｘ１０００」〜「０ｘ２０００」の領域には、バージョン「１．２」のプログラム９６と共に、プログラム９６のバージョンが「１．２」であることを示すバージョンデータ（不図示）が格納される。
【００６９】
制御部１７は、図７（ｃ）に示すように、バージョン「１．２」の更新用プログラムを構成する全てのプログラムブロック６０についてプログラムメモリ１５に格納し終えると、開始アドレスデータ９２を「０ｘ１０００」に書換え、格納アドレスデータ９３を「０ｘ３０００」に書換え、更新状況データ９４を「０．０」に書換えて、バージョン「１．２」のプログラム９６の更新を完了とする。バージョン「１．１」のプログラム９５（旧いバージョンのプログラム）は、アドレス「０ｘ３０００」〜「０ｘ４０００」の領域に残される。
【００７０】
開始アドレスデータ９２を「０ｘ１０００」に書換えることにより、以降は、アドレス「０ｘ１０００」〜「０ｘ２０００」に格納されているバージョン「１．２」のプログラム９６に基いてナビゲーション装置１の各種動作が制御される。また、格納アドレスデータ９３を「０ｘ３０００」に書換えることにより、バージョン「１．２」よりも新しいバージョンのプログラムは、アドレス「０ｘ３０００」〜「０ｘ４０００」の格納領域に格納されることになる。また、更新状況データ９４を「０．０」に書換えることにより、プログラムの更新中でないことが示される。
【００７１】
その後、無線受信部１６により送信データブロック５０を受信すると、制御部１７は、同様の処理を繰り返す。従って、プログラムを更新する都度、新しいバージョンのプログラムは、プログラムメモリ１５のアドレス「０ｘ１０００」〜「０ｘ２０００」の領域とアドレス「０ｘ３０００」〜「０ｘ４０００」の領域とに交互に格納されてゆく。
【００７２】
なお、図６（ｃ）に示す状態（バージョン「１．１」のプログラム９５の更新を完了した状態）において、バージョン「１．１」の更新用プログラムを構成するプログラムブロック６０を受信した場合には、制御部１７は、プログラムブロック６０と共に受信したバージョン情報７０を基に、受信したプログラムブロック６０がプログラムメモリ１５に既に格納されているプログラムよりも新しいバージョンのプログラムを構成するものではないと判断する。従って、この場合には、制御部１７は、プログラムの更新を開始せず、同じバージョンのプログラムについての更新を行わない。
【００７３】
また、図６（ａ）（ｂ）に示す状態（バージョン「１．１」のプログラム９５の更新中の状態）において、バージョン「１．２」のプログラムブロック６０を受信した場合には、制御部１７は、プログラムブロック６０と共に受信したバージョン情報７０を基に、受信したプログラムブロック６０がプログラムメモリ１５に既に格納されているプログラムよりも新しいバージョンのプログラムを構成するものであると判断する。従って、この場合には、制御部１７は、途中まで進行しているバージョン「１．１」のプログラムの更新を中止して、プログラムメモリ１５のアドレス「０ｘ３０００」〜「０ｘ４０００」の領域に既に格納しているバージョン「１．１」のプログラムブロック６０を消去し、そして、バージョン「１．２」のプログラムについての更新を開始して、受信したバージョン「１．２」のプログラムブロック６０をプログラムメモリ１５の該当する領域に格納すると共に、更新状況データ９４を「１．２」に書換える。
【００７４】
このように、制御部１７は、無線受信部１６により更新用プログラムを構成する任意のプログラムブロック６０を受信したとき、そのプログラムブロック６０が新しいバージョンのプログラムを構成するものであって、そのバージョンのいずれのプログラムブロック６０もプログラムメモリ１５に格納していなければ、そのバージョンのプログラムの更新を開始する。そして、制御部１７は、無線受信部１６により更新用プログラムを構成する任意のプログラムブロック６０を受信する都度、そのプログラムブロック６０が更新中のプログラムを構成するものであって、未だ格納していないブロックのものである場合に、その受信したプログラムブロック６０をプログラムメモリ１５に格納してゆく。このとき、制御部１７は、プログラムメモリ１５に既に格納されているプログラム（旧いバージョンのプログラム）を消去せずに、プログラムメモリ１５に既に格納されているプログラムの格納領域とは別の格納領域に、プログラムブロック６０を格納してゆく。そして、更新用プログラムを構成する全てのプログラムブロック６０についてプログラムメモリ１５に格納し終えると、そのバージョンのプログラムの更新を完了とする。
【００７５】
このような構成のナビゲーション装置１によれば、プログラム送信装置２から無線で送信される更新用プログラムを受信することにより、そのプログラムがプログラムメモリ１５に格納されて、プログラムが更新される。すなわち、無線で送信される更新用プログラムを受信するだけで、プログラムを更新することができ、ユーザがプログラムを更新するための作業をすることなく、自動的に、プログラムを更新することができる。従って、使い勝手が良く、利便性が優れている。
【００７６】
しかも、更新用プログラムは、複数のブロックに分割したプログラムブロック６０単位で送信され、プログラムブロック６０単位で受信されてプログラムメモリ１５に格納され、そして、更新用プログラムを構成する全てのプログラムブロック６０が受信されてプログラムメモリ１５に格納されると、プログラムの更新の完了となる。従って、更新用プログラムを構成する全てのプログラムブロック６０を１度に受信できなかった場合には、その受信できなかったプログラムブロック６０について、その後に受信できれば、プログラムが更新される。すなわち、更新用プログラムを構成する全てのプログラムブロック６０を１度に受信すること（更新用プログラムの受信が途中で途絶えないこと）がプログラムの更新に必要な条件とはならず、更新用プログラムを構成する全てのプログラムブロック６０を１度に受信することができなくても、プログラムの更新が可能となり、より確実に、プログラムを更新することができる。
【００７７】
また、プログラムブロック６０は、プログラムブロック６０と共に受信したブロックナンバー８０を基に、同じプログラムブロック６０がプログラムメモリ１５に未だに格納されていないと判断される場合に、プログラムメモリ１５に格納される。従って、同じプログラムブロック６０が無駄に何度もプログラムメモリ１５に格納されることがなく、プログラムメモリ１５のデータ書換処理を軽減することができ、プログラムメモリ１５の破損を抑えることができる。
【００７８】
また、プログラムブロック６０は、プログラムブロック６０と共に受信したバージョン情報７０を基に、プログラムメモリ１５に既に格納されているプログラムよりも新しいバージョンのプログラムを構成するものであると判断される場合に、プログラムメモリ１５に格納される。従って、同じバージョンの更新用プログラムが無駄に何度もプログラムメモリ１５に格納されることがなく、プログラムメモリ１５のデータ書換処理を軽減することができ、プログラムメモリ１５の破損を抑えることができる。
【００７９】
さらに、新しいバージョンのプログラムに更新された後も、旧いバージョンのプログラムが残される。従って、新しいバージョンのプログラムが起動しない場合に、旧いバージョンのプログラムに基いて、ナビゲーション装置１の各種動作を制御することができる。
【００８０】
なお、本発明は、上記実施形態の構成に限られず、種々の変形が可能である。例えば、プログラム送信装置は、複数の場所に設置されていてもよい。また、本発明は、ナビゲーション装置に限られず、プログラムに基いて動作する電子機器であれば、どのような電子機器にも適用可能である。
【図面の簡単な説明】
【００８１】
【図１】（ａ）は本発明の一実施形態に係るナビゲーション装置の概略構成を示す斜視図、（ｂ）は同ナビゲーション装置のディスプレイに表示される地図の例を示す図。
【図２】同ナビゲーション装置のプログラムの更新方法の概略を説明する図。
【図３】同ナビゲーション装置の電気的ブロック構成図。
【図４】（ａ）（ｂ）は本発明のプログラム送信装置による更新用プログラムの送信方法を示す図。
【図５】（ａ）（ｂ）は本発明のナビゲーション装置におけるプログラムの更新処理を説明する図。
【図６】（ａ）（ｂ）（ｃ）は同ナビゲーション装置におけるプログラムの更新処理を説明する図。
【図７】（ａ）（ｂ）（ｃ）は同ナビゲーション装置におけるプログラムの更新処理を説明する図。
【符号の説明】
【００８２】
１    ナビゲーション装置
２    プログラム送信装置
１１    ディスプレイ
１２    スピーカ
１３    タッチパネル
１４    位置・方向検出部
１５    プログラムメモリ
１６    無線受信部
１７    制御部
２１    地図画像
２２    地名画像
２３    矢印画像
２４    メニューボタン画像
３０    受信エリア
４１    ＧＰＳ受信機
４２    地磁気センサ
４３    ジャイロセンサ
５０、５０−１、５０−２、５０−３、・・・、５０−１０    送信データブロック
６０、６０−１、６０−２、６０−３、・・・、６０−１０    プログラムブロック
７０    バージョン情報
８０    ブロックナンバー
９１    バージョン「１．０」のプログラム
９２    開始アドレスデータ
９３    格納アドレスデータ
９４    更新状況データ
９５    バージョン「１．１」のプログラム
９６    バージョン「１．２」のプログラム
【図１】
0004992587.tif 000002
【図２】
0004992587.tif 000003
【図３】
0004992587.tif 000004
【図４】
0004992587.tif 000005
【図５】
0004992587.tif 000006
【図６】
0004992587.tif 000007
【図７】
0004992587.tif 000008