(57)【特許請求の範囲】
【請求項１】
ヘッドによりデータが記録されるディスク媒体へのアクセスの制御及び当該ディスク媒体を回転させるスピンドルモータの制御を含む各種の制御が、書き換え可能な不揮発性メモリに格納されている、プログラム書き換えのためのプログラム書換ルーチンを含むプログラムに従って実行されるディスク記憶装置において、前記プログラムを書き換えるためのプログラム書換方法であって、
前記ディスク記憶装置を利用するホストシステムから、プログラムを転送するプログラム転送コマンドを受信した場合に、当該プログラム転送コマンドの指定するプログラム書換ルーチンを含むプログラムを前記ホストシステムから受け取ってバッファメモリを介して前記ディスク媒体に書き込むステップと、
前記ディスク媒体への前記プログラムの書き込みに応じて、前記不揮発性メモリに格納されているプログラムを書き換える必要があることを示す有効な書換要求フラグを前記不揮発性メモリの所定領域にセットするステップ
前記ディスク記憶装置の電源投入時に前記不揮発性メモリに格納されているプログラムに従って当該ディスク記憶装置を起動する起動処理を実行するステップと
を具備し、
前記起動処理を実行するステップは、
前記スピンドルモータを起動するステップと、
前記スピンドルモータが定常回転に到達し、且つ前記不揮発性メモリに前記有効な書換要求フラグがセットされている場合に、前記プログラム転送コマンドに応じて前記ディスク媒体に書き込まれているプログラムを読み出してバッファメモリに格納するステップと、
前記ディスク媒体に書き込まれているプログラムが前記バッファメモリに格納された後に、前記スピンドルモータの回転を停止させる制御を行うステップと、
前記スピンドルモータの回転が実際に停止するのを待つことなく、前記不揮発性メモリに格納されているプログラムに含まれている前記プログラム書換ルーチンを所定のメモリにコピーするステップと、
前記所定のメモリにコピーされた前記プログラム書換ルーチンに従って、前記不揮発性メモリに格納されているプログラムを、前記バッファメモリに格納されたプログラムに書き換えるステップと、
前記不揮発性メモリに格納されているプログラムの書き換え後に、当該書き換え後の新たなプログラムに従う起動処理に切り替えるステップとを含む
ことを特徴とするプログラム書換方法。
【請求項２】
ヘッドによりデータが記録されるディスク媒体へのアクセスの制御及び当該ディスク媒体を回転させるスピンドルモータの制御を含む各種の制御が、書き換え可能な不揮発性メモリに格納されている、プログラム書き換えのためのプログラム書換ルーチンを含むプログラムに従って実行されるディスク記憶装置において、
前記ディスク媒体に書き込むべきデータ及び前記ディスク媒体から読み出されたデータを一時格納するためのバッファメモリと、
前記ディスク記憶装置を利用するホストシステムから、プログラムを転送するプログラム転送コマンドを受信した場合に、当該プログラム転送コマンドの指定するプログラム書換ルーチンを含むプログラムを前記ホストシステムから受け取って前記バッファメモリを介して前記ディスク媒体に書き込む手段と、
前記ディスク媒体への前記プログラムの書き込みに応じて、前記不揮発性メモリに格納されているプログラムを書き換える必要があることを示す有効な書換要求フラグを前記不揮発性メモリの所定領域にセットする手段と、
前記ディスク記憶装置の電源投入時に前記不揮発性メモリに格納されているプログラムに従って当該ディスク記憶装置を起動する起動処理を実行する手段と
を具備し、
前記起動処理を実行する手段は、
前記スピンドルモータを起動する手段と、
前記スピンドルモータが定常回転に到達し、且つ前記不揮発性メモリに前記有効な書換要求フラグがセットされている場合に、前記プログラム転送コマンドに応じて前記ディスク媒体に書き込まれているプログラムを読み出して前記バッファメモリに格納する手段と、
前記ディスク媒体に書き込まれているプログラムが前記バッファメモリに格納された後に、前記スピンドルモータの回転を停止させる制御を行う手段と、
前記スピンドルモータの回転が実際に停止するのを待つことなく、前記不揮発性メモリに格納されているプログラムに含まれている前記プログラム書換ルーチンを所定のメモリにコピーする手段と、
前記所定のメモリにコピーされた前記プログラム書換ルーチンに従って、前記不揮発性メモリに格納されているプログラムを、前記バッファメモリに格納されたプログラムに書き換える手段と、
前記不揮発性メモリに格納されているプログラムの書き換え後に、当該書き換え後の新たなプログラムの実行に切り替える手段とを含む
ことを特徴とするディスク記憶装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ヘッドによりデータが記録されるディスク媒体を備えたディスク記憶装置に係り、特に当該ディスク記憶装置において実行されるプログラムを書き換えるのに好適な方法及び装置に関する。
【０００２】
【従来の技術】
ディスク記憶装置は、ヘッドによりデータが記録されるディスク媒体を備えている。通常、ディスク記憶装置は、当該ディスク記憶装置を利用するホストシステムに接続して用いられる。ホストシステムは、一般にディスク記憶装置を補助記憶装置（大容量記憶装置）として利用するパーソナルコンピュータである。ディスク記憶装置では、ディスク媒体へのデータ記録及びディスク媒体からのデータ読み出しを含む各種処理が実行される。これらの処理は、ディスク記憶装置に設けられた不揮発性メモリに格納されているプログラム（制御プログラム）を当該ディスク記憶装置（内のＣＰＵ）が実行することにより実現される。
【０００３】
最近のディスク記憶装置には、当該ディスク記憶装置内の不揮発性メモリに格納されているプログラムを最新のものに書き換えられることが要求されている。そこで最近のディスク記憶装置では、プログラムの格納に、フラッシュＲＯＭに代表される書き換えが可能な不揮発性メモリが用いられている（例えば特開２０００−９９２７０号公報）。
【０００４】
従来、不揮発性メモリに格納されているプログラムを書き換えるには、当該プログラムを転送するコマンド、転送されたプログラムを、書き換え可能な不揮発性メモリに書き込むコマンド、書き換え後のプログラムの再起動を行うコマンドなどをホストシステムが順に実行するのが一般的である。つまり、ホストシステムは、書き換えるべき新たなプログラムをディスク記憶装置に転送後、直ちに当該プログラムを不揮発性メモリに書き込むことにより、当該不揮発性メモリ上のプログラムの書き換えを行う。そしてホストシステムは、プログラム書き換え直後にはホストシステム全体を再起動させる。
【０００５】
さて、ディスク記憶装置内の不揮発性メモリに格納されているプログラムを安全に書き換えるためには、プログラム書き換えの期間、当該プログラム書き換え以外でホストシステムからディスク記憶装置がアクセスされないことが必要となる。ところが、ホストシステムがパーソナルコンピュータである場合、当該コンピュータのＯＳは複数のタスク（プログラム）を並行して実行できるマルチタスク機能を有しているのが一般的である。このように、複数のタスクが並行して実行される環境下で、ディスク記憶装置内の不揮発性メモリに格納されているプログラムを書き換えることは危険である。
【０００６】
そこで従来は、プログラム書き換え後にホストシステム全体を再起動するためと、不揮発性メモリ上のプログラムを書き換える期間、ホストシステムからディスク記憶装置へのアクセスの発生を防止するために、次のような方法を適用している。まず、最低限のブート機能を持ったブートプログラムと、ホストシステムのアーキテクチャ（コンピュータアーキテクチャ）に適合するプログラム書き換え用のアプリケーションプログラムとを記憶したフレキシブルディスクを用意する。そして、このディスクをホストシステムのフレキシブルディスクドライブに装着して、当該ディスク内のプログラムを実行することで、上述の手順でプログラム書き換えを行う。
【０００７】
【発明が解決しようとする課題】
しかしながら、上記した従来技術においては、プログラムの書き換え手順が複雑であり、アーキテクチャを異にするホストシステム毎に、そのシステムに固有のプログラム書き換え用のアプリケーションプログラムを用意しなければならないという問題がある。特に最近は、ディスク記憶装置が、カーナビゲーション装置、或いはＡＶ（Audio Visual）データの大容量記憶装置など、パーソナルコンピュータ以外の分野にも使用されるようになっている。つまり、ディスク記憶装置を利用するホストシステムが、必ずしもホストコンピュータではなく、当該ホストシステムが適用するアーキテクチャも多種多様となってきている。このため、上記問題は顕著である。
【０００８】
また上記した従来技術においては、プログラムの書き換え直後にホストシステム全体を再起動させなければならず、プログラム書き換え用のアプリケーションプログラムを通常のＯＳ上で動作させることが難しい。そのため通常は、ブートプログラムを記憶したフレキシブルディスク上に用意されたプログラム書き換え用のアプリケーションプログラムを、ＯＳによらずに実行させることが多い。しかし、ディスク記憶装置を利用する最近のホストシステムは必ずしもフレキシブルディスクドライブを持っていない。したがって、このようなホストシステムにより利用されるディスク記憶装置上で実行されるプログラムを書き換えることは困難である。
【０００９】
本発明は上記事情を考慮してなされたものでその目的は、ディスク記憶装置において実行されるプログラムを書き換えるためのオペレーションが、通常のＯＳ上で動作可能なアプリケーションプログラムに基づいて簡単に実行できる、ディスク記憶装置において実行されるプログラムを書き換えるための方法及び装置を提供することにある。
【００１０】
【課題を解決するための手段】
本発明の１つの観点によれば、ヘッドによりデータが記録されるディスク媒体へのアクセスを含む各種の制御が、書き換え可能な不揮発性メモリに格納されているプログラムに従って実行されるディスク記憶装置において、上記プログラムを書き換えるためのプログラム書換方法が提供される。この方法は、上記ディスク記憶装置を利用するホストシステムから、プログラムを転送するプログラム転送コマンドを受信した場合に、当該プログラム転送コマンドの指定するプログラムを上記ホストシステムから受け取って上記ディスク媒体に書き込むステップと、上記ディスク記憶装置の電源投入時に上記不揮発性メモリに格納されているプログラムに従って当該ディスク記憶装置を起動する起動処理を実行するステップとから構成される。また、上記起動処理を実行するステップは、上記プログラム転送コマンドに応じて上記ディスク媒体に書き込まれたプログラムで上記不揮発性メモリに格納されているプログラムを書き換えるステップを含む。
【００１１】
このような構成においては、ホストシステムにより発行されたプログラム転送コマンドをディスク記憶装置にて受信した場合に、当該コマンドの指定するプログラム（新たなプログラム）がディスク媒体に書き込まれ、ディスク記憶装置の不揮発性メモリに格納されているプログラムの書き換えが行われることなく当該コマンドの処理が終了する。そして、ディスク記憶装置の次の電源投入時に、ディスク媒体に書き込まれている新たなプログラムで不揮発性メモリに格納されているプログラムを書き換える処理が、当該電源投入時に実行される起動処理の一環として自動的に行われる。これにより、ホストシステムのアーキテクチャに関係なく、ディスク記憶装置の不揮発性メモリに格納されているプログラムの書き換えが行える。また、プログラム書き換えのためにホストシステムが行うべきことはプログラム転送コマンドを実行することのみであり、複雑な手順を要しない。よって、本発明においては、様々なアーキテクチャのホストシステムからの指令によるプログラム書き換えに柔軟に対応することが可能となる。
【００１２】
ここで、上記ディスク媒体へのプログラムの書き込みに応じて、上記不揮発性メモリに格納されているプログラムを書き換える必要があることを示す有効な書換要求フラグを上記不揮発性メモリにセットするステップを追加し、前記書き換えるステップでは、上記不揮発性メモリに上記有効な書換要求フラグがセットされている場合に上記プログラムの書き換えを実行する構成とするとよい。
【００１３】
このようにすると、ディスク記憶装置の電源投入時に、不揮発性メモリに有効な書換要求フラグがセットされているかを調べることにより、既にディスク記憶装置のディスク媒体に、不揮発性メモリに格納されているプログラムを書き換えるための新たなプログラムが書き込まれているかを正しく判断できるようになり、プログラムの書き換えを確実に実行できる。
【００１４】
また、上記起動処理を実行するステップに、上記プログラム転送コマンドに応じて上記ディスク媒体に書き込まれたプログラムの当該ディスク媒体からの読み出し完了までの所要時間を予め定められた時間と比較するステップを含ませ、上記所要時間が上記予め定められた時間を越えている場合には、上記書き換えるステップの実行を抑止して、上記不揮発性メモリに格納されているプログラムを書き換えるべきプログラムが上記ディスク媒体に書き込まれていない場合と同一の起動処理を継続する構成とするとよい。その理由は次の通りである。
【００１５】
プログラムの書き換えを電源投入時の起動処理の中で行う場合、もし当該プログラムの書き換えのための処理時間が長くなると、ホストシステムの動作に影響を及ぼす。そこで、リトライ等の要因でディスク媒体からのプログラムの読み出しに時間を要した場合には、上述のようにプログラムの書き換えを行わないようにすることで、処理時間の増大を抑えることができる。
【００１６】
また、上記起動処理を実行するステップに、プログラム書き換え後に当該書き換え後の新たなプログラムの実行に切り替えるステップを含ませ、当該新たなプログラムに従って起動処理を継続する構成とするとよい。
【００１７】
このように、プログラムの書き換えをディスク記憶装置の電源投入時に行い、新たなプログラムの実行までを起動処理の一環として行うようにすることで、プログラムの書き換えが行われた場合であってもホストシステムからは起動時間を除いて通常に起動した場合と同様に見える。このことにより、様々なアーキテクチャのホストシステムからの指令によるプログラム書き換えに柔軟に対応することが可能となる。
【００１８】
また、上記起動処理を実行するステップに、上記プログラムの書き換え後に当該書き換え後の新たなプログラムが正常に動作することを確認するステップを含ませ、上記確認ステップで上記書き換え後の新たなプログラムが正常に動作することが確認された場合に限り、当該新たなプログラムに従って上記起動処理を継続する構成とするとよい。
【００１９】
このように、書き換え後の新たなプログラムが正常に動作することが確認できた場合に限り、当該新たなプログラムに従って起動処理を継続することにより、書き換え後の新たなプログラムを無条件で実行する場合と比べて、プログラムが暴走するなどの理由で正常な動作が不能になるのを防止できる。
【００２０】
ここで、起動処理を実行するステップに、上記確認ステップで上記書き換え後の新たなプログラムが正常に動作することが確認できた場合、その旨を示す特定情報を上記不揮発性メモリに書き込むステップを含ませるならば、当該特定情報の有無を調べるだけで、上記新たなプログラムが正常に動作することが確認できたかを正しく判断できる。
【００２１】
また、上記不揮発性メモリに上記特定情報が書き込まれているか否かを、上記書き換えの対象となるプログラムとは独立のモニタプログラムに従って判定するステップと、この判定ステップにより上記特定情報が書き込まれていないと判定された場合に、上記書き換え後の新たなプログラムの実行に代えて上記モニタプログラムを実行するステップとを追加するとよい。
【００２２】
このようにすると、新たなプログラムが正しく実行できない場合であっても、モニタプログラムによって最低限の入出力は行えるため、以後のプログラム書き換えも行えなくなるといった不具合の発生を防止できる。
【００２３】
また、上記起動処理を実行するステップに、上記プログラムの書き換え前に、その時点における上記ディスク記憶装置内の各部の設定状態を保存するステップと、上記プログラムの書き換え後に、上記ホストシステムと上記ディスク記憶装置とを接続するホストインタフェースの状態を上記プログラムの書き換え前の状態に維持したままで初期化処理を実行するステップと、上記プログラムの書き換え後に、上記プログラムの書き換え前に保存された上記設定状態から上記ディスク記憶装置内の各部の設定状態を復元するステップとを含ませるとよい。その理由は次の通りである。
【００２４】
プログラムを書き換えた後には、その書き換え後の新たなプログラムを先頭から実行することになる。しかし、プログラムを先頭から実行すると、通常は初期化処理によってホストインタフェースの状態及びディスク記憶装置内の各部の設定状態は初期化されてしまう。そこで上述のように、初期化処理時に状態を変えないようにする、或いは初期化後に以前の状態を復元して、プログラムの書き換え前後で設定状態が変わらないようにすることにより、プログラムの書き換え実施後にもホストシステム全体の再起動を行う必要がなくなる。これにより、様々なアーキテクチャのホストシステムからの指令によるプログラム書き換えに柔軟に対応することが可能となる。ここで、上記復元ステップより後に上記ホストインタフェースの状態の１つであるビジー状態を解除するならば、ホストシステムの立ち上げよりも前に、しかもディスク記憶装置での起動処理の中で、プログラムの書き換えを完了させて、当該ホストシステムからのコマンドを受け付けることが可能となる。
【００２５】
なお、上記プログラム書換方法に係る本発明は、当該方法を適用する装置（ディスク記憶装置）に係る発明としても成立する。
【００２６】
【発明の実施の形態】
以下、本発明を磁気ディスク装置に適用した実施の形態につき図面を参照して説明する。
【００２７】
図１は本発明の一実施形態に係る磁気ディスク装置の構成を示すブロック図である。
図１の磁気ディスク装置（以下、ＨＤＤと称する）１において、ディスク（磁気ディスク媒体）１１は上側と下側の２つのディスク面を有している。ディスク１１の２つのディスク面の少なくとも一方のディスク面、例えば両方のディスク面は、データが磁気記録される記録面をなしている。ディスク１１の各記録面に対応してそれぞれヘッド（磁気ヘッド）１２が配置されている。ヘッド１２は、ディスク媒体１１へのデータ書き込み（データ記録）及びディスク媒体１１からのデータ読み出し（データ再生）に用いられる。なお、図１の構成では、単一枚のディスク１１を備えたＨＤＤを想定しているが、ディスク１１が複数枚スタックされたＨＤＤであっても構わない。
【００２８】
ディスク１１はスピンドルモータ（以下、ＳＰＭと称する）１３により高速に回転する。ヘッド１２はヘッド移動機構としてのアクチュエータ（キャリッジ）１４に取り付けられている。ヘッド１２は、アクチュエータ１４の回動に従ってディスク１１の半径方向に移動される。これにより、ヘッド１２は、目標トラック上に位置付けられる。アクチュエータ１４は、当該アクチュエータ１４の駆動源となるボイスコイルモータ（以下、ＶＣＭと称する）１５を有している。アクチュエータ１４は、このＶＣＭ１５により駆動される。
【００２９】
ＳＰＭ１３及びＶＣＭ１５は、ＳＰＭ・ＶＣＭドライバＩＣ１６からそれぞれ供給される駆動電流（ＳＰＭ電流及びＶＣＭ電流）により駆動される。ＳＰＭ・ＶＣＭドライバＩＣ１６は、ＳＰＭ１３を定常回転させるためにＣＰＵ１７から指定された量のＳＰＭ電流を当該ＳＰＭ１３に対して供給する。ＳＰＭ・ＶＣＭドライバＩＣ１６はヘッド１２をディスク１１上の目標位置に位置付けるためにＣＰＵ１７から指定された量のＶＣＭ電流をＶＣＭ１５に対して供給する。
【００３０】
ＣＰＵ１７はＨＤＤ１の主制御部をなし、ＨＤＤ１内のＳＰＭ・ＶＣＭドライバＩＣ１６を除く他の要素の制御と、当該ＳＰＭ・ＶＣＭドライバＩＣ１６の制御とを時分割で行う。
【００３１】
ＣＰＵ１７はＣＰＵバス１８に接続されている。ＣＰＵバス１８には、ＣＰＵが実行すべきプログラム（制御プログラム）が格納されている書き換え可能な不揮発性メモリとしてのフラッシュＲＯＭ（以下、ＦＲＯＭと称する）１９と、ＣＰＵ１７が使用する変数の領域等に割り当てられるＲＡＭ（以下、ＣＰＵ−ＲＡＭと称する）２０と、ディスクコントローラ（以下、ＨＤＣと称する）２１と、ＨＤＤ１の制御に必要な諸信号の生成を行うゲートアレイ２２とが接続されている。
【００３２】
ＨＤＣ２１は、ＣＰＵバス１８以外に、ゲートアレイ２２、リード／ライトＩＣ２４及びバッアァＲＡＭ２５にも接続されている。ＨＤＣ２１はまた、ＨＤＤ１を利用するホストシステム２とホストインタフェース３を介して接続されている。
【００３３】
ＨＤＣ２１及びゲートアレイ２２の制御用レジスタは、それぞれＣＰＵ１７のアドレス空間の一部の領域に割り当てられている。ＣＰＵ１７は、この領域を対象として読み出しまたは書き込みを行うことで、対応するＨＤＣ２１またはゲートアレイ２２を制御する。
【００３４】
ＨＤＣ２１は、ホストシステム２から転送されるコマンド（リード／ライトコマンド等）を受信すると共に、ホストシステム２とＨＤＣ２１との間のデータ転送を制御するインタフェース制御機能を有する。ＨＤＣ２１はまた、ディスク１ｌとＨＤＣ２１との間のデータ転送を制御するディスク制御機能と、バッアァＲＡＭ２５を制御するバッファ制御機能とを有する。
【００３５】
ヘッド１２はヘッドＩＣ（ヘッドアンプ回路）２３と接続されている。ヘッドＩＣ２３はヘッド１２により読み出されたリード信号を増幅するリードアンプ（図示せず）、及びライトデータをライト電流に変換するライトアンプ（図示せず）を有する。ヘッドＩＣ２３は、リード／ライトＩＣ（リード／ライトチャネル）２４と接続されている。リード／ライトＩＣ２４は、リード信号に対するＡ／Ｄ（アナログ／ディジタル）変換処理、ライトデータの符号化処理及びリードデータの復号化処理等の各種の信号処理を実行する。
【００３６】
ＨＤＤ１において、ホストシステム２からのリードコマンドの実行時には、当該コマンドで指定される論理アドレスに対応する物理アドレスで示されるディスク１１上の領域に記録されているデータ信号がヘッド１２によって読み出される。ヘッド１２により読み出された信号（アナログ信号）はヘッドＩＣ２３により増幅され、リード／ライトＩＣ２４によって復号化される。ＨＤＣ２１は、リード／ライトＩＣ２４によって復号化されたデータをゲートアレイ２２からの制御用の各信号に従って処理することにより、ホストシステム２に転送すべきデータ（リードデータ）を生成する。このデータは一旦バッファＲＡＭ２５に格納されてからホストシステム２に転送される。
【００３７】
一方、ホストシステム２からのライトコマンドの実行時には、当該ホストシステム２からＨＤＣ２１に転送されたデータ（ライトデータ）は一旦バッアァＲＡＭ２５に格納された後、ゲートアレイ２２からの制御用の各信号に従ってＨＤＣ２１によりリード／ライトＩＣ２４に転送される。このリード／ライトＩＣ２４に転送されたライトデータは符号化されて、ヘッドＩＣ２３を経由してヘッド１２に導かれ、当該ヘッド１２により、上記コマンドで指定される論理アドレスに対応する物理アドレスで示されるディスク１１上の領域に書き込まれる。
【００３８】
図２は、ＣＰＵバス１８に接続される各種デバイスと当該デバイスが割り当てられるＣＰＵアドレス空間内の領域との対応関係の一例を示す、ＣＰＵアドレス空間マップを示す。
【００３９】
図２の例では、ＦＲＯＭ１９及びＣＰＵ−ＲＡＭ２０は、ＣＰＵアドレス空間３０のそれぞれ領域３１及び３２内のアドレスに割り当てられる。また、ＨＤＣ２１及びゲートアレイ２２の制御用レジスタは、ＣＰＵアドレス空間３０のそれぞれ領域３３及び３４内のアドレスに割り当てられる。これによりＣＰＵ１７はこれらのデバイスに対してメモリアクセスと同じ方法で入出力を行うことが可能である。
【００４０】
ＣＰＵアドレス空間３０内の領域３１が割り当てられるＦＲＯＭ１９の領域は、モニタプログラム領域５１、メインプログラム領域５２及びパラメタ領域５３に大別される。モニタプログラム領域５１には、ＣＰＵ１７上で動作するモニタプログラム４１が格納される。メインプログラム領域５２には、ＣＰＵ１７上で動作する、ＦＲＯＭ１９をアクセスするためのメインプログラム書換ルーチン４２及びメインプログラム４３が格納される。本実施形態において、メインプログラム書換ルーチン４２はメインプログラム４３に付随しており、メインプログラム４３の書き換え時には、当該メインプログラム書換ルーチン４２も書き換えられる。但し、書き換え前のメインプログラム書換ルーチン４２と書き換え後のメインプログラム書換ルーチン４２とが異なっているとは限らない。またメインプログラム領域５２には、後述する書換要求フラグ４４、チェックコード４５及びチェックサム４６も格納される。パラメタ領域５３には、ＨＤＤ１内の各部の設定情報、各種最適化データなどのパラメタが格納される。
【００４１】
モニタプログラム４１は、メインプログラム４３とは別に用意される、最低限の入出力のみを実現するプログラムである。このモニタプログラム４１を使用することで、メインプログラム４３が存在しない場合であってもメインプログラムを受け取り、ＦＲＯＭ１９上のメインプログラム領域５２に書き込むことが可能である。
【００４２】
メインプログラム４３は、ＨＤＤ１内の各部（各ＩＣ）の制御、ヘッド位置決め制御、ホストシステム２から送られるコマンドの解釈と実行など、ＨＤＤ１全体の制御を行うためのものである。ＨＤＤ１の機能追加、或いは改良などは、このメインプログラム４３を書き換えることで実現可能である。本実施形態におけるプログラムの更新とは、メインプログラム領域５２内のメインプログラム４３を書き換えることをいう。
【００４３】
ＣＰＵアドレス空間３０内の領域３２が割り当てられるＣＰＵ−ＲＡＭ２０の領域は、状態保存領域６１、状態保存フラグ６２の領域及び変数領域６３に大別される。変数領域６３は、主として、モニタプログラム４１及びメインプログラム４３の変数格納に使用される。但し、変数領域６３は、ＦＲＯＭ１９の記憶内容の消去を行う場合には、当該ＦＲＯＭ１９への読み書きができなくなることから、一時的なプログラム格納領域として使用されることもある。
【００４４】
次に、図１のＨＤＤ１における電源投入時の動作（通常起動時の動作）について、図３乃至図５のフローチャートを参照して説明する。なお、図３は、モニタプログラム４１の処理手順を説明するためのフローチャート、図４及び図５はメインプログラム４３のうち電源投入時のリセット処理を行う部分の処理手順を説明するためのフローチャートである。
【００４５】
ＨＤＤ１の電源が投入されると、ＣＰＵ１７は、当該ＨＤＤ１内のハードウェアの初期化後に、ステップ１０１からモニタプログラム４１の実行を開始する。ＣＰＵ１７はまず、ＣＰＵ−ＲＡＭ２０上に配置される状態保存フラグ６２をクリア（リセット）する（ステップ１０２）。この状態保存フラグ６２は、後にメインプログラム４３から参照される。ＣＰＵ１７は、状態保存フラグ６２をクリアすると、モニタプログラム４１の実行に最低限必要な初期化処理を行う（ステップ１０３）。この後、ＣＰＵ１７は、メインプログラム領域５２に配置されているチェックコード４５を読み、当該チェックコード４５から、有効なメインプログラム４３がメインプログラム領域５２内に存在するか否かをチェックする（ステップ１０４）。
【００４６】
上述のように、チェックコード４５はメインプログラム領域５２に存在する。したがって、チェックコード４５は、メインプログラム４３が書き換えのため消去されるときに同時に消去され、その値は０ＦＦＦＦＨ（末尾のＨは１６進表現であることを示す）となる。チェックコード４５は、上記消去に続いて、新たなメインプログラム４３がメインプログラム領域５２に書き込まれ、当該メインプログラム４３が正しく実行できることが確認された後に、特定の値（例えば０１２３４Ｈ）に更新される。
【００４７】
したがって、上記ステップ１０４では、チェックコード４５が特定の値（０１２３４Ｈ）であればメインプログラム４３が存在すると判定される。この場合、モニタプログラム４１からメインプログラム４３の実行に分岐する（ステップ１０５）。これに対し、チェックコード４５が上記特定の値と異なる場合には、メインプログラム４３が存在しないと判定される。この場合、ＣＰＵ１７は、モニタプログラム４１による最低限の入出力は行えるようにするため、当該モニタプログラム４１のコマンド待ちループに入る（ステップ１１３）。このコマンド待ちループは、後述するメインプログラム４３のコマンド待ちループ（アイドルループ）とは異なる。
【００４８】
モニタプログラム４１には、電源投入エントリ（ステップ１０１）の他に、後述する特定のコールドスタートエントリ（ステップ１１１）が存在する。モニタプログラム４１は、コールドスタートエントリ（ステップ１１１）から実行された場合には、ＣＰＵ−ＲＡＭ２０内に状態保存フラグ６２がセットされた後に上記ステップ１０３に分岐するように構成されている。この場合、状態保存フラグ６２の状態を除いて、電源投入時と同様の動作となる。
【００４９】
さて、モニタプログラム４１からメインプログラム４３に分岐すると（ステップ１０５）、つまりメインプログラム４３に制御が移ると（ステップ２０１）、ＣＰＵ１７は、当該メインプログラム４３に従って初期化処理を行う（ステップ２０２）。この初期化処理では、ＨＤＤ１内の各部（各ＩＣ）の初期化とＣＰＵ−ＲＡＭ２０内の変数領域６３の初期化とが行われる。ここでＣＰＵ１７は、ＣＰＵ−ＲＡＭ２０内の状態保存フラグ６２と状態保存領域６１については初期化を行わない。またＣＰＵ１７は、状態保存フラグ６２がセットされていれば、ホストシステム２から見たホストインタフェース３の各信号線の状態を変えないようにする。ホストインタフェース３の信号線の状態にはＢＵＳＹ（ビジー）、ＤＡＳＰ等がある。ＢＵＳＹは、ＨＤＤ１がホストシステム２からコマンドを受信できない状態にあることを示す。ＤＡＳＰは、ＨＤＤ１でのマスタ・スレーブの設定のための通信用の信号線の状態を示す。
【００５０】
ＣＰＵ１７は初期化処理（ステップ２０２）を終了すると、メインプログラム領域５２内のチェックコード４５が特定の値（０１２３４Ｈ）に一致するか否かをチェックする（ステップ２０３）。もし、チェックコード４５が特定の値に一致しないならば、つまりチェックコード４５が正しい値でないならば、ＣＰＵ１７は、メインプログラム領域５２内には有効なメインプログラム４３が存在しないと判定する。この場合、ＣＰＵ１７は、メインプログラム４３の書き換えが完了していないと判定し、メインプログラム４３の書き換え動作の一部をなすステップ２３１へ進む。これに対し、チェックコード４５が特定の値に一致しているならば、ＣＰＵ１７はステップ２０４に進み、状態保存フラグ６２の値をチェックする。
【００５１】
もし、状態保存フラグ６２がセットされていなければ、ＣＰＵ１７は通常の起動動作を行うためにステップ２０５へ進み、ホストインタフェース３のリセット信号がホストシステム２によって解除されるのを待つ。
【００５２】
やがて、リセット信号が解除されたならば、ＣＰＵ１７はＳＰＭ・ＶＣＭドライバＩＣ１６を制御してＳＰＭ１３を起動するための起動動作を開始する（ステップ２０６）。ここで、ＳＰＭ１３が定常回転に達するまでには、ある程度の時間を要する。そこでＣＰＵ１７は、起動動作を開始すると、ＳＰＭ１３が定常回転に達するのを待つことなく、次のステップ２０７に進む。これにより、ステップ２０７から始まる幾つかのステップは、ＳＰＭ１３の起動処理と並行して行われる。
【００５３】
ＣＰＵ１７は、ステップ２０７において、マスタまたはスレーブの認識のための一連の動作を行う。即ちＣＰＵ１７は、ＨＤＤ１がスレーブデバイスとして設定されていれば、ＨＤＤ１自身の存在をマスタデバイスに伝えるための、ホストインタフェース３上の信号線を駆動する。これに対し、ＨＤＤ１がスレーブデバイスとして設定されていなければ、ＣＰＵ１７は、スレーブデバイスが存在するか否かをホストインタフェース３上の上記信号線の状態を読み取ることで確認する。そしてＣＰＵ１７は、ホストインタフェース３上のデバイス接続構成を確定する。
【００５４】
次に、上記ステップ２０４で、状態保存フラグ６２がセットされていると判定された場合の動作について述べる。まず、状態保存フラグ６２がセットされるのは電源投入直後ではない。つまり状態保存フラグ６２がセットされるのは、装置の状態（マスタ・スレーブの設定状態及び関連する信号線の状態、ホストシステム２からのモード指定など）が確定してから内部的にリセット動作が再度実行された場合である。これらの設定状態は保持されなければならない。そこで、状態保存フラグ６２がセットされた場合、後述するステップ２０５〜２０７の動作の代わりに、ステップ２２１または２１３が実行される。ステップ２２１では、先のステップ２０６と全く同じＳＰＭ１３の起動動作が行われる。この起動動作は、ホストインタフェース３のリセット信号の解除を待つことなく、開始される。また本実施形態では、マスタ・スレーブの設定状態は保持されなければならないので、ステップ２０７に相当する処理は行わない。これ以外の装置の状態については、以前に状態保存領域６１に保存された内容を再設定することで復元させる。この装置状態の復元は、後のステップ２１３で行われる。
【００５５】
ＣＰＵ１７は、ステップ２２１でＳＰＭ１３の起動動作が開始されると、自己診断処理を行う（ステップ２０８）。この自己診断処理は、メインプログラム領域５２を対象とするチェックサムの計算を含むＦＲＯＭ１９のチェック、ＣＰＵ−ＲＡＭ２０のチェック及びおよびバッファＲＡＭ２５のチェックを含む。メインプログラム領域５２のチェックサム４６は当該領域５３内に記録されている。このメインプログラム領域５２内の書換要求（メインプログラム書換要求）フラグ４４及びチェックコード４５は、チェックサム４６の計算の対象外である。また、ＣＰＵ−ＲＡＭ２０のチェックでは、状態保存フラグ６２及び状態保存領域６１の内容が破壊されないようにする必要がある。
【００５６】
ＣＰＵ１７はステップ２０８での自己診断処理を完了すると、続いて行われるディスクアクセスのため、ＳＰＭ１３が定常回転数に達するまで待つ（ステップ２０９）。そして、ＳＰＭ１３が定常回転数に達すると、ＣＰＵ１７は書換要求フラグ４４の値をチェックすることで、メインプログラム書換要求の有無を判定する（ステップ２１０）。もし、書換要求フラグ４４が初期化状態（０ＦＦＦＦＨ）であれば、ＣＰＵ１７はメインプログラム書換要求がないものと判定して、通常の起動を行うためにステップ２１１へ分岐する。これに対し、書換要求フラグ４４が初期化状態以外ならば、ＣＰＵ１７はメインプログラム書換要求があるものと判断して、ステップ２５１から始まるメインプログラム書換処理を実行する。
【００５７】
さてＣＰＵ１７は、通常起動時には、まずステップ２１１において、ディスク１１に記録されているシステムデータを読み出して、ＨＤＤ１内各部への状態の反映を行う。ここで、システムデータとは、ディスク１１上のディフェクトセクタのリスト、及びホストシステム２によって設定された内容を含む。次にＣＰＵ１７は、ＣＰＵ−ＲＡＭ２０の所定領域に状態保存フラグ６２がセットされているか否かを判定する（ステップ２１２）。もし、状態保存フラグ６２がセットされているならば、ＣＰＵ１７はＣＰＵ−ＲＡＭ２０内の状態保存領域６１の内容をＨＤＤ１の状態へ反映させる（ステップ２１３）。つまりＣＰＵ１７は、ＨＤＤ１の各部の設定状態を復元する。この場合、ステップ２１１で設定された内容が状態保存領域６１の内容で上書きされることもある。
【００５８】
次にＣＰＵ１７は、リセット終了処理を行う（ステップ２１４）。このリセット終了処理により、ホストインタフェース３の信号線と、ＨＤＣ２１及びゲートアレイ２２の制御用レジスタとが所定の値に設定される。また、ホストシステム２からの割り込みが許可される。このリセット終了処理の結果、ＨＤＤ１（内のＨＤＣ２１）は、ホストインタフェース３からのコマンド受信が可能となる。そこでＣＰＵ１７は、状態保存フラグ６２をクリアする共に（ステップ２１５）、ホストインタフェース３の特定信号線によりＨＤＤ１のビジー状態を解除し（ステップ２１６）、しかる後にコマンド待ちのためのアイドルループに入る（ステップ２１７）。なお、電源投入直後からステップ２１５でビジー状態が解除されるまでは、ＨＤＤ１は終始ビジー状態である。
【００５９】
次に、図１のＨＤＤ１におけるコマンド処理について、図７及び図８のフローチャートを参照して説明する。なお、図７は、メインプログラム４３中のアイドルループ（コマンド待ちループ）の処理手順を説明するためのフローチャート、図８はメインプログラム４３中のコマンド処理ルーチンの処理手順を説明するためのフローチャートである。
【００６０】
先に述べたように、メインプログラム４３に従う電源投入時のリセット処理が完了すると、ＨＤＤ１はホストシステム２からのコマンドを受信できる状態になり、アイドルループに入る（ステップ２１７）。これによりステップ４０１に制御が移る。このステップ４０１から始まるアイドルループは、ホストシステム２からコマンドが発行されない場合に定期的に行うべき処理を実行するためのものである。具体的には、省電力のための処理、自己診断処理などが、これに当たる。
【００６１】
ＣＰＵ１７は、アイドルループのステップ４０１に制御が移ると、タイマの値を取得し（ステップ４０２）、その値から定期的に行う処理を実行すべきか否かを判定する（ステップ４０３）。もし、実行すべき処理があれば、ＣＰＵ１７は当該処理を実行し（ステップ４０４）、ステップ４０２に戻る。これに対し、実行すべき処理がなければ、ＣＰＵ１７は何もせずに再度ステップ４０２に分岐する。ＣＰＵ１７は、このステップ４０２から始まる処理を繰り返す。
【００６２】
上記アイドルループはホストシステム２からのコマンドを待つためのループである。このため、このアイドルループで処理を実行している場合であっても、ホストシステム２からのコマンドには応答する必要がある。そこで本実施形態では、ＨＤＣ２１は、ホストシステム２からのコマンドを受信すると、ＣＰＵ１７に対して割り込み処理を要求する。ＣＰＵ１７は、これを受けて、実行中の処理を中断した後、即座にＨＤＤ１をビジー状態にして、図８のフローチャートに示すコマンド処理ルーチンに分岐させる。
【００６３】
ＣＰＵ１７は、アイドルループの実行状態において、ＨＤＣ２１がホストシステム２からコマンドを受信すると、上述のように割り込み処理によってコマンド処理ルーチンのステップ５０１に分岐させる。このコマンド処理ルーチンでは、ＣＰＵ１７は、ホストシステム２により発行されたコマンドをＨＤＣ２１から受け取って、そのコマンドの種類を判定する（ステップ５０２，５１１）。もし、ホストシステム２により発行されたコマンドがメインプログラム転送コマンドであるならば、ＣＰＵ１７はステップ５０３に進む。また、上記コマンドがメインプログラム書き込みコマンドであるならば、ＣＰＵ１７はステップ５１２に進む。また、上記コマンドが、メインプログラム転送コマンド及びメインプログラム書き込みコマンド以外のコマンドであれば、ＣＰＵ１７はそのコマンドに応じた処理（ステップ５２１）を実行する。
【００６４】
ＣＰＵ１７は、ステップ５０３またはステップ５２１に進んだ場合、つまりメインプログラム書き込みコマンド以外のコマンドを処理した場合、そのコマンドの処理終了後、ステップ５０８に分岐する。ＣＰＵ１７は、このステップ５０８で、ＨＤＣ２１及びゲートアレイ２２の制御用レジスタの値の設定、及びビジー状態の解除を含むコマンド終了処理を行った後、再度アイドルループへ分岐する（ステップ５０９）。
【００６５】
次に、図１のＨＤＤ１における電源投入時のメインプログラム書き換えについて、上記図３、図４、図５、図７及び図８のフローチャートに加えて、図６のフローチャートを参照して説明する。なお、図６はＣＰＵ−ＲＡＭ２０上にコピーされるメインプログラム書換ルーチン４２の処理手順を示すフローチャートである。
【００６６】
本実施形態におけるメインプログラムの書き換えの主な特徴は２点ある。第１は、通常のホストシステム２からのデータ転送（データ書き込み）と同様にして、ホストシステム２からＨＤＤ１へのメインプログラム転送コマンドに応じて当該ホストシステム２からメインプログラムを受け取り、ディスク１１に書き込んでおく点である。第２は、ディスク１１に書き込んでおいたメインプログラムを、次のＨＤＤ１の電源投入時に読み出して、メインプログラム４３としてＦＲＯＭ１９のメインプログラム領域５２に書き込む点である。
【００６７】
まず、ホストシステム２からＨＤＤ１に対してメインプログラム転送コマンドが発行されたものとする。ＨＤＤ１では、ホストシステム２からコマンドを受信すると、図８のフローチャートを参照して説明したようにコマンド処理が開始され（ステップ５０１）、受信コマンドの種類が判定される（ステップ５０２，５１１）。この例のように、メインプログラム転送コマンドの場合、ＣＰＵ１７はステップ５０３に制御を移す。ステップ５０３では、メインプログラム転送コマンドで指定されたデータ（メインプログラム）が、ＨＤＣ２１で受け取られ、一旦バッファＲＡＭ２５に格納される。するとＣＰＵ１７は、バッファＲＡＭ２５に格納されたデータが、メインプログラム転送コマンドで指定された正しい（有効な）メインプログラムであるか否かを、チェックサムの計算などにより判定する（ステップ５０４）。もし、バッファＲＡＭ２５に格納されたデータが有効なメインプログラムでない場合には、ＣＰＵ１７はステップ５１３に分岐して終了ステータスを「異常」に設定することにより、コマンド（メインプログラム転送コマンド）の処理を異常終了させる（ステップ５０８）。そして、ＣＰＵ１７はアイドルループに入る（ステップ５０９）。
【００６８】
これに対し、バッファＲＡＭ２５に格納されたデータが有効なメインプログラムである場合には、ＣＰＵ１７は当該データ（メインプログラム）をディスク１１に書き込む制御を行う（ステップ５０５）。次にＣＰＵ１７は、ＦＲＯＭ１９に確保されているメインプログラム領域５２中の書換要求フラグ４４をセットする（ステップ５０６）。この書換要求フラグ４４は、バッファＲＡＭ２５に格納されているデータ（メインプログラム）をディスク１１に書き込む時点では、後述するステップ３０２で、例えば０ＦＦＦＦＨに既に初期化（リセット）されている。書換要求フラグ４４が０ＦＦＦＦＨの状態は、メインプログラムの「書換要求なし」を意味する。そこでＣＰＵ１７は、メインプログラムをディスク１１に書き込むと、上記ステップ５０６で書換要求フラグ４４を０ＦＦＦＦＨ以外の値にセットする。これにより、書換要求フラグ４４は、メインプログラムの「書換要求あり」を示す状態に遷移する。ＣＰＵ１７はステップ５０６を実行すると、終了ステータスを「正常」に設定することにより（ステップ５０７）、コマンド（メインプログラム転送コマンド）の処理を正常終了させる（ステップ５０８）。そして、ＣＰＵ１７はアイドルループに入る（ステップ５０９）。
【００６９】
この状態で、ホストシステム２（及びＨＤＤ１）がシャットダウン（電源断）し、その後、ホストシステム２（及びＨＤＤ１）の電源が再び投入されたものとする。この場合、ＣＰＵ１７は以下に述べるように、メインプログラム４３の書き換えを伴う起動動作を開始する。
【００７０】
まずＣＰＵ１７は、ＨＤＤ１の電源が投入されると（ステップ１０１）、先に述べた電源投入に伴う通常起動時の動作と同様に、ステップ１０２〜１０５、２０１〜２０９を実行する。次にＣＰＵ１７は、ステップ２１０において書換要求フラグ４４の状態を参照して、メインプログラムの書換要求の有無を判定する。通常起動時であれば、書換要求フラグ４４は０ＦＦＦＦＨに初期化されているため、メインプログラムの書換要求がないと判定されて、ステップ２１１に分岐する。
【００７１】
しかし、この例のように、先に述べたメインプログラム転送コマンドの実行によって既に書換要求フラグ４４がセットされている状態で、ＨＤＤ１の電源が投入された場合、上記ステップ２１０では、メインプログラムの書換要求があると判定される。この場合、ＣＰＵ１７はＦＲＯＭ１９のメインプログラム領域５２に現在書き込まれているメインプログラム４３の書き換えのために、ディスク１１に書き込まれているメインプログラムを読み出してバッファＲＡＭ２５に格納する制御を行う（ステップ２５１）。
【００７２】
さて、ディスク１１からのメインプログラムの読み出し中にリトライが発生するなどの要因で、当該メインプログラムの読み出しに多くの時間を要した場合、メインプログラム領域５２内のメインプログラム４３の書き換えが遅れて、総合的な起動時間が延びてしまう虞がある。そこで本実施形態では、ＨＤＤ１の電源投入時点からメインプログラムの読み出し完了までの所要時間を計測し、その時間が予め定められた一定時間を越えていれば、メインプログラム４３の書き換えは行わないようにしている。そのためＣＰＵ１７は、メインプログラムの読み出し完了までの所要時間を上記一定時間と比較する（ステップ２５２）。そして、読み出し完了までの所要時間が一定時間を越えている場合には、ＣＰＵ１７は、メインプログラムの書換要求がない場合と同様の動作、即ち通常起動時と同様の動作を行うために、ステップ２１１に分岐する。この場合、メインプログラム４３の書き換えは、少なくとも次回の電源投入時まで待たされることになる。なお、電源投入時（またはメインプログラムの読み出し開始時）から一定時間をカウントするタイマを用い、当該タイマが一定時間をカウントしてもメインプログラムの読み出しが完了しない場合に、ステップ２１１に分岐する構成としてもよい。
【００７３】
一方、メインプログラムの読み出しまでが一定時間以内で完了した場合、ＣＰＵ１７は、ディスク１１からバッファＲＡＭ２５に読み出されたメインプログラムが正常であるか否かをチェックサムの計算などによりチェックする（ステップ２５４，２５５）。ＣＰＵ１７は、バッファＲＡＭ２５に読み出されたメインプログラムが正常であればステップ２５６に進む。これに対し、バッファＲＡＭ２５に読み出されたメインプログラムが異常であれば、ＣＰＵ１７は以後は通常起動時と同様の動作を行うために、ステップ２１１に分岐する。
【００７４】
ＣＰＵ１７はステップ２５６に進んだ場合、メインプログラム４３の書き換えのために、ＳＰＭ１３の駆動を停止させる制御を行う。ＳＰＭ１３の駆動を停止させるのは、メインプログラム４３の書き換え時には、ＳＰＭ１３及びＶＣＭ１５の制御を行うルーチンも消去されて、当該ＳＰＭ１３及びＶＣＭ１５を制御できなくなるためである。ＣＰＵ１７は、ステップ２５６でＳＰＭ１３の駆動を停止させると、当該ＳＰＭ１３の回転速度が予め定められた所定の回転速度より低くなるまで待つことなく、直ちにステップ２５７へ分岐する。このように、ＳＰＭ１３の回転速度が所定の回転速度より低くなるまで待つ処理を行わないのは、ＳＰＭ１３の駆動を停止しても、当該ＳＰＭ１３は慣性により回転を続けることから、当該ＳＰＭ１３の回転速度が所定の回転速度より低くなるには時間がかかるためである。
【００７５】
ＣＰＵ１７はステップ２５７に分岐すると、現時点でのＨＤＤ１内での各部の設定状態を取得して、ＣＰＵ−ＲＡＭ２０上に確保されている状態保存領域６１に、その設定状態を保存する。この処理は、新しいメインプログラム４３に書き換えられた結果、当該新しいメインプログラム４３に制御が移った後に、現在の設定状態を復元可能とするために行われる。
【００７６】
次にＣＰＵ１７は、ＦＲＯＭ１９のメインプログラム領域５２に保存されているメインプログラム書換ルーチン４２をＣＰＵ−ＲＡＭ２０の変数領域６３にコピーする（ステップ２５８）。この処理を実行する理由は次の通りである。まず、メインプログラム４３の書き換えを行う場合に、その書き換えを行うためのメインプログラム書換ルーチン４２が必要である。しかし、メインプログラム４３の書き換え中は、ＦＲＯＭ１９全体がアクセス不能となる。このため、メインプログラム４３をＦＲＯＭ１９上で動作させることはできない。そこで本実施形態では、メインプログラム書換ルーチン４２を、ＦＲＯＭ１９のメインプログラム領域５２からＣＰＵ−ＲＡＭ２０の変数領域６３にコピーして、当該ＣＰＵ−ＲＡＭ２０上で動作させるようにしている。そのため、メインプログラム書換ルーチン４２は、ＣＰＵ−ＲＡＭ２０の変数領域６３で動作してメインプログラム書き換え処理を完了すると、メインプログラム４３の先頭に分岐するように構成されている。
【００７７】
さてＣＰＵ１７は、メインプログラム書換ルーチン４２のＣＰＵ−ＲＡＭ２０へのコピーを完了すると、ＣＰＵ−ＲＡＭ２０の変数領域６３の特定のアドレス（ステップ３０１）に分岐する（ステップ２５９）。するとＣＰＵ１７は、メインプログラム書換ルーチン４２に従って以下に述べるようにメインプログラム４３の書き換えを実行する。
【００７８】
まずＦＲＯＭ１９の特性として、当該ＦＲＯＭ１９にデータが書き込まれている状態で、そのデータが書き込まれている領域に、新たなデータを上書きすることはできない。つまり、この領域に新たなデータを書き込むには、事前にその領域のデータを消去する必要がある。そこでＣＰＵ１７は、メインプログラム書換ルーチン４２に制御を移すと、ＦＲＯＭ１９のメインプログラム領域５２上のデータを全て消去する（ステップ３０２）。これにより、メインプログラム４３だけでなく、メインプログラム書換ルーチン４２、書換要求フラグ４４、チェックコード４５及びチェックサム４６も消去される。次にＣＰＵ１７は、バッファＲＡＭ２５に格納されているメインプログラムを、新たなメインプログラム４３として順次ＦＲＯＭ１９のメインプログラム領域５２に書き込む（ステップ３０３）。このときメインプログラムに付随するメインプログラム書換ルーチンもメインプログラム書換ルーチン４２としてメインプログラム領域５２に書き込まれる。
【００７９】
もし、新たなメインプログラム４３の書き込みが全て正常終了したならば（ステップ３０４）、ＣＰＵ１７は当該新たなメインプログラム４３の先頭（ステップ２０１）へ分岐する（ステップ３０５）。これに対し、新たなメインプログラム４３の書き込みが正常に実行できなかった場合には、ＣＰＵ１７は当該新たなメインプログラム４３は無効である判断して、特定のコールドスタートエントリ（ステップ１１１）へ分岐する（ステップ３１１）。
【００８０】
さて、新たなメインプログラム４３の書き込みが正常終了し、当該新たなメインプログラム４３に制御が移ると（ステップ２０１）、先に述べたモニタプログラム４１からメインプログラム４３に分岐した場合と同様に、初期化処理が行われる（ステップ２０２）。これにより、ＨＤＤ１内の各部（各ＩＣ）の初期化とＣＰＵ−ＲＡＭ２０内の変数領域６３の初期化とが行われる。次にＣＰＵ１７は、メインプログラム領域５２内のチェックコード４５をチェックする（ステップ２０３）。この段階では、チェックコード４５はまだ書き込まれていない（初期化状態のままである）ことから、ＣＰＵ１７はステップ２３１へ分岐する。
【００８１】
上述のように本実施形態では、メインプログラム４３の書き換え過程で、図４及び図５のフローチャートに示すリセット処理部分がそれぞれ異なる経路で複数回実行される。このため、このリセット処理部分のプログラム構造、特に分岐条件は、新たなメインプログラム４３でも同様である必要がある。
【００８２】
ＣＰＵ１７は、ステップ２３１に分岐すると、新たなメインプログラム４３の動作をテストする。ここでのテスト内容は、前記ステップ２０８で行われているのと同様の自己診断処理に加え、擬似的にコマンド割り込みを発行させることでコマンド実行のためのルーチンが正しく働いていることを確認する処理を含む。ＣＰＵ１７は、ステップＳ２３１でのテスト結果から、新たなメインプログラム４３が正常に動作しているか否かを判定する（ステップ２３２）。もし、新たなメインプログラム４３が正常に動作しているならば、ＣＰＵ１７は当該メインプログラム４３が正しく書き込まれていると判断して、メインプログラム領域５２内に特定の値（０１２３４Ｈ）のチェックコード４５を書き込む（ステップ２３３）。
【００８３】
このステップ２３３を実行した時点で新たなメインプログラム４３の書き込み動作は正常完了したことになる。そこでＣＰＵ１７は、確認のため、モニタプログラム４１の先頭から再度実行させる（ステップ２３４）。但し、モニタプログラム４１への分岐先は電源投入エントリ（ステップ１０１）ではなくて、上記コールドスタートエントリ（ステップ１１１）となる。その理由は、メインプログラム書き換えの過程でホストインタフェース３の信号線の状態を変えることはできず、また前記ステップ２５７で保存したＨＤＤ１内の各部の設定状態を新たなメインプログラム４３上で復元させる必要があるためである。
【００８４】
ＣＰＵ１７は、コールドスタートエントリ（ステップ１１１）に分岐すると、まずＣＰＵ−ＲＡＭ２０上に配置される状態保存フラグ６２をセットする（ステップ１１２）。次にＣＰＵ１７は、先に述べた電源投入時（ステップ１０１）と同様に、ステップ１０３に進んで初期化処理を行う。ここで、電源投入時（電源投入直後）と異なるのは、状態保存フラグ６２がリセットされた（ステップ１０２）後ではなくて、状態保存フラグ６２がセットされた（ステップ１１２）後に、初期化処理（ステップ１０３）が行われる点である。
【００８５】
ＣＰＵ１７は、初期化処理（ステップ１０３）を実行すると、メインプログラム領域５２に正しいチェックコード４５が書き込まれているか否かを判定する（ステップ１０４）。この時点ではメインプログラム領域５２には、先のステップ２３３で正しい値（０１２３４Ｈ）のチェックコード４５が書き込まれている。この場合、ＣＰＵ１７はステップ１０５に分岐し、再度新たなメインプログラム４３を先頭から実行する（ステップ２０１）。そしてＣＰＵ１７は、初期化処理（ステップ２０２）を経て、上記ステップ１０４と同様の判定、即ちメインプログラム領域５２に正しいチェックコード４５が書き込まれているか否かの判定を行う（ステップ２０３）。ここでも、上記ステップ１０４の場合と同様に、正しい値（０１２３４Ｈ）のチェックコード４５が書き込まれていると判定される。この場合、ＣＰＵ１７はステップ２０４に分岐して、状態保存フラグ６２がセットされているか否かを判定する。
【００８６】
今回のステップ２０４は、モニタプログラム４１がコールドスタートエントリ（ステップ１１１）より実行されて、当該モニタプログラム４１から分岐したメインプログラム４３で実行されたものである。この場合、コールドスタートエントリ（ステップ１１１）の次のステップ１１２で、状態保存フラグ６２がセットされる。したがって、今回のステップ２０４では、状態保存フラグ６２がセットされていると判定される。
【００８７】
ＣＰＵ１７は、状態保存フラグ６２がセットされている場合、前述したようにマスタ・スレーブの設定及びホストインタフェース３の信号線の状態が変化しないように、ステップ２２１に分岐する。ＣＰＵ１７は、このステップ２２１でＳＰＭ１３の起動のみを行って、通常の起動時と同様に自己診断処理（ステップ２０８）を行う。そしてＣＰＵ１７は、ＳＰＭ１３が定常回転数に達するのを待った後（ステップ２０９）、書換要求フラグ４４の値をチェックすることで、メインプログラム書換要求の有無を判定する（ステップ２１０）。ここでは、ステップ３０２の消去動作で書換要求フラグ４４はクリアされている。この場合、ＣＰＵ１７は、メインプログラム書換要求がないものと判定し、通常の起動時と同様に、ディスク１１に記録されているシステムデータを読み出して、ＨＤＤ１内各部への状態の反映を行う（ステップ２１１）。
【００８８】
次にＣＰＵ１７は、状態保存フラグ６２がセットされているか否かを判定する（ステップ２１２）。ここでは、状態保存フラグ６２はセットされている。この場合、ＣＰＵ１７はメインプログラムの書き換え前の段階（ステップ２５７）で状態保存領域６１に保存されたＨＤＤ１内の各部の設定状態を読み出し、その設定状態を現在のＨＤＤ１の状態に反映させる（ステップ２１３）。つまり、ＨＤＤ１内の各部の状態をメインプログラムの書き換え前の状態に復元する。このとき、前述したようにステップ２１１で設定された内容が上書きされることもある。その後、ＣＰＵ１７は、通常起動時と同様にステップ２１４〜２１６を実行することにより、ホストシステム２からのコマンド受信が可能な状態となる。するとＣＰＵ１７は、アイドルループ（ステップ４０１）に分岐して（ステップ２１７）、メインプログラム４３の書き換えを含む電源投入後の起動処理を完了する。
【００８９】
さて、本実施形態では、電源投入時から新たなメインプログラム４３中のステップ２１６が実行されてビジー状態が解除されるまでの間は、メインプログラムの書き換え中、及び再起動中を含め、ＨＤＤ１は終始ビジー状態を保っている。このため、ホストシステム２からは、単に電源投入に伴うＨＤＤ１の起動のための時間が延びたように見えるだけとなる。更に本実施形態では、書き換え前のメインプログラム４３中のステップ２０７で設定されたマスタ・スレーブの設定状態、及び他のＨＤＤ１内各部の設定状態が書き換え前の状態に復元される。つまり本実施形態では、マスタ・スレーブの設定状態、及びそれ以外のＨＤＤ１内部の状態に関し、通常に起動した場合と同様の振る舞いとなる。このため本実施形態においては、ホストシステム２の動作に影響を与えることなくメインプログラム４３の書き換えを行うことが可能となる。
【００９０】
上記したように本実施形態では、メインプログラムの書き換えを、電源投入時の起動処理の一部として行っている。この他に、本実施形態では、メインプログラム転送コマンドに続いて、ホストシステム２からＨＤＤ１に対して特定のコマンド（メインプログラム書き込みコマンド）を発行することによっても、ディスク１１に格納されたメインプログラムを用いてメインプログラム領域５２上のメインプログラム４３を書き換えることが可能なように構成されている。
【００９１】
以下、メインプログラム書き込みコマンドに従うメインプログラムの書き換えについて、上記図５、図６及び図８を参照して説明する。
まず、ホストシステム２からＨＤＤ１に対してメインプログラム転送コマンドが発行された場合、前記したように、コマンド処理ルーチンの中で当該メインプログラム転送コマンドが実行されて、ホストシステム２からの新たなメインプログラムがディスク１１に書き込まれる。このメインプログラム転送コマンドに続いてホストシステム２からメインプログラム書き込みコマンドが発行されて、ＨＤＣ２１で受信されたものとする。この場合、ＣＰＵ１７は、コマンド処理ルーチンの中で、受信コマンドがメインプログラム書き込みコマンドであると判定し（ステップ５１１）、メインプログラム４３のリセット処理部分のステップ２５３（エントリＡ）に分岐する。すると、電源投入時のメインプログラム書き換えの場合と同様にして、メインプログラム領域５２上のメインプログラム４３が書き換えられる（ステップ２５４〜２５９，３０１〜３０５）。そしてメインプログラム４３の書き換えが完了すると、ビジー状態が解除されてコマンドを受信できるようになる。
【００９２】
このように、メインプログラム書き込みコマンドに従うメインプログラムの書き換えにおいても、ホストシステム２から見れば単一のメインプログラム書き込みコマンドを実行したに過ぎず、メインプログラム４３の書き換え後には、ＨＤＤ１内の各設定状態も書き換え前の状態に復元される。このため、メインプログラム４３を、以後のホストシステム２の動作に影響を与えることなく書き換えることが可能となる。上記実施形態では、メインプログラム転送コマンドとメインプログラム書き込みコマンドを別々に用意している。しかし、メインプログラム転送コマンドの処理ルーチンでコマンド終了処理（ステップ５０８）を行う代わりに、エントリＡ（ステップ２５３）に分岐させるようにするならば、１つのコマンド（メインプログラム転送コマンド）で、メインプログラムの転送及び書き換えを、連続して実行することも可能である。
【００９３】
上記実施形態においては、本発明を磁気ディスク装置（ＨＤＤ）に適用した。しかし本発明は、光磁気ディスク装置など、記録媒体にディスク媒体を用い、且つ当該ディスク媒体へのデータ書き込みにヘッドが用いられるディスク記憶装置全般に適用することができる。
【００９４】
なお、本発明は、上記実施形態及びその変形例に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態及びその変形例には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【００９５】
【発明の効果】
以上詳述したように本発明によれば、ホストシステムにより発行されたプログラム転送コマンドをディスク記憶装置にて受信した場合に、当該コマンドの指定するプログラム（新たなプログラム）で不揮発性メモリに格納されているプログラムを直ちに書き換えることはせずに、当該新たなプログラムをディスク媒体に書き込んでおき、次のディスク記憶装置の電源投入時に、起動処理の中で、ディスク媒体に書き込まれている当該新たなプログラムで不揮発性メモリに格納されているプログラムを書き換えるようにした。
【００９６】
これにより、ホストシステムのアーキテクチャに関係なく、ディスク記憶装置の不揮発性メモリに格納されているプログラムの書き換えが行える。また、プログラム書き換えのためにホストシステムが行うべきことはプログラム転送コマンドを実行することのみであり、複雑な手順を要しない。よって、本発明においては、様々なアーキテクチャのホストシステムからの指令によるプログラム書き換えに柔軟に対応することができる。即ち本発明によれば、ディスク記憶装置において実行されるプログラムを書き換えるためのオペレーションを簡略化し、当該オペレーションが、通常のＯＳ上で動作可能なアプリケーションプログラムに基づいて簡単に実行でき、これにより様々なアーキテクチャのホストシステムからのプログラム書き換えを簡単に且つ安全に行うことができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る磁気ディスク装置の構成を示すブロック図。
【図２】図１中のＣＰＵ１７のアドレス空間マップの一例を示す図。
【図３】図２中のモニタプログラム４１の処理手順を説明するためのフローチャート。
【図４】図２中のメインプログラム４３のうち電源投入時のリセット処理を行う部分の処理手順を説明するためのフローチャートの一部を示す図。
【図５】図２中のメインプログラム４３のうち電源投入時のリセット処理を行う部分の処理手順を説明するためのフローチャートの残りを示す図。
【図６】図２中のメインプログラム書換ルーチン４２の処理手順を説明するためのフローチャート。
【図７】図２中のメインプログラム４３に含まれているアイドルループの処理手順を説明するためのフローチャート。
【図８】図２中のメインプログラム４３に含まれているコマンド処理ルーチンの処理手順を説明するためのフローチャート。
【符号の説明】
１…ＨＤＤ（磁気ディスク装置、ディスク記憶装置）
２…ホストシステム
３…ホストインタフェース
１１…ディスク
１２…ヘッド
１７…ＣＰＵ
１９…ＦＲＯＭ（フラッシュＲＯＭ、書き換え可能な不揮発性メモリ）
２０…ＣＰＵ−ＲＡＭ
２１…ＨＤＣ（ディスクコントローラ）
２５…バッファＲＡＭ
３０…ＣＰＵアドレス空間
４１…モニタプログラム
４２…メインプログラム書換ルーチン
４３…メインプログラム
４４…書換要求フラグ
４５…チェックコード（特定情報）
４６…チェックサム
５１…モニタプログラム領域
５２…メインプログラム領域
５３…パラメタ領域
６１…状態保存領域
６２…状態保存フラグ
６３…変数領域
【図１】
0003708914.tif 000002
【図２】
0003708914.tif 000003
【図３】
0003708914.tif 000004
【図４】
0003708914.tif 000005
【図５】
0003708914.tif 000006
【図６】
0003708914.tif 000007
【図７】
0003708914.tif 000008
【図８】
0003708914.tif 000009