JP2017228077A - 電子機器、ファームウェアアップデート方法およびコンピュータプログラム - Google Patents

電子機器、ファームウェアアップデート方法およびコンピュータプログラム Download PDF

Info

Publication number
JP2017228077A
JP2017228077A JP2016123577A JP2016123577A JP2017228077A JP 2017228077 A JP2017228077 A JP 2017228077A JP 2016123577 A JP2016123577 A JP 2016123577A JP 2016123577 A JP2016123577 A JP 2016123577A JP 2017228077 A JP2017228077 A JP 2017228077A
Authority
JP
Japan
Prior art keywords
firmware
determination information
indicates
value
boot loader
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.)
Granted
Application number
JP2016123577A
Other languages
English (en)
Other versions
JP6750340B2 (ja
Inventor
孝司 榎並
Koji Enami
孝司 榎並
正明 野呂
Masaaki Noro
正明 野呂
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2016123577A priority Critical patent/JP6750340B2/ja
Publication of JP2017228077A publication Critical patent/JP2017228077A/ja
Application granted granted Critical
Publication of JP6750340B2 publication Critical patent/JP6750340B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Abstract

【課題】更新されたファームウェアに不具合があるときに、予備のファームウェアに巻き戻すこと。【解決手段】正常なファームウェアは、更新されたファームウェアをダウンロードして(S24)、ブートローダを起動する。ブートローダは、ストレージに記録されるFW判定情報が「不良」を示すときに正常なファームウェアを起動し、FW判定情報が「不良」を示していないときに更新されたファームウェアを起動する(S17)。更新されたファームウェアは、更新されたファームウェア自身の良否を判定し、更新されたファームウェアが不良であると判定されたときに(S20、No)、FW判定情報が「不良」を示すようにFW判定情報を更新して(S21)、ブートローダを起動する。【選択図】図8

Description

本発明の実施形態は、電子機器、ファームウェアアップデート方法およびコンピュータプログラムに関する。
従来、ワイヤレスセンサネットワークを構築するセンサノードは、人が立ち入り辛い場所に設置されることが多い。このため、このようなセンサノードのファームウェアのアップデートは、遠隔から無線経由で行われる。センサノードは、そのような状況下で、不良なファームウェアが送られると、動作を止めてしまうというトラブルを発生させることがあり、このようなトラブルの対応には多大なコストがかかってしまう。
ファームウェア更新時のトラブル対策として、eMMC(embedded Multi Media Card)等に複数のバンクを用意し、あるバンクのファームウェア更新時に、別のバンクに安定動作するファームウェアを残す仕組みが知られている。また、更新したファームウェアの起動に失敗した場合に、安定動作可能なファームウェアでの動作に戻る仕組みが知られている。
特開2014−142799号公報 特開2015−106813号公報
しかしながら、ファームウェアの起動自体は可能なものの、正常に動作しないという不具合が発生することがある。上記の従来技術では、更新されたファームウェアに不具合がある場合でも、このようにファームウェアが起動したときに、正常に動作する予備のファームウェアに巻き戻すことが困難であるという問題がある。このような問題は、センサノードに限らず、遠隔でファームウェアが更新される電子機器に発生することがある。
1つの側面では、アップデートされたファームウェアに不具合があるときに、予備のファームウェアに巻き戻す電子機器、ファームウェアアップデート方法およびコンピュータプログラムを提供することを目的とする。
第1の案では、電子機器は、制御部と、第1ファームウェアとブートローダとを記録する第1記憶装置と、判定情報を記録する第2記憶装置とを有する。第1ファームウェアは、制御部に起動されることにより、制御対象を制御し、さらに、外部装置からダウンロードされた第2ファームウェアを第1記憶装置に記録してブートローダを起動する。ブートローダは、制御部に起動されることにより、判定情報が第1値を示すときに第1ファームウェアを起動し、判定情報が第1値を示していないときに第2ファームウェアを起動する。第2ファームウェアは、制御部に起動されることにより、制御対象を制御し、さらに、第2ファームウェアの良否を判定する。第2ファームウェアは、第2ファームウェアが不良であると判定されたときに、判定情報が第1値を示すように判定情報を更新してブートローダを起動する。
本発明の1実施態様によれば、アップデートされたファームウェアに不具合があるときに、予備のファームウェアに適切に巻き戻すことができる。
図1は、実施形態にかかる電子機器が利用される無線センサネットワークを示すブロック図である。 図2は、実施例1のセンサノードを示すブロック図である。 図3は、eMMCに記録される情報を説明する説明図である。 図4は、ストレージに記録される情報を説明する説明図である。 図5は、ファームウェアを示すブロック図である。 図6は、複数のチェックポイント処理結果とFW判定情報とを説明する説明図である。 図7は、実施例1のセンサノードの動作を示す動作シーケンス図である。 図8は、実施例1のセンサノードの動作を示すフローチャートである。 図9は、起動バンク情報とバンク試行情報とFW判定情報と起動されるファームウェアの関係を説明する説明図である。 図10は、実施例2のセンサノードの動作を示す動作シーケンス図である。 図11は、実施例2のセンサノードの動作を示すフローチャートである。 図12は、実施例3のセンサノードの動作を示すフローチャートである。 図13は、実施例4のセンサノードの動作を示す動作シーケンス図である。 図14は、実施例4のセンサノードの動作を示すフローチャートである。 図15は、実施例5のセンサノードにサーバからダウンロードされるファームウェアを示す図である。 図16は、実施例5のセンサノードがファームウェアを受信する動作を示す動作シーケンス図である。 図17は、パケットの送受信が欠落することがあるときの動作を示す動作シーケンス図である。 図18は、1つのブロックの送信が完了した後の動作を示す動作シーケンス図である。 図19は、実施例6のセンサノードがファームウェアの1つのブロックを受信する動作を示す動作シーケンス図である。 図20は、実施例6のセンサノードがファームウェアの最終ブロックを受信する動作を示す動作シーケンス図である。
以下、図面を参照して、実施形態にかかる電子機器、ファームウェアアップデート方法およびコンピュータプログラムを説明する。実施形態において同一の機能を有する構成には同一の符号を付し、重複する説明は省略する。なお、以下の実施形態で説明する電子機器、ファームウェアアップデート方法およびコンピュータプログラムは、一例を示すに過ぎず、実施形態を限定するものではない。また、以下の各実施形態は、矛盾しない範囲内で適宜組みあわせてもよい。
<実施例1>
[無線センサネットワーク]
図1は、実施形態にかかる電子機器が利用される無線センサネットワークを示すブロック図である。無線センサネットワーク1は、図1に示されているように、サーバ2と、複数のセンサノード3−1〜3−N(N=2,3,4,…)とを有する。無線センサネットワーク1は、互いに異なる複数の位置にそれぞれ配置される複数の設備を遠隔監視することに利用され、たとえば、多数の下水道管の水位等をそれぞれ遠隔監視することに利用される。複数のセンサノード3−1〜3−Nのうちの任意のセンサノード3−i(i=1,2,3,…,N)は、実施形態にかかる電子機器から構成されている。複数のセンサノード3−1〜3−Nは、無線センサネットワーク1により遠隔監視される複数の監視対象にそれぞれ設置されている。サーバ2と複数のセンサノード3−1〜3−Nは、無線環境5を介して互いに通信可能に接続されている。すなわち、センサノード3−iは、サーバ2に十分に近い領域に配置されているときに、無線通信を介してサーバ2と直接に通信する。センサノード3−iは、サーバ2と直接に無線通信することが困難であるときに、複数のセンサノード3−1〜3−Nのうちのサーバ2と無線通信できるセンサノード3−j(j=1,2,3,…,N;j≠i)と通信することにより、サーバ2と間接的に通信する。センサノード3−iは、さらに、サーバ2と直接に通信することが困難であるセンサノード3−k(k=1,2,3,…,N;k≠i;k≠j)と無線通信することにより、センサノード3−kとサーバ2との通信を中継する。
[サーバ]
サーバ2は、センサノード3−iと無線通信することにより、センサノード3−iにより測定された複数の測定値をセンサノード3−iから収集する。サーバ2は、さらに、更新された新しいファームウェアを複数のセンサノード3−1〜3−Nにインストールするときに、制御情報であるファームウェア更新要求を複数のセンサノード3−1〜3−Nに配信する。サーバ2は、FW(FirmWare:ファームウェア)更新要求に対するACK(ACknowledgement:肯定応答)がセンサノード3−iから返信されたときに、無線通信を介して、センサノード3−iにその新しいファームウェアを送信する。なお、サーバ2は、同様に動作する他の外部装置に置換されてもよい。その外部装置としては、ゲートウェイ(GW:GateWay)が例示される。
[実施例1のセンサノード]
図2は、実施例1のセンサノードを示すブロック図である。センサノード3−iは、図2に示されているように、RF通信部11(Radio Frequency)と複数のセンサ12−1〜12−M(M=2,3,4,…)とMCU14(Micro Control Unit)とを備えている。RF通信部11は、MCU14に情報伝達可能に接続されている。RF通信部11は、MCU14に制御されることにより、電波を介してサーバ2と通信し、電波を介して複数のセンサノード3−1〜3−Nのうちのセンサノード3−iと異なる他のセンサノードと通信する。複数のセンサ12−1〜12−Mは、それぞれ、MCU14に情報伝達可能に接続されている。複数のセンサ12−1〜12−Mのうちの任意のセンサは、MCU14に制御されることにより、測定値を測定する。その測定される測定値としては、センサノード3−iが設置される設備に関するものであり、たとえば、下水道管の水位が例示される。
センサノード3−iは、さらに、ストレージ15とウォッチドッグタイマ16とカレンダータイマ17とを備えている。ストレージ15は、フラッシュメモリから形成されている。ストレージ15は、MCU14に制御されることにより、MCU14により取り扱われる情報を記録する。なお、ストレージ15は、フラッシュメモリと異なる他の記憶装置に置換されてもよい。その記憶装置としては、ハードディスク、光ディスク、データを書き換え可能な半導体メモリが例示される。半導体メモリとしては、SSD(Solid State Drive)、RAM(Random Access Memory)、NVSRAM(Non Volatile Static Random Access Memory)などが例示される。
ウォッチドッグタイマ16は、MCU14に情報伝達可能に接続されている。ウォッチドッグタイマ16は、MCU14により設定された時刻から所定の期間経過した後にタイムアウトする。ウォッチドッグタイマ16は、タイムアウトしたときに、タイムアウトしたことをMCU14に伝達することにより、MCU14をリブートさせる。ウォッチドッグタイマ16は、MCU14により解除されることにより、MCU14により設定された時刻から所定の期間経過した後にタイムアウトしないで、MCU14をリブートさせない。
カレンダータイマ17は、MCU14に情報伝達可能に接続されている。カレンダータイマ17は、MCU14に制御されることにより、現在時刻をMCU14に伝達する。
MCU14は、eMMC19を有している。eMMC19は、フラッシュメモリから形成され、センサノード3−iにインストールされるコンピュータプログラムを記録している。MCU14は、そのコンピュータプログラムが起動されることにより、RF通信部11と複数のセンサ12−1〜12−Mとストレージ15とウォッチドッグタイマ16とカレンダータイマ17とを制御する。
センサノード3−iは、さらに、図示されていない電池を備えている。RF通信部11と複数のセンサ12−1〜12−MとMCU14とストレージ15とウォッチドッグタイマ16とカレンダータイマ17とは、その電池から供給される電力を用いて動作する。
RF通信部11とMCU14とストレージ15とウォッチドッグタイマ16とカレンダータイマ17とは、ワンチップで形成されている。なお、これらは、複数のチップから形成されてもよい。
なお、eMMC19は、他の記憶装置に置換されてもよい。その記憶装置としては、データを書き換え可能な半導体メモリが例示され、SSD、RAM、NVSRAMが例示される。さらに、eMMC19は、MCU14の内部に設けられているが、MCU14と別個に設けられていてもよい。
なお、MCU14は、他の制御部に置換されてもよい。その制御部としては、電子回路や集積回路が例示される。その電子回路としては、CPU(Central Processing Unit)が例示される。その集積回路としては、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)が例示される。
[eMMCに記録される情報]
図3は、eMMCに記録される情報を説明する説明図である。eMMC19は、図3に示されているように、複数のメモリバンクに分割されている。eMMC19は、複数のメモリバンクにブートローダ21と複数のファームウェア22−1〜22−K(K=2,3,4,…)とをそれぞれ記録している。たとえば、ブートローダ21は、複数のメモリバンクのうちのアドレスが0から始まる1つのメモリバンクに記録されている。複数のファームウェア22−1〜22−Kのうちの1つのファームウェア22−A(A=1,2,3,…,K)は、複数のメモリバンクのうちのアドレスがaから始まる1つのメモリバンクに記録されている。複数のファームウェア22−1〜22−Kのうちの他のファームウェア22−B(B=1,2,3,…,K;A≠B)は、複数のメモリバンクのうちのアドレスがbから始まる1つのメモリバンクに記録されている。
[ストレージに記録される情報]
図4は、ストレージに記録される情報を説明する説明図である。ストレージ15は、図4に示されているように、起動バンク情報25とバンク試行情報26と複数のチェックポイント処理結果27−1〜27−X(X=2,3,4,…)とFW判定情報28とを記録している。起動バンク情報25は、eMMC19に記録される複数のファームウェア22−1〜22−Kから選択された1つのファームウェアを示している。具体的には、起動バンク情報25は、eMMC19の複数のメモリバンクのうちのその選択されたファームウェアが記録された1つのメモリバンクの識別子を示している。なお、起動バンク情報25は、メモリバンクの識別子と異なる情報を示すことにより、その選択されたファームウェアを示してもよい。起動バンク情報25が示す情報としては、選択されたファームウェアのプログラムカウンタ、選択されたファームウェアの更新時刻、選択されたファームウェアのリビジョン番号が例示される。
バンク試行情報26は、起動バンク情報25が示すファームウェアが1度起動しようとしたかどうかを示し、「○」または「×」を示している。すなわち、バンク試行情報26は、「○」を示しているときに、起動バンク情報25が示すファームウェアが1度起動されたことを示している。バンク試行情報26は、「×」を示しているときに、起動バンク情報25が示すファームウェアが1度も起動されていないことを示している。複数のチェックポイント処理結果27−1〜27−Xのうちの任意のチェックポイント処理結果27−x(x=1,2,3,…,X)は、「未定」または「正常」または「不良」を示している。FW判定情報28は、「未定」または「正常」または「不良」を示している。
[ファームウェア]
図5は、ファームウェアを示すブロック図である。ファームウェア22−Aは、図5に示されているように、MCU14に複数の機能をそれぞれ実現させるための複数のコンピュータプログラムから形成されている。その複数の機能は、通常動作部31とアップデート部32と複数のチェックポイント処理部33−1〜33−XとFW判定情報更新部34とを含んでいる。
通常動作部31は、複数のセンサ12−1〜12−Mを制御することにより、複数のセンサ12−1〜12−Mにより複数の測定値をそれぞれ測定する。通常動作部31は、さらに、RF通信部11を制御することにより、無線環境5を介して、複数のセンサ12−1〜12−Mによりそれぞれ測定された複数の測定値をサーバ2に送信する。
アップデート部32は、RF通信部11を介して、サーバ2からFW更新要求を受信する。アップデート部32は、サーバ2からFW更新要求を受信したときに、RF通信部11を介して、更新されたファームウェア22−Bをサーバ2からダウンロードする。アップデート部32は、さらに、eMMC19を制御することにより、ダウンロードされたファームウェア22−BをeMMC19の所定のバンクメモリに記録する。所定のバンクメモリは、eMMC19の複数のバンクメモリのうちの起動されているファームウェア22−Aが記録されているバンクメモリと異なる他のバンクメモリである。
アップデート部32は、ダウンロードされたファームウェア22−BがeMMC19に記録された後に、ストレージ15を制御することにより、起動バンク情報25とバンク試行情報26とFW判定情報28とを更新する。すなわち、アップデート部32は、そのダウンロードされたファームウェア22−Bを起動バンク情報25が示すように、起動バンク情報25を更新する。アップデート部32は、バンク試行情報26が「×」を示すように、バンク試行情報26を更新する。アップデート部32は、FW判定情報28が「未定」を示すように、FW判定情報28を更新する。アップデート部32は、さらに、起動バンク情報25とバンク試行情報26とFW判定情報28とが更新された後に、リブートし、ブートローダ21を起動し、制御をブートローダ21に移す。
複数のチェックポイント処理部33−1〜33−Xは、ストレージ15に記録される複数のチェックポイント処理結果27−1〜27−Xに対応している。複数のチェックポイント処理部33−1〜33−Xのうちの任意のチェックポイント処理部33−xは、ストレージ15を制御することにより、FW判定情報28を取得する。チェックポイント処理部33−xは、FW判定情報28が「正常」を示していないときに、ファームウェア22−A(特に、通常動作部31)の良否を判定する。このとき、複数のチェックポイント処理部33−1〜33−Xは、互いに異なる複数の観点からファームウェア22−Aの良否をそれぞれ判定する。
チェックポイント処理部33−xは、ストレージ15を制御することにより、判定された結果に基づいて複数のチェックポイント処理結果27−1〜27−Xのうちのチェックポイント処理部33−xに対応するチェックポイント処理結果27−xを更新する。すなわち、チェックポイント処理部33−xは、ファームウェア22−Aが正常であると判定されたときに、チェックポイント処理結果27−xが「正常」を示すようにチェックポイント処理結果27−xを更新する。チェックポイント処理部33−xは、ファームウェア22−Aが不良であると判定されたときに、チェックポイント処理結果27−xが「不良」を示すようにチェックポイント処理結果27−xを更新する。チェックポイント処理部33−xは、ファームウェア22−Aが正常か不良かを判定していないときに、チェックポイント処理結果27−xが「未定」を示すようにチェックポイント処理結果27−xを更新する。
FW判定情報更新部34は、ストレージ15を制御することにより、複数のチェックポイント処理結果27−1〜27−Xに基づいてFW判定情報28を更新する。すなわち、FW判定情報更新部34は、複数のチェックポイント処理結果27−1〜27−Xの全部が「正常」を示しているときに、FW判定情報28が「正常」を示すようにFW判定情報28を更新する。FW判定情報更新部34は、複数のチェックポイント処理結果27−1〜27−Xのいずれかが「不良」を示しているときに、FW判定情報28が「不良」を示すようにFW判定情報28を更新する。FW判定情報更新部34は、複数のチェックポイント処理結果27−1〜27−Xの全部が「不良」を示していないで、いずれかが「未定」を示しているときに、FW判定情報28が「未定」を示すようにFW判定情報28を更新する。FW判定情報更新部34は、さらに、制御をブートローダ21に移す。
図6は、複数のチェックポイント処理結果とFW判定情報とを説明する説明図である。複数のチェックポイント処理部33−1〜33−XによりバンクAのファームウェアの良否が判定された結果、バンクAのファームウェアに対する複数のチェックポイント処理結果27−1〜27−Xは、図6に示されているように、全部が「正常」を示している。このとき、バンクAのファームウェアに対するFW判定情報28は、バンクAのファームウェアに対する複数のチェックポイント処理結果27−1〜27−Xの全部が「正常」を示しているために、「正常」を示すように更新される。
複数のチェックポイント処理部33−1〜33−XによりバンクBのファームウェアの良否が判定された結果、バンクBのファームウェアに対する複数のチェックポイント処理結果27−1〜27−Xは、「正常」「不良」「未定」をそれぞれ示している。このとき、バンクBのファームウェアに対するFW判定情報28は、バンクBのファームウェアに対する複数のチェックポイント処理結果27−1〜27−Xの1つが「不良」を示しているために、「不良」を示すように更新される。
複数のチェックポイント処理部33−1〜33−XによりバンクCのファームウェアの良否が判定された結果、バンクCのファームウェアに対する複数のチェックポイント処理結果27−1〜27−Xは、「正常」「未定」「正常」をそれぞれ示している。このとき、バンクCのファームウェアに対するFW判定情報28は、バンクCのファームウェアに対する複数のチェックポイント処理結果27−1〜27−Xの全部が「不良」を示さないで、1つが「未定」を示しているために、「未定」を示すように更新される。
[ブートローダ]
ブートローダ21は、センサノード3−iが起動されることにより起動され、または、複数のファームウェア22−1〜22−KによりMCU14がリブートされることにより起動される。ブートローダ21は、起動されると、ストレージ15に記録される起動バンク情報25とバンク試行情報26とFW判定情報28とに基づいて複数のファームウェア22−1〜22−Kから1つのファームウェアを選択する。ブートローダ21は、さらに、その選択されたファームウェアを起動する。さらに、ブートローダ21は、起動バンク情報25が示すファームウェアを起動する場合で、バンク試行情報26が「×」を示すときに、ストレージ15を制御することにより、「○」を示すようにバンク試行情報26を更新する。
[実施例1のセンサノードの動作]
図7は、実施例1のセンサノードの動作を示す動作シーケンス図である。センサノード3−iのファームウェア22−Aは、図7に示されているように、センサノード3−iが新しいファームウェア22−Bをサーバ2から受信すると(S1)、ファームウェア22−BをeMMC19の所定のバンクメモリに記録する。ファームウェア22−Aは、新しいファームウェア22−BがeMMC19に記録されると、ストレージ15を制御することにより、起動バンク情報25がファームウェア22−Bを示すように、起動バンク情報25を更新する。ファームウェア22−Aは、さらに、ストレージ15を制御することにより、バンク試行情報26が「×」を示すように、バンク試行情報26を更新する。ファームウェア22−Aは、さらに、ストレージ15を制御することにより、FW判定情報28が「未定」を示すように、FW判定情報28を更新する(S2)。ファームウェア22−Aは、起動バンク情報25とバンク試行情報26とFW判定情報28とを更新した後に、リブートすることにより制御をブートローダ21に移す(S3)。
ブートローダ21は、起動されると、ストレージ15を制御することにより、起動バンク情報25とバンク試行情報26とFW判定情報28とをストレージ15から取得する(S4)。ブートローダ21は、起動バンク情報25とバンク試行情報26とFW判定情報28とに基づいて複数のファームウェア22−1〜22−Kからファームウェア22−Bを選択する(S5)。ブートローダ21は、ストレージ15を制御することにより、バンク試行情報26が「○」を示すように、バンク試行情報26を更新する(S6)。ブートローダ21は、バンク試行情報26が更新された後に、S5で選択されたファームウェア22−Bを起動することにより、ファームウェア22−Bに制御を移す(S7)。
ファームウェア22−Bは、起動されると、通常の動作を実行し、すなわち、複数のセンサ12−1〜12−Mを制御することにより、複数の測定値を測定し、RF通信部11を制御することにより、その測定された複数の測定値をサーバ2に送信する。ファームウェア22−Bは、さらに、ファームウェア22−B自身の良否を判定する(S8)。ファームウェア22−Bは、ファームウェア22−Bの良否を判定した後に、ストレージ15を制御することにより、FW判定情報28が「正常」または「不良」を示すように、FW判定情報28を更新する(S9)。
このように、センサノード3−iは、ブートローダ21とファームウェア22−Aとファームウェア22−Bとのうちの1つのコンピュータプログラムが実行され、これらのうちの2つのコンピュータプログラムが並行して実行されることがない。
図8は、実施例1のセンサノードの動作を示すフローチャートである。センサノード3−iは、図8に示されているように、まず、ブートローダ21が起動される。センサノード3−iのMCU14は、ブートローダ21が起動されると、ストレージ15を制御することにより、起動バンク情報25とバンク試行情報26とFW判定情報28とをストレージ15から取得する(S11)。MCU14は、FW判定情報28が「正常」を示していないで(S12、No)、FW判定情報28が「不良」を示しているときに(S13、Yes)、以前に正常に動作していたファームウェア22−Bを選択する(S14)。MCU14は、FW判定情報28が「未定」を示している場合で(S13、No)、バンク試行情報26が「○」を示しているときに(S15、Yes)、以前に正常に動作していたファームウェア22−Aを選択する(S14)。S14で選択されたファームウェア22−Bは、起動バンク情報25が示すファームウェア22−Aと異なっている。MCU14は、FW判定情報28が「未定」を示している場合で(S13、No)、バンク試行情報26が「×」を示しているときに(S15、No)、バンク試行情報26が「○」を示すようにバンク試行情報26を更新する(S16)。MCU14は、S16が実行されたときに、または、FW判定情報28が「正常」を示しているときに(S12、Yes)、起動バンク情報25が示すファームウェア22−Aを起動する(S17)。MCU14は、S14が実行されたときに、S14で選択されたファームウェア22−Bを起動する(S17)。
MCU14は、ファームウェア22−A、22−Bが起動されると、まず、通常動作を実行する(S18)。すなわち、MCU14は、複数のセンサ12−1〜12−Mを制御することにより、複数の測定値をそれぞれ測定する。MCU14は、さらに、RF通信部11を制御することにより、その測定された複数の測定値をサーバ2に送信する。
MCU14は、通常動作が実行されると、複数のチェックポイント処理結果27−1〜27−Xに対応する複数のチェックポイント処理を実行する。その複数のチェックポイント処理のうちのチェックポイント処理結果27−xに対応するチェックポイント処理では、MCU14は、まず、FW判定情報28をストレージ15から取得する(S19)。MCU14は、FW判定情報28が「正常」以外を示しているときに、すなわち、FW判定情報28が「未定」を示しているときに(S19、No)、起動されているファームウェアの良否を1つの観点から判定する(S20)。MCU14は、ストレージ15を制御することにより、その判定された良否をチェックポイント処理結果27−xが示すように、チェックポイント処理結果27−xを更新する。すなわち、MCU14は、ファームウェア22−Aが正常であると判定されたときに、チェックポイント処理結果27−xが「正常」を示すようにチェックポイント処理結果27−xを更新する。チェックポイント処理部33−xは、ファームウェア22−Aが不良であると判定されたときに、チェックポイント処理結果27−xが「不良」を示すようにチェックポイント処理結果27−xを更新する。
MCU14は、複数のチェックポイント処理のいずれかで、起動されているファームウェアが不良であると判定されたときに(S20、No)、FW判定情報28が「不良」を示すようにFW判定情報28を更新する(S21)。MCU14は、FW判定情報28が「不良」を示すようにFW判定情報28が更新された後に、リブートすることにより、ブートローダ21を起動し、制御をブートローダ21に移す。
MCU14は、複数のチェックポイント処理の全部で、起動されているファームウェアが正常であると判定されたときに(S20、Yes)、ストレージ15を制御することにより、FW判定情報28が「正常」を示すようにFW判定情報28を更新する(S22)。
MCU14は、FW判定情報28が「正常」を示しているときに(S19、Yes)、または、S22でFW判定情報28が更新されたときに、RF通信部11を制御することにより、サーバ2からFW更新要求を受信しているかどうかを検出する(S23)。MCU14は、さらに、S20で良否の判定が保留されたときにも(S20、保留)、RF通信部11を制御することにより、サーバ2からFW更新要求を受信しているかどうかを検出する(S23)。
MCU14は、サーバ2からFW更新要求を受信していないときに(S23、No)、S18〜S23の処理を繰り返し実行する。
MCU14は、サーバ2からFW更新要求を受信しているときに(S23、Yes)、RF通信部11を制御することにより、サーバ2から更新されたファームウェアをダウンロードする。MCU14は、次いで、eMMC19を制御することにより、そのダウンロードされたファームウェアを、eMMC19の複数のメモリバンクのうちの起動されているファームウェアが記録されているメモリバンクと異なる他のメモリバンクに記録する(S24)。
MCU14は、ストレージ15を制御することにより、そのダウンロードされたファームウェアを起動バンク情報25が示すように起動バンク情報25を更新する。MCU14は、さらに、ストレージ15を制御することにより、FW判定情報28が「未定」を示すようにFW判定情報28を更新し、バンク試行情報26が「×」を示すようにバンク試行情報26を更新する(S25)。MCU14は、起動バンク情報25とバンク試行情報26とFW判定情報28とが更新された後に、リブートすることにより、ブートローダ21を起動し、ブートローダ21に制御を移す。
図9は、起動バンク情報とバンク試行情報とFW判定情報と起動されるファームウェアの関係を説明する説明図である。図9では、ファームウェア22−Aが「A」と記載され、ファームウェア22−Bが「B」と記載され、ブートローダ21により選択されるファームウェアが「選択バンク」と記載されている。ブートローダ21は、図9に示されているように、起動バンク情報25がファームウェア22−Aを示し、バンク試行情報26が「×」を示し、FW判定情報28が「未定」を示すときに、S11〜S17を実行することにより、ファームウェア22−Aを起動する。ブートローダ21は、起動バンク情報25がファームウェア22−Aを示し、バンク試行情報26が「○」を示し、FW判定情報28が「未定」を示すときに、ファームウェア22−Bを起動する。ブートローダ21は、起動バンク情報25がファームウェア22−Aを示し、バンク試行情報26が「○」または「×」を示し、FW判定情報28が「正常」を示すときに、ファームウェア22−Aを起動する。ブートローダ21は、起動バンク情報25がファームウェア22−Aを示し、バンク試行情報26が「○」または「×」を示し、FW判定情報28が「不良」を示すときに、ファームウェア22−Bを起動する。
ブートローダ21は、起動バンク情報25がファームウェア22−Bを示し、バンク試行情報26が「×」を示し、FW判定情報28が「未定」を示すときに、ファームウェア22−Bを起動する。ブートローダ21は、起動バンク情報25がファームウェア22−Bを示し、バンク試行情報26が「○」を示し、FW判定情報28が「未定」を示すときに、ファームウェア22−Aを起動する。ブートローダ21は、起動バンク情報25がファームウェア22−Bを示し、バンク試行情報26が「○」または「×」を示し、FW判定情報28が「正常」を示すときに、ファームウェア22−Bを起動する。ブートローダ21は、起動バンク情報25がファームウェア22−Bを示し、バンク試行情報26が「○」または「×」を示し、FW判定情報28が「不良」を示すときに、ファームウェア22−Aを起動する。
[実施例1のセンサノードの効果]
実施形態の電子機器としてのセンサノード3−iは、MCU14と、ファームウェア22−Aとブートローダ21とを記録するeMMC19と、FW判定情報28を記録するストレージ15とを有している。ファームウェア22−Aは、MCU14に起動されることにより、複数のセンサ12−1〜12−Mを制御し、さらに、サーバ2からダウンロードされたファームウェア22−BをeMMC19に記録してブートローダ21を起動する。ブートローダ21は、MCU14に起動されることにより、FW判定情報28が「不良」を示すときにファームウェア22−Aを起動し、FW判定情報28が「不良」を示していないときにファームウェア22−Bを起動する。ファームウェア22−Bは、MCU14に起動されることにより、複数のセンサ12−1〜12−Mを制御し、さらに、ファームウェア22−Bの良否を判定する。ファームウェア22−Bは、ファームウェア22−Bが不良であると判定されたときに、FW判定情報28が「不良」を示すようにFW判定情報28を更新してブートローダ21を起動する。
このようなセンサノード3−iは、更新された新しいファームウェア22−Bが起動することができる場合でも、ファームウェア22−Bに不具合があるときに、正常であるファームウェア22−Aを自動的に起動させることができる。このため、このようなセンサノード3−iは、不具合がファームウェア22−Bにある場合でも、作業者が出向いてセンサノード3−iを操作する必要がなく、メンテナンスコストを低減することができる。このようなセンサノード3−iは、さらに、ファームウェア22−Bの良否の判定をファームウェア22−Bにより実行されているために、ファームウェア22−Bの良否を判定する条件または判定ルーチンを変更することができる。
また、ファームウェア22−Bは、ファームウェア22−Bが正常であると判定されたときに、FW判定情報28が「正常」を示すようにFW判定情報28を更新する。ファームウェア22−Bは、ブートローダ21により再度起動された場合で、FW判定情報28が「正常」を示すときに、ファームウェア22−Bの良否を判定しない。このようなセンサノード3−iは、ファームウェア22−Bが正常であると1度判定されたときに、ファームウェア22−Bの良否を判定しないことにより、MCU14の負担を軽減することができる。このようなセンサノード3−iは、MCU14の負担を軽減することにより、消費電力を低減し、電池の交換頻度を低減し、メンテナンスのコストを低減することができる。
ところで、実施例1では、ファームウェア22−Bは、ファームウェア22−Bが正常であると判定されたときに、ファームウェア22−Bの良否を判定していないが、ファームウェア22−Bの良否を判定してもよい。この場合も、センサノード3−iは、ファームウェア22−Bに不具合があるときに、正常であるファームウェア22−Aに制御を巻き戻すことができる。
また、ファームウェア22−Bは、複数の観点で良否をそれぞれ判定する。ファームウェア22−Bは、その複数の観点のいずれか1つが不良であると判定されたときにFW判定情報28が「不良」を示すようにFW判定情報28を更新する。ファームウェア22−Bは、その複数の観点の全部が正常であると判定されたときにFW判定情報28が「正常」を示すようにFW判定情報28を更新する。このようなセンサノード3−iは、複数の観点でファームウェア22−Bの良否を判定することにより、ファームウェア22−Bの良否を適切に判定することができる。このようなセンサノード3−iは、ファームウェア22−Bの良否を適切に判定することにより、不要にファームウェア22−Aが起動されることを防止し、ファームウェア22−Aに制御を適切に巻き戻すことができる。
ところで、実施例1では、ファームウェア22−Bは、複数の観点でファームウェア22−Bの良否をそれぞれ判定しているが、1つの観点でファームウェア22−Bの良否を判定してもよい。この場合も、センサノード3−iは、ファームウェア22−Bに不具合があるときに、正常であるファームウェア22−Aに制御を巻き戻すことができる。また、センサノード3−iは、1つの観点でファームウェア22−Bの良否を判定することにより、その判定結果をそのままFW判定情報28に代入することができ、複数のチェックポイント処理結果27−1〜27−Xを記録することを省略することができる。
<実施例2>
センサノード3−iは、さらに、ウォッチドッグタイマ16がタイムアウトするときに、ブートローダ21を起動してもよい。このとき、ファームウェア22−Aのアップデート部32は、新しいファームウェアをダウンロードしたときに、ウォッチドッグタイマ16が設定されるように、ウォッチドッグタイマ16を制御する。さらに、複数のチェックポイント処理部33−1〜33−Xは、ウォッチドッグタイマ16に関する他のチェックポイント処理部が追加されている。そのチェックポイント処理部は、ウォッチドッグタイマ16が解除されるように、ウォッチドッグタイマ16を制御する。
[実施例2のセンサノードの動作]
図10は、実施例2のセンサノードの動作を示す動作シーケンス図である。センサノード3−iのファームウェア22−Aは、図10に示されているように、センサノード3−iが新しいファームウェア22−Bをサーバ2から受信すると(S31)、ファームウェア22−BをeMMC19の所定のバンクメモリに記録する。ファームウェア22−Aは、ストレージ15を制御することにより、起動バンク情報25がファームウェア22−Bを示すように、起動バンク情報25を更新する。ファームウェア22−Aは、さらに、ストレージ15を制御することにより、バンク試行情報26が「×」を示すように、バンク試行情報26を更新する。ファームウェア22−Aは、さらに、ストレージ15を制御することにより、FW判定情報28が「未定」を示すように、FW判定情報28を更新する(S32)。ファームウェア22−Aは、起動バンク情報25とバンク試行情報26とFW判定情報28とを更新した後に、ウォッチドッグタイマ16を制御することにより、ウォッチドッグタイマ16を設定する(S33)。ファームウェア22−Aは、ウォッチドッグタイマ16が設定された後に、リブートすることにより制御をブートローダ21に移す(S34)。
ブートローダ21は、起動されると、起動バンク情報25とバンク試行情報26とFW判定情報28とをストレージ15から取得する(S35)。ブートローダ21は、起動バンク情報25とバンク試行情報26とFW判定情報28とに基づいて複数のファームウェア22−1〜22−Kからファームウェア22−Bを選択する(S36)。ブートローダ21は、ストレージ15を制御することにより、バンク試行情報26が「○」を示すように、バンク試行情報26を更新する(S37)。ブートローダ21は、バンク試行情報26が更新された後に、その選択されたファームウェア22−Bを起動することにより、ファームウェア22−Bに制御を移す(S38)。
ファームウェア22−Bは、起動されると、通常の動作を実行し、さらに、ファームウェア22−B自身の良否を判定する(S39)。ファームウェア22−Bは、ファームウェア22−Bの良否を判定した後に、ストレージ15を制御することにより、FW判定情報28が「正常」または「不良」を示すように、FW判定情報28を更新する(S40)。
ウォッチドッグタイマ16は、設定された時刻から所定の期間経過した時刻までの期間に、ファームウェア22−Bにより解除されなかったときに、タイムアウトする。ウォッチドッグタイマ16は、タイムアウトしたときに、タイムアウトしたことをMCU14に伝達することにより、MCU14をリブートさせる(S41)。ブートローダ21は、MCU14がリブートされることにより起動される。ブートローダ21は、ウォッチドッグタイマ16がMCU14をリブートすることにより起動されたときに、再度S35以降の処理を実行する。
図11は、実施例2のセンサノードの動作を示すフローチャートである。センサノード3−iは、図11に示されているように、ブートローダ21が起動されると、既述の図8のフローと同様にして、起動バンク情報25とバンク試行情報26とFW判定情報28とに基づいて選択されたファームウェアを起動する。
MCU14は、ファームウェア22−Aまたはファームウェア22−Bが起動されると、まず、通常動作を実行する(S18)。MCU14は、通常動作が実行されると、既述の図8のフローと同様にして、複数のチェックポイント処理部33−1〜33−Xに対応する複数のチェックポイント処理を実行する。ウォッチドッグタイマ16に関するチェックポイント処理では、MCU14は、まず、FW判定情報28をストレージ15から取得する(S51)。MCU14は、FW判定情報28が「未定」を示しているときに(S51、No)、ウォッチドッグタイマ16を制御することにより、ウォッチドッグタイマ16を解除する(S52)。MCU14は、ウォッチドッグタイマ16を解除した後に、ストレージ15を制御することにより、この追加されたチェックポイント処理に対応するチェックポイント処理結果が「正常」を示すように複数のチェックポイント処理結果27−1〜27−Xを更新する。MCU14は、複数のチェックポイント処理の全部で、起動されているファームウェアが正常であると判定されたときに、ストレージ15を制御することにより、FW判定情報28が「正常」を示すようにFW判定情報28を更新する(S53)。
MCU14は、複数のチェックポイント処理が実行された後に、RF通信部11を制御することにより、サーバ2からFW更新要求を受信しているかどうかを判定する(S23)。MCU14は、サーバ2からFW更新要求を受信していないときに(S23、No)、S18〜S23の処理を繰り返し実行する。
MCU14は、サーバ2からFW更新要求を受信しているときに(S23、Yes)、サーバ2から更新されたファームウェアをダウンロードし、そのダウンロードされたファームウェアを、eMMC19の所定のメモリバンクに記録する(S24)。MCU14は、ストレージ15を制御することにより、そのダウンロードされたファームウェアを起動バンク情報25が示すように起動バンク情報25を更新する。MCU14は、さらに、ストレージ15を制御することにより、FW判定情報28が「未定」を示すようにFW判定情報28を更新し、バンク試行情報26が「×」を示すようにバンク試行情報26を更新する(S25)。
MCU14は、起動バンク情報25とバンク試行情報26とFW判定情報28とが更新された後に、ウォッチドッグタイマ16を制御することにより、ウォッチドッグタイマ16を設定する(S54)。MCU14は、ウォッチドッグタイマ16を設定した後に、リブートすることにより、ブートローダ21を起動し、ブートローダ21に制御を移す。
ウォッチドッグタイマ16は、設定された時刻から所定の期間経過した時刻までの期間に、解除されなかったときに、タイムアウトする。ウォッチドッグタイマ16は、タイムアウトしたときに、タイムアウトしたことをMCU14に伝達することにより、MCU14をリブートさせ、ブートローダ21を起動させる(S55)。
[実施例2のセンサノードの効果]
実施例2のセンサノード3−iは、ファームウェア22−Bが起動されるときに設定されるウォッチドッグタイマ16をさらに備えている。ブートローダ21は、さらに、ウォッチドッグタイマ16がタイムアウトしたときに、MCU14に起動される。このようなセンサノード3−iは、ウォッチドッグタイマ16を備えていることにより、ファームウェア22−Bが起動しないなど、MCU14がフリーズした場合でも、そのトラブルから抜けることができる。このようなセンサノード3−iは、さらに、ファームウェア22−Bがフリーズしてファームウェア22−Bの良否を判定しない場合でも、正常であるファームウェア22−Aを自動的に起動させることができる。
また、実施例2では、ファームウェア22−Bは、ファームウェア22−Bが正常であると判定されたときに、ウォッチドッグタイマ16を解除する。このようなセンサノード3−iは、ファームウェア22−Bが正常であると判定されたときにウォッチドッグタイマ16を解除することにより、不要にリブートされることを防止することができる。
また、実施例2では、ストレージ15は、バンク試行情報26をさらに記録している。ファームウェア22−Aは、ファームウェア22−Bが起動される前に、FW判定情報28が「未定」を示すようにFW判定情報28を更新し、バンク試行情報26が「×」を示すようにバンク試行情報26を更新する。ブートローダ21は、FW判定情報28が「未定」を示す場合でバンク試行情報26が「×」を示すときに、バンク試行情報26が「○」を示すようにバンク試行情報26を更新してファームウェア22−Bを起動する。ブートローダ21は、さらに、FW判定情報28が「未定」を示す場合でバンク試行情報26が「○」を示すときに、ファームウェア22−Aを起動する。このようなセンサノード3−iは、バンク試行情報26をストレージ15に記録することにより、ウォッチドッグタイマ16によりリブートされた場合でも、正常であるファームウェア22−Aを起動させることができる。
<実施例3>
ところで、実施例2では、センサノード3−iは、バンク試行情報26をストレージ15に記録しているが、バンク試行情報26を記録することを省略してもよい。実施例3では、センサノード3−iは、バンク試行情報26を記録更新することが省略されている。このとき、ブートローダ21は、FW判定情報28が「未定」を示すときに、ストレージ15を制御することにより、FW判定情報28が「不良」を示すようにFW判定情報28が「未定」を更新する。
[実施例3のセンサノードの動作]
図12は、実施例3のセンサノードの動作を示すフローチャートである。センサノード3−iは、図12に示されているように、まず、ブートローダ21が起動される。センサノード3−iのMCU14は、ブートローダ21が起動されると、起動バンク情報25とFW判定情報28とをストレージ15から取得する(S61)。MCU14は、FW判定情報28が「正常」を示していないで(S62、No)、FW判定情報28が「不良」を示しているときに(S63、Yes)、以前に正常に動作していたファームウェア22−Bを選択する(S64)。このとき、その選択されたファームウェア22−Bは、起動バンク情報25が示すファームウェア22−Aと異なっている。MCU14は、FW判定情報28が「未定」を示しているときに(S63、No)、ストレージ15を制御することにより、FW判定情報28が「不良」を示すようにFW判定情報28を更新する(S65)。このとき、FW判定情報28が「不良」を示しているが、起動バンク情報25が示すファームウェアは良否が判定されておらず、すなわち、FW判定情報28は、「不良」に仮決めされている。MCU14は、S65が実行されたときに、または、FW判定情報28が「正常」を示しているときに(S62、Yes)、起動バンク情報25が示すファームウェア22−Aを起動する(S66)。
MCU14は、ファームウェア22−Aまたはファームウェア22−Bが起動されると、既述の図11のフローと同様にして、まず、通常動作を実行する(S18)。MCU14は、通常動作が実行されると、複数のチェックポイント処理部33−1〜33−Xに対応する複数のチェックポイント処理を実行する。ウォッチドッグタイマ16に関するチェックポイント処理では、MCU14は、まず、FW判定情報28をストレージ15から取得する(S51)。MCU14は、FW判定情報28が「不良」を示しているときに(S51、No)、ウォッチドッグタイマ16を制御することにより、ウォッチドッグタイマ16を解除する(S52)。MCU14は、ウォッチドッグタイマ16を解除した後に、ストレージ15を制御することにより、ウォッチドッグタイマ16に関するチェックポイント処理結果が「正常」を示すようにチェックポイント処理結果を更新する。MCU14は、複数のチェックポイント処理の全部で、起動されているファームウェアが正常であると判定されたときに、ストレージ15を制御することにより、FW判定情報28が「正常」を示すようにFW判定情報28を更新する(S53)。
MCU14は、複数のチェックポイント処理が実行された後に、RF通信部11を制御することにより、サーバ2からFW更新要求を受信しているかどうかを検出する(S23)。MCU14は、サーバ2からFW更新要求を受信していないときに(S23、No)、S18〜S23の処理を繰り返し実行する。
MCU14は、サーバ2からFW更新要求を受信しているときに(S23、Yes)、サーバ2から更新されたファームウェアをダウンロードし、そのダウンロードされたファームウェアを、eMMC19の所定のメモリバンクに記録する(S24)。MCU14は、ストレージ15を制御することにより、そのダウンロードされたファームウェアを起動バンク情報25が示すように起動バンク情報25を更新する。MCU14は、さらに、ストレージ15を制御することにより、FW判定情報28が「未定」を示すようにFW判定情報28を更新する(S67)。
MCU14は、起動バンク情報25とFW判定情報28とが更新された後に、ウォッチドッグタイマ16を制御することにより、ウォッチドッグタイマ16を設定する(S54)。MCU14は、ウォッチドッグタイマ16を設定した後に、リブートすることにより、ブートローダ21を起動し、ブートローダ21に制御を移す。
ウォッチドッグタイマ16は、設定された時刻から所定の期間経過した時刻までの期間に、解除されなかったときに、タイムアウトする。ウォッチドッグタイマ16は、タイムアウトしたときに、タイムアウトしたことをMCU14に伝達することにより、MCU14をリブートさせ、ブートローダ21を起動させる(S55)。
実施例3のセンサノード3−iは、実施例2のセンサノード3−iと同様にして、ファームウェア22−Bがフリーズする場合でも、正常であるファームウェア22−Aを自動的に起動させることができる。
<実施例4>
センサノード3−iは、さらに、ファームウェア22−Aが頻繁に再起動するときに、ブートローダ21を起動してもよい。このとき、ストレージ15は、さらに、更新完了時刻と起動回数とを記録している。ファームウェア22−Aのアップデート部32は、新しいファームウェアをダウンロードしたときに、その更新完了時刻と起動回数とを更新するように、ストレージ15を制御する。複数のチェックポイント処理部33−1〜33−Xは、起動回数に関する他のチェックポイント処理部が追加されている。そのチェックポイント処理部は、起動回数を更新するようにストレージ15を制御し、現在時刻を取得するようにカレンダータイマ17を制御する。そのチェックポイント処理部は、その更新完了時刻と起動回数と現在時刻とに基づいて算出されたファームウェア22−Aの再起動の頻度が所定の値より大きいときに、リブートすることにより、ブートローダ21を起動する。
[実施例4のセンサノードの動作]
図13は、実施例4のセンサノードの動作を示す動作シーケンス図である。センサノード3−iのファームウェア22−Aは、図13に示されているように、センサノード3−iが新しいファームウェア22−Bをサーバ2から受信すると(S71)、ファームウェア22−BをeMMC19の所定のバンクメモリに記録する。ファームウェア22−Aは、ストレージ15を制御することにより、起動バンク情報25がファームウェア22−Bを示すように、起動バンク情報25を更新する。ファームウェア22−Aは、ストレージ15を制御することにより、バンク試行情報26が「×」を示すように、バンク試行情報26を更新する。ファームウェア22−Aは、ストレージ15を制御することにより、FW判定情報28が「未定」を示すように、FW判定情報28を更新する。ファームウェア22−Aは、さらに、ストレージ15を制御することにより、起動回数が0を示すように起動回数を更新する(S72)。ファームウェア22−Aは、さらに、カレンダータイマ17を制御することにより、現在時刻を取得し、ストレージ15を制御することにより、その取得された現在時刻を更新完了時刻が示すように更新完了時刻を更新する(S73)。ファームウェア22−Aは、起動バンク情報25とバンク試行情報26とFW判定情報28と起動回数と更新完了時刻とを更新した後に、リブートすることにより制御をブートローダ21に移す(S74)。
ブートローダ21は、起動されると、起動バンク情報25とバンク試行情報26とFW判定情報28とをストレージ15から取得する(S75)。ブートローダ21は、起動バンク情報25とバンク試行情報26とFW判定情報28とに基づいて複数のファームウェア22−1〜22−Kからファームウェア22−Bを選択する(S76)。ブートローダ21は、ストレージ15を制御することにより、バンク試行情報26が「○」を示すように、バンク試行情報26を更新する(S77)。ブートローダ21は、バンク試行情報26が更新された後に、その選択されたファームウェア22−Bを起動することにより、ファームウェア22−Bに制御を移す(S78)。
ファームウェア22−Bは、起動されると、ストレージ15を制御することにより、更新完了時刻と起動回数とを取得する(S79)。ファームウェア22−Bは、さらに、カレンダータイマ17を制御することにより、現在時刻を取得する(S80)。ファームウェア22−Bは、ストレージ15を制御することにより、バンク試行情報26が「×」を示すようにバンク試行情報26を更新する。ファームウェア22−Bは、さらに、ストレージ15を制御することにより、起動回数を取得し、その取得された起動回数が示す値に1と加算した和を起動回数が示すように起動回数をインクリメントする(S81)。
ファームウェア22−Bは、通常の動作を実行し、さらに、ファームウェア22−B自身の良否を判定する(S82)。ファームウェア22−Bは、ファームウェア22−Bの良否を判定した後に、ストレージ15を制御することにより、FW判定情報28が「正常」または「不良」を示すように、FW判定情報28を更新する(S83)。
図14は、実施例4のセンサノードの動作を示すフローチャートである。センサノード3−iは、図14に示されているように、ブートローダ21が起動されると、既述の図8のフローと同様にして、起動バンク情報25とバンク試行情報26とFW判定情報28とに基づいて選択されたファームウェアを起動する。
MCU14は、ファームウェア22−Aまたはファームウェア22−Bが起動されると、まず、通常動作を実行する(S18)。MCU14は、通常動作が実行されると、既述の図8のフローと同様にして、複数のチェックポイント処理部33−1〜33−Xに対応する複数のチェックポイント処理を実行する。起動回数に関するチェックポイント処理では、MCU14は、まず、FW判定情報28をストレージ15から取得する(S91)。MCU14は、FW判定情報28が「未定」を示しているときに(S91、No)、ストレージ15を制御することにより、起動回数と更新完了時刻とを取得する。MCU14は、ストレージ15を制御することにより、その取得された起動回数が示す値に1を加算した和を起動回数が示すように、起動回数を更新する(S92)。MCU14は、その更新された起動回数が示す値が所定の値を超過しているときに(S93、Yes)、ストレージ15を制御することにより、FW判定情報28が「不良」を示すようにFW判定情報28を更新する(S94)。MCU14は、FW判定情報28が「不良」を示すようにFW判定情報28が更新された後に、リブートすることにより、ブートローダ21を起動し、制御をブートローダ21に移す。
MCU14は、その更新された起動回数が示す値が所定の値を超過していないときに(S93、No)、カレンダータイマ17を制御することにより、現在時刻を取得する。MCU14は、S92で取得した更新完了時刻から現在時刻までに所定の時間が経過しているときに(S95、Yes)、ストレージ15を制御することにより、対応するチェックポイント処理結果が「正常」を示すようにそのチェックポイント処理結果を更新する。MCU14は、複数のチェックポイント処理の全部で、起動されているファームウェアが正常であると判定されたときに、ストレージ15を制御することにより、FW判定情報28が「正常」を示すようにFW判定情報28を更新する(S96)。
MCU14は、S96でFW判定情報28が更新された後で、または、所定の時間が経過していないときに(S95、No)、RF通信部11を制御することにより、サーバ2からFW更新要求を受信しているかどうかを検出する(S23)。MCU14は、さらに、FW判定情報28が「正常」を示しているときに(S91、Yes)、RF通信部11を制御することにより、サーバ2からFW更新要求を受信しているかどうかを検出する(S23)。
MCU14は、サーバ2からFW更新要求を受信していないときに(S23、No)、S18〜S23の処理を繰り返し実行する。
MCU14は、サーバ2からFW更新要求を受信しているときに(S23、Yes)、RF通信部11を制御することにより、サーバ2から更新されたファームウェアをダウンロードする。MCU14は、次いで、eMMC19を制御することにより、そのダウンロードされたファームウェアを、eMMC19の複数のメモリバンクのうちの起動されているファームウェアが記録されているメモリバンクと異なる他のメモリバンクに記録する(S24)。
MCU14は、ストレージ15を制御することにより、そのダウンロードされたファームウェアを起動バンク情報25が示すように起動バンク情報25を更新する。MCU14は、さらに、ストレージ15を制御することにより、FW判定情報28が「未定」を示すようにFW判定情報28を更新し、バンク試行情報26が「×」を示すようにバンク試行情報26を更新する(S25)。MCU14は、起動バンク情報25とバンク試行情報26とFW判定情報28とが更新された後に、カレンダータイマ17を制御することにより、現在時刻を取得する。MCU14は、さらに、ストレージ15を制御することにより、起動回数が0を示すように起動回数を更新し、その取得された現在時刻を更新完了時刻が示すように更新完了時刻を更新する(S97)。MCU14は、起動回数と更新完了時刻とが更新された後に、リブートすることにより、ブートローダ21を起動し、ブートローダ21に制御を移す。
[実施例4のセンサノードの効果]
実施例4のセンサノード3−iは、カレンダータイマ17をさらに備えている。ストレージ15は、起動回数をさらに記録している。ファームウェア22−Bは、カレンダータイマ17を用いて導出される期間にファームウェア22−Bが起動される回数を起動回数が示すように起動回数を更新する。ファームウェア22−Bは、起動回数が所定の値より大きいときに、FW判定情報28が「不良」を示すようにFW判定情報28を更新してブートローダ21を起動する。このようなセンサノード3−iは、ファームウェア22−Bが頻繁に再起動する場合でも、正常であるファームウェア22−Aを自動的に起動させることができる。
また、実施例4では、ファームウェア22−Bは、その期間が経過したときにFW判定情報28が「正常」を示すようにFW判定情報28を更新し、FW判定情報28が「正常」を示すときに起動回数を更新しない。このようなセンサノード3−iは、ファームウェア22−Bが正常であると判定されたときに、起動回数を更新しないことにより、MCU14の負担を軽減することができる。
ところで、実施例4では、ファームウェア22−Bは、ファームウェア22−Bが再起動する頻度以外の観点についてもファームウェア22−Bの良否を判定しているが、その頻度のみに基づいてファームウェア22−Bの良否を判定してもよい。この場合も、センサノード3−iは、更新された新しいファームウェア22−Bが起動することができる場合でも、ファームウェア22−Bに不具合があるときに、正常であるファームウェア22−Aを自動的に起動させることができる。
<実施例5>
更新された新しいファームウェア22−Bは、複数のフラグメントに分割されてサーバ2からセンサノード3−iに送信されてもよい。図15は、実施例5のセンサノードにサーバからダウンロードされるファームウェアを示す図である。ファームウェア22−Bは、複数のブロック51−1〜51−C(C=2,3,4,…)から形成されている。複数のブロック51−1〜51−Cのうちの任意のブロック51−c(c=1,2,3,…,C)は、複数のフラグメント52−1〜52−D(D=2,3,4,…)から形成されている。複数のフラグメント52−1〜52−Dのうちの任意のフラグメント52−d(d=1,2,3,…,D)は、情報量が所定の情報量以下になるように形成されている。その所定の情報量は、フラグメント52−dが1パケットのペイロードに収まるように設計される。
[実施例5のセンサノードの動作]
図16は、実施例5のセンサノードがファームウェアを受信する動作を示す動作シーケンス図である。サーバ2は、更新された新しいファームウェア22−Bが入力されると、まず、ファームウェア22−Bを複数のブロック51−1〜51−Cに分割する。サーバ2は、ファームウェア22−Bを複数のブロック51−1〜51−Cに分割した後に、複数のブロック51−1〜51−Cの各々のブロック51−cを複数のフラグメント52−1〜52−Dに分割する。サーバ2は、無線通信を介して、制御情報であるファームウェア更新要求61を複数のセンサノード3−1〜3−Nに配信する。
複数のセンサノード3−1〜3−Nのうちのファームウェア更新要求61を受信したセンサノード3−iは、ACK62をサーバ2に返信する。サーバ2は、ACK62をセンサノード3−iから受信すると、ファームウェア22−Bを複数のブロック51−1〜51−C毎にセンサノード3−iに送信する。サーバ2は、複数のブロック51−1〜51−Cのうちの最初のブロック51−1を送信するときに、最初のブロック51−1が形成される複数のフラグメント52−1〜52−Dを1つずつセンサノード3−iに送信する。
センサノード3−iは、複数のフラグメント52−1〜52−Dのうちの最後の最終フラグメント52−Dと異なるフラグメントを受信したときに、ACKをサーバ2に返信しないで、最終フラグメント52−Dを受信したときにACK64をサーバ2に返信する。
図17は、パケットの送受信が欠落することがあるときの動作を示す動作シーケンス図である。サーバ2は、最終フラグメント52−Dを送信した時刻から所定の時間経過するまでにACK64を受信しなかったときに、最終フラグメント52−Dを再送する。サーバ2は、最終フラグメント52−Dを再送した時刻から所定の時間経過するまでにACK64を受信しなかった場合も、繰り返して最終フラグメント52−Dを再送する。センサノード3−iは、最終フラグメント52−Dを受信するごとに、ACK64をサーバ2に返信する。
センサノード3−iは、最終フラグメント52−Dを受信した後で、複数のフラグメント52−1〜52−Dのうちの取得できなかった欠落フラグメントがあるときに、その欠落フラグメントのリストを作成する。センサノード3−iは、その欠落フラグメントがあるときに、そのリストをACK64に付随してサーバ2に送信する。
サーバ2は、ACK64を受信した場合で、ACK64にそのリストが付随されていたときに、そのリストが示す複数のフラグメント65をセンサノード3−iに送信する。このとき、複数のフラグメント65は、リスト中の最後のフラグメントを、最終フラグメント52−Dと同様のものとして扱い、処理をするように実装している。
センサノード3−iは、最終フラグメント52−Dを受信した場合で、複数のフラグメント52−1〜52−Dの全部を取得しているときに、リストが付随されないACK64をサーバ2に送信する。サーバ2は、リストが付随されないACK64を受信することにより、最初のブロック51−1の送信を完了する。
図18は、1つのブロックの送信が完了した後の動作を示す動作シーケンス図である。詳細には、ブロックcまで送信が完了し、ブロックc+1の送信が完了しないうちにアップデート処理が何らかの原因で停止してしまった場合にc+1ブロック目からアップデートを再開するためのシーケンス図である。センサノード3−iのストレージ15は、受信完了ブロック番号71をさらに記録している。センサノード3−iは、ブロック51−cの複数のフラグメント52−1〜52−Dの全部を取得したときに、ストレージ15を制御することにより、受信完了ブロック番号71が値cを示すように受信完了ブロック番号71を更新する。サーバ2は、ブロック51−cの送信が完了した後に、すなわち、リストが付随されないACK64を受信した後に、ファームアップデート再開要求72をセンサノード3−iに送信する。「停止」の部分が入らない場合は、ファームアップデート再開要求72は、不要であり、即c+1ブロック目のフラグメント送信を行う。センサノード3−iは、ファームアップデート再開要求72を受信すると、ストレージ15から受信完了ブロック番号71を取得し、開始ブロック番号が付随されたACK73をサーバ2に返信する。その開始ブロック番号は、複数のブロック51−1〜51−Cのうちの最後に受信されたブロック51−cの次のブロックの番号を示し、受信完了ブロック番号71が示す値cに1を加算した和c+1を示している。サーバ2は、開始ブロック番号が付随されたACK73をセンサノード3−iから受信すると、複数のブロック51−1〜51−Cのうちの開始ブロック番号に対応するブロックを、最初のブロック51−1と同様にして、センサノード3−iに送信する。
[実施例5のセンサノードの効果]
実施例5では、ファームウェア22−Aは、複数のブロック51−1〜51−Cに分割されたファームウェア22−Bをサーバ2から1つずつダウンロードすることにより、ファームウェア22−Bをダウンロードする。このようなセンサノード3−iは、ファームウェア22−Bを複数のブロック51−1〜51−C毎にダウンロードすることにより、ストレージ15のうちのダウンロードするときに使用されるバッファ領域を小さくすることができる。このため、このようなセンサノード3−iは、ストレージ15の規模が小さい場合でも、ファームウェア22−Bを適切にダウンロードすることができる。また、このようなセンサノード3−iは、ストレージ15のうちのダウンロードするときに使用されるバッファ領域を小さくすることにより、ストレージ15の規模を小さくすることができる。このようなセンサノード3−iは、ストレージ15の規模を小さくすることにより、製造コストを低減することができる。
また、実施例5では、ファームウェア22−Aは、複数のブロック51−1〜51−Cの各ブロック51−cが分割された複数のフラグメント52−1〜52−Dをサーバ2から1つずつダウンロードすることにより、各ブロック51−cをダウンロードする。ファームウェア22−Aは、複数のフラグメント52−1〜52−Dのうちの最終フラグメント52−Dと異なるフラグメントをダウンロードしたときにACKを返信しないで、最終フラグメント52−DをダウンロードしたときにACK64を返信する。このようなセンサノード3−iは、複数のフラグメント52−1〜52−Dを受信する毎にAKCをサーバ2に返信することに比較して、ファームウェア22−Bの転送効率を向上させることができ、ファームウェア22−Bを高速にダウンロードすることができる。
また、実施例5では、ファームウェア22−Aは、最終フラグメント52−Dをダウンロードしたときに、複数のフラグメント52−1〜52−Dのうちの欠落したフラグメントのリストをサーバ2に返信する。このとき、サーバ2は、欠落したフラグメントのリストを受信することにより、欠落したフラグメントをセンサノード3−iに再送することができる。センサノード3−iは、低電力で動作するため、無線出力が小さい。センサノード3−iは、さらに、奥まったスペースに設置されるため、その無線通信に利用される電波がサーバ2まで届き辛く、通信が途切れがちになる。このようなセンサノード3−iは、無線環境5が低品質であっても、欠落したフラグメントのリストをサーバ2に伝達することにより、欠落したフラグメントをサーバ2から取得することができ、ファームウェア22−Bを適切にダウンロードすることができる。
また、実施例5では、ストレージ15は、受信完了ブロック番号71をさらに記録している。ファームウェア22−Aは、複数のブロック51−1〜51−Cのうちのブロック51−cをダウンロードしたときに、受信完了ブロック番号71がブロック51−cを示すように受信完了ブロック番号71を更新する。ファームウェア22−Aは、サーバ2からファームアップデート再開要求72を受信したときに、ブロック51−cの次のブロックを示す情報をサーバ2に返信する。このとき、サーバ2は、ブロック51−cの次のブロックを示す情報を受信することにより、ダウンロードされていないブロックをセンサノード3−iに送信することができる。このようなセンサノード3−iは、ファームウェア22−Bのダウンロードが途中で中断された場合でも、ダウンロードされていないブロックをサーバ2から取得することができ、ファームウェア22−Bを適切にダウンロードすることができる。
<実施例6>
ACK64は、さらに他の情報が付随される他のACKに置換されてもよい。図19は、実施例6のセンサノードがファームウェアの1つのブロックを受信する動作を示す動作シーケンス図である。センサノード3−iは、図19に示されているように、ブロック51−cの複数のフラグメント52−1〜52−Dの全部を取得したときに、ブロック51−cのデータに基づいてハッシュ値を算出する。センサノード3−iは、ブロック51−cの複数のフラグメント52−1〜52−Dの全部を取得したときに、さらに、その算出されたハッシュ値が付随されるACK81をサーバ2に返信する。
サーバ2は、ACK81をセンサノード3−iから受信したときに、センサノード3−iに送信したブロック51−cのデータに基づいてハッシュ値を算出する(S101)。サーバ2は、その算出されたハッシュ値を、ACK81に付随されるハッシュ値と比較する(S102)。サーバ2は、その算出されたハッシュ値が、ACK81に付随されるハッシュ値と異なっているときに(S102、No)、再度、ブロック51−cの複数のフラグメント52−1〜52−Dを1つずつセンサノード3−iに送信する。
サーバ2は、その算出されたハッシュ値が、ACK81に付随されるハッシュ値と一致しているときに(S102、Yes)、複数のブロック51−1〜51−Cのうちのブロック51−cの次のブロックをセンサノード3−iに送信する。
図20は、実施例6のセンサノードがファームウェアの最終ブロックを受信する動作を示す動作シーケンス図である。センサノード3−iは、図20に示されているように、複数のブロック51−1〜51−Cのうちの最後の最終ブロック51−Cの複数のフラグメント52−1〜52−Dを取得する。センサノード3−iは、複数のフラグメント52−1〜52−Dの最後の最終フラグメント52−Dを取得したときに、複数のブロック51−1〜51−Cの全部のデータに基づいてハッシュ値を算出する。センサノード3−iは、最終ブロック51−Cの複数のフラグメント52−1〜52−Dの全部を取得したときに、その算出されたハッシュ値が付随されるACK82をサーバ2に返信する。
サーバ2は、ACK82をセンサノード3−iから受信したときに、センサノード3−iに送信した複数のブロック51−1〜51−Cの全部のデータに基づいてハッシュ値を算出する(S103)。サーバ2は、その算出されたハッシュ値を、ACK82に付随されるハッシュ値と比較する(S104)。サーバ2は、その算出されたハッシュ値が、ACK82に付随されるハッシュ値と異なっているときに(S104、No)、再度、複数のブロック51−1〜51−Cを最初のブロック51−1から1つずつセンサノード3−iに送信する。サーバ2は、その算出されたハッシュ値が、ACK82に付随されるハッシュ値と一致しているときに(S104、Yes)、複数のブロック51−1〜51−Cの送信を完了する。
[実施例6のセンサノードの効果]
実施例6では、ファームウェア22−Aは、複数のブロック51−1〜51−Cのうちの1つのブロック51−cをサーバ2からダウンロードしたときに、1つのブロック51−cに基づいて算出された誤り検出符号値をサーバ2に返信する。このとき、サーバ2は、センサノード3−iから受信した誤り検出符号値が、サーバ2によりブロック51−cのデータに基づいて算出された誤り検出符号値と異なるときに、ブロック51−cが正確に伝送されなかったことを認識することができる。サーバ2は、ブロック51−cが正確に伝送されなかったことを認識することにより、ブロック51−cをセンサノード3−iに再送することができる。このようなセンサノード3−iは、誤り検出符号値をサーバ2に返信することにより、正確に送信されなかったブロック51−cをサーバ2から取得することができ、ファームウェア22−Bを適切にダウンロードすることができる。
また、実施例6では、ファームウェア22−Aは、複数のブロック51−1〜51−Cの全部をサーバ2からダウンロードしたときに、複数のブロック51−1〜51−Cの全部に基づいて算出された他の誤り検出符号値をサーバ2に返信する。このとき、サーバ2は、センサノード3−iから受信した誤り検出符号値が、サーバ2により算出された誤り検出符号値と異なるときに、複数のブロック51−1〜51−Cが正確に伝送されなかったことを認識することができる。サーバ2は、複数のブロック51−1〜51−Cが正確に伝送されなかったことを認識することにより、ファームウェア22−Bをセンサノード3−iに再送することができる。このため、このようなセンサノード3−iは、誤り検出符号値をサーバ2に返信することにより、ファームウェア22−Bを正確に受信しかったときに、ファームウェア22−Bを再度ダウンロードすることができる。このため、このようなセンサノード3−iは、ファームウェア22−Bを正確に受信しなかったときに、ファームウェア22−Bを再度ダウンロードすることにより、ファームウェア22−Bを適切にダウンロードすることができる。
ところで、実施例6では、誤り検出符号値としてハッシュ値が利用されているが、誤り検出に利用される他の関数により算出される値に置換されてもよい。その関数としては、チェックサムが例示される。このような関数が利用された場合でも、センサノード3−iは、ファームウェア22−Bを適切にダウンロードすることができる。
以上の実施例1〜6を含む実施形態に関し、更に以下の付記を開示する。
(付記1)制御部と、
第1ファームウェアとブートローダとを記録する第1記憶装置と、
判定情報を記録する第2記憶装置とを有し、
前記第1ファームウェアは、前記制御部に起動されることにより、制御対象を制御し、さらに、外部装置からダウンロードされた第2ファームウェアを前記第1記憶装置に記録して前記ブートローダを起動し、
前記ブートローダは、前記制御部に起動されることにより、前記判定情報が第1値を示すときに前記第1ファームウェアを起動し、前記判定情報が前記第1値と異なる第2値を示すときに前記第2ファームウェアを起動し、
前記第2ファームウェアは、前記制御部に起動されることにより、前記制御対象を制御し、さらに、前記第2ファームウェアの良否を判定し、前記第2ファームウェアが不良であると判定されたときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
電子機器。
(付記2)前記第2ファームウェアは、前記第2ファームウェアが正常であると判定されたときに、前記判定情報が前記第2値を示すように前記判定情報を更新し、前記ブートローダにより再度起動された場合で、前記判定情報が前記第2値を示すときに、前記第2ファームウェアの良否を判定しない
付記1に記載の電子機器。
(付記3)前記第2ファームウェアは、複数の観点で前記第2ファームウェアの良否をそれぞれ判定し、前記複数の観点のいずれか1つで不良であると判定されたときに前記判定情報が前記第1値を示すように前記判定情報を更新し、前記複数の観点の全部が正常であると判定されたときに前記判定情報が前記第2値を示すように前記判定情報を更新する
付記2に記載の電子機器。
(付記4)前記第2ファームウェアが起動されたときに設定されるウォッチドッグタイマをさらに備え、
前記ブートローダは、さらに、前記ウォッチドッグタイマがタイムアウトしたときに、前記制御部に起動される
付記2または付記3に記載の電子機器。
(付記5)前記第2ファームウェアは、前記第2ファームウェアが正常であると判定されたときに、前記ウォッチドッグタイマを解除する
付記4に記載の電子機器。
(付記6)前記第2記憶装置は、試行情報をさらに記録し、
前記第1ファームウェアは、前記第2ファームウェアが起動される前に、前記判定情報が第3値を示すように前記判定情報を更新し、前記試行情報が第4値を示すように前記試行情報を更新し、
前記ブートローダは、
前記判定情報が前記第3値を示す場合で前記試行情報が前記第4値を示すときに、前記試行情報が第5値を示すように前記試行情報を更新して前記第2ファームウェアを起動し、
前記判定情報が前記第3値を示す場合で前記試行情報が前記第5値を示すときに、前記第1ファームウェアを起動する
付記4または付記5に記載の電子機器。
(付記7)カレンダータイマをさらに備え、
前記第2記憶装置は、起動回数をさらに記録し、
前記第2ファームウェアは、前記カレンダータイマを用いて導出される期間に前記第2ファームウェアが起動される回数を前記起動回数が示すように前記起動回数を更新し、前記起動回数が所定の値より大きいときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
付記2〜付記6のいずれか一項に記載の電子機器。
(付記8)前記第2ファームウェアは、前記期間が経過したときに前記判定情報が前記第2値を示すように前記判定情報を更新し、前記判定情報が前記第2値を示すときに前記起動回数を更新しない
付記7に記載の電子機器。
(付記9)前記第1ファームウェアは、前記第2ファームウェアが分割された複数のブロックを前記外部装置から1つずつダウンロードすることにより、前記第2ファームウェアをダウンロードする
付記1〜付記8のいずれか一項に記載の電子機器。
(付記10)前記第1ファームウェアは、
前記複数のブロックの各ブロックが分割された複数のフラグメントを前記外部装置から1つずつダウンロードすることにより、前記各ブロックをダウンロードし、
前記複数のフラグメントのうちの最後の最終フラグメントと異なる他のフラグメントをダウンロードしたときにACKを返信しないで、前記最終フラグメントをダウンロードしたときにACKを返信する
付記9に記載の電子機器。
(付記11)前記第1ファームウェアは、前記最終フラグメントをダウンロードしたときに、前記複数のフラグメントのうちの欠落したフラグメントのリストを前記外部装置に返信する
付記10に記載の電子機器。
(付記12)前記第2記憶装置は、受信完了ブロック番号をさらに記録し、
前記第1ファームウェアは、
前記複数のブロックのうちのブロックをダウンロードしたときに、前記受信完了ブロック番号が前記ブロックを示すように前記受信完了ブロック番号を更新し、
前記外部装置からファームアップデート再開要求を受信したときに、前記ブロックの次のブロックを示す情報を前記外部装置に返信する
付記9〜付記11のいずれか一項に記載の電子機器。
(付記13)前記第1ファームウェアは、前記複数のブロックのうちの1つのブロックを前記外部装置からダウンロードしたときに、前記1つのブロックに基づいて算出された誤り検出符号値を前記外部装置に返信する
付記9〜付記12のいずれか一項に記載の電子機器。
(付記14)前記第1ファームウェアは、前記複数のブロックの全部を前記外部装置からダウンロードしたときに、前記複数のブロックの全部に基づいて算出された他の誤り検出符号値を前記外部装置に返信する
付記9〜付記13のいずれか一項に記載の電子機器。
(付記15)第1ファームウェアとブートローダとを第1記憶装置に記録し、
前記第1ファームウェアを起動することにより、制御対象を制御し、さらに、外部装置からダウンロードされた第2ファームウェアを前記第1記憶装置に記録して前記ブートローダを起動し、
前記ブートローダを起動することにより、第2記憶装置に記録された判定情報が第1値を示すときに前記第1ファームウェアを起動し、前記判定情報が前記第1値を示していないときに前記第2ファームウェアを起動し、
前記第2ファームウェアを起動することにより、前記制御対象を制御し、さらに、前記第2ファームウェアの良否を判定し、前記第2ファームウェアが不良であると判定されたときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
処理をコンピュータが実行することを特徴とするファームウェアアップデート方法。
(付記16)第1ファームウェアと、
ブートローダとを有し、
前記第1ファームウェアは、
制御対象を制御し、
外部装置からダウンロードされた第2ファームウェアを第1記憶装置に記録して前記ブートローダを起動する
処理をコンピュータに実行させ、
前記ブートローダは、
第2記憶装置に記録される判定情報が第1値を示すときに前記第1ファームウェアを起動し、
前記判定情報が前記第1値を示していないときに前記第2ファームウェアを起動する
処理を前記コンピュータに実行させ、
前記第2ファームウェアは、
前記制御対象を制御し、
前記第2ファームウェアの良否を判定し、
前記第2ファームウェアが不良であると判定されたときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
処理を前記コンピュータに実行させる
コンピュータプログラム。
1 :無線センサネットワーク
3−1〜3−N:複数のセンサノード
5 :無線環境
11:RF通信部
12−1〜12−M:複数のセンサ
14:MCU
15:ストレージ
16:ウォッチドッグタイマ
17:カレンダータイマ
19:eMMC
21:ブートローダ
22−1〜22−K:複数のファームウェア
25:起動バンク情報
26:バンク試行情報
27−1〜27−X:複数のチェックポイント処理結果
28:FW判定情報
31:通常動作部
32:アップデート部
33−1〜33−X:複数のチェックポイント処理部
34:FW判定情報更新部
51−1〜51−C:複数のブロック
52−1〜52−D:複数のフラグメント

