(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0016】
(第1の実施形態)
本発明の第1の実施形態について図を参照して詳細に説明する。
図1は、本実施形態の記憶装置の構成の概要を示したものである。本実施形態の記憶装置は、情報記憶手段1と、起動フラグ保存手段2と、制御手段3を備えている。
【0017】
情報記憶手段1は、同一のデータの複数のファームウェアを、記憶素子上のそれぞれに割り当てられた領域に保存する。起動フラグ保存手段2は、情報記憶手段1に保存されているファームウェアのうち、いずれのファームウェアを起動するかの情報を示す起動フラグと、起動を抑止するファームウェアの情報を示す起動抑止フラグとを保存する。制御手段3は、起動抑止フラグの設定されていないファームウェアの中から、いずれか1つのファームウェアに起動フラグを設定する手段を有する。また、制御手段3は、起動フラグの情報に対応するファームウェアを記憶素子から読み出して、読み出したファームウェアに基づいて信号を出力する手段をさらに有する。
【0018】
本実施形態の記憶装置は、同一のデータの複数のファームウェアを、それぞれに割り当てられた情報記憶手段1の記憶素子上の領域に保存することで冗長化されている。また、制御手段3は、起動フラグ保存手段2に保存している起動抑止フラグの情報を基に、起動を行うファームウェアを示す起動フラグを設定している。制御手段3は、起動フラグの情報に対応するファームウェアを記憶素子から読み出して信号の出力を行う。そのため、本実施形態の記憶装置では、起動が抑止されているファームウェア等にアクセスする回数を抑制することができる。本実施形態の記憶装置では、ファームウェアを読み出すために記憶素子の各領域にアクセスする回数を抑制することができるので、記憶素子の劣化を抑制することができる。その結果、本実施形態の記憶装置ではファームウェアが冗長化された構成において、記憶素子へのアクセス回数を抑制して信頼性を向上することができる。
【0019】
(第2の実施形態)
本発明の第2の実施形態について図を参照して詳細に説明する。
図2は、本実施形態の記憶装置10の構成の概要を示したものである。本実施形態の記憶装置10は、保存しているファームウェアを基に制御信号を生成し、記憶装置10が組み込まれている情報処理装置等を制御するための装置である。
【0020】
本実施形態の記憶装置10は、制御部11と、インターフェース部12と、第1の情報記憶部13と、第2の情報記憶部14と、バックアップメモリ部15と、タイマー部16と、メモリ部17を備えている。
【0021】
制御部11は、第2の情報記憶部14に保存されたファームウェアに基づいて記憶装置10が備えられている装置を制御する機能を有する。また、制御部11は、記憶装置10の各部位の動作を制御する機能を有する。
【0022】
制御部11は、第1の情報記憶部13に保存されているブートローダを基に第2の情報記憶部14に保存されているファームウェアを読み出す。制御部11は、読み出したファームウェアを基に制御信号を生成し、記憶装置10が備えられている装置の制御を行う。
【0023】
また、制御部11は、第2の情報記憶部14に保存されているファームウェアの更新動作を制御する。本実施形態の制御部11は、CPU(Central Processing Unit)として構成されている。
【0024】
制御部11は、第1の実施形態の制御手段3に相当する。
【0025】
インターフェース部12は、制御部11と、第1の情報記憶部13および第2の情報記憶部14をそれぞれ接続する機能を有する。インターフェース部12は、制御部11と、第1の情報記憶部13および第2の情報記憶部14の間で制御信号やデータを伝送するインターフェース回路として形成されている。
【0026】
第1の情報記憶部13は、ブートローダを保存する機能を有する。第1の情報記憶部13は、制御部11からの要求に応じて、保存しているブートローダを制御部11に出力する。本実施形態の第1の情報記憶部13は、NOR型フラッシュメモリを用いて構成されている。ブートローダには、第2の情報記憶部14にアクセスするデバイスドライバが含まれている。第1の情報記憶部13は、NOR型フラッシュメモリ以外の記憶素子によって構成されていてもよい。
【0027】
第2の情報記憶部14は、ファームウェアを保存する機能を有する。第2の情報記憶部14は、第1のファームウェア41、第2のファームウェア42および第3のファームウェア43をそれぞれに割り当てられた記憶領域に保存している。第1のファームウェア41、第2のファームウェア42および第3のファームウェア43は、更新動作の際を除いて、同一のデータである。すなわち、本実施形態の記憶装置10は、ファームウェアを三重化することによって冗長化されている。
【0028】
第2の情報記憶部14は、制御部11の制御に基づいて、3つのファームウェアのうちいずれかのファームウェアを制御部11に出力する。本実施形態の情報記憶部14は、NAND型フラッシュメモリを用いて構成されている。また、第2の情報記憶部14は、制御部11の制御に基づいて、各ファームウェアのデータの更新を行う。
【0029】
第2の情報記憶部14は、第1の実施形態の情報記憶手段1に相当する。
【0030】
バックアップメモリ部15は、各ファームウェアの状態に関する情報を保存する機能を有する。バックアップメモリ部15は、ファームウェアの情報として、優先起動ファームウェアフラグ51、ブート抑止ファームウェアフラグ52およびファームウェアアップデートフラグ53の情報を保存している。本実施形態のバックアップメモリ部15は、バッテリによってデータが保持されるメモリ素子で構成されている。バックアップメモリ部15は、記憶装置10が組み込まれている装置からの電源供給によって記憶内容が保持される構成としてもよい。また、バックアップメモリ部15は、NOR型フラッシュメモリやNAND型フラッシュメモリ等の不揮発性メモリ素子で構成されていてもよい。
【0031】
優先起動ファームウェアフラグ51は、第1のファームウェア41、第2のファームウェア42または第3のファームウェア43のいずれを優先的に起動するかの情報を保存している。
図3は、本実施形態の記憶装置10で設定されている各フラグの設定内容の例を示したものである。
図3に示す通り、本実施形態の優先起動ファームウェアフラグ51は、各ファームウェアに応じて「0x00」、「0x01」および「0x02」のいずれかのデータが設定される。
【0032】
「0x00」は、第1のファームフェア41が優先的にブートされる状態の際に、優先起動ファームウェアフラグ51に設定される。優先的にブートされる状態のファームウェアとは、電源起動時等に初めに起動が行われるファームウェアのことをいう。「0x01」は、第2のファームフェア42が優先的にブートされる状態の際に、優先起動ファームウェアフラグ51に設定される。また、「0x02」は、第3のファームフェア43が優先的にブートされる状態の際に、優先起動ファームウェアフラグ51に設定される。優先起動ファームウェアフラグ51において各ファームウェアに割り当てられる設定値は、他の形式であってもよい。
【0033】
ブート抑止ファームウェアフラグ52は、データの破損等でブートが不可能なファームウェアの情報を保存している。本実施形態のブート抑止ファームウェアフラグ52は、
図3に示す通り、「Bit0」、「Bit1」および「Bit2」の3ビットのデータで構成されている。「Bit0」は、第1のファームウェア41に対応している。「Bit1」は、第2のファームウェア42に対応している。また、「Bit2」は、第3のファームウェア43に対応している。起動不可となりブートが抑止されているファームウェアは、対応するビットが立った状態として「1」に設定される。また、ブートが抑止されていないファームウェアに対応するビットは「0」として設定されている。ブート抑止ファームウェアフラグ52において各ファームウェアのブートの可否を示すデータは他の形式であってもよい。
【0034】
ファームウェアアップデートフラグ53は、ファームウェアのアップデートの有無についての情報を保存している。本実施形態では、ファームウェアのアップグレードが完了すると、ファームウェアアップデートフラグ53は、完了を示す「0x01」として設定される。また、アップデート後にファームウェアの再起動が完了すると、フラグはクリアされて「0x00」として設定される。ファームウェアアップデートフラグ53のデータの設定値は他の形式であってもよい。
【0035】
バックアップメモリ部15は、第1の実施形態の起動フラグ保存手段2に相当する。
【0036】
タイマー部16は、所定の時間を計測する機能を有する。本実施形態のタイマー部16は、ウォッチドックタイマーとして構成されている。タイマー部16は、内部にカウンタを備え、制御部11から送られてくるカウンタ制御信号S61に基づいてカウントダウンを行って時間を計測する。タイマー部16は、カウンタの値が「0」になると、制御部11にリセット信号S62を送る。タイマー部16のカウンタの初期値は、異常の有無を判断するために要する所定の時間に基づいてあらかじめ設定されている。
【0037】
メモリ部17は、制御部11が読み出したブートローダやファームウェアなどを記憶する機能を有する。本実施形態のメモリ部17は、揮発性のメモリ素子で構成されている。メモリ部17に記憶されている情報は、電源の供給が断たれるとクリアされるが、リセット信号等ではクリアされない。メモリ部17には、不揮発性のメモリ素子や、バッテリ等によってデータが保持されるメモリ素子を用いてもよい。
【0038】
また、メモリ部17は、ブート中ファームウェアフラグ71と、稼働中ファームウェアフラグ72の情報を保存している。
【0039】
ブート中ファームウェアフラグ71は、ブート中のファームウェアを識別するための情報を保存している。ブート中ファームウェアフラグ71は、第1のファームウェア41、第2のファームウェア42または第3のファームウェア43のいずれがブート中であるかの情報が設定されている。本実施形態では、
図3に示す通り、第1のファームウェア41がブート中の際は、ブート中ファームウェアフラグ71は、「0x01」として設定されている。第2のファームウェア42がブート中の際は、ブート中ファームウェアフラグ71は、「0x02」として設定されている。また、第3のファームウェア43がブート中の際は、ブート中ファームウェアフラグ71は、「0x03」として設定されている。
【0040】
ブート中のファームウェアが無い場合には、ブート中ファームウェアフラグ71には、ブート中のファームウェアが無いことを示す情報が設定されている。本実施形態では、ブート中のファームウェアが無いことを示す情報は、
図3に示す通り「0x00」として設定されている。電源投入時のブート中ファームウェアフラグの設定値、すなわち、初期値は、ブート中のファームウェアが無い状態である「0x00」として設定されている。
【0041】
稼働中ファームウェアフラグ72は、第1のファームウェア41、第2のファームウェア42または第3のファームウェア43のいずれが正常に稼働しているかの情報を保存している。本実施形態では、正常に稼働しているファームウェアが無いときは、稼働中ファームウェアフラグ72は、「0x00」として設定されている。また、電源投入時の稼働中ファームウェアフラグ72の設定値、すなわち、初期値は、正常に稼働しているファームウェアが無い状態である「0x00」として設定されている。
【0042】
本実施形態では、
図3に示す通り、第1のファームウェア41が正常稼働している際は、稼働中ファームウェアフラグ72は、「0x01」として設定されている。第2のファームウェア42が正常稼働している際は、稼働中ファームウェアフラグ72は、「0x02」として設定されている。また、第3のファームウェア43が正常稼働している際は、稼働中ファームウェアフラグ72は、「0x03」として設定されている。
【0043】
ブート中ファームウェアフラグ71および稼働中ファームウェアフラグ72において各ファームウェアに割り当てられる設定値は、それぞれ他の形式であってもよい。
【0044】
本実施形態の記憶装置10の動作について説明する。始めに、通常動作時、すわなわち、電源投入後にファームウェアが正常に起動する場合について説明する。
【0045】
始めに、電源投入後にブートローダの初期化を行う際の動作について説明する。
図4は、ブートローダ初期化処理、すなわち、ブートローダの初期化を行う際の動作フローの概要を示した図である。
【0046】
電源の投入やリセットが行われると、制御部11に起動を示す信号が入力される。起動を示す信号が入力されると、制御部11は、ブートローダの初期化処理を開始する(ステップ101)。ブートローダの初期化処理を開始すると、制御部11は、タイマー部16にウォッチドッグタイマを停止するカウンタ制御信号S61を送る。タイマー部16は、停止を示すカウンタ制御信号S61を受け取ると、カウントダウンを停止する(ステップ102)。
【0047】
タイマー部16を停止すると、制御部11は、稼働中ファームウェアフラグ72のデータをクリアする(ステップ103)。制御部11は、稼働中ファームウェアフラグ72に正常稼働中のファームウェアが無いことを示す「0x00」のデータをセットしてデータをクリアする。稼働中ファームウェアフラグ72のデータを「0x00」にセットすると、制御部11は、ブート中ファームウェアフラグ71のデータを確認する。
【0048】
ブート中ファームウェアフラグ71が、ブート中ではないことを示す「0x00」であるとき(ステップ104でNo)、制御部11は、ファームウェアの起動準備処理を開始する(ステップ105)。ブート中ファームウェアフラグ71に、ブート中のファームウェアのデータが設定されているとき(ステップ104でYes)、制御部11は、対応するファームウェアのブート抑止ファームウェアフラグ52を設定する(ステップ106)。ブート抑止ファームウェアフラグ52を設定すると、制御部11は、ステップ105の動作を行う。
【0049】
次にファームウェアの起動準備処理の動作について説明する。ブートローダの初期化処理が終わると、ファームウェアの起動準備処理が行われる。
図5は、ファームウェア起動準処理を行う際のフローの概要を示した図である。ファームウェア起動準備処理は、ブートローダ初期化処理の後に実行され、ファームウェアの起動の準備を行うための処理である。ファームウェア起動準備処理では、三重化されたファームウェアのうちどれを起動するのかについての選択が行われる。以下では、すべてのファームウェアが正常で、第1のファームウェア41が起動される場合を例に説明する。
【0050】
ファームウェアの起動準備処理を開始すると(ステップ110)、制御部11は、バックアップメモリ部15の異常の有無をチェックする(ステップ111)。バックアップメモリ部15に異常がなく正常である場合(ステップ112でYes)、制御部11は、ブート抑止ファームウェアフラグ52と、優先起動ファームウェアフラグ51のデータの読み込みを行う(ステップ113)。
【0051】
ブート抑止ファームウェアフラグ52および優先起動ファームウェアフラグ51のデータを読み込むと、制御部11は、優先起動ファームウェアフラグ51で示されているファームウェアの起動が抑止状態でないかを確認する。制御部11は、ブート抑止ファームウェアフラグ52の第1のファームウェア41を示すビットが「0」、すなわち、抑止状態となっていないことを確認する。第1のファームウェア41を示すビットが「0」ではなく、抑止状態でないとき(ステップ114でNo)、制御部11は、ブート中ファームウェアフラグ71に優先起動ファームウェアフラグ51のデータを設定する(ステップ115)。
【0052】
制御部11は、ブート中ファームウェアフラグ71を、優先起動ファームウェアフラグ51のデータに基づいて第1のファームウェア41がブート中であることを示す「0x01」に設定する。制御部11は、ブート中ファームウェアフラグ71を「0x01」に設定すると、ファームウェア起動処理を開始する(ステップ116)。
【0053】
バックアップメモリ部15に異常ある場合(ステップ112でNo)、制御部11は、ブート抑止ファームウェアフラグ52を参照し、抑止状態でないファームウェアをブート中ファームウェアフラグ71に設定する(ステップ117)。ブート中ファームウェアフラグ71を設定すると、制御部11は、ファームウェア起動処理を開始する(ステップ116)。
【0054】
また、優先起動ファームウェアフラグ51のファームウェアが抑止状態のとき(ステップ114でNo)、制御部11は他のファームウェアがブート抑止ファームウェアフラグ52を参照し抑止状態かを確認する。全てのファームウェアが抑止状態のとき(ステップ118でYes)、制御部11はファームウェア復旧処理を開始する(ステップ120)。ファームウェア復旧処理については、後で説明する。
【0055】
全てのファームウェアが抑止状態ではないとき(ステップ118でNo)、制御部11は抑止状態ではないファームウェアをブート中ファームウェアフラグ71に設定する(ステップ119)。ブート中ファームウェアフラグ71を設定すると、制御部11は、ファームウェア起動処理を開始する(ステップ116)。
【0056】
次にファームウェア起動処理について説明する。ファームウェア起動準備処理が終わると、ファームウェア起動処理が行われる。
図6は、ファームウェア起動処理を行う際の動作フローの概要を示した図である。ファームウェア起動処理は、ファームウェアをメモリ部17にロードし、起動を行うための処理である。ファームウェア起動処理では、ファームウェアの異常の有無のチェックも行われる。
【0057】
ファームウェア起動処理を開始すると(ステップ121)、制御部11は、ブート中ファームウェアフラグ71を確認する。ブート中ファームウェアフラグ71を確認すると、制御部11は、ブート中ファームウェアフラグ71で示されているファームウェアをメモリ部17にロードする(ステップ122)。ブート中ファームウェアフラグ71に第1のファームウェア41を示す「0x01」が設定されているとき、制御部11は、第1のファームウェア41を第2の情報記憶部14からメモリ部17にロードする。
【0058】
ファームウェアをメモリ部17にロードすると、制御部11はロードしたファームウェアのチェックサムを計算する(ステップ123)。チェックサムを計算すると、制御部11は、計算したチェックサムの値とファームウェアの末尾に付いているチェックサムの値を比較する(ステップ124)。
【0059】
計算したチェックサムの値とファームウェアの末尾に付いているチェックサムの値が一致した場合には(ステップ125でYes)、制御部11はロードしたファームウェアのデータが正常であると判断する。ファームウェアが正常であると判断ると、制御部11はタイマー部16にウォッチドッグタイマを作動させるカウンタ制御信号S61を送る。
【0060】
タイマー部16は、ウォッチドッグタイマを作動させるカウンタ制御信号S61を受け取るとカウントダウンを開始する(ステップ126)。タイマー部16を作動させると、制御部11は、メモリ部17にロードしたファームウェアを実行する(ステップ127)。
【0061】
ステップ124でチェックサムの値が一致していなかったとき(ステップ125でNo)、制御部11は、ブート抑止ファームウェアフラグ52のブート中のファームウェアに該当するビットを抑止状態に設定する(ステップ128)。ブート抑止ファームウェアフラグ52の設定を行うと、制御部11は、
図5のステップ110以降に示すファームウェア起動準備処理を再度、実行する(ステップ129)。
【0062】
ファームウェアが起動すると、まずは各種初期化処理が行われる。初期化処理とは、ファームウェアが本来の動作を行う前の準備や、デバイスドライバの読み込み、デバイスの初期化などを含む。ファームウェアの初期化処理を行うと、制御部11は、ファームウェア起動完了処理を行う。
【0063】
次にファームウェアの起動完了処理について説明する。初期化処理が終わると、ファームウェア起動完了処理が行われる。
図7は、ファームウェア起動完了処理が行われる際の動作フローの概要を示した図である。ファームウェア起動完了処理は、ファームウェアが起動した際に、起動の過程で設定したフラグのクリア等を行う処理である。
【0064】
ファームウェア起動完了処理を開始すると(ステップ130)、制御部11は、タイマー部16にカウンタ制御信号S61を送ってウォッチドックタイマーを停止する(ステップ131)。タイマー部16のウォッチドックタイマーを停止すると、制御部11は、ブート抑止ファームウェアフラグ52を参照して、抑止状態のファームウェアがあるかを確認する。抑止状態のファームウェアが無いとき(ステップ132でNo)、制御部11はファームウェアアップデートフラグ53を参照して、アップデートをしているファームウェアがないかを確認する。ファームウェアアップデートフラグ53にアップデートフラグが立っていないとき(ステップ133でNo)、制御部11は、ブート抑止ファームウェアフラグ52のデータをクリアする(ステップ134)。
【0065】
ブート抑止ファームウェアフラグ52のデータをクリアすると、制御部11は、ブート中ファームウェアフラグ71のデータを稼働中ファームウェアフラグ72にコピーする(ステップ135)。データのコピーを行うと、制御部11は、ブート中ファームウェアフラグ71のデータをクリアする(ステップ136)。
【0066】
ブート中ファームウェアフラグ71のデータをクリアすると、制御部11は、ファームウェアアップデートフラグ53のデータをクリアにする(ステップ137)。ファームウェアアップデートフラグ53のデータをクリアにすると、ファームウェア起動完了処理は終了である。ファームウェア起動完了処理が終了すると、ファームウェアの全ての起動プロセスが完了し、ファームウェアのメインの処理が動作を開始する。
【0067】
ブート抑止ファームウェアフラグ52に抑止状態を示すファームウェアがあるとき(ステップ132でYes)、制御部11はファームウェア同期処理を実行する(ステップ138)。ファームウェア同期処理は、後で説明する。ファームウェア同期処理を終えると、制御部11はステップ134以降の処理を行う。
【0068】
ファームウェアアップデートフラグ53にアップデートフラグが立っているとき(ステップ133でYes)、制御部11はファームウェア同期処理を実行する(ステップ138)。ファームウェア同期処理を終えると、制御部11はステップ134以降の処理を行う。
【0069】
本実施形態の記憶装置10は、同一のデータからなるファームウェアを第1のファームウェア41、第2のファームウェア42および第3のファームウェア43として冗長化しNAND型フラッシュメモリ等で構成されるメモリ素子に保存している。また、本実施形態の記憶装置10では、バックアップメモリ部15に保存された各フラグに基づいて、ファームウェアのメモリ部17へのロードが行われている。バックアップメモリ部15に保存された各フラグで指定されていないファームウェアにはアクセスしないので、メモリ素子へのアクセスの回数を抑制することができる。そのため、本実施形態の記憶装置10では、メモリ素子の劣化を抑制することで信頼性を向上することができる。
【0070】
次に、ファームウェア同期処理について説明する、ファームウェア同期処理は、ファームウェア間でデータの同期を行う処理である。例えば、三重化によって冗長化されたファームウェアに異常が生じている場合に、ファームウェア間でデータの同期を行ってデータの修復が行われる。
図8、
図9、
図10および
図11は、ファームウェア同期処理の動作フローの概要を示した図である。また、以下の説明では通常時の動作フローを示す
図4、
図5、
図6および
図7も参照して説明を行う。
【0071】
始めに三重化されたファームウェアのうち1つのファームウェアのデータが破損していた場合に行われるファームウェア同期処理の例について説明する。以下では、電源投入後の起動時に第1のファームウェア41のデータが破損していた場合を例に説明する。また、そのとき、第2のファームウェア42および第3のファームウェア43は正常なデータであるとして説明を行う。
【0072】
以下の説明では、電源投入後の動作開始時において、優先起動ファームウェアフラグ51は、第1のファームウェア41を優先的にブートする「0x00」に設定されているとする。ブート抑止ファームウェアフラグ52は、ブートを抑止するファームウェアが無いことを示す「0x00」として設定されているとする。また、ファームウェアアップデートフラグ53は、ファームウェアのアップデートは行われていないことを示す「0x00」として設定されているとする。
【0073】
電源投入後、制御部11は
図4のステップ101以降に示すブートローダの初期化処理を行う。ブートローダの初期化処理を行うと、制御部11は、
図5のステップ110以降に示すファームウェアの起動準備処理を行う。ファームウェアの起動準備処理を終えると、制御部11は
図6に示すステップ121以降のファームウェア起動処理を行う。
【0074】
図6のステップ125において第1のファームウェア41のデータに異常があると判断すると、制御部11は、ブート抑止ファームウェアフラグ52の第1のファームウェア41に対応するビットをブートの抑止を示す「1」に設定する(ステップ128)。
【0075】
ブート抑止ファームウェアフラグ52を設定して異常があるファームウェアの起動を抑止すると、制御部11は、再度、
図5のステップ110以降に示すファームウェアの起動準備処理を行う。ファームウェアの起動準備処理を行う(ステップ129)。
【0076】
再度、ファームウェアの起動準備処理を行う際、優先起動ファームウェアフラグ51には、第1のファームウェア41を優先的にブートする「0x00」が設定されている。一方で、ブート抑止ファームウェアフラグ52は第1のファームウェア41のブートを抑止する設定になっている。そのため、第1のファームウェア41はブートの対象とはならない。
【0077】
第1のファームウェア41のブートが抑止されているので、制御部11は、他のファームウェアの起動を行う。制御部11は、ブートが抑止されていない第3のファームウェア43を選択したとする。第2のファームウェア42と第3のファームウェア43のどちらを選択するかの方法は、あらかじめ優先順位が設定されている方法でもよく、また、ブートが抑止されていないファームウェアの中から任意に選択される方法でもよい。
【0078】
第3のファームウェア43には異常がないので、
図6のステップ121からのファームウェア起動処理および
図7のステップ130からの起動完了処理が順次、行われる。
図7に示すファームウェア起動完了処理のステップ132において第1のファームウェア41が抑止状態であるので、ステップ138においてファームウェア同期処理が開始される。
【0079】
ファームウェア同期処理が開始されると、
図8のステップ141において制御部11は、ブート中ファームウェアフラグ71およびブート抑止ファームウェアフラグ52を読み込む。ブート中ファームウェアフラグ71等を読み込むと、制御部11はブート中のファームウェアを確認する。ブート中のファームウェアは第3のファームウェア43なので(ステップ142でYes)、制御部11はステップ144の判断に移行する。ステップ144においてブート中のファームウェアは第1のファームウェア41ではないので(ステップ144でNo)、制御部11は第1のファームウェア41の同期処理を実施する(ステップ145)。
【0080】
第1のファームウェア41の同期処理は
図10を参照して説明する。第1のファームウェア41の同期処理を開始すると(ステップ160)、制御部11は第1のファームウェア41および第3のファームウェア43のチェックサムを計算する(ステップ161)。
【0081】
チェックサムの計算を行うと制御部11は、第1のファームウェア41の計算したチェックサムの値とデータの末尾に添付されたチェックサムの値を比較する。計算した値と添付されている値が異なり第1のファームウェア41のチェックサムの値が正常でなかったとき(ステップ162でNo)、制御部11は第3のファームウェア43のデータで第1のファームウェア41のデータを上書きする(ステップ166)。第1のファームウェア41のデータが上書きされると、第1のファームウェア41の同期処理は終了となる(ステップ165)。
【0082】
計算した値と添付されている値が一致し第1のファームウェア41のチェックサムの値が正常であったとき(ステップ162でYes)、制御部11は、第1のファームウェア41と第3のファームウェア43のチェックサムの計算値を比較する。第1のファームウェア41と第3のファームウェア43のチェックサムの計算値が異なるとき(ステップ163でNo)、制御部11は第3のファームウェア43のデータで第1のファームウェア41のデータを上書きする(ステップ166)。第1のファームウェア41のデータが上書きされると、第1のファームウェア41の同期処理は終了となる(ステップ165)。
【0083】
第1のファームウェア41と第3のファームウェア43のチェックサムの計算値が一致するとき(ステップ163でYes)、制御部11は第1のファームウェア41のブート抑止ファームフラグ52を確認する。第1のファームウェア41のブート抑止ファームフラグ52が抑止状態のとき(ステップ164でYes)、制御部11は第3のファームウェア43のデータで第1のファームウェア41のデータを上書きする(ステップ166)。第1のファームウェア41のデータが上書きされると、第1のファームウェア41の同期処理は終了となる(ステップ165)。
【0084】
第1のファームウェア41のブート抑止ファームフラグ52が抑止状態ではないとき(ステップ164でNo)、制御部11は処理を行わずに第1のファームウェア41の同期処理を終了する(ステップ165)。
【0085】
上記の例では、第1のファームウェア41のチェックサムの計算値と添付されたデータが異なるか、第1のファームウェア41および第3のファームウェア43のチェックサムの値が互いに異なる。よって、ステップ166において、異常が生じている第1のファームウェア41のデータが、正常な第3のファームウェア43のデータで上書きされる。正常な第3のファームウェア43のデータで上書きされることで、第1のファームウェア41は正常に稼働可能な状態に戻る。
【0086】
第1のファームウェア41の同期処理が終わると、
図8のステップ145の処理が終わるので、制御部11はステップ146の動作を行う。制御部11は、ブート中ファームウェアフラグ71を参照し第2のファームウェア42がブート中かを確認する。第2のファームウェア42は、ブート中ではないので(ステップ146でNo)、制御部11は第2のファームウェア42の同期処理の工程を実施する(ステップ147)。
【0087】
第2のファームウェア42の同期処理の工程は
図11を参照して説明する。第2のファームウェア42の同期処理を開始すると(ステップ170)、制御部11は第2のファームウェア42と第3のファームウェア43のチェックサムを計算する(ステップ171)。
【0088】
チェックサムの計算を行うと制御部11は、第2のファームウェア42の計算したチェックサムの値とデータの末尾に添付されたチェックサムの値を比較する。計算した値と添付されている値が異なり第1のファームウェア41のチェックサムの値が正常でなかったとき(ステップ172でNo)、制御部11は第3のファームウェア43のデータで第2のファームウェア42のデータを上書きする(ステップ176)。第2のファームウェア42のデータが上書きされると、第2のファームウェア42の同期処理は終了となる(ステップ175)。
【0089】
計算した値と添付されている値が一致し第2のファームウェア42のチェックサムの値が正常であったとき(ステップ172でYes)、制御部11は、第2のファームウェア42と第3のファームウェア43のチェックサムの計算値を比較する。第2のファームウェア42と第3のファームウェア43のチェックサムの計算値が異なるとき(ステップ173でNo)、制御部11は第3のファームウェア43のデータで第2のファームウェア42のデータを上書きする(ステップ176)。第2のファームウェア42のデータが上書きされると、第2のファームウェア42の同期処理は終了となる(ステップ175)。
【0090】
第2のファームウェア42と第3のファームウェア43のチェックサムの計算値が一致するとき(ステップ173でYes)、制御部11は第2のファームウェア42のブート抑止ファームフラグ52を確認する。第2のファームウェア42のブート抑止ファームフラグ52が抑止状態のとき(ステップ174でYes)、制御部11は第3のファームウェア43のデータで第2のファームウェア42のデータを上書きする(ステップ176)。第2のファームウェア42のデータが上書きされると、第2のファームウェア42の同期処理は終了となる(ステップ175)。
【0091】
第2のファームウェア42のブート抑止ファームフラグ52が抑止状態ではないとき(ステップ174でNo)、制御部11は処理を行わずに第2のファームウェア42の同期処理を終了する(ステップ175)。
【0092】
上記の例では、第2のファームウェア42は正常なのでステップ172およびステップ173はともにYesとなる。また、第2のファームウェア42のブートは抑止されていないので、ステップ174はNoとなる。よって、制御部11は第2のファームウェア42のデータは更新せずに、第2のファームウェ42の同期処理の工程を終了する。
【0093】
第2のファームウェア42の同期処理の工程が終わると、
図8のステップ147の処理が終わるので、ファームウェアの同期処理は終了となる(ステップ148)。
【0094】
次に、電源投入後に起動しようとしたファームウェアの他にさらに異常のファームウェアがあった場合について説明する。以下の説明では、第1のファームウェア41および第3のファームウェア43のデータが破損し、第2のファームウェア42のデータが正常であるとして説明を行う。
【0095】
電源投入後、制御部11は
図4のステップ101以降に示すブートローダの初期化処理を行う。ブートローダの初期化処理を行うと、制御部11は、
図5のステップ110以降に示すファームウェアの起動準備処理を行う。ファームウェアの起動準備処理を終えると、制御部11は
図6に示すステップ121以降のファームウェア起動処理を行う。
【0096】
制御部11は、異常が1つのみであった場合と同様に第1のファームウェア41および第3のファームウェア43の起動を順次試みるが、2つとも異常であるために第2のファームウェア42を起動する。このとき、第1のファームウェア41および第3のファームウェア43のブート抑止ファームウェアフラグ52は、ともにブートの抑止を示す「1」に設定されている。そのため、制御部11は、ブートが抑止されていない第2のファームウェア42をメモリ部17にロードし、実行する。
【0097】
第2のファームウェア42が起動すると、各種初期化処理の後に、
図7のステップ130以降に示すファームウェア起動完了処理を行う。
図7のステップ130およびステップ131は、通常と同じように処理が行われる。
図7のステップ132において抑止状態のファームウェアが存在するので(ステップ132でYes)、制御部11はファームウェアの同期処理を実行する(ステップ138)。
【0098】
ファームウェアの同期処理を開始すると、
図8のステップ141で、制御部11は、ブート中ファームウェアフラグ71とブート抑止ファームウェアフラグ52のデータを読み込む。ブート中ファームウェアフラグ71等を読み込むと、制御部11はブート中のファームウェアを確認する。ブート中のファームウェアは第2のファームウェア42なので(ステップ142でNo)、制御部11は第3のファームウェア43の同期処理を実施する(ステップ143)。
【0099】
第3のファームウェア43の同期処理について
図9を参照して説明する。第3のファームウェア43の同期処理を開始すると(ステップ150)、制御部11は第3のファームウェア43のチェックサムを計算する。第3のファームウェア43にデータに異常があるので、チェックサムの計算値はデータに添付されたチェックサムとは一致しない。チェックサムの値は正常ではないので(ステップ152でNo)、制御部11は起動中の第2のファームウェア42のデータで第3のファームウェア43のデータを上書きする。第3のファームウェア43のデータを上書きすると、制御部11は第3のファームウェアの同期処理を終了する(ステップ154)。正常なデータである第2のファームウェア42のデータで第3のファームウェア43のデータの上書きが行われたので、第3のファームウェア43は正常に稼働可能な状態に戻る。
【0100】
誤ったデータの書き込み等のエラーでチェックサムの値が正常であった場合にも、第3のファームウェアが抑止状態のため(ステップ153でYes)、ステップ155で第3のファームウェア43のデータの上書きが行われる。第3のファームウェアの同期処理が終わると
図8のステップ144に進む。
【0101】
図8のステップ144において、ブート中のファームウェアは第1のファームウェア41ではないので(ステップ144でNo)、制御部11は第1のファームウェア41の同期処理を実施する(ステップ145)。
【0102】
第1のファームウェア41の同期処理は
図10を参照して説明する。第1のファームウェア41の同期処理を開始すると(ステップ160)、制御部11は第1のファームウェア41および第2のファームウェア42のチェックサムを計算する(ステップ161)。
【0103】
チェックサムの計算を行うと制御部11は、第1のファームウェア41の計算したチェックサムの値とデータの末尾に添付されたチェックサムの値を比較する。計算した値と添付されている値が異なり第1のファームウェア41のチェックサムの値は正常ではないので(ステップ162でNo)、制御部11は第2のファームウェア42のデータで第1のファームウェア41のデータを上書きする(ステップ166)。第1のファームウェア41のデータが上書きされると、第1のファームウェア41の同期処理は終了となる(ステップ165)。正常なデータである第2のファームウェア42のデータで第1のファームウェア41のデータの上書きが行われたので、第1のファームウェア41は正常に稼働可能な状態に戻る。
【0104】
第1のファームウェア41の同期処理が終わると
図8のステップ146に進む。ステップ146において第2のファームウェア42が起動中なので(ステップ146でYes)、ファームウェアの同期処理は終了となる(ステップ148)。ファームウェアの同期処理が終わると、制御部11は
図7のステップ134からステップ137の起動完了処理を実施する。起動完了処理の実行が全て終わると、ファームウェアの全ての起動プロセスが完了しファームウェアのメインの処理が動作を開始する。
【0105】
本実施形態の記憶装置10では、2つのファームウェアに異常が生じた場合にも、もう1つのファームウェアのデータを上書きすることで異常が生じたファームウェアのデータを正常な状態に戻すことができる。よって、本実施形態の記憶装置10は、三重化によって冗長化されたファームウェアを備えることで高い信頼性を有する。
【0106】
次にファームウェアのアップデート処理が行われる際の動作について説明する。
図12はファームウェアのデータ更新、すなわち、アップデートを行う際の動作フローの概要を示した図である。
【0107】
以下の説明では、第1のファームウェア41が稼働中であるとして説明を行う。このとき、優先起動ファームウェアフラグ51は、第1のファームウェア41を優先的にブートすることを示す「0x00」に設定されているとする。ブート抑止ファームウェアフラグ52は、ブート抑止するファームウェア無し、ファームウェアアップデートフラグ53は、ファームウェアアップデートは行われていない状態に設定されているとする。また、ブート中ファームウェアフラグ71は、ブート中ではない状態、稼働中ファームウェアフラグ72は、第1のファームウェア41が正常稼働中である状態に設定されているとする。また、全てのファームウェアのデータは正常であるとする。
【0108】
外部のアップデートツール等からファームウェアのアップデートの要求を受け取ると、制御部11は、ファームウェアのアップデート処理を開始する。アップデート処理を開始すると、制御部11は、ファームウェアイメージを取得しメモリ部17に保存する(ステップ181)。ファームウェアイメージは、外部サーバからダウンロードされるような構成としてもよい。
【0109】
ファームウェアイメージをメモリ部17に保存すると、制御部11は、稼働中ファームウェアフラグ72を確認する。このとき、稼働中ファームウェアフラグ72は、第1のファームウェア41が稼働中であることを示している。稼働中ファームウェアフラグ72を確認すると、制御部11は、ブート抑止ファームウェアフラグ52のビット1に「1」をセットし、アップデートを行う第2のファームウェア42のブートを抑止状態にする(ステップ182)。これは、第2のファームウェア42の更新中に、ファームウェア再起動や電源断が発生した場合に、書き換え中の第2のファームウェア42が起動してしまうことを防ぐためである。
【0110】
ファームウェアのアップデートは第3のファームウェア43を先に行ってもよい。稼働をしていない2つのファームウェアのどちらを先にアップデートするかについては、あらかじめ設定されていてもよく、また、制御部11が任意に選択してもよい。
【0111】
第2のファームウェア42のブートを抑止状態にすると、制御部11は、ファームウェアイメージのデータを第2のファームウェア42に上書きして書き込む(ステップ183)。ファームウェアイメージのデータを第2のファームウェア42に上書きすると、制御部11は、ブート抑止ファームウェアフラグ52のビット1を「0」にすることでクリアを行い、第2のファームウェア42のブートの抑止状態を解除する(ステップ184)。
【0112】
第2のファームウェア42のブートの抑止状態を解除すると、制御部11は、ブート抑止ファームウェアフラグ52のビット2に「1」をセットし、第3のファームウェア43のブートを抑止状態にする(ステップ185)。
【0113】
第3のファームウェア43のブートを抑止状態にすると、制御部11は、ファームウェアイメージのデータを第3のファームウェア43に上書きして書き込む(ステップ186)。ファームウェアイメージのデータを第3のファームウェア43に上書きすると、制御部11は、ブート抑止ファームウェアフラグ52のビット2を「0」にすることでクリアを行い、第3のファームウェア43のブートの抑止状態を解除する(ステップ187)。
【0114】
第3のファームウェア43のブートの抑止状態を解除すると、制御部11は、優先起動ファームウェアフラグ51を、第2のファームウェア42を優先的に起動することを示す「0x01」に設定する(ステップ188)。優先起動ファームウェアフラグ51に設定するファームウェアは、例えば、先に上書き処理をした方のファームウェアとして設定されている。
【0115】
優先起動ファームウェアフラグ51の設定を行うと、制御部11は、ファームウェアアップデートフラグ53にアップデートが行われたことを示す「0x01」設定する(ステップ189)。ファームウェアアップデートフラグ53を設定すると、制御部11は、ファームウェアの再起動を行う(ステップ190)。
【0116】
制御部11は、再起動によって優先起動ファームウェアフラグ51が設定された第2のファームウェア42を立ち上げる処理を行う。再起動が行われると、制御部11は、
図5のステップ110からのファームウェア起動準備処理を実行する。ファームウェア起動準備処理が終わると、制御部11は、
図6のステップ121からのファームウェア起動処理を実行する。ファームウェア起動処理が終わると、第2のファームウェア42が立ち上がり、
図7のステップ130からのファームウェア起動完了処理が実行される。
図7に示す起動完了処理のステップ133において、ファームウェアアップデートフラグ53が設定されたファームウェアが検知されるので、ステップ138のファームウェアの同期処理が行われる。ファームウェアの同期処理を開始すると、制御部11は、
図8のステップ141から処理を行う。
図8のステップ141から処理を行う中で、ステップ145において第1のファームウェア41の同期処理が行われる。
【0117】
図10に示す第1のファームウェア41の同期処理において、ファームアップデート処理前の第1のファームウェア41と、アップデート処理後の第3のファームウェア43では、チェックサムの値は異なる(ステップ163でNo)。このとき、制御部11は第1のファームウェア41の更新が必要と判断し、第3のファームウェア43のデータを第1のファームウェア41に上書きする(ステップ166)。以上の動作によりすべてのファームウェアがアップデート後のデータとなる。同期処理によって第1のファームウェア41のアップデートが完了すると、制御部11は、
図7のステップ134からステップ137の起動完了処理を行いファームウェアのブートの抑止状態等を解除する。
【0118】
本実施形態の記憶装置10では、ファームウェアの更新、すなわち、アップデートを行う際に、取得したアップデート用のファームウェアイメージを元に2つのファームウェアのデータの更新を行っている。本実施形態の記憶装置10は、更新を行った2つのファームウェアのうちいずれか一方が正常に起動することを確認している。本実施形態の記憶装置10は、更新を行ったファームウェアのデータが正常に起動することを確認した後に、更新を行っていない残り1つのファームウェアのデータを更新後のデータで上書きしている。本実施形態の記憶装置10では、このような方法でファームウェアのアップデートを行うことで、データの更新中に電源断のような異常が生じた場合にデータが破損してすべてのファームウェアが起動不可になる状態を避けることができる。よって、本実施形態の記憶装置10は、起動不可になる状態を避けてファームウェアのアップデートが可能なので高い信頼性を有する。
【0119】
次にファームウェアのアップデート時に異常が生じた場合の動作について説明する。
図13は、ファームウェアのアップデート時に異常が生じた場合の動作フローの概要を示したものである。以下の説明では、第1のファームウェア41か稼働中であるとして説明を行う。このとき、優先起動ファームウェアフラグ51は、第1のファームウェア41を優先的にブートすることを示す「0x00」に設定されているとする。ブート抑止ファームウェアフラグ52は、ブート抑止するファームウェア無し、ファームウェアアップデートフラグ53は、ファームウェアアップデートは行われていない状態に設定されているとする。また、ブート中ファームウェアフラグ71は、ブート中ではない状態、稼働中ファームウェアフラグ72は、第1のファームウェア41が正常稼働中である状態に設定されているとする。また、全てのファームウェアは正常であるとする。
【0120】
外部のアップデートツール等からファームウェアのアップデートの要求を受け取ると、制御部11は、ファームウェアのアップデート処理を開始する(ステップ191)。アップデート処理を開始すると、制御部11は、ファームウェアイメージを受け取りメモリ部17に保存する。このとき、受け取ったファームウェアイメージが正常なデータでなかったものとして説明を行う。
【0121】
制御部11はアップデート用のファームウェアのデータとしてファームウェアイメージを取得すると、第2のファームウェア42にファームウェアイメージを書き込む(ステップ192)。ファームウェアイメージの書き込みを行うと、制御部11は、第2のファームウェア42のチェックサムの計算等のベリファイを実施する(ステップ193)。次に、制御部11は、第3のファームウェア43にアファームウェアイメージの書き込みを行う(ステップ194)。ファームウェアイメージの書き込みを行うと、制御部11は、第3のファームウェア43のチェックサムの計算等のベリファイを実施する(ステップ195)。
【0122】
第2のファームウェア42と第3のファームウェア43にファームウェアイメージの書き込みを行うと、制御部11はファームウェアの再起動を行って、第2のファームウェア42を起動する(ステップ196)。
【0123】
再起動を行った際に第2のファームウェア42が正常に起動しなかった場合は(ステップ197でNo)、第3のファームウェア43の起動の確認が行われる。第3のファームウェア43が正常に起動した場合には(ステップ200でYes)、制御部11は、第3のファームウェア43のデータを第1のファームウェア41および第2のファームウェア42にコピーする(ステップ201)。第3のファームウェア43のデータをコピーすることで、すべてのファームウェアのデータがアップデートされたものとなる。第3のファームウェア43のデータがコピーされると、ファームウェアのアップデートの処理は終了となる(ステップ199)。
【0124】
第3のファームウェア43が正常に起動しなかった場合には(ステップ200でNo)、制御部11は第1のファームウェア41のデータを第2のファームウェア42および第3のファームウェア43にコピーする(ステップ202)。アップデート前の第1のファームウェア41のデータを他のファームウェアにコピーすることでロールバックの処理が完了する。アップデート前の第1のファームウェア41のデータが他のファームウェアにコピーされると、ファームウェアのアップデートの処理は、実際のアップデートは未了な状態で終了となる(ステップ199)。
【0125】
再起動を行った際に第2のファームウェア42が正常に起動した場合は(ステップ197でYes)、制御部11は第2のファームウェア42のデータを第1のファームウェア41にコピーする(ステップ198)。第2のファームウェア42のデータをコピーすることで、すべてのファームウェアのデータがアップデートされたものとなる。第2のファームウェア42のデータがコピーされると、ファームウェアのアップデートの処理は終了となる(ステップ199)。
【0126】
上記のような方法で、ファームウェアのアップデートおよびロールバック処理を行うことで、アップデートを行ったファームウェアに異常が生じた場合にも、更新前のファームウェアのデータを上書きすることで、データを正常な状態に戻すことができる。そのため、本実施形態の記憶装置10は起動可能なファームウェアが無くなる状態を避けることができる。
【0127】
本実施形態の記憶装置10は、同一のデータからなるファームウェアを第1のファームウェア41、第2のファームウェア42および第3のファームウェア43として冗長化しNAND型フラッシュメモリ等で構成されるメモリ素子に保存している。また、本実施形態の記憶装置10では、バックアップメモリ部15に保存された各フラグに基づいて、ファームウェアのメモリ部17へのロードが行われている。バックアップメモリ部15に保存された各フラグで指定されていないファームウェアにはアクセスしないので、メモリ素子へのアクセスの回数を抑制することができる。そのため、本実施形態の記憶装置10ではメモリ素子の劣化を抑制することができる。
【0128】
本実施形態の記憶装置10は、ファームウェアのアップデートを行う際に、三重化されたファームウェアのうち2つのファームウェアのアップデートを行い、その後に残りのファームウェアにデータをコピーしている。そのため、アップデート中に電源が切れるような障害が生じた場合にも冗長性が確保されているので、ファームウェアを起動できなくなる状態を避けることができる。また、本実施形態の記憶装置10は、アップデートに失敗した場合にも、更新前の残り1つのファームウェアのデータを用いて、ロールバック処理を行っている。そのため、アップデート処理において起動可能なファームウェアが無くなる状態をより避けることができる。
【0129】
以上より、本実施形態の記憶装置10ではファームウェアが冗長化された構成において、記憶素子へのアクセス回数を抑制して信頼性を向上することができる。また、アップデート処理を行う際に、稼働可能なファームウェアが無くなる状態を避けることができる。その結果、本実施形態の記憶装置10では、ファームウェアが冗長化された構成において、記憶素子へのアクセス回数を抑制して信頼性を向上することができる。
【0130】
(第3の実施形態)
本発明の第3の実施形態について詳細に説明する。第2の実施形態ではファームウェアのデータに異常が生じた際に、ファームウェア単位での修正を行った。本実施形態では、そのような構成に代えて、すべてのファームウェアに異常が生じたときに、正常なブロックのデータを他のファームウェアの異常が生じたブロックにコピーすることでファームウェアのデータを復元することを特徴とする。
【0131】
本実施形態の記憶装置の構成は、第2の実施形態と同様である。よって、以下の説明において、記憶装置の構成については
図2の記憶装置10を参照して説明を行う。また、本実施形態の記憶装置10の通常時の動作およびファームウェアのアップデート等に関する動作は第2の実施形態の同様である。よって、以下では、本実施形態の記憶装置10において、ブロックごとのデータのコピーにより正常なデータのファームウェアを復元する際の動作の説明のみを
図14を参照して行う。
図14は、ファームウェア復旧処理、すなわち、ブロックごとにデータの同期を行い正常なデータのファームウェアを復元する処理を行う際の動作フローの概要を示した図である。
【0132】
全てのファームウェアに異常が生じていると、ファームウェア起動準備処理において、ブート抑止ファームウェアフラグ52のすべてのビットがセットされた状態になる。ブート抑止ファームウェアフラグ52のすべてのビットがセットされた状態になると、制御部11はファームウェア復旧処理を開始する(ステップ211)。
【0133】
ファームウェア復旧処理を開始すると、制御部11は、ファームウェアのサイズ(Firmware Size)とブロックのサイズ(Block Size)の初期値をそれぞれ設定する(ステップ212)。ブロックとは、第2の情報記憶部14を一定の記憶容量の単位ごとに分割した領域のことをいう。例えば、ブロックサイズの初期値は64kバイト、ファームウェアサイズの初期値は16Mバイトとして、ファームウェアのサイズとブロックのサイズがそれぞれ設定される。ファームウェアのサイズとブロックのサイズの初期値は、他の設定値であってもよい。
【0134】
制御部11は、ファームウェアのサイズとブロックのサイズの初期値を設定すると、ブロック数(Number of Blocks)を算出する(ステップ213)。ブロック数は、(ファームウェアサイズ)/(ブロックサイズ)で算出される。
【0135】
制御部11は、ブロックを先頭の記憶領域から処理するためブロック番号(Index)を「1」に設定して初期化する(ステップ214)。ブロック番号を初期化すると、制御部11は、ブロック番号に対応する第1のファームウェア41、第2のファームウェア42および第3のファームウェア43のデータを比較する(ステップ215)。
【0136】
3つのファームウェアにそれぞれ対応するブロックのデータがすべて異なるとき(ステップ216でYes)、制御部11は、ブロックのサイズを小さくしてデータの復元を行う動作を開始する。ブロックのサイズを小さくしてデータの復元を行う動作を開始すると、制御部11はブロックサイズの確認を行う。ブロックサイズが最小単位以下、例えば1バイト以下であった場合には(ステップ223でYes)、制御部11は、復旧処理を行うことができないと判断し処理を終了する(ステップ224)。
【0137】
ブロックのサイズが最小単位よりも大きいと判断すると、制御部11はブロックサイズを小さなサイズに設定する(ステップ225)。例えば、制御部11は、ブロックの記憶容量値を8で割った値をブロックサイズとして設定する。ブロックサイズを小さくする方法は、他の計算に基づいて行ってもよい。新たなブロックサイズを設定すると、制御部11は新たなサイズが最小単位よりも大きいことを確認する。新たなブロックサイズが最小単位未満であるときは、制御部11は新たなブロックサイズを最小単位、例えば1バイトとして設定する。
【0138】
新たなブロックサイズを設定すると、制御部11は、ステップ213に戻ってブロック数を再計算する。ブロック数を再計算すると、制御部11はブロック番号を初期値の「1」に設定してステップ214以降の処理を行う。ブロックサイズを小さくすることで、同一ブックが破損している可能性が低くなるのでデータの修復率が向上する。
【0139】
3つのファームウェアにそれぞれ対応するブロックのデータに同じものがあるとき(ステップ216でNo)、制御部11は、すべてのブロックのデータが一致するか確認する。3つのファームウェアのブロックのうち、2つのデータが同一でいずれか1つのみが他と異なる場合には(ステップ217でNo)、制御部11は2つが同一であった方のデータで異なっていたファームウェアのブロックのデータを上書きする(ステップ222)。このような多数決処理を行うことで、ブロックのデータは修復され得る。データの上書きを行うと、制御部11は、ブロック番号の値を1増加させる(ステップ218)。
【0140】
ブロック番号の値を増加させると、制御部11は、ブロック番号の値とブロック数の値を比較する。ブロック番号がブロック数の値よりも大きいとき(ステップ219でNo)、制御部11はすべてのブロックについて復旧処理が完了したと判断する。
【0141】
復旧処理が完了したと判断すると、制御部11は、ブート抑止ファームウェアフラグ52をクリアする(ステップ220)。ブート抑止ファームウェアフラグ52をクリアすると、制御部11は、ファームウェアの再起動を行い正常に起動するかの確認を行う(ステップ221)。制御部11は、再起動後は通常の方法で、ファームウェアの起動を行いファームウェアの内容に基づいた処理を行う。
【0142】
ステップ217ですべてのブロックのデータが一致したとき(ステップ217でYes)、制御部11はステップ218でブロック番号を1増加させてステップ219以降の処理を行う。
【0143】
本実施形態の記憶装置において、ブロックごとの同期処理によってファームウェアのデータを復元する場合の、各ブロックの構成の概要について説明する。
図15は、ファームウェアをブロックで分割した場合の各記憶領域を模式的に示したものである。
【0144】
図15の例では各ファームウェアはN個のブロックで構成されている。
図15の例では、ブロック1のデータは、第1のファームウェア41および第2のファームウェア42で一致し、第3のファームウェア43では異なっている。また、ブロック2のデータは、第2のファームウェア42および第3のファームウェア43で一致し、第1のファームウェア41では異なっている。同様に、ブロック3のデータは、第1のファームウェア41および第3のファームウェア43で一致し、第2のファームウェア42では異なっている。
【0145】
本実施形態では、制御部11はブロックごとに各ファームウェアのデータを比較し2つ以上一致した場合に正しいと判断する。
図15の例では、ブロック1、ブロック2およびブロック3についてそれぞれ2つのファームウェアでデータが一致している。よって、制御部11は、2つ以上のファームウェアで一致しているデータを残り1つにコピーすることで、ファームウェアのデータを復元することができる。
【0146】
図16は、
図15と同様にファームウェアをブロックで分割した場合の各記憶領域を模式的に示したものである。
図16の例では、ブロック3においてファームウェア間で一致するデータはない。よって、
図16の例では、制御部11はファームウェアの復元を行うことはできない。
【0147】
図17は、ブロックサイズを変更してブロックごとの同期を行った場合の例を示したものである。
図16の例では、ブロック3において各ファームウェアのデータが異なっていたため、ファームウェアを復元することができなかった。
図17の例では、本実施形態の方法を用いてブロックサイズを
図16の場合の半分にしている。そのため、ファームウェア間でデータが一致する可能性が高くなる。
【0148】
図18は、本実施形態と対比した構成においてブロックを小さくした場合の例を示したものである。
図18は、ブロックのデータの異常の有無をファームウェアごとにチェックサムを計算して判断する場合の例を示している。ファームウェアごと判断を行う場合には、ブロックごとにチェックサムを付加し、付加したデータと計算したチェックサムの比較を行う必要がある。ブロックサイズを小さくしてもチェックサムのサイズは小さくならないので、ブロック数が2倍になるとチェックサムも2倍の記憶容量を必要とする。
【0149】
一方で、本実施形態の記憶装置10では、ファームウェア間で同じブロック番号のデータを比較して異常の有無を判断しているので、チェックサムが無い場合でも異常の有無の判断が可能である。そのため、本実施形態の記憶装置10では、ブロックサイズを小さくした場合においてもチェックサムの記憶容量を増やさずにファームウェアの復元が可能となる。
【0150】
本実施形態の記憶装置10では、三重化されたファームウェア間でブロックごとにデータの比較を行い、2つ以上のファームウェアでデータが一致したときにデータが正常であると判断している。そのため、ブロックごとにチェックサム等を備えていなくても異常の有無を判断することができる。
【0151】
また、本実施形態の記憶装置10の制御部11は、異常が生じたと判断したときに、ブロックごとに同期を行ってファームウェアのデータの修復を行っている。その際に、制御部11は、3つのファームウェアのデータが全て異なるときに、ブロックのサイズを小さくして、データの修復を行っている。ブロックサイズを小さくすることで、3つのファームウェアでデータが互いに異なる可能性を小さくすることができる。そのため、データを修復できる可能性が高くなる。また、異常の有無の判断にチェックサムを必要としないので、ブロックを分割しても必要な記憶量は増加しない。
【0152】
以上より、本実施形態の記憶装置10は、必要な記憶容量の増加を抑制しつつ異常が生じたファームウェアのデータを、ブロック単位のデータの同期で修復することができる。そのため、本実施形態の記憶装置10では、ファームウェアに異常が生じた場合に、起動できなくなる可能性を抑制することができるので信頼性が向上する。
(第4の実施形態)
本発明の第3の実施形態について詳細に説明する。第2の実施形態および第3の実施形態では、3つのファームウェアがすべて対等に扱われていた。本実施形態では、そのような構成に代えて、稼働中のファームウェアの情報を要求する外部からのアクセスに対しては2つのファームウェアのみが稼働しているように応答することを特徴とする。すなわち、本実施形態の記憶装置を用いることで、3つ以上のファームウェアを備える記憶装置に対応していない装置にも適用することが可能となる。
【0153】
本実施形態の記憶装置の構成は、第2の実施形態と同様である。よって、以下の説明において、記憶装置の構成については
図2の記憶装置10を参照して説明を行う。また、本実施形態の記憶装置10の通常時の動作、ファームウェアのアップデート等に関する動作およびファームウェアの復旧に関する動作は、第2の実施形態または第3の実施形態の記憶装置10と同様である。よって、以下では、本実施形態の記憶装置10において、稼働中のファームウェアの情報を要求する外部からのアクセスに対して応答する動作についての説明のみ
図19を参照して行う。
図19は、稼働中のファームウェアの情報を要求する外部からのアクセスに対して応答する際の動作フローの概要を示した図である。
【0154】
本実施形態の記憶装置10では、通常時は第1のファームウェア41または第2のファームウェア42のいずれかが優先的に使用される。すなわち、起動可能なファームウェアが複数あるとき、制御部11は、優先起動ファームウェアフラグ52に第1のファームウェア41または第2のファームウェア42のいずれかを優先的に設定する。第1のファームウェア41または第2のファームウェア42のどちらを優先するかはあらかじめ設定されている。第1のファームウェア41または第2のファームウェア42のどちらを優先するかは、起動された回数に基づいて起動回数が少ない方が優先的に用いられるようにしてもよい。
【0155】
外部の装置から稼働中のファームウェアの情報を要求する信号が、記憶装置10に入力される。稼働中のファームウェアの情報を要求する信号が入力されると、制御部11は、稼働中ファームウェアフラグ72と優先起動ファームウェアフラグ51のデータを読みこむ(ステップ211)。稼働中ファームウェアフラグ72のデータを読み込むと、制御部11は、稼働中のファームウェアを確認する。
【0156】
稼働中のファームウェアが第3のファームウェア43以外のとき(ステップ212でNo)、制御部11は、稼働中ファームウェアフラグ72に設定されているファームウェアを稼働中のファームウェアとして応答する。稼働中ファームウェアフラグ72に設定されているファームウェアが第1のファームウェア41のとき(ステップ213でNo)、制御部11は、第1のファームウェア41が稼働中のファームウェアであると応答する。稼働中ファームウェアフラグ72に設定されているファームウェアが第2のファームウェア42のとき(ステップ213でYes)、制御部11は、第2のファームウェア42が稼働中のファームウェアであると応答する。
【0157】
稼働中のファームウェアが第3のファームウェア43であるとき(ステップ212でYes)、制御部11は優先起動ファームウェアフラグ51の内容を確認する。優先起動ファームウェアフラグ51が第1のファームウェア41を示しているとき(ステップ216でNo)、制御部11は第1のファームウェア41が稼働中と応答する(ステップ217。優先起動ファームウェアフラグ51が第2のファームウェア42を示しているとき(ステップ216でYes)、制御部11は第2のファームウェア42が稼働中と応答する(ステップ215)。
【0158】
本実施形態の記憶装置10は、起動中のファームウェアの情報についての外部からの要求に対して第1のファームウェア41または第2のファームウェア42を稼働中として応答している。第3のファームウェア44の稼働中であっても第1のファームウェア41または第2のファームウェア42のどちらかを応答として返すことで、ファームウェアの三重化に対応していない装置にも本実施形態の記憶装置10を用いることができる。このような構成とすることで、eMMCのように記憶装置が組み込まれている装置側のコントローラが所定の制御を行うような装置にも、本実施形態の記憶装置10を適用することができる。
【0159】
第2乃至第4の実施形態では、記憶装置10の制御部11がファームウェアに基づいて制御信号を生成して出力している。そのような構成に代えて、記憶装置10は、要求に応じてファームウェアのデータを出力するのみで、記憶装置10が組み込まれている装置側のコントローラ等がファームウェアに基づいた制御を行うようにしてもよい。
【0160】
第2乃至第4の実施形態では、ファームウェアを3つ備えることで冗長化されている記憶装置について説明した。そのような構成に代えて、ファームウェアを4つ以上備える構成としてもよい。ファームウェアを4つ以上備える場合には、アップデート後の2つ以上のファームウェアが正常に起動したときに、残りのファームウェアのアップデートが行われる。また、異常の有無を判断する際には、各ファームウェア間のデータを比較し多数決処理によって判断することができる。
【解決手段】記憶装置を、情報記憶手段1と、起動フラグ保存手段2と、制御手段3を備える構成とする。情報記憶手段1は、同一のデータの複数のファームウェアを、記憶素子のそれぞれに割り当てられた領域に保存する。起動フラグ保存手段2は、保存されているファームウェアのうち、いずれのファームウェアを起動するかを示す起動フラグと、起動を抑止するファームウェアの情報を示す起動抑止フラグとを保存する。制御手段3は、起動抑止フラグが設定されていない中から、いずれか1つのファームウェアに起動フラグを設定する手段を有する。また、制御手段3は、起動フラグに対応するファームウェアを記憶素子から読み出して、読み出したファームウェアに基づいて信号を出力する手段をさらに有する。