(57)【要約】      （修正有）【課題】ＯＳの動作環境下で更新した電子機器のファームウェアをシステムの再起動をしないで使用できるようにする。【解決手段】電子機器のＮＶＲＡＭ１０５に格納した旧ファームウェア１５１を電子機器のＤＲＡＭ１０７にロードする（Ｂ）。コンピュータがパワーオン・状態の間にＮＶＲＡＭに新識別情報１５３ａを含む新ファームウェア１５３を書き込む（Ｄ）。新ファームウェアの書き込みに応答してＤＲＡＭの記憶を維持しながら電子機器のプロセッサをリセットする。ＤＲＡＭに新識別情報を含む新ファームウェアをロードし、新識別情報を旧識別情報１５１ａで書き換える（Ｄ）。コンピュータがパワーオフ状態に移行する前に行われたＯＳ５３からの識別情報の要求に応じてＤＲＡＭの旧識別情報を返送する（Ｄ）。【選択図】図５
2015102889.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータに接続された電子機器の不揮発性メモリに格納された旧識別情報を含む旧ファームウェアを前記電子機器が更新する方法であって、
パワーオン状態の前記コンピュータから新識別情報を含む新ファームウェアを受け取って前記旧ファームウェアを更新するステップと、
前記旧識別情報を記憶しながら前記新ファームウェアを実行するステップと、
前記コンピュータがコールド・ブートする前にオペレーティング・システムから受け取った識別情報の要求に応答して前記記憶した旧識別情報を返送するステップと
を有する方法。
【請求項２】
前記旧識別情報を、前記新ファームウェアをロードするための揮発性メモリに記憶する請求項１に記載の方法。
【請求項３】
前記旧識別情報を前記電子機器の不揮発性メモリに記憶する請求項１に記載の方法。
【請求項４】
前記コンピュータがウォーム・ブートした後に前記オペレーティング・システムから受け取った識別情報の要求に応答して前記記憶した旧識別情報を返送するステップ
を有する請求項３に記載の方法。
【請求項５】
揮発性メモリにロードした前記新ファームウェアの新識別情報を前記記憶した旧識別情報で書き換えるステップを有する１から請求項４のいずれかに記載の方法。
【請求項６】
コンピュータに接続された電子機器の不揮発性メモリに格納された旧識別情報を含む旧ファームウェアを前記コンピュータが更新する方法であって、
前記旧識別情報を前記コンピュータが記憶するステップと、
パワーオン状態の前記コンピュータが新識別情報を含む新ファームウェアで前記旧ファームウェアを更新するステップと、
前記コンピュータがコールド・ブートする前にオペレーティング・システムが行った識別情報の要求に応答して前記記憶した旧識別情報を返送するステップと
を有する方法。
【請求項７】
前記旧識別情報を前記コンピュータのシステム・メモリに記憶する請求項６に記載の方法。
【請求項８】
前記旧識別情報を前記コンピュータの不揮発性メモリに記憶する請求項６に記載の方法。
【請求項９】
前記コンピュータがウォーム・ブートした後に前記オペレーティング・システムが行った識別情報の要求に応答して前記記憶した旧識別情報を返送するステップ
を有する請求項６から請求項８のいずれかに記載の方法。
【請求項１０】
前記コンピュータがコールド・ブートした後に前記オペレーティング・システムが行った識別情報の要求を前記電子機器に転送するステップと、
前記電子機器から識別情報を受け取るステップと
を有する請求項６から請求項９のいずれかに記載の方法。
【請求項１１】
前記電子機器がＡＴＡ（Advanced Technology Attachment）の規格に適合し、前記識別情報がＡＴＡのIDENTIFY DEVICEコマンドに応じて返送するデータである請求項１から請求項１０のいずれかに記載の方法。
【請求項１２】
前記電子機器が、ハードディスク・ドライブまたはソリッド・ステート・ドライブである請求項１から請求項１１のいずれかに記載の方法。
【請求項１３】
コンピュータに接続された旧識別情報を含む旧ファームウェアを実装する電子機器が、前記コンピュータがコールド・ブートする前にオペレーティング・システムから受け取った識別情報の要求に応じて前記旧識別情報を返送するために、前記電子機器に、
パワーオン状態の前記コンピュータから新識別情報を含む新ファームウェアを受け取って前記旧ファームウェアを更新するステップと、
前記旧識別情報を前記電子機器に記憶するステップと、
前記新ファームウェアを前記揮発性メモリにロードするステップと、
を有する処理を実行させるためのファームウェア。
【請求項１４】
前記コンピュータがウォーム・ブートした後に前記オペレーティング・システムから受け取った識別情報の要求に応答して前記旧識別情報を返送するために、前記電子機器に記憶するステップにおいて前記旧識別情報を不揮発性メモリに記憶する請求項１３に記載のファームウェア。
【請求項１５】
旧識別情報を含む旧ファームウェアを実装する電子機器が接続されたコンピュータに、
前記旧識別情報を前記コンピュータが記憶するステップと、
パワーオン状態の前記コンピュータが新識別情報を含む新ファームウェアで前記旧ファームウェアを更新するステップと、
前記コンピュータがコールド・ブートする前にオペレーティング・システムが行った識別情報の要求に応答して前記記憶した旧識別情報を返送するステップと
を有する処理をさせるためのコンピュータ・プログラム。
【請求項１６】
前記返送するステップにおいて、前記コンピュータがウォーム・ブートした後に前記オペレーティング・システムが行った識別情報の要求に応答して前記記憶した旧識別情報を返送する請求項１５に記載のコンピュータ・プログラム。
【請求項１７】
コンピュータに接続可能な電子機器であって、
プロセッサと、
旧識別情報を含む旧ファームウェアを格納する不揮発性メモリと、
ファームウェアを前記プロセッサが実行するための揮発性メモリとを有し、
前記旧識別情報を前記揮発性メモリに記憶しながら前記コンピュータから受け取った新ファームウェアで前記旧ファームウェアを更新し、前記揮発性メモリにロードした前記新ファームウェアの識別情報を前記旧識別情報で書き換える電子機器。
【請求項１８】
旧識別情報を含む旧ファームウェアを実装する電子機器を接続したコンピュータであって、
プロセッサと、
オペレーティング・システムを格納するディスク・ドライブと、
前記旧識別情報を格納した記憶媒体とを有し、
新識別情報を含む新ファームウェアで前記旧ファームウェアを更新し、コールド・ブートする前に前記オペレーティング・システムが行った識別情報の要求に応答して前記記録媒体に格納した旧識別情報を返送するコンピュータ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータに接続する電子機器のファームウェアをコンピュータがパワーオン状態で更新する技術に関し、さらには、更新したファームウェアをコールド・ブートまたはウォーム・ブートする前に利用できるようにする技術に関する。
【背景技術】
【０００２】
コンピュータが実装するハードディスク・ドライブ（ＨＤＤ）またはソリッド・ステート・ドライブ（ＳＳＤ）などの電子機器は、不揮発性メモリ（ＮＶＲＡＭ）にファームウェアというプログラム・コードを格納する。ファームウェアはデバイスの製造者によって随時更新されるため、ユーザはネットワークまたは記録媒体を通じて取得した新しいファームウェアで古いファームウェアを更新する必要がある。これまでのある更新方法では、ディスク・オペレーティング・システム（ＤＯＳ）の動作環境を利用していた。また他の更新方法では、オペレーティング・システム（ＯＳ）の動作環境下でＮＶＲＡＭの更新をした後も、次回の再起動まで揮発性メモリ（ＤＲＡＭ）が実行している古いファームウェアの実行を継続しておき、再起動後に新しいファームウェアを実行するようにしていた。
【０００３】
特許文献１は、クライアント・サーバ・システムにおけるサーバのＯＳを稼働させながら拡張ボード上のファームウェアをアップデートする方法を開示する。特許文献２は、稼働中のシステムのファームウェアを、次のシステム・リセットまで残す必要がある情報を保存しながら、システムを再起動しないで更新する方法を開示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００１−０７５８１０号公報
【特許文献２】特開２０００−１４８４６５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＨＤＤはパワーオン・リセット（ハードウェア・リセット）またはＣＰＵリセット（ソフトウェア・リセット）をしたときにＮＶＲＡＭに格納するファームウェアを内蔵するＤＲＡＭにロードしてＣＰＵが実行できるようにする。ＯＳは、コンピュータがパワーオフ状態からパワーオン状態に移行するためのいわゆるコールド・ブートのプロセスにおいて、コマンドを発行してその時点で装着されている電子機器の識別情報を取得する。
【０００６】
たとえば、ＯＳはIDENTIFY DEVICEというＡＴＡ（Advanced Technology Attachment）が規定するコマンドを発行してＨＤＤからモデル名、バージョン、更新日、シリアル番号、または容量などのＨＤＤを特定するための情報を取得する。このように電子機器を特定する一群の情報を以後識別情報ということにする。したがって、コンピュータがコールド・ブートを完了した時点でＯＳは、識別情報で特定される更新前のファームウェアを実装した電子機器が接続されていると認識している。
【０００７】
ユーザは、ＯＳの動作環境下でアプリケーション・プログラムを実行して作業をしている間にＨＤＤの動作が不調になると、ファームウェアの更新をする場合がある。このときユーザにはファームウェアを更新してただちにＨＤＤを利用したいという希望があるため前述のこれまでの２つの更新方法では、この要求を満たすことができない。パワーオン状態でファームウェアが更新されるとＨＤＤはただちに自らＣＰＵリセットをして、更新されたファームウェアをＤＲＡＭにロードし実行する。これをアクティベートという。アクティベートされるとＨＤＤは更新されたファームウェアで動作する。
【０００８】
Ｗｉｎｄｏｗｓ（登録商標）のＯＳは、パワーオン状態の間にIDENTIFY DEVICEというＡＴＡコマンドを発行してコンピュータに装着している電子機器から識別情報を取得する場合がある。ファームウェアが更新された後であればＨＤＤは、ＡＴＡコマンドに応答してＤＲＡＭにロードされている更新されたファームウェアの識別情報を返送する。ＯＳは受け取った識別情報を、コールド・ブートのプロセスで取得していた更新前の識別情報と比較する。このときＯＳは両者が一致しないと、新しい電子機器がコールド・ブートを経由しないで動作していると認識して、ブルースクリーンを表示する。
【０００９】
ブルースクリーンは、ＯＳに致命的なエラーが発生したときにシステムを停止させて、青い背景画面に白い文字でエラー・メッセージを表示する画面をいう。ブルースクリーンが表示されると多くの場合に回復のためにユーザが強制的にシャットダウンをする必要があったり、システムが自動的にシャットダウンをしたりする場合がある。いずれにおいてもブルースクリーンが発生すると、それまで保存していなかったデータは消失する。
【００１０】
シャットダウンの後にコールド・ブートをすると、ＯＳはコールド・ブートの間に更新された最新のファームウェアの識別情報を取得する。そして、それ以後はコールド・ブートの間に取得した識別情報とパワーオン状態で取得した識別情報が一致するためブルースクリーンを表示しない。しかし、パワーオン状態で更新したファームウェアをコールド・ブートしないで継続して実行することを許容しないＯＳの動作環境下でも、パワーオン状態でファームウェアを更新した後にただちに更新されたファームウェアで電子機器を動作させたいというユーザの要求がでてきた。
【００１１】
そこで本発明の目的は、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがコールド・ブートをしないで使用できるようにする方法を提供することにある。さらに本発明の目的は、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがウォーム・ブートした後も使用できるようにする方法を提供することにある。さらに本発明により、そのような方法を実現する電子機器、コンピュータ、およびコンピュータ・プログラムを提供することができた。
【課題を解決するための手段】
【００１２】
本発明は、パワーオン状態の間に電子機器の旧ファームウェアを更新したコンピュータが、コールド・ブートまたはウォーム・ブートする前にＯＳが電子機器に識別情報の要求をしてもブルースクリーンを表示させない更新方法を提供する。本発明の第１の態様は、コンピュータに接続された電子機器の不揮発性メモリに格納された旧識別情報を含む旧ファームウェアを電子機器が更新する方法を提供する。
【００１３】
パワーオン状態のコンピュータから新識別情報を含む新ファームウェアを受け取って旧ファームウェアを更新し、旧識別情報を記憶しながら新ファームウェアを実行し、コンピュータがコールド・ブートする前にＯＳから受け取った識別情報の要求に応答して記憶した旧識別情報を返送する。したがって、コンピュータがパワーオン状態の間にファームウェアを更新した後はコールド・ブートおよびウォーム・ブートをする前に新ファームウェアを実行することができる。
【００１４】
旧識別情報は、新ファームウェアをロードするための揮発性メモリに記憶することができる。旧識別情報は、電子機器の不揮発性メモリに記憶することができる。不揮発性メモリに記憶することで、コンピュータがウォーム・ブートした後にＯＳから受け取った識別情報の要求に応答して記憶した旧識別情報を返送することができる。したがって、ウォーム・ブート後に更新されたファームウェアを実行してもブルースクリーンは表示されない。新ファームウェアを揮発性メモリにロードしたときに、記憶した旧識別情報で新識別情報を書き換えると、新ファームウェアは新識別情報を返送する場合と同じ手順で返送できるので新ファームウェアが旧識別情報を返送するためのコードの書き換えが不要になる。
【００１５】
本発明の第２の態様では、コンピュータに接続された電子機器の不揮発性メモリに格納された旧識別情報を含む旧ファームウェアをコンピュータが更新する方法を提供する。旧識別情報をコンピュータが記憶し、パワーオン状態のコンピュータが新識別情報を含む新ファームウェアで旧ファームウェアを更新し、コンピュータがコールド・ブートする前にＯＳが行った識別情報の要求に応答して記憶した旧識別情報を返送する。
【００１６】
旧識別情報は、コンピュータのシステム・メモリに記憶することができる。さらに旧識別情報は、コンピュータの不揮発性メモリに記憶することもできる。この場合、コンピュータがウォーム・ブートした後にＯＳが行った識別情報の要求に応答して記憶した旧識別情報を返送することができる。また、このとき旧ファームウェアを更新する際にコンピュータが新識別情報を記憶しておけば、さらに新しいファームウェアで更新するときに、当該新識別情報を返送することができる。
【００１７】
コンピュータがコールド・ブートした後にＯＳが行った識別情報の要求を電子機器に転送し、電子機器から識別情報を受け取ることができる。電子機器がＡＴＡ（Advanced Technology Attachment）の規格に適合する場合は、識別情報をＡＴＡのIDENTIFY DEVICEコマンドに応じて返送するデータとすることができる。電子機器は、ハードディスク・ドライブまたはソリッド・ステート・ドライブとすることができる。
【発明の効果】
【００１８】
本発明により、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがコールド・ブートをしないで使用できるようにする方法を提供することができた。さらに本発明により、コンピュータがパワーオン状態の間に更新した電子機器のファームウェアをシステムがウォーム・ブートしたあとも使用できるようにする方法を提供することができた。さらに本発明により、そのような方法を実現する電子機器、コンピュータ、およびコンピュータ・プログラムを提供することができた。
【図面の簡単な説明】
【００１９】
【図１】コンピュータのハードウェア構成の一例を説明するための機能ブロック図である。
【図２】コンピュータ１０のソフトウェアの構成の一例を説明するための機能ブロック図である。
【図３】ＨＤＤ１００の構成を説明するための図である。
【図４】ファームウェアによる更新方法を説明するためのフローチャートである。
【図５】図４のフローチャートに対応する識別情報の状態を示す図である。
【図６】ファームウェアによる他の更新方法を説明するためのフローチャートである。
【図７】図６のフローチャートに対応する識別情報の状態を示す図である。
【図８】システムによる更新方法を説明するためのソフトウェアの構成の一例を説明するための機能ブロック図である。
【図９】システムによるウォーム・ブートをサポートする更新する方法を説明するためのフローチャートである。
【図１０】図９のフローチャートに対応する識別情報の状態を示す図である。
【発明を実施するための形態】
【００２０】
［コンピュータのパワー・ステート］
図１は、コンピュータ１０のハードウェア構成の一例を説明するための機能ブロック図である。図２は、コンピュータ１０がＨＤＤ１００のファームウェアを更新するために機能するソフトウェアの構成を説明するための機能ブロック図である。多くのハードウェアおよびソフトウェアの構成は周知であるため、ここでは本発明の理解に必要な範囲で説明する。最初にコンピュータ１０のパワー・ステートについて説明する。コンピュータ１０は、ＡＣＰＩ（Advanced Configuration and Power Interface）の省電力機能に対応している。ＡＣＰＩでは、Ｓ１ステートからＳ４ステートまでの４つのスリーピング状態（省電力状態）、Ｓ０ステート（パワーオン状態）、およびＳ５ステート（パワーオフ状態）を定義している。
【００２１】
ＡＣＰＩのスリーピング・ステートのなかでコンピュータ１０は、一例としてＳ３ステート（サスペンド状態）とＳ４ステート（ハイバネーション状態）だけを定義しているが他のスリーピング状態を定義してもよい。パワーオフ状態とスリーピング・ステートのときはＣＰＵ１１およびＨＤＤ１００の電源は必ず停止し、再起動の時にパワーオン・リセットが行われる。サスペンド状態では、システム・メモリ１３の記憶を保持し、システム・メモリ１３の記憶保持とコンピュータ１０の電源を起動するのに必要なデバイス以外のデバイスに対する電力を停止する。
【００２２】
ハイバネーション状態は、ＡＣＰＩでサポートされるスリーピング状態の中で最も起動までの時間が長く、かつ消費電力が少ない状態である。コンピュータ１０がパワーオン状態からハイバネーション状態に遷移する際には、ＯＳがＨＤＤ１００のハイバネーション領域などにシステム・メモリ１００が記憶するハイバネーション・データを格納してから電源の起動に必要なデバイス以外のデバイスに対する電力を停止する。
【００２３】
パワーオフ状態はいわゆるソフト・オフともいわれ、ＯＳがハイバネーション・データをＨＤＤ１００などに格納しない点を除いては基本的に電力を供給するデバイスの範囲はハイバネーション状態と同じである。なお、本発明におけるハイバネーション状態には、ＯＳがサスペンド状態に遷移させてから所定の時間が経過したときにＵＥＦＩ（Unified Extensible Firmware Interface）が自動的にハイバネーション状態に遷移させるパワー・ステートも含む。この場合は、ＯＳはシステムがサスペンド状態に遷移していると認識するが、実際のパワー・ステートはハイバネーション状態となる。
【００２４】
コンピュータ１０は、さらにパワーオン状態のときに、プロセッサの消費電力を極力低減し、かつ、ＨＤＤ１００を含む特定の電子機器をパワーオフ状態に遷移させるランタイムＤ３またはランタイム・アイドル状態検出というパワー・ステートを採用してもよい。パワーオフ状態とパワーオン状態以外のパワー・ステートが実行されると、ファームウェアが更新された後にＨＤＤ１００がパワーオン・リセットされ、かつシステムがコールド・ブートしない状態が発生する場合がある。
【００２５】
［コンピュータのハードウェアとソフトウェアの構成］
チップ・セットとして構成されるプラットフォーム・コントロール・ハブ（ＰＣＨ）１７にはＣＰＵ１１、無線ＬＡＮモジュール１９、ＨＤＤ１００、ファームウェアＲＯＭ２１、オーディオ・デバイス２３などの電子機器とエンベデッド・コントローラ（ＥＣ）２５が接続されている。ＣＰＵ１１にはシステム・メモリ１３およびＬＣＤ１５が接続されている。
【００２６】
ＰＣＨ１７は、さまざまな規格のインターフェース機能を備えており、図１では代表的にＳＡＴＡコントローラにＨＤＤ１００が接続され、ＰＣＩｅコントローラに無線ＬＡＮモジュール１９が接続され、ＳＰＩコントローラにファームウェアＲＯＭ２１が接続され、ＨＤＭＩ（登録商標）コントローラにオーディオ・デバイス２３が接続されＬＰＣコントローラにＥＣ２５が接続されている。
【００２７】
ファームウェアＲＯＭ２１は、不揮発性で記憶内容の電気的な書き替えが可能なメモリで複数のコード群で構成されたＵＥＦＩ５６を格納する。ＵＥＦＩ５６はＵＥＦＩフォーラムが策定したＢＩＯＳに代わってまたはＢＩＯＳに加えて使用する新しい仕様のシステム・ファームウェアである。ＵＥＦＩ５６は、コンピュータ１０がパワーオフ状態またはスリーピング状態からパワーオン状態にレジュームする際に、ＣＰＵ１１がパワーオン・リセットされると必ず最初に実行される。
【００２８】
ＵＥＦＩ５６は、レジュームする際に自身のコードに対する改変の有無を検査したり、パスワード認証をしたりデバイスを初期化したりするいわゆるＰＯＳＴを実行する。ＵＥＦＩ５６はシステムがレジュームするときの遷移元のパワー・ステートに応じてＰＯＳＴの内容を変えることができる。たとえば、パワーオフ状態からレジュームする際には、すべてのデバイスからパラメータを取得してインターフェースに設定する完全なＰＯＳＴを実行し、ハイバネーション状態からレジュームする際には一部のデバイスのＰＯＳＴをＯＳ５３に委ねたり以前に設定していたパラメータをインターフェースにリストアしたりしてＰＯＳＴ時間を短縮する。サスペンド状態からレジュームするときは短時間で終了できるようにより簡素なＰＯＳＴを実行する。
【００２９】
以後において、システムがパワーオフ状態からレジュームすることをコールド・ブートといい、ハイバネーション状態またはサスペンド状態からレジュームすることをウォーム・ブートという。コールド・ブートはＵＥＦＩ５６が完全なＰＯＳＴを実行してからブートするためシステムの安全性および動作の確実性を重点にした起動方法といえ、ウォーム・ブートはコールド・ブートに比べてシステムの安全性や確実性よりもレジューム時間の短縮に重点をおいた起動方法といえる。
【００３０】
ＯＳ５３はコールド・ブートの間にコンピュータ１０に装着されている電子機器の識別情報を取得し、ＨＤＤ１００を含む特定の電子機器が、パワーオフ状態に移行する前に交換されたり、ファームウェアが更新されたりすることを検出したときにブルースクリーンを表示する。ＯＳ５３は、ファームウェアが更新された特定の電子機器が接続された状態でコールド・ブートが完了したときには、コールド・ブートの間に当該電子機器の識別情報を取得して動作を認める。
【００３１】
ＰＣＨ１７は、ＡＣＰＩレジスタ３１を含む。ＡＣＰＩレジスタ３１はパワーオフ状態およびスリーピング状態の間も電力が供給される。ＡＣＰＩレジスタ３１は、ＡＣＰＩに規定するＳＬＰ＿ＴＹＰレジスタおよびＳＬＰ＿ＥＮレジスタに相当する。ＡＣＰＩレジスタ３１はパワーオン状態からパワーオフ状態またはスリーピング状態に遷移する際にＯＳ５３により設定される。ＯＳ５３は、システムがパワーオフ状態またはスリーピング状態に遷移する準備が完了したときにＡＣＰＩレジスタ３１に遷移先のパワー・ステートを設定する。ＡＣＰＩレジスタ３１に遷移先のパワー・ステートが設定されるとＰＣＨ１７はＥＣ２５を通じてコンピュータ１０を設定されたパワー・ステートに遷移させる。
【００３２】
ＵＥＦＩ５６はパワーオフ状態またはスリーピング状態からレジュームする際にＡＣＰＩレジスタ３１を参照し、遷移元のパワー・ステートに応じてＰＯＳＴの実行パスを決定する。ＵＥＦＩ５６は、遷移元のパワー・ステートがパワーオフ状態のときにコールド・ブートの実行パスを選択し、サスペンド状態またはハイバネーション状態のときはウォーム・ブートの実行パスを選択する。
【００３３】
ＥＣ２５は、ＣＰＵ、ＲＯＭ、ＲＡＭなどで構成されたマイクロ・コンピュータである。ＥＣ２５は、コンピュータ１０の内部の動作環境の管理にかかるプログラムをＣＰＵ１１とは独立して実行することができる。ＥＣ２５は、図示しないＤＣ／ＤＣコンバータ、電池パックの充電器、放熱ファンなどの動作を制御する。ＥＣ２５は、入力コントローラを含み、キーボードやポインティング・デバイスなどの入力デバイス２７が接続される。
【００３４】
図２で、更新プログラム５１は、ＯＳ５３のサービスを受けて動作するアプリケーション・プログラムである。更新プログラム５１は、DOWLOAD MICROCODEといったＡＴＡのコマンドを発行して、ＷＬＡＮモジュール１９を通じて受け取ったり、記録媒体を通じて受け取ったりした新ファームウェアでコンピュータ１０がパワーオン状態の間にＨＤＤ１００の旧ファームウェアを更新する。
【００３５】
ＯＳ５３は、一例としてＷｉｎｄｏｗｓ（登録商標）であるが、本実施の形態で定義するパワーオン更新をしたときにブルースクリーンを表示するＯＳであれば、これに限定する必要はない。ここにパワーオン更新とは、コンピュータ１０がパワーオン状態の間に、ＨＤＤ１００を接続した状態でＨＤＤ１００のＮＶＲＡＭ１０５（図３）が格納する旧ファームウェアを新ファームウェアで更新してからコンピュータ１０がパワーオフ状態に移行する前にアクティベートすることをいう。更新の際にはＮＶＲＡＭ１０５の旧ファームウェアを残しても上書きしてもよい。デバイス・ドライバ５５は、ＨＤＤ１００の動作を制御するプログラムである。
【００３６】
［ＨＤＤの構成］
図３は、ＨＤＤ１００の構成を説明するための図である。図３（Ａ）はＨＤＤ１００の全体構成を示し、図３（Ｂ）はＮＶＲＡＭ１０５のデータ構造を示している。ＨＤＤ１００は、ＰＣＨ１７に接続するＳＡＴＡインターフェース１０１、ＣＰＵ１０３、ＮＶＲＡＭ１０５、ファームウェアをロードするＤＲＡＭ１０７、ＣＰＵ１０３がリセットされたときに最初に実行するマイクロ・コードを格納するＲＯＭ１０９、磁気ディスク１１１、およびサスペンションやスピンドル・モータなどの機械機構１１３を含んでいる。これらのハードウェアの構造は周知であるため説明は省略する。
【００３７】
磁気ディスク１１１は、図２に示したプログラムを格納する。ＨＤＤ１００はブート・ドライブでコンピュータ１０が起動するときにロードされるブート・ファイルを格納している。ＮＶＲＡＭ１０５のファームウェア領域１６１には、更新の対象となるファームウェアを構成する識別情報とコード本体が格納される。また、退避領域には、ファームウェアの更新の際に、旧ファームウェアの旧識別情報が格納される。なお、更新の対象となるファームウェアを構成する識別情報とコード本体は、ＲＯＭ１０９または磁気ディスク１１１に格納することもできる。また、本発明によるファームウェアの更新はＨＤＤ１００に代えてＳＳＤに適用することもできる。
【００３８】
［更新方法１］
つぎに、図４、図５を参照して、ＨＤＤ１００がファームウェアをパワーオン更新する手順を説明する。図４はコンピュータ１０の動作手順を示すフローチャートで、図５はＮＶＲＡＭ１０５、ＤＲＡＭ１０７およびＯＳ５３が保有する識別情報の状態を示すブロック図である。ＯＳ５３は、識別情報をシステム・メモリ１３に記憶する。したがって、ＯＳが保有する識別情報は、システム・メモリ１３の電源が停止すると消失する。ただし、ハイバネーション状態に移行する際に消失した識別情報は、レジュームの際に再びシステム・メモリ１３に復帰される。
【００３９】
ブロック２０１では、コンピュータ１０がパワーオフ状態で、ＮＶＲＡＭ１０５は過去に更新された旧ファームウェア１５１を格納している（図５（Ａ））。旧ファームウェア１５１は、識別情報１５１ａとコード本体１５１ｂで構成されている。ＨＤＤ１００がパワーオフ状態であるため、ＤＲＡＭ１０７にはファームウェアがロードされておらず、また、システム側でもＯＳ５３がシステム・メモリ１３にロードされていない。
【００４０】
ブロック２０３で、コンピュータ１０に電源を投入するとＣＰＵ１１がＵＥＦＩ５６を実行してコールド・ブートを開始する。コールド・ブートでは、ＵＥＦＩ５６がすべてのデバイスの検出、検査、および構成を行う完全なＰＯＳＴを行ってからＯＳやアプリケーション・プログラムのロードを開始する。ブロック２０５で電源が投入されたＨＤＤ１００はパワーオン・リセットをする。パワーオン・リセットしたＣＰＵ１０３は、ＲＯＭ１０９のマイクロ・コードを実行して、ブロック２０７でＤＲＡＭ１０７の所定のアドレスに旧ファームウェア１５１をロードする。
【００４１】
ロードした旧ファームウェア１５１にＣＰＵ１０３の制御権が渡ると旧ファームウェア１５１がアクティベートされて実行状態になる。ブートが完了する前に、システム・メモリ１３にロードされたＯＳ５３はＨＤＤ１００にIDENTIFY DEVICEコマンドを送る。コマンドを受け取ったコード本体１５１ｂは、ブロック２０９で旧識別情報１５１ａをＯＳ５に返送する（図５（Ｂ））。ＯＳ５３は受け取った旧識別情報１５１ａを、以後、ＨＤＤ１００がパワーオン状態で交換されたか否かを判断するためにシステム・メモリ１３に記憶する。ブロック２１１でブートが終了してシステムはパワーオン状態に遷移する。
【００４２】
この状態では、ＤＲＡＭ１０７が記憶する識別情報１５１ａとＯＳ５３がコールド・ブートの間に取得した識別情報１５１ａが一致するため、コールド・ブートの完了後にＯＳ５３がIDENTIFY DEVICEコマンドを発行して識別情報を取得しても、コールド・ブートの際に装着されていたＨＤＤ１００が変更されていないと認識するため、ブルースクリーンを表示することはない。
【００４３】
ブロック２１３でユーザが更新プログラム５１を実行して、ネットワークまたは記録媒体を通じて取得した新ファームウェア１５３で旧ファームウェア１５１を更新する作業を開始する。ブロック２１５で更新プログラム５１は、DOWNLOAD MICROCODEというＡＴＡコマンドを発行する。ＡＴＡコマンドを受け取ったＤＲＡＭ１０７で実行中の旧コード本体１５１ｂは、旧識別情報１５１ａをＤＲＡＭ１０７の所定のアドレスに退避してから（図５（Ｃ））ＮＶＲＡＭ１０５のファームウェア領域１６１に新ファームウェア１５３を書き込む。なお、退避と書き込みの順番は逆でもよい。
【００４４】
新ファームウェア１５３は旧ファームウェア１５１を上書きするように書き込んでもよいし、旧ファームウェア１５１を残すように異なる領域に書き込んでもよい（図５（Ｄ））。ブロック２１７で書き込みが終わった旧コード本体１５３ａは、ＣＰＵ１０３にリセット信号を送ってＣＰＵリセットを行う。ＣＰＵリセットは、パワーオン・リセットとは異なりＤＲＡＭ１０７がリセットされないため、ＤＲＡＭ１０７にロードされた旧ファームウェア１５１の記憶は維持される。
【００４５】
リセットされたＣＰＵ１０３はブロック２１９で、ＲＯＭ１０９のマイクロ・コードを実行してＤＲＡＭ１０７の旧ファームウェア１５１がロードされていた所定のアドレスに新ファームウェア１５３をロードする。ロードが完了するとＣＰＵ１０３の制御権が新ファームウェア１５０ｂに移ってアクティベートされる。新ファームウェア１５３の新本体コード１５３ｂは、ブロック２２１でＤＲＡＭ１０７の所定のアドレスに退避しておいた旧識別情報１５１ａで新識別情報１５３ａを上書きする。
【００４６】
新識別情報１５３ａを旧識別情報１５１ａで書き換えることにより、新コード本体１５３ｂはＯＳ５３から識別情報の要求があったときに、新識別情報１５３ａを返送するのと同じ手順で旧識別情報１５１ａを返送することができる。ただし、この例に限らず、新本体コード１５３ｂは、ＤＲＡＭ１０７に退避した旧識別情報１５１ａが記憶されている限り、ＯＳ５３の要求に対して退避した旧識別情報１５１ａを返送するようにしてもよい。この場合は、ＤＲＡＭ１０７のリセットの前後で新本体コード１５３ｂがＯＳ５３に返送する識別情報のアドレスを変更する必要がでてくる。
【００４７】
ブロック２２３でその後システムがサスペンド状態またはハイバネーション状態に遷移してからレジュームする状態が発生したときはブロック２５１に移行し、発生しないときはブロック２２５に移行する。ブロック２２５でＯＳ５３が、ＨＤＤ１００にＡＴＡコマンドを送って識別情報を要求する。ＡＴＡコマンドを受け取った新コード本体１５３ｂは、ブロック２２７でＯＳ５３に旧識別情報１５１ａを返送する（図５（Ｄ））。この状態では、ＯＳ５３が保有する旧識別情報１５１ａと新コード本体１５３ｂが返送する旧識別情報１５１ａが一致するため、ＯＳ５３はコールド・ブート時のＨＤＤ１００は変更されていないと認識する。
【００４８】
ここで、ＨＤＤ１００は、旧識別情報１５１ａと新コード本体１５３ｂからなるファームウェアを実行することになるが、ファームウェアの更新はＯＳ５３の動作に影響を与えることがない部分に限って行うことがＨＤＤのメーカによって保証されているためコンピュータ１０の動作が不調になることはない。ブロック２５１では、システムがウォーム・ブートすると、ＨＤＤ１００はパワーオン・リセットされる。
【００４９】
ウォーム・ブートの際にＨＤＤ１００のＤＲＡＭ１０７が記憶しているファームウェアは消失するが、ＯＳ５３がブロック２０９で取得した旧識別情報１５３ａは、システム・メモリ１３に維持されているかまたはレジュームしたときにリストアされる。ブロック２５３でパワーオン・リセットしたＣＰＵ１０３は、ＲＯＭ１０９のマイクロ・コードを実行して新ファームウェア１５３をロードする。ブロック２５５でＯＳ５３が識別情報を要求すると、ブロック２５７で新本体コード１５３ｂはＯＳ５３に新識別情報１５３ｂを返送する。
【００５０】
ブロック２５９で、ＯＳ５３が保有する旧識別情報１５１ａと新コード本体１５３ｂが返送する新識別情報１５３ａは一致しないため、ＯＳ５３はコールド・ブート時に認識したＨＤＤ１００が変更されたと判断してブルースクリーンを表示する（図５（Ｅ））。なお、ブロック２２３では、ウォーム・ブートにだけ言及したが、パワーオン状態でＨＤＤ１００がパワーオン・リセットされるランタイムＤ３や、ＯＳ５３はサスペンド状態に遷移していると認識しているが実際にはハイバネーション状態に遷移しているような他のパワー・ステートからのレジュームについてもウォーム・ブートと同様に処理する。ブロック２２７またはブロック２５９に続くブロック２０３でコードル・ブートが行われると、新ファームウェア１５３がロードされ（図５（Ｆ））、ＯＳ５３もブート期間中に新識別情報１５３ｂを取得する。
【００５１】
［更新方法２］
更新方法１では、ウォーム・ブートに対応することができないが、つぎに、ウォーム・ブートにも対応できる他の更新方法を説明する。図６はコンピュータ１０の動作手順を示すフローチャートで、図７はＮＶＲＡＭ１０５、ＤＲＡＭ１０７およびＯＳ５３が保有する識別情報の状態を示すブロック図である。図６の手順は図４の手順と多くの点で共通するため、異なる点を中心に説明する。図７（Ａ）〜（Ｆ）は、図５（Ａ）〜（Ｆ）に対応する。
【００５２】
ブロック３０１では、ＮＶＲＡＭ１０５がファームウェア領域１６１に過去に更新した旧ファームウェア１５１を格納し、退避領域１６３にさらにそれより１回前に更新したファームウェアの旧旧識別情報１５５ａを格納している（図７（Ａ））。ブロック３０３からブロック３１３までは、旧旧識別情報１５５ａは関連しないため、図４のブロック２０３からブロック２１３までの手順と同じである（図７（Ｂ））。ブロック３１５で更新プログラム５１は、DOWNLOAD MICROCODEというＡＴＡコマンドを発行する。
【００５３】
ＡＴＡコマンドを受け取った実行中の旧コード本体１５１ｂは、ＮＶＲＡＭ１０５の退避領域１６３を旧識別情報１５１ａで上書きし、さらに旧識別情報１５１ａをＤＲＡＭ１０７の所定のアドレスに退避してから、ブロック３１７でシステムから受け取った新ファームウェア１５３をファームウェア領域１６１に書き込む（図７（Ｃ））。なお、退避領域１６３は、ＮＶＲＡＭ１０５とは異なる記憶媒体に設けてもよい。また、旧識別情報１５１ａは、ＮＶＲＡＭ１０５の退避領域１６３にも退避しているため、必ずしもＤＲＡＭ１０７には退避しないでもよい。
【００５４】
ブロック３１９からブロック３２９までの手順は、図４のブロック２１７から２２７までの手順と同じである（図７（Ｄ）、（Ｆ））。ブロック３３１では、コールド・ブートが発生しない限りブロック３２５に戻り、コールド・ブートが発生するとブロック３０３に戻る。ブロック３５１でＨＤＤ１００はパワーオン・リセットされ、ブロック３５３でＲＯＭ１０９のマイクロ・コードがファームウェア領域１６１に格納された新ファームウェア１５３をＤＲＡＭ１０７にロードする。リセットされたシステムのＣＰＵ１１は、ＨＤＤ１００の動作と並行してＵＥＦＩ５６を実行しウォーム・ブートを開始する。ＨＤＤ１００のデバイス・ドライバ５５は、ＨＤＤ１００がシステムからのアクセスの可能な状態になると、ＵＥＦＩ５６にレディ信号を送る。
【００５５】
デバイス・ドライバ５５からレディ信号を受け取ったＵＥＦＩ５６はブロック３５５で、ＡＣＰＩレジスタ３１を参照してウォーム・ブートであることを認識してＨＤＤ１００にウォーム・ブートを示す所定のコマンドまたはイベント情報を送る。ウォーム・ブートを示すイベント情報を受け取った新ファームウェア１５３は、ブロック３５７で退避領域１６３に退避していた旧識別情報１５１ａを、新識別情報１５３ａを上書きするようにロードする（図７（Ｅ））。その結果ブロック３５９でＯＳ５３から、識別情報の要求を受けてもブロック３６１で新本体コード１５３ｂは、旧識別情報１５１ｂを返送するため、ブルースクリーンが表示されることはない。更新方法１および更新方法２は、ファームウェアとＵＥＦＩ５６の一部を変更するだけでパワーオン更新の実現ができる。
【００５６】
上記の手順では、新ファームウェア１５３に更新された後でブロック３３１からブロック３０３に戻ったときに、退避領域１６３には旧識別情報１５１ａが書き込まれている（図７（Ｆ））。その結果、ブロック３０１では、退避領域１６３に１世代古い旧旧識別情報１５５ａが書き込まれている（図７（Ａ））。この手順に限らず新ファームウェア１５３は、コールド・ブートが発生したときには、退避領域１６３を新識別情報１５３ａで書き換えるようにしてもよい。その場合は、ブロック３０１で退避領域１６３には旧識別情報１５１ａが書き込まれていることになる。この手順によりコールド・ブートの後は、ファームウェア領域１６１の識別情報と退避領域１６３の識別情報は一致するため、ブロック３１５で行った退避領域１６３の識別情報の書き換え手順を省くことができる。
【００５７】
［更新方法３］
つぎに図８〜図１０を参照して、パワーオン更新をシステム側で実現する方法を説明する。図８は、パワーオン更新を実現するコンピュータ１０のソフトウェアの構成を説明する図である。図９はフローチャートで、図１０は、システムのＮＶＲＡＭ４１およびＨＤＤ１００のＮＶＲＡＭ１０５における識別情報の格納状態を示している。図８は図２に対して、デバイス・ドライバ５５の下層に中間ドライバ６１を設け、さらに中間ドライバ６１がアクセスできる、ＰＣＨ１７に接続された不揮発性メモリ（ＮＶＲＡＭ）４１を設けた点が異なる。なお、ＯＳ５３およびデバイス・ドライバ５５は変更する必要がなく、また、中間ドライバ６１はデバイス・ドライバ５５とＯＳ５３の間に挿入してもよい。
【００５８】
ＮＶＲＡＭ４１は、フラグ領域４２と、２つの格納領域４３、４５を備えている。フラグ領域４２には更新フラグ４２ａと切換フラグ４３ａ、４５ａを設定し、格納領域４３、４５にはＨＤＤ１００のファームウェアの識別情報を格納する。切換フラグ４３ａ、４５ａは対応する格納領域４３、４５が格納する識別情報の相対的な新しさを示す。中間ドライバ６１は、更新プログラム５１が発行したファームウェアを更新するＡＴＡコマンドを検出したときに更新フラグ４２ａを設定し、ブート期間中にＵＥＦＩからコールド・ブートの通知を受け取ったときに更新フラグ４２ａを解除する。
【００５９】
格納領域４３、４５は、一方にＨＤＤ１００のＮＶＲＡＭ１０５が現在格納しているファームウェアの識別情報を格納し、他方にそれより１回前に更新したファームウェアの識別情報を格納する。中間ドライバ６１は、更新フラグ４２ａを設定する際に、ＡＴＡコマンドに続いて送られてくる新ファームウェアの新識別情報を切換フラグが設定されてない格納領域に書き込み、書き込んだ格納領域に対応する切換フラグを設定し、他方の格納領域に対応する切換フラグを解除する。
【００６０】
結果として、相対的に新しい識別情報を格納するいずれかの格納領域４３、４５に対応する一方の切換フラグ４３ａ、４５ａだけが設定される。中間ドライバ６１は、更新フラグ４２ａが設定されていないときは、システムとＨＤＤ１００の間で交換されるコマンドやデータに対しては一切の処理をしないで通過させる。中間ドライバ６１は、更新フラグ４２ａが設定されている間にＯＳから受け取った識別情報を要求するＡＴＡコマンドをＨＤＤ１００に渡さないで、ＮＶＲＡＭ４１を参照して自らが返送する。
【００６１】
つぎに、ＨＤＤ１００のファームウェアをシステムがパワーオン更新する方法を図９のフローチャートを参照して説明する。ブロック４０１では、コンピュータ１０がパワーオフ状態のときにＨＤＤ１００のＮＶＲＡＭ１０５に、旧ファームウェアが格納されている。格納領域４３には旧ファームウェアの識別情報が格納され、格納領域４５にはそれより前に更新されたファームウェアの識別情報が格納されているものとする。識別情報の新しさに対応して切換フラグ４３ａが設定され切換フラグ４５ａが解除されているが、更新フラグ４２ａはコールド・ブートの前後で状態が異なる場合があるため不定とする（図１０（Ａ））。
【００６２】
ブロック４０３でシステムは、コールド・ブートを実行してパワーオン状態に遷移する。中間ドライバ６１は、ＵＥＦＩ５６からコールド・ブートの通知を受け取ると、更新フラグ４２ａが設定されていれば解除する。ブロック４０５でＯＳ５３が発行した識別情報を取得するためのＡＴＡコマンドを検出した中間ドライバ６１は、更新フラグ４２ａが解除されていることを確認して、ブロック４５１でＨＤＤ１００にＡＴＡコマンドを送る。ＨＤＤ１００が応答して旧識別情報を返送すると、ＯＳ５３がコールド・ブートの間に取得した識別情報とブート完了後にＨＤＤ１００から受け取った識別情報が一致するため、ブルースクリーンは表示されない。
【００６３】
ブロック４０７で更新プログラム５１が、ファームウェアの更新を開始する。ブロック４０９で中間ドライバ６１はＡＴＡコマンドと新ファームウェアをＨＤＤ１００に送るが、みずからは、更新を示すＡＴＡコマンドを検出すると続いて送られてくる識別情報を切換フラグ４５ａが解除されている格納領域４５に上書きし、切換フラグ４３ａを解除して切換フラグ４５ａを設定する。さらに中間ドライバ６１は、更新フラグ４２ａを設定する。
【００６４】
ブロック４１１で、ＡＴＡコマンドを受け取ったＨＤＤ１００はファームウェアを更新する。格納領域４５の識別情報は、ＨＤＤ１００が格納する新ファームウェアの新識別情報に一致する（図１０（Ｂ））。ブロック４１３でＯＳ５３が識別情報を取得するために発行したＡＴＡコマンドを検出した中間ドライバ６１は、更新フラグ４２ａが設定されていることを確認すると、ＡＴＡコマンドをＨＤＤ１００に渡さないで、ブロック４５３で切換フラグ４３ａが設定されていない格納領域４３の旧識別情報を返送する。コールド・ブートの間にＯＳ５３が取得した識別情報とブート完了後にＯＳ５３が取得した識別情報が一致するため、ブルースクリーンは表示されない。
【００６５】
ブロック４１５でシステムがウォーム・ブートを実行する。中間ドライバ６１は、ウォーム・ブートのときにはＵＥＦＩ５６からコールド・ブートの通知を受け取らないため、更新フラグ４２ａを解除しない（図１０（Ｃ））。したがって、ウォーム・ブートが完了してからＯＳ５３がＨＤＤ１００に識別情報を要求しても中間ドライバ６１が応答するためブルースクリーンを表示しない。ブロック４１９で、再び更新が発生すると、旧識別情報を格納する格納領域４３にさらに更新されたファームウェアの識別情報が格納され、切換フラグ４３ａが設定され、さらに切換フラグ４５ａが解除される（図１０（Ｄ））。
【００６６】
以上では、ＮＶＲＡＭ４１を利用してシステムがパワーオン更新をする方法を説明したが、ＮＶＲＡＭ４１を使用しないでシステム・メモリ１３に更新フラグおよび格納領域を設けて実現することもできる。そして、システム・メモリ１３の格納領域には、更新の際にデバイス・ドライバ５５から旧識別情報を取得して記憶する。この場合は、更新後にウォーム・ブートが発生してもシステム・メモリ１３の記憶は維持されるため、旧識別情報を返送することができる。また、コールド・ブートが発生したときは更新フラグが解除されて識別情報の返送に中間ドライバ６１は関与しないが、すでに説明したようにブルースクリーンは表示されない。
【００６７】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【００６８】
１０  コンピュータ
４１  システムのＮＶＲＡＭ
４２ａ  更新フラグ
４３ａ、４５ａ  切換フラグ
５３  ＯＳ
５５  デバイス・ドライバ
５６  ＵＥＦＩ
６１  中間ドライバ
１００  ＨＤＤ
１０５  ＨＤＤのＮＶＲＡＭ
１０７  ＤＲＡＭ
１５１  旧ファームウェア
１５１ａ  旧識別情報
１５１ｂ  旧本体コード
１５３  新ファームウェア
１５３ａ  新識別情報
１５３ｂ  新本体コード
１６１  ファームウェア領域
１６３  退避領域
【図１】
2015102889.tif 000003
【図２】
2015102889.tif 000004
【図３】
2015102889.tif 000005
【図４】
2015102889.tif 000006
【図５】
2015102889.tif 000007
【図６】
2015102889.tif 000008
【図７】
2015102889.tif 000009
【図８】
2015102889.tif 000010
【図９】
2015102889.tif 000011
【図１０】
2015102889.tif 000012