(57)【要約】      （修正有）【課題】ディスク・ドライブのファームウェアの更新を効率的かつ安全に行う。【解決手段】ファームウェア更新は、まず、新ファームウェアを磁気ディスクに格納する。磁気ディスクからのリードに必要な旧ディスク・アクセス・コードを格納する第１ＥＥＰＲＯＭにおいて、旧ディスク・アクセス・コードの領域ＲＯＭ１と異なり、ディスクからのリードに不要な旧インターフェース・コードを含む領域ＲＯＭ２、ＲＯＭ４に、新第ディスク・アクセス・コードを格納する。その後、新ディスク・アクセス・コードを領域ＲＯＭ１に格納する。さらに、新インターフェース・コードを旧インターフェース・コードの領域ＲＯＭ２に格納する。【選択図】図７Ｂ
2010122771.tif 000002
【特許請求の範囲】
【請求項１】
ＥＥＰＲＯＭを有するディスク・ドライブにおいて、そのディスク・ドライブを制御するプログラムを変更する方法であって、
ディスク領域からのリードに不要なプログラム・ブロックを格納する第２領域に対応するプログラム・ブロックを、前記ディスク領域に格納し、
前記ディスク領域からのリードに必要なプログラム・ブロックを第１領域に格納する前記ＥＥＰＲＯＭにおいて、前記第２領域の少なくとも一部を含む領域に、前記第１領域に対応するプログラム・ブロックを格納し、
前記第２領域への格納の後、前記第１領域のプログラム・ブロックを変更し、
前記第１領域の変更後、前記第２領域に前記ディスク領域からのリードに不要なプログラム・ブロックを格納する、
プログラム変更方法。
【請求項２】
前記第１領域に格納する新しい第１プログラム・ブロックと前記第２領域に格納する新しい第２プログラム・ブロックとを含む新しいプログラムを取得して前記ディスク領域に格納し、
前記第２領域に対応するプログラム・ブロックは、前記新しい第２プログラム・ブロックであり、
前記第１領域に対応するプログラム・ブロックは、前記新しい第１プログラム・ブロックであり、
前記第１領域の変更後に前記第２領域へ格納するプログラム・ブロックは、前記新しい第２プログラム・ブロックである、
請求項１に記載のプログラム変更方法。
【請求項３】
さらに、前記新しいプログラムに含まれる新しいブート・コードを、前記ＥＥＰＲＯＭの空き領域に格納し、
前記ＥＥＰＲＯＭにすでに格納されているブート・コードと前記新しいブート・コードの双方を維持する、
請求項２に記載のプログラム変更方法。
【請求項４】
前記ディスク・ドライブを制御するプログラムの一部のプログラム・ブロックは前記ディスク領域に格納されており、
前記ディスク領域の前記一部のプログラム・ブロックを、前記ディスク領域内の異なる領域にバックアップした後に、前記ディスク領域に格納されている前記新しいプログラムにより前記ディスク領域内の前記一部のプログラム・ブロックを変更する、
請求項２に記載のプログラム変更方法。
【請求項５】
前記ＥＥＰＲＯＭと異なる第２ＥＥＰＲＯＭの領域内に格納されている前記ディスク領域からのリードに必要な第３プログラム・ブロックを前記ＥＥＰＲＯＭにバックアップした後に、前記ディスク領域に格納されている前記新しいプログラム内の新しい第３プログラム・ブロックを前記第２ＥＥＰＲＯＭの前記領域に格納する、
請求項２に記載のプログラム変更方法。
【請求項６】
前記プログラムの変更処理において変化する現在の状態を特定するデータを前記ＥＥＰＲＯＭ及び／もしくはそれと異なるＥＥＰＲＯＭの専用領域に格納していく、
請求項２に記載のプログラム変更方法。
【請求項７】
データを記憶するディスク領域と、
前記ディスク領域からのリードに必要なブロックを第１領域に格納し、さらに、前記ディスク領域からのリードに不要なプログラム・ブロックを第２領域に格納する、ＥＥＰＲＯＭと、
前記第２領域に対応するプログラム・ブロックを前記ディスク領域に格納した後に、前記ＥＥＰＲＯＭにおいて前記第２領域の少なくとも一部を含む領域に前記第１領域に対応するプログラム・ブロックを格納し、その後、前記第１領域のプログラム・ブロックを変更した後に、前記第２領域に前記ディスク領域からのリードに不要なプログラム・ブロックを格納する、コントローラと、
を有するディスク・ドライブ。
【請求項８】
前記コントローラは、前記第１領域に格納する新しい第１プログラム・ブロックと前記第２領域に格納する新しい第２プログラム・ブロックとを含む新しいプログラムを取得して前記ディスク領域に格納し、
前記第２領域に対応するプログラム・ブロックは、前記新しい第２プログラム・ブロックであり、
前記第１領域に対応するプログラム・ブロックは、前記新しい第１プログラム・ブロックであり、
前記第１領域の変更後に前記第２領域へ格納するプログラム・ブロックは、前記新しい第２プログラム・ブロックである、
請求項７に記載のディスク・ドライブ。
【請求項９】
前記コントローラは、
前記新しいプログラムに含まれる新しいブート・コードを、前記ＥＥＰＲＯＭの空き領域に格納し、
前記ＥＥＰＲＯＭにすでに格納されているブート・コードと前記新しいブート・コードの双方を維持する、
請求項８に記載のディスク・ドライブ。
【請求項１０】
前記ディスク・ドライブを制御するプログラムの一部のプログラム・ブロックは前記ディスク領域に格納されており、
前記コントローラは、前記ディスク領域の前記一部のプログラム・ブロックを、前記ディスク領域内の異なる領域にバックアップした後に、前記ディスク領域に記憶されている前記新しいプログラムにより前記ディスク領域内の前記一部のプログラム・ブロックを変更する、
請求項８に記載のディスク・ドライブ。
【請求項１１】
前記ディスク領域からのリードに必要な第３プログラム・ブロックを格納する前記ＥＥＰＲＯＭと処理単位が異なる第２ＥＥＰＲＯＭをさらに有し、
前記コントローラは、前記第３プログラム・ブロックを前記ＥＥＰＲＯＭにバックアップした後に、前記ディスク領域に記憶されている新しいプログラム内の新しい第３プログラム・ブロックを前記第２ＥＥＰＲＯＭの前記領域に格納する、
請求項８に記載のディスク・ドライブ。
【請求項１２】
前記コントローラは、前記プログラムの変更処理において変化する現在の状態を特定するデータを前記ＥＥＰＲＯＭあるいはそれと異なるＥＥＰＲＯＭの専用領域に格納していく、
請求項８に記載のディスク・ドライブ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディスク・ドライブ及びそのプログラムの変更方法に関し、特に、ディスク・ドライブに実装されているＥＥＰＲＯＭに格納されているプログラムの更新に関する。
【背景技術】
【０００２】
記録可能な記憶ディスクとして、光ディスク、光磁気ディスク、そして磁気ディスクといった様々な記録方式のディスクが知られている。この中で、固定された磁気ディスクを記憶媒体とするハードディスク・ドライブ（ＨＤＤ）は、高速で大容量を実現できるディスク・ドライブとして多くの分野で利用されている。このようなＨＤＤの大容量化・高機能化に伴い、ＨＤＤの出荷後に、ＨＤＤに新たな機能の追加あるいはＨＤＤの設定パラメータ変更のために、ＨＤＤのファームウェアの更新を行うことの必要性が増している。
【０００３】
しかし、完成品との一部品としてエンド・ユーザの手元に届いたＨＤＤのファームウェアを更新するために、サービスセンタや工場で回収することは、時間、コスト、そして効率の点から望ましくはない。そのため、ファームウェアの更新が必要な場合は、新しいファームウェアが配布される。ＨＤＤが接続されているホスト・コンピュータは、ファームウェアをＨＤＤにダウンロードすることで、ファームウェアを更新することができる。ファームウェア更新のためのＨＤＤとホスト・コンピュータとの間におけるプロトコルが一般に存在し、ＨＤＤとホストとは、このプロトコルに従ってファームウェア更新のためのデータを送受信する。
【０００４】
ファームウェアの更新は、エンド・ユーザのもとであっても、安全かつ確実に行わなければならない。電源遮断によりファームウェアの更新が中断された場合でも、ＨＤＤの機能が失われることがあってはならない。ファームウェアの更新がいかなる瞬間に中断したとしても、更新前あるいは更新完了後のいずれのかの状態で機能し続けることができる更新方法は、トランザクション・アップデートと呼ばれ、ハードウェア及びソフトウェアの資源に冗長性をもつ余裕があるアプリケーションでは、比較的一般的な技術となっている（例えば、特許文献１を参照）。
【特許文献１】特開２００６−１８９９７３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、ＨＤＤのように、ハードウェア及びソフトウェアの両面での制約が非常に厳しい製品では、従来のトランザクション・アップデートをそのまま実装できるほどの冗長性を持たせることは難しい。ファームウェアの更新をファームウェアの一部に限定するアプローチも考えられるが、非更新部分の割合が大きければ大きいほど、ファームウェア更新そのものの有用性が失われてしまう。従って、ＨＤＤのように、ハードウェア資源及びソフトウェア資源の限られた環境下においても、トランザクション・アップデートを実行することができる技術が望まれる。
【課題を解決するための手段】
【０００６】
本発明の一態様は、ＥＥＰＲＯＭを有するディスク・ドライブにおいて、そのディスク・ドライブを制御するプログラムを変更する方法である。この方法は、ディスク領域からのリードに不要なプログラム・ブロックを格納する第２領域に対応するプログラム・ブロックを、前記ディスク領域に格納する。前記ディスク領域からのリードに必要なプログラム・ブロックを第１領域に格納する前記ＥＥＰＲＯＭにおいて、前記第２領域の少なくとも一部を含む領域に、前記第１領域に対応するプログラム・ブロックを格納する。前記第２領域への格納の後、前記第１領域のプログラム・ブロックを変更する。前記第１領域の変更後、前記第２領域に前記ディスク領域からのリードに不要なプログラム・ブロックを格納する。これにより、容量の限られたＥＥＰＲＯＭを有するディスク・ドライブにおいて、そのＥＥＰＲＯＭに記憶されているプログラムの変更を安全に行うことができる。
【０００７】
好ましくは、前記第１領域に格納する新しい第１プログラム・ブロックと前記第２領域に格納する新しい第２プログラム・ブロックとを含む新しいプログラムを取得して前記ディスク領域に格納し、前記第２領域に対応するプログラム・ブロックは、前記新しい第２プログラム・ブロックであり、前記第１領域に対応するプログラム・ブロックは、前記新しい第１プログラム・ブロックであり、前記第１領域の変更後に前記第２領域へ格納するプログラム・ブロックは、前記新しい第２プログラム・ブロックである。これにより、シンプルな処理によりプログラムの更新を安全に行うことができる。
【０００８】
さらに、前記新しいプログラムに含まれる新しいブート・コードを、前記ＥＥＰＲＯＭの空き領域に格納し、前記ＥＥＰＲＯＭにすでに格納されているブート・コードと前記新しいブート・コードの双方を維持する。これにより、その後の起動に支障が生じることなくブート・コードを変更することができる。
【０００９】
好ましくは、前記ディスク・ドライブを制御するプログラムの一部のプログラム・ブロックは前記ディスク領域に格納されており、前記ディスク領域の前記一部のプログラム・ブロックを、前記ディスク領域内の異なる領域にバックアップした後に、前記ディスク領域に格納されている前記新しいプログラムにより前記ディスク領域内の前記一部のプログラム・ブロックを変更する。これにより、プログラム全体に対して容量の小さいＥＥＰＲＯＭが実装されたディスク・ドライブにおいて、プログラムの変更を安全に行うことができる。
【００１０】
好ましくは、前記ＥＥＰＲＯＭと異なる第２ＥＥＰＲＯＭの領域内に格納されている前記ディスク領域からのリードに必要な第３プログラム・ブロックを前記ＥＥＰＲＯＭにバックアップした後に、前記ディスク領域に格納されている前記新しいプログラム内の新しい第３プログラム・ブロックを前記第２ＥＥＰＲＯＭの前記領域に格納する。これにより、プログラム・ブロックの特性に応じた適切なメモリ領域への格納を行いながら、安全にプログラムの変更を行うことができる。
前記プログラムの変更処理において変化する現在の状態を特定するデータを前記ＥＥＰＲＯＭ及び／もしくはそれと異なるＥＥＰＲＯＭの専用領域に格納していく。これにより、変更途中における電源遮断が発生してもより容易かつ確実に回復することができる。
【００１１】
本発明の他の態様はディスク・ドライブであり、そのディスク・ドライブは、データを記憶するディスク領域と、ＥＥＰＲＯＭと、コントローラとを有する。前記ＥＥＰＲＯＭは、前記ディスク領域からのリードに必要なブロックを第１領域に格納し、さらに、前記ディスク領域からのリードに不要なプログラム・ブロックを第２領域に格納する。前記コントローラは、前記第２領域に対応するプログラム・ブロックを前記ディスク領域に格納した後に、前記ＥＥＰＲＯＭにおいて前記第２領域の少なくとも一部を含む領域に前記第１領域に対応するプログラム・ブロックを格納し、その後、前記第１領域のプログラム・ブロックを変更した後に、前記第２領域に前記ディスク領域からのリードに不要なプログラム・ブロックを格納する。これにより、容量の限られたＥＥＰＲＯＭを有するディスク・ドライブにおいて、そのＥＥＰＲＯＭに記憶されているプログラムの変更を安全に行うことができる。
【発明の効果】
【００１２】
本発明によれは、容量の限られたＥＥＰＲＯＭを有するディスク・ドライブにおいて、そのＥＥＰＲＯＭに記憶されているプログラムの変更を安全に行うことができる。
【発明を実施するための最良の形態】
【００１３】
以下に、本発明を適用可能な実施の形態を説明する。説明の明確化のため、以下の記載及び図面は、適宜、省略及び簡略化がなされている。又、各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略されている。以下においては、ディスク・ドライブの一例であるハードディスク・ドライブ（ＨＤＤ）を例として、本発明の実施形態を説明する。
【００１４】
本形態は、ＨＤＤの動作を制御するプログラムであるファームウェアの変更にその特徴を有している。ＨＤＤは、ファームウェアを記憶する書換え可能な複数の不揮発性メモリのデバイスを有している。一つは磁気ディスク、他の一つはＥＥＰＲＯＭである。好適には、ＨＤＤは二つのＥＥＰＲＯＭを有し、第１ＥＥＰＲＯＭは、消去単位と書き込み／読み出しの単位が異なるフラッシュ・メモリであり、第２ＥＥＰＲＯＭは消去と書き込み／読み出しの単位が同一であるＥＥＰＲＯＭである。本形態のファームウェア変更は、変更前のファームウェアのプログラム・ブロックをバックアップするメモリ領域とタイミング、あるいは、新しいファームウェアを構成するプログラム・ブロックの格納エリアと格納タイミングとを適切に選択することで、ＥＥＰＲＯＭのメモリ容量が小さい場合であっても、安全にファームウェアの更新を行うことができる。
【００１５】
図１は、本形態のファームウェア更新のためのシステムの例を模式的に示すブロック図である。図１（ａ）に示すように、新たなファームウェアは、メーカのサーバ５２から、ネットワーク５４を介して、ＨＤＤ１が実装されているコンピュータ５１に転送される。コンピュータ５１は、ＨＤＤ１にサーバ５２から受信した新たなファームウェアを転送する。図１（ｂ）のシーケンス図に示すように、サーバ５２は、新たなファームウェアをコンピュータ５１に送信する。コンピュータ５１は、受信した新ファームウェアをＨＤＤ１に転送する。ＨＤＤ１は受信した新ファームウェアを磁気ディスクに格納し、その後、旧ファームウェアを新ファームウェアに書き換える。
【００１６】
ＨＤＤ１におけるファームウェアの更新について具体的に説明する前に、ＨＤＤ１の全体構成を説明する。図２に示すように、ＨＤＤ１は、エンクロージャ１０の外側に固定された回路基板２０を有している。回路基板２０上に、リード・ライト・チャネル（ＲＷチャネル）２１、モータ・ドライバ・ユニット２２、ロジック回路であるハードディスク・コントローラ（ＨＤＣ）とＭＰＵの集積回路（ＨＤＣ／ＭＰＵ）２３、ＲＡＭ２４、第２ＥＥＰＲＯＭ、第１ＥＥＰＲＯＭなどの各回路が実装されている。エンクロージャ１０内において、スピンドル・モータ（ＳＰＭ）１４は所定の角速度で磁気ディスク１１を回転する。
【００１７】
ヘッド・スライダ１２は、磁気ディスク１１上を浮上するスライダと、スライダに固定され磁気信号と電気信号との間の変換（データの読み書き）を行うヘッド素子部とを備えている。ヘッド・スライダ１２はアクチュエータ１６の先端部に固定されている。アクチュエータ１６はボイス・コイル・モータ（ＶＣＭ）１５に連結され、回動軸を中心に回動することによって、ヘッド・スライダ１２を回転する磁気ディスク１１上においてその半径方向に移動する。モータ・ドライバ・ユニット２２は、ＨＤＣ／ＭＰＵ２３からの制御データに従ってＳＰＭ１４、ＶＣＭ１５を駆動する。
【００１８】
アーム電子回路（ＡＥ：Arm Electronics）１３は、ＨＤＣ／ＭＰＵ２３からの制御データに従って複数のヘッド・スライダ１２の中から磁気ディスク１１にアクセスするヘッド・スライダ１２を選択し、リード／ライト信号の増幅を行う。ＲＷチャネル２１は、リード処理において、ＡＥ１３から供給されたリード信号からデータを抽出してデコード処理を行い、ＨＤＣ／ＭＰＵ２３に転送する。また、ライト処理において、ＨＤＣ／ＭＰＵ２３から転送されたライト・データをコード変調し、コード変調したデータをライト信号に変換してＡＥ１３に供給する。
【００１９】
ＨＤＣ／ＭＰＵ２３において、プロセッサであるＭＰＵは、第１ＥＥＰＲＯＭ２５、第２ＥＥＰＲＯＭ２６、そして磁気ディスク１１からロードされたファームウェアに従って動作する。好ましい構成において、第２ＥＥＰＲＯＭ２６は消去と書き込み／読み出しの単位が同一であるＥＥＰＲＯＭであり、第１ＥＥＰＲＯＭはフラッシュ・メモリである。第１ＥＥＰＲＯＭ２５は、第２ＥＥＰＲＯＭ２６よりも大きい容量を有している。このように、異なるタイプの二つのＥＥＰＲＯＭを実装することで、頻繁に更新する必要がある固体毎のデータを、小容量でも書き換え単位が小さく、かつ書き換え可能回数がフラッシュ・メモリより多い第２ＥＥＰＲＯＭ２６に格納することができる。
【００２０】
ファームウェアは、ＨＤＣ／ＭＰＵ２３内のＳＲＡＭ、ＲＡＭ２４、あるいはそれら両方にロードされる。ＨＤＣ／ＭＰＵ２３は、リード／ライト処理制御、コマンド実行順序の管理、サーボ信号を使用したヘッド・ポジショニング制御（サーボ制御）、コンピュータ５１との間のインターフェース制御、ディフェクト管理、エラー対応処理など、データ処理に関する必要な処理及びＨＤＤ１の全体制御を実行する。
【００２１】
本形態のＨＤＣ／ＭＰＵ２３は、ファームウェアの更新処理を行う。ＨＤＣ／ＭＰＵ２３内のインターフェースがコンピュータ５１からファームウェア更新のためのデータを受信する。ＭＰＵはファームウェア更新プログラムに従って動作し、ＨＤＤ１の動作を制御するファームウェアの更新処理を行う。
【００２２】
本構成において、ファームウェアは、磁気ディスク１１、第２ＥＥＰＲＯＭ２６そして第１ＥＥＰＲＯＭ２５に分散して格納されている。そのため、ＨＤＣ／ＭＰＵ２３は、コンピュータ５１から取得した新ファームウェアによって、三つの不揮発性メモリのコードを更新する。ＨＤＤ１は、一もしくは複数の磁気ディスク１１を有している。ファームウェアは、磁気ディスク１１の一つの記録面のみに格納しても、複数の記録面あるいは複数の磁気ディスク１１に分散して格納してもよい。以下において、ファームウェアが一つの記録面の管理領域上に格納される例を説明するが、実装された磁気ディスク１１全体の領域であるディスク領域のいずれの領域に格納してもよい。
【００２３】
図３のフローチャートは、ファームウェア更新の全体の流れを示している。ＨＤＣ／ＭＰＵ２３は、新ファームウェアをホスト・コンピュータ５１から取得すると（Ｓ１１）、それを磁気ディスク１１の管理領域に格納する（Ｓ１２）。その後、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１の管理領域に格納されている旧ファームウェアを、管理領域内の他の領域にバックアップする（Ｓ１３）。さらに、ＨＤＣ／ＭＰＵ２３は、第２ＥＥＰＲＯＭ２６に格納されている旧ファームウェアを第１ＥＥＥＰＲＯＭ２６にバックアップする（Ｓ１４）。その後、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１に格納されているファームウェアの更新処理を行う（Ｓ１５）。さらに、ＨＤＣ／ＭＰＵ２３は、第２ＥＥＰＲＯＭ２６の更新処理を行う（Ｓ１６）。最後に、ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２６の更新処理を行う（Ｓ１７）。
【００２４】
図４は、三つの不揮発性メモリに分散して格納されているファームウェアを模式的に示すブロック図である。各コードの名前は主なコードを示しており、それ以外のコードも含んでいる。第２ＥＥＰＲＯＭ２６には、チャネル・パラメータなどの、ＨＤＤごとに異なるデータが格納されている。第２ＥＥＲＲＯＭ２６は、ブート・コード、ディスク・アクセス・コード、そしてインターフェース・コードを格納している。ブート・コードは、ＭＰＵが初期化処理を行うためのコードであり、ＭＰＵは起動すると、最初にこのブート・モードが格納されているアドレスにアクセスする。
【００２５】
ディスク・アクセス・コードは、ＨＤＣ／ＭＰＵ２３が磁気ディスク１１に格納されているデータを読み出すための処理を実行するコードであり、サーボ制御やリード処理に必要なコードから構成されている。また、本構成において、ディスク・アクセス・コードは、ファームウェア更新プログラムと更新が中断したときの回復処理プログラムを含む。ＨＤＣ／ＭＰＵ２３が磁気ディスク１１からデータを読み出すためには、このディスク・アクセス・コードと第２ＥＥＰＲＯＭ２６のパラメータが必要である。インターフェース・コードは、ホスト・コンピュータ５１とのインターフェース処理（コマンド処理）を実行するコードの他、磁気ディスク１１へのアクセスには不要なコードを含む。
【００２６】
磁気ディスク１１には、第２ＥＥＰＲＯＭ２６及び第１ＥＥＰＲＯＭ２５に格納されているコード以外のファームウェアの残りのコードを、その管理領域に格納している。管理領域は、ユーザ・データ以外の管理データを格納するための領域である。本明細書において、これをＲＡＭコードと呼ぶ。図２を参照して説明したように、ホスト・コンピュータ５１から転送された新ファームウェアは、磁気ディスク１１の管理領域に保存される。
【００２７】
ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１上の新ファームウェアにより、三つの不揮発性メモリに分散しているファームウェアを書き換える。また、この書換え（更新）の途中おいて不測の電源遮断が発生した場合にも、回復することができるように、所定の手順に従って、各メモリのコードを更新する。なお、本明細書においては、命令、パラメータを問わず、プロセッサ（ＭＰＵ）の動作に使用されるデータをプログラムと呼ぶ。上記ディスク・アクセス・コード、インターフェース・コード、ブート・コード、パラメータは、全てプログラム・ブロックである。また、不揮発性メモリの各領域に格納するプログラム・ブロックは、更新前の旧プログラム・ブロックも更新後の新プログラム・ブロックも、その領域に対応するプログラム・ブロックである。
【００２８】
まず、磁気ディスク１１のファームウェアの更新について説明する。磁気ディスク１１のファームウェア更新（Ｓ１５）において、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１から新ＲＡＭコードをＲＡＭ１１あるいはＳＲＡＭにロードし、さらに、その新ＲＡＭコードを、旧ＲＡＭコードが格納されている磁気ディスク１１の領域に書き込む。これにより、磁気ディスク１１上のＲＡＭコードが更新される。
【００２９】
次に、第２ＥＥＰＲＯＭ２６のファームウェア更新処理について説明する。図５に示すように、ＨＤＣ／ＭＰＵ２３は、第２ＥＥＰＲＯＭ２６の旧パラメータを第１ＥＥＰＲＯＭ２５にバックアップ（Ｓ１４）した後に、第２ＥＥＰＲＯＭ２６のファームウェア更新（Ｓ１６）を開始する。ＨＤＣ／ＭＰＵ２３は、第２ＥＥＰＲＯＭ２６の旧パラメータをＲＡＭ２４もしくはＳＲＡＭにロードし、それを第１ＥＥＰＲＯＭ２５の空き領域に格納する。図５の例において、旧パラメータの格納に必要な容量は２Ｋとしてある。なお、以下の説明におけるデータの記憶容量の数字は一例である。
【００３０】
さらに、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１から新パラメータをＲＡＭ２４もしくはＳＲＡＭにロードし、その新パラメータを第２ＥＥＰＲＯＭ２６の旧パラメータが格納されている領域に格納する（書換え）。これにより、第２ＥＥＰＲＯＭ２６の更新処理が終了する。第１ＥＥＰＲＯＭ２５に旧パラメータをバックアップすることで、第２ＥＥＰＲＯＭ２６の更新において電源遮断が起きた場合にも、バックアップをした旧パラメータにより回復することができる。
【００３１】
次に、第１ＥＥＰＲＯＭ２５のファームウェア更新処理（Ｓ１７）について、具体的に説明する。第１ＥＥＰＲＯＭ２５のファームウェア更新処理を開始する前、第１ＥＥＰＲＯＭ２５が格納しているファームウェアは、図５に示す通りである。つまり、旧ブート・コード、旧ディスク・アクセス・コード、旧インターフェース・コード、そして旧パラメータである。第２ＥＥＰＲＯＭ２６の更新は完了しているため、旧パラメータを格納する領域は空き領域と考えることができる。
【００３２】
図６のフローチャートに示すように、ＨＤＣ／ＭＰＵ２３は、まず、新ブート・コードを第１ＥＥＰＲＯＭ２５の空き領域に格納する（Ｓ２１）。図７Ａは、この処理を模式的に示している。図７Ａにおいては、旧パラメータを格納していた領域を含む領域ＲＯＭ３に、新ブート・コードが格納されている。ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１から新ブート・コードを読み出し、それを第１ＥＥＰＲＯＭ２５の領域ＲＯＭ３に格納する。
【００３３】
図６に示すように、ＨＤＣ／ＭＰＵ２３は、次に、新ディスク・アクセス・コードを第１ＥＥＰＲＯＭ２５の領域ＲＯＭ２、ＲＯＭ４に格納する（Ｓ２２）。図７Ｂの上部は、この処理を模式的に示している。図７Ａに示すように、領域ＲＯＭ２には、旧インターフェース・コードを格納している領域であり、領域ＲＯＭ４は空き領域である。これらの領域の合計容量は６０ＫＢであり、旧ディスク・アクセス・コードを格納する領域ＲＯＭ１と同じである。ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１から新ディスク・アクセス・コードを読み出し、それを第１ＥＥＰＲＯＭ２５の領域ＲＯＭ２、ＲＯＭ４に格納する。なお、新ディスク・アクセス・コード（領域ＲＯＭ１）の容量がより小さい場合、新ディスク・アクセス・コードの格納に領域ＲＯＭ２の一部のみ、あるいはＲＯＭ４の一部のみを使用してもよい。
【００３４】
後に説明するが、新インターフェース・コードが磁気ディスク１１に格納されており、また、旧インターフェース・コードが磁気ディスク１１からのリードに不要であることから、更新が中断しても、適切な回復処理が可能である。また、新ディスク・アクセス・コードの格納に領域ＲＯＭ２を使用することで、第１ＥＥＰＲＯＭ２５の領域を効率的に使用することでき、第１ＥＥＰＲＯＭ２５の容量が小さい場合も、安全にファームウェア更新を行うことができる。
【００３５】
次に、ＨＤＣ／ＭＰＵ２３は、旧ディスク・アクセス・コードを新ディスク・アクセス・コードに書き換える（Ｓ２３）。図７Ｂの下部は、この処理を模式的に示している。ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２５の領域ＲＯＭ２、ＲＯＭ４から新ディスク・アクセス・コードを読み出し（ＲＡＭ２４もしくはＳＲＡＭにロード）、それを第１ＥＥＰＲＯＭ２５の領域ＲＯＭ１に書き込む。これにより、領域ＲＯＭ１の旧ディスク・アクセス・コードが、新ディスク・アクセス・コードに書き換えられる。
【００３６】
最後に、ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２５の領域ＲＯＭ２に、新インターフェース・コードを書き込む（Ｓ２４）。図７Ｃは、この処理を模式的に示している。ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１から新インターフェース・コードを読み出し（ＲＡＭ２４もしくはＳＲＡＭにロード）、それを第１ＥＥＰＲＯＭ２５の領域ＲＯＭ２に格納する。領域ＲＯＭ２には新ディスク・アクセス・コードが格納されていたが、新インターフェース・コードにより上書きされる。
【００３７】
以上の処理により、ＨＤＤ１のファームウェア更新処理が完了する。旧ブート・コードは、第１ＥＥＰＲＯＭ２５の領域ＲＯＭ０に残される。領域ＲＯＭ０は、ＭＰＵが最初にアクセスする領域であり、そのアドレスは固定されている。そのため、領域ＲＯＭ０の更新が中断すると、その後に回復を行うことができない。従って、領域ＲＯＭ０に旧ブート・コードを維持し、実際の処理においては、ＭＰＵ２３は、領域ＲＯＭ３の新ブート・コードに従って動作する。具体的には、ＭＰＵ２３は、最初に旧ブート・コードをロードしてそれに従って動作し、その後、新ブート・コードをロードする。新ブート・コードのロード後は、その新ブート・コードに従って動作する。
【００３８】
上述の処理により三つの不揮発性メモリに分散しているファームウェアを更新することで、いずれのタイミングで電源遮断が発生しても回復処理を行うことができる。つまり、本形態のファームウェア更新は、トランザクショナルアップデートとして実現可能である。ＨＤＣ／ＭＰＵ２３は、回復処理により、ファームウェアの更新前の状態あるいは更新後の状態に移行することができる。これにより、更新前あるいは更新後においてＨＤＤ１が機能し続けることができることを保障する。以下においては、上記処理に各タイミングにおいて電源遮断が発生した場合の回復処理について説明を行う。
【００３９】
ＨＤＣ／ＭＰＵ２３は、チェックポイントと呼ぶ更新状況を管理することで更新中断からの回復処理を制御する。チェックポイントを示すデータは、第２ＥＥＰＲＯＭ２６内に専用に確保したアドレス領域に格納し、ファームウェアそのものの更新とは独立に管理する。チェックポイントは小さいデータであり、最小書き換え単位の小さい第２ＥＥＰＲＯＭ２６を使うことが記憶容量有効活用につながる。なお、第１ＥＥＰＲＯＭ２５の同様の領域を確保できるのであれば、そこにチェックポイントを示すデータを格納してもよい。電源遮断によりファームウェア更新が中断された場合、次回の電源投入時にＨＤＣ／ＭＰＵ２３はチェックポイントに応じた回復処理を実施する。これにより、ファームウェア更新前あるいは更新後の状態でＨＤＤ１が機能し続けることを保障する。
【００４０】
図８は、磁気ディスク１１、第２ＥＥＰＲＯＭ２６そして第１ＥＥＰＲＯＭ２５での更新処理の各工程に対応するチェックポイントを示す図である。チェックポイントは、０〜６まで存在している。三つの不揮発性メモリにファームウェアが全て更新前の旧ファームウェアである、あるいは更新後の新ファームウェアである状態が、チェックポイント０である。
【００４１】
磁気ディスク１１上のファームウェアであるＲＡＭコードを更新している途中（図３におけるＳ１５）の状態がチェックポイント１である。ＲＡＭコードの更新が終了し、第２ＥＥＰＲＯＭ２６のコードを更新している途中（Ｓ１６）の状態がチェックポイント２である。そして、チェックポイント３〜６は、第１ＥＥＰＲＯＭ２５のコードを更新している途中（Ｓ１７）の、いずれかの状態である。ＨＤＣ／ＭＰＵ２３は、ファームウェア更新処理の各工程を開始するときに、チェックポイントを示す管理情報を更新していく。
【００４２】
図９は、第１ＥＥＰＲＯＭ２５での更新処理の各状態に対応するチェックポイント３〜６を示している。チェックポイント３は、領域ＲＯＭ３に新ブート・コードを書き込む途中にある状態である（図６のＳ２１、図７Ａを参照）。チェックポイント４は、新ブート・コードを書き込んだ後に、新ディスク・アクセス・コードを領域ＲＯＭ２、ＲＯＭ４に書き込む途中の状態である（Ｓ２２、図７Ｂを参照）。チェックポイント５は、領域ＲＯＭ２、ＲＯＭ４の新ディスク・アクセス・コードを領域ＲＯＭ１に書き込む途中の状態である（Ｓ２３、図７Ｂを参照）。最後に、チェックポイント６は、領域ＲＯＭ２に新インターフェース・コードを書き込む途中の状態である（Ｓ２４、図７Ｃを参照）。
【００４３】
以下に、上記各チェックポイントにおいて電源遮断が起きた後、次の起動処理においてＨＤＣ／ＭＰＵ２３が行う回復処理の方法を順次説明する。第２ＥＥＰＲＯＭ２６内の管理データチェックポイント０であるとき、三つの不揮発性メモリのファームウェアは、全て更新前あるいは更新後であるので、回復処理は不要である。
【００４４】
管理データがチェックポイント１を示すとき、更新処理は磁気ディスク１１上のＲＡＭコードの更新途中で中断している。そのため、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１の管理領域内の他の領域に格納してある旧ＲＡＭコードにより、本来のアドレス領域の旧ＲＡＭコードをリストアする。これにより、回復処理は完了する。回復後の状態は、ファームウェア更新前の状態である。
【００４５】
管理データがチェックポイント２を示すとき、更新処理は第２ＥＥＰＲＯＭ２６上のパラメータの更新途中で中断している。そのため、ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２５にバックアップしてある旧パラメータ（図５を参照）により、第２ＥＥＰＲＯＭ２６の旧パラメータをリストアする。これにより、ＨＤＣ／ＭＰＵ２３は、第２ＥＥＰＲＯＭ２６の旧パラメータと第１ＥＥＰＲＯＭ２５の旧ディスク・アクセス・コードとにより、磁気ディスク１１の管理領域にアクセスすることができる。ＨＤＣ／ＭＰＵ２３は、チェックポイント１における回復処理を行い、磁気ディスク１１のＲＡＭコードを旧ＲＡＭコードに戻す。これにより、回復処理は完了する。回復後の状態は、ファームウェア更新前の状態である。
【００４６】
管理データがチェックポイント３を示すとき、更新処理は第１ＥＥＰＲＯＭ２５上の新ブート・コードの書き込み途中（領域ＲＯＭ３の更新途中）で中断している。ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２５の領域ＲＯＭ０にある旧ブート・コード、第２ＥＥＰＲＯＭ２６の新パラメータ、そして第１ＥＥＰＲＯＭ２５の領域ＲＯＭ１の旧ディスク・アクセス・コードにより、磁気ディスク１１の管理領域にアクセスすることができる。従って、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１に格納してある新ブート・コードを読み出して、領域ＲＯＭ３の更新から更新処理を再開する。回復後の状態は、ファームウェア更新後の状態である。
【００４７】
管理データがチェックポイント４を示すとき、更新処理は第１ＥＥＰＲＯＭ２５上の新ディスク・アクセス・コードの書き込み途中で中断している。ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２５の領域ＲＯＭ３にある新ブート・コード、第２ＥＥＰＲＯＭ２６の新パラメータ、そして第１ＥＥＰＲＯＭ２５の領域ＲＯＭ１の旧ディスク・アクセス・コードにより、磁気ディスク１１の管理領域にアクセスすることができる。従って、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１に格納してある新ディスク・アクセス・コードを読み出して、新ディスク・アクセス・コードの書込みから更新処理を再開する。回復後の状態は、ファームウェア更新後の状態である。
【００４８】
管理データがチェックポイント５を示すとき、更新処理は第１ＥＥＰＲＯＭ２５上の領域ＲＯＭ１への新ディスク・アクセス・コードの書き込み途中（領域ＲＯＭ１の更新途中）で中断している。ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２５の領域ＲＯＭ２、４の新ディスク・アクセス・コードを、領域ＲＯＭ１に書き込む工程から更新処理を再開する。回復後の状態は、ファームウェア更新後の状態である。
【００４９】
管理データがチェックポイント６を示すとき、更新処理は第１ＥＥＰＲＯＭ２５上の新インテーフェース・コードの書き込み途中で中断している。ＨＤＣ／ＭＰＵ２３は、第１ＥＥＰＲＯＭ２５の領域ＲＯＭ３にある新ブート・コード、第２ＥＥＰＲＯＭ２６の新パラメータ、そして第１ＥＥＰＲＯＭ２５の領域ＲＯＭ１の新ディスク・アクセス・コードにより、磁気ディスク１１の管理領域にアクセスすることができる。従って、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１に格納してある新インテーフェース・コードを読み出して、領域ＲＯＭ２への新インテーフェース・コードの書込みから更新処理を再開する。回復後の状態は、ファームウェア更新後の状態である。
【００５０】
以上説明したファームウェアの更新により、ＨＤＤのファームウェアを安全かつ効率的に更新することができる。上記方法は、新たな全体のファームウェアをホストから取得し、それを現在のファームウェア（更新前の旧ファームウェア）と入れ替える。ファームウェアの更新をシンプルに行うためには、新ファームウェア全体をホストから受信して、旧ファームウェアと入れ替えることが好ましい。しかし、ファームウェア全体を新しいファームウェアに入れ替えるものと異なり、現在のファームウェアの一部を変更する処理に本発明を適用することができる。
【００５１】
ファームウェアの一部の変更する処理の一つとして、ファームウェアを構成する複数のプログラム・ブロックの一部のプログラム・ブロックを入れ替える処理がある。また、ファームウェアの一部の変更する処理の他の一つとしては、一つもしくは複数プログラム・ブロックのそれぞれの一部を書き換える処理がある。本発明は、いずれの処理にも適用することができる。
【００５２】
一部のプログラム・ブロックを入れ替える処理の例として、新ディスク・アクセス・コードのみをホスト５１から受信し、それによりファームウェアの更新を行う処理を説明する。２つのＥＥＰＲＯＭ２５、２６において各プログラム・ブロックを格納する領域は上述の構成と同じである。上記構成と異なる構成についてのみ説明する。
【００５３】
まず、ＨＤＣ／ＭＰＵ２３は、ホスト５１から新ディスク・アクセス・コードを受信して、磁気ディスク１１に保存する。さらに、領域ＲＯＭ２のインターフェース・コードを、磁気ディスク１１にバックアップする。その後、領域ＲＯＭ１の旧ディスク・アクセス・コードを領域ＲＯＭ２、ＲＯＭ４に書き込む。
【００５４】
次に、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１に格納している新ディスク・アクセス・コードを領域ＲＯＭ１に書き込む。最後に、ＨＤＣ／ＭＰＵ２３は、磁気ディスク１１にバックアップしたインターフェース・コードを領域ＲＯＭ２に書き戻す。他のプログラム・ブロックは、この処理においては参照されない。この処理の流れにより、いずれのタイミングで電源遮断が発生した場合も、回復処理を行うことができる。
【００５５】
ディスク・アクセス・コードに加え、インターフェース・コードも新しいものに入れ替える場合は、磁気ディスク１１へ旧インターフェース・コードの代わりに新インターフェース・コードを格納すればよい。この処理では、新旧のディスク・アクセス・コードは領域ＲＯＭ１に対応するプログラム・コードであり、新旧のインターフェース・コードは領域ＲＯＭ２に対応するプログラム・コードである。
【００５６】
次に、一つもしくは複数プログラム・ブロックのそれぞれの一部を書き換える処理の例として、ディスク・アクセス・コードの一部のみを変更する処理を説明する。ＨＤＣ／ＭＰＵ２３は、ディスク・アクセス・コードの一部を変更するためのプログラムをホストから受信し、それを磁気ディスク１１に格納する。ＨＤＣ／ＭＰＵ２３は、領域ＲＯＭ２のインターフェース・コードを磁気ディスク１１に格納（バックアップ）した後、領域ＲＯＭ１のディスク・アクセス・コードを領域ＲＯＭ２、ＲＯＭ４に磁気ディスク１１に書き込む。
【００５７】
ＨＤＣ／ＭＰＵ２３は、ホストから受信したプログラムにより、ディスク・アクセス・コードをＲＡＭ２１あるいはＳＲＡＭ上で変更し、それを領域ＲＯＭ１に書き込む。最後に、ＨＤＣ／ＭＰＵ２３は、領域ＲＯＭ２に磁気ディスク１１上のインターフェース・コードを書き込む。インターフェース・コードも変更する場合は、ＨＤＣ／ＭＰＵ２３は、ＲＡＭ２１あるいはＳＲＡＭ上で磁気ディスク１１から読み出したインターフェース・コードを変更した後に、領域ＲＯＭ２に書き込む。この処理では、変更前後のディスク・アクセス・コードの双方が領域ＲＯＭ１に対応するプログラム・ブロックであり、変更前後のインターフェース・コードの双方が領域ＲＯＭ２に対応するプログラム・ブロックである。この処理の流れにより、いずれのタイミングで電源遮断が発生した場合も、回復処理を行うことができる。
【００５８】
以上、本発明を好ましい実施形態を例として説明したが、本発明が上記の実施形態に限定されるものではない。当業者であれば、上記の実施形態の各要素を、本発明の範囲において容易に変更、追加、変換することが可能である。例えば、本発明は、不揮発性半導体メモリとして第１ＥＥＰＲＯＭのみを有し、パラメータもそこに格納されているＨＤＤに適用することができる。
【００５９】
磁気ディスク及び第１、第２ＥＥＰＲＯＭのプログラム・ブロックの変更順序は、設計により適切な順序とすることができる。本発明は、ファームウェアの更新以外のファームウェア変更に適用することができる。例えば、ファームウェアを更新した後、元のファームウェアに戻すというファームウェア変更にも本発明を適用することができる。ホストから受信した新しいプログラムは、磁気ディスクに格納することが好ましい。これにより、ＨＤＤ内の処理で回復処理を行うことができるからである。しかし、設計によっては、電源遮断が生じた場合に新たにホストから受信するようにしてもよい。
【図面の簡単な説明】
【００６０】
【図１】本実施形態に係るファームウェア更新のためのシステムの例を模式的に示すブロック図である。
【図２】本実施形態に係るＨＤＤの全体構成を模式的に示すブロック図である。
【図３】本実施形態に係るファームウェア更新の全体処理の流れを示すフローチャートである。
【図４】本実施形態において、各不揮発性メモリに分散して格納されているファームウェアのプログラム・ブロックを模式的に示す図である。
【図５】本実施形態おいて、第２ＥＥＰＲＯＭのファームウェアの更新処理を模式的に示す図である。
【図６】本実施形態おいて、第１ＥＥＰＲＯＭのファームウェアの更新処理の流れを示すフローチャートである。
【図７Ａ】本実施形態の第１ＥＥＰＲＯＭのファームウェアの更新処理において、第１ＥＥＰＲＯＭの格納データ（状態）の変化を模式的に示す図である。
【図７Ｂ】本実施形態の第１ＥＥＰＲＯＭのファームウェアの更新処理において、第１ＥＥＰＲＯＭの格納データ（状態）の変化を模式的に示す図である。
【図７Ｃ】本実施形態の第１ＥＥＰＲＯＭのファームウェアの更新処理において、第１ＥＥＰＲＯＭの格納データ（状態）の変化を模式的に示す図である。
【図８】本実施形態において、磁気ディスク、第１ＥＥＰＲＯＭ、第２ＥＥＰＲＯＭでの更新処理の各工程に対応するチェックポイントを示す図である。
【図９】本実施形態において、第１ＥＥＰＲＯＭでの更新処理の各状態に対応するチェックポイントを示す図である。
【符号の説明】
【００６１】
１  ハード・ディスク・ドライブ、１０  エンクロージャ、１１  磁気ディスク
１２  ヘッド・スライダ、１３  アーム・エレクトロニクス（ＡＥ）、
１４  スピンドル・モータ、１５  ボイス・コイル・モータ、１６  アクチュエータ
２０  回路基板、２１  ＲＷチャネル、２２  モータ・ドライバ・ユニット
２３  ＨＤＣ／ＭＰＵ、２４  ＲＡＭ、２５  第１ＥＥＰＲＯＭ
２６  第２ＥＥＰＲＯＭ、５１  コンピュータ、５２  サーバ
【図１】
2010122771.tif 000003
【図２】
2010122771.tif 000004
【図３】
2010122771.tif 000005
【図４】
2010122771.tif 000006
【図５】
2010122771.tif 000007
【図６】
2010122771.tif 000008
【図７Ａ】
2010122771.tif 000009
【図７Ｂ】
2010122771.tif 000010
【図７Ｃ】
2010122771.tif 000011
【図８】
2010122771.tif 000012
【図９】
2010122771.tif 000013