Claims (10)

  1. 制御部と、
    第1ファームウェアとブートローダとを記録する第1記憶装置と、
    判定情報を記録する第2記憶装置と
    を有し、
    前記第1ファームウェアは、前記制御部に起動されることにより、制御対象を制御し、さらに、外部装置からダウンロードされた第2ファームウェアを前記第1記憶装置に記録して前記ブートローダを起動し、
    前記ブートローダは、前記制御部に起動されることにより、前記判定情報が第1値を示すときに前記第1ファームウェアを起動し、前記判定情報が前記第1値と異なる第2値を示すときに前記第2ファームウェアを起動し、
    前記第2ファームウェアは、前記制御部に起動されることにより、前記制御対象を制御し、さらに、前記第2ファームウェアの良否を判定し、前記第2ファームウェアが不良であると判定されたときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
    電子機器。
  2. 前記第2ファームウェアは、
    前記第2ファームウェアが正常であると判定されたときに、前記判定情報が前記第2値を示すように前記判定情報を更新し、前記ブートローダにより再度起動された場合で、前記判定情報が前記第2値を示すときに、前記第2ファームウェアの良否を判定しない
    請求項1に記載の電子機器。
  3. 前記第2ファームウェアは、複数の観点で前記第2ファームウェアの良否をそれぞれ判定し、前記複数の観点のいずれか1つで不良であると判定されたときに前記判定情報が前記第1値を示すように前記判定情報を更新し、前記複数の観点の全部が正常であると判定されたときに前記判定情報が前記第2値を示すように前記判定情報を更新する
    請求項2に記載の電子機器。
  4. 前記第2ファームウェアが起動されたときに設定されるウォッチドッグタイマをさらに備え、
    前記ブートローダは、さらに、前記ウォッチドッグタイマがタイムアウトしたときに、前記制御部に起動される
    請求項2または請求項3に記載の電子機器。
  5. 前記第2ファームウェアは、前記第2ファームウェアが正常であると判定されたときに、前記ウォッチドッグタイマを解除する
    請求項4に記載の電子機器。
  6. 前記第2記憶装置は、試行情報をさらに記録し、
    前記第1ファームウェアは、前記第2ファームウェアが起動される前に、前記判定情報が第3値を示すように前記判定情報を更新し、前記試行情報が第4値を示すように前記試行情報を更新し、
    前記ブートローダは、
    前記判定情報が前記第3値を示す場合で前記試行情報が前記第4値を示すときに、前記試行情報が第5値を示すように前記試行情報を更新して前記第2ファームウェアを起動し、
    前記判定情報が前記第3値を示す場合で前記試行情報が前記第5値を示すときに、前記第1ファームウェアを起動する
    請求項4または請求項5に記載の電子機器。
  7. カレンダータイマをさらに備え、
    前記第2記憶装置は、起動回数をさらに記録し、
    前記第2ファームウェアは、前記カレンダータイマを用いて導出される期間に前記第2ファームウェアが起動される回数を前記起動回数が示すように前記起動回数を更新し、前記起動回数が所定の値より大きいときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
    請求項2〜請求項6のいずれか一項に記載の電子機器。
  8. 前記第2ファームウェアは、前記期間が経過したときに前記判定情報が前記第2値を示すように前記判定情報を更新し、前記判定情報が前記第2値を示すときに前記起動回数を更新しない
    請求項7に記載の電子機器。
  9. 第1ファームウェアとブートローダとを第1記憶装置に記録し、
    前記第1ファームウェアを起動することにより、制御対象を制御し、さらに、外部装置からダウンロードされた第2ファームウェアを前記第1記憶装置に記録して前記ブートローダを起動し、
    前記ブートローダを起動することにより、第2記憶装置に記録された判定情報が第1値を示すときに前記第1ファームウェアを起動し、前記判定情報が前記第1値を示していないときに前記第2ファームウェアを起動し、
    前記第2ファームウェアを起動することにより、前記制御対象を制御し、さらに、前記第2ファームウェアの良否を判定し、前記第2ファームウェアが不良であると判定されたときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
    処理をコンピュータが実行することを特徴とするファームウェアアップデート方法。
  10. 第1ファームウェアにより、制御対象を制御し、外部装置からダウンロードされた第2ファームウェアを第1記憶装置に記録してブートローダを起動し、
    前記ブートローダにより、第2記憶装置に記録される判定情報が第1値を示すときに前記第1ファームウェアを起動し、前記判定情報が前記第1値を示していないときに前記第2ファームウェアを起動し、
    前記第2ファームウェアにより、前記制御対象を制御し、前記第2ファームウェアの良否を判定し、前記第2ファームウェアが不良であると判定されたときに、前記判定情報が前記第1値を示すように前記判定情報を更新して前記ブートローダを起動する
    処理をコンピュータに実行させる
    コンピュータプログラム。
JP2016123577A 2016-06-22 2016-06-22 電子機器、ファームウェアアップデート方法およびコンピュータプログラム Active JP6750340B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2016123577A JP6750340B2 (ja) 2016-06-22 2016-06-22 電子機器、ファームウェアアップデート方法およびコンピュータプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2016123577A JP6750340B2 (ja) 2016-06-22 2016-06-22 電子機器、ファームウェアアップデート方法およびコンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2017228077A true JP2017228077A (ja) 2017-12-28
JP6750340B2 JP6750340B2 (ja) 2020-09-02

Family

ID=60891655

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016123577A Active JP6750340B2 (ja) 2016-06-22 2016-06-22 電子機器、ファームウェアアップデート方法およびコンピュータプログラム

Country Status (1)

Country Link
JP (1) JP6750340B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11176254B2 (en) 2019-05-23 2021-11-16 Nxp Usa, Inc. Automatic firmware rollback
JP2022052514A (ja) * 2020-09-23 2022-04-04 株式会社東芝 情報処理装置
JP7386261B2 (ja) 2019-12-24 2023-11-24 京セラ株式会社 通信機器及び制御方法
JP7398018B1 (ja) * 2023-03-16 2023-12-13 新コスモス電機株式会社 警報器及び警報システム

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000039993A (ja) * 1998-07-23 2000-02-08 Nec Corp ファームウエアの入れ替え装置及び入れ替え方法
JP2003140705A (ja) * 2001-11-06 2003-05-16 Yamatake Sangyo Systems Co Ltd 多重化並列処理装置
JP2006185309A (ja) * 2004-12-28 2006-07-13 Net In Kyoto:Kk 電子機器およびファームウェアの更新方法
JP2006244269A (ja) * 2005-03-04 2006-09-14 Daikin Ind Ltd 設備管理装置、プログラム更新システム、設備管理プログラム更新方法、起動プログラム、および設備管理プログラム
JP2008225763A (ja) * 2007-03-12 2008-09-25 Fujifilm Corp ファームウェアの更新方法、プログラム及び電子機器
JP2008250390A (ja) * 2007-03-29 2008-10-16 Matsushita Electric Ind Co Ltd サポート情報提示装置
US20090217257A1 (en) * 2008-02-27 2009-08-27 Mstar Semiconductor, Inc. Apparatus and Method for Firmware Update
JP2010015265A (ja) * 2008-07-01 2010-01-21 Denso Corp プログラム書き換え装置およびプログラム書き換え方法
JP2010198155A (ja) * 2009-02-24 2010-09-09 Fujitsu Ten Ltd プログラム更新装置、プログラム更新方法、及び情報処理装置
JP2011175352A (ja) * 2010-02-23 2011-09-08 Mitsubishi Electric Corp ファームウエア更新装置、通信装置、電子機器、ファームウエア更新システム、ファームウエア更新方法及びプログラム
JP2012256386A (ja) * 2011-06-07 2012-12-27 Denso Corp プログラム書込システム
JP2014164677A (ja) * 2013-02-27 2014-09-08 Hitachi Ltd 仕様検証支援装置、仕様検証支援方法及びプログラム
JP2015146102A (ja) * 2014-02-03 2015-08-13 株式会社ワコム センサコントローラ、センサコントローラを備えたセンサデバイス、センサデバイスが搭載された電子機器およびアプリケーションソフトウェアの復旧方法

Patent Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000039993A (ja) * 1998-07-23 2000-02-08 Nec Corp ファームウエアの入れ替え装置及び入れ替え方法
JP2003140705A (ja) * 2001-11-06 2003-05-16 Yamatake Sangyo Systems Co Ltd 多重化並列処理装置
JP2006185309A (ja) * 2004-12-28 2006-07-13 Net In Kyoto:Kk 電子機器およびファームウェアの更新方法
JP2006244269A (ja) * 2005-03-04 2006-09-14 Daikin Ind Ltd 設備管理装置、プログラム更新システム、設備管理プログラム更新方法、起動プログラム、および設備管理プログラム
JP2008225763A (ja) * 2007-03-12 2008-09-25 Fujifilm Corp ファームウェアの更新方法、プログラム及び電子機器
JP2008250390A (ja) * 2007-03-29 2008-10-16 Matsushita Electric Ind Co Ltd サポート情報提示装置
US20090217257A1 (en) * 2008-02-27 2009-08-27 Mstar Semiconductor, Inc. Apparatus and Method for Firmware Update
JP2010015265A (ja) * 2008-07-01 2010-01-21 Denso Corp プログラム書き換え装置およびプログラム書き換え方法
JP2010198155A (ja) * 2009-02-24 2010-09-09 Fujitsu Ten Ltd プログラム更新装置、プログラム更新方法、及び情報処理装置
JP2011175352A (ja) * 2010-02-23 2011-09-08 Mitsubishi Electric Corp ファームウエア更新装置、通信装置、電子機器、ファームウエア更新システム、ファームウエア更新方法及びプログラム
JP2012256386A (ja) * 2011-06-07 2012-12-27 Denso Corp プログラム書込システム
JP2014164677A (ja) * 2013-02-27 2014-09-08 Hitachi Ltd 仕様検証支援装置、仕様検証支援方法及びプログラム
JP2015146102A (ja) * 2014-02-03 2015-08-13 株式会社ワコム センサコントローラ、センサコントローラを備えたセンサデバイス、センサデバイスが搭載された電子機器およびアプリケーションソフトウェアの復旧方法

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11176254B2 (en) 2019-05-23 2021-11-16 Nxp Usa, Inc. Automatic firmware rollback
JP7386261B2 (ja) 2019-12-24 2023-11-24 京セラ株式会社 通信機器及び制御方法
JP2022052514A (ja) * 2020-09-23 2022-04-04 株式会社東芝 情報処理装置
JP7362583B2 (ja) 2020-09-23 2023-10-17 株式会社東芝 情報処理装置
JP7398018B1 (ja) * 2023-03-16 2023-12-13 新コスモス電機株式会社 警報器及び警報システム

Also Published As

Publication number Publication date
JP6750340B2 (ja) 2020-09-02

Similar Documents

Publication Publication Date Title
CN110825544B (zh) 计算节点及其失效检测方法与云端数据处理系统
JP5564956B2 (ja) 情報処理装置及び情報処理装置のファームウェア更新方法
US8572600B2 (en) Method for updating firmware of sensor nodes on the wireless sensor network
JP6750340B2 (ja) 電子機器、ファームウェアアップデート方法およびコンピュータプログラム
US9110843B2 (en) Rack and method thereof for simultaneously updating basic input output systems
JP2010541105A (ja) ファームウェアイメージの更新および管理
US9846616B2 (en) Boot recovery system
US20100199272A1 (en) Updating firmware without disrupting service
KR100952585B1 (ko) 운영체제(os) 자동복구기능을 갖는 임베디드 시스템 및운영체제 자동복구 방법
US20160070562A1 (en) System and method for over the air programming
JP7345921B2 (ja) マスタースレーブアーキテクチャのota差分更新方法とシステム
CN114020526A (zh) 一种固件升级方法、装置及计算机存储介质
WO2014147817A1 (ja) 情報処理装置、プログラム更新方法、及びプログラム
TW201502799A (zh) 用於運算節點之可編程式件更新技術
JP2010067115A (ja) データ記憶システム、データ記憶方法
CN109828855B (zh) 多处理器错误检测系统及其方法
TW201523447A (zh) 伺服器系統與韌體更新方法
TWI716969B (zh) 經由資料塊段之復原影像下載技術
JP3233274B2 (ja) マイクロコンピュータのプログラムリブート方法およびプログラムリブート装置
JP7043737B2 (ja) 情報処理システム及び情報処理方法
JP5670935B2 (ja) 分散データ管理システムおよびその動作方法
TWI777664B (zh) 嵌入式系統的開機方法
JP2023132437A (ja) ボイラ装置
KR102020798B1 (ko) 자동화 테스트 수행 방법 및 시스템
JP2004054421A (ja) メモリ、情報処理装置、記憶方法および情報処理方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20190311

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20200120

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200128

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200330

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20200428

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200618

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200714

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200727

R150 Certificate of patent or registration of utility model

Ref document number: 6750340

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150