(57)【要約】【課題】シリアルＡＴＡによるデータ転送を高速化する。【解決手段】相手デバイスから所定のデータ単位で送信される送信データを受信する受信回路と、送信データにエラーがないか検出するエラー検出回路と、送信データを格納するＦＩＦＯ回路と、ＦＩＦＯ回路に格納された送信データをアドレスポインタに基づいて後段装置へ転送する制御を行なう制御回路と、からなるデータ転送制御装置において、送信データを受信後、エラー検出回路がエラーを検出しなかった場合、アドレスポインタを所定のデータ単位分インクリメントし、次の送信データを受信し、エラー検出回路がエラーを検出した場合、後段装置へのデータ転送を中止し、エラー通知を相手デバイスに送信し、アドレスポインタを所定のデータ単位分デクリメントし、相手デバイスのアドレスポイントを所定のデータ単位分デクリメントさせる命令コードを相手デバイスに送信し、次の送信データを受信する。【選択図】図８
2008017250.tif 000002
【特許請求の範囲】
【請求項１】
相手デバイスから所定のデータ単位で送信される送信データを受信する受信回路と、
前記送信データをチェックし前記送信データにエラーがないか検出するエラー検出回路と、
前記送信データを格納するＦＩＦＯ回路と、
前記ＦＩＦＯ回路に格納された前記送信データをアドレスポインタに基づいて後段装置へ転送する制御を行う制御回路と、
からなるデータ転送制御装置において、
前記データ転送制御装置は、前記送信データを受信後、
前記エラー検出回路がエラーを検出しなかった場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを受信し、
前記エラー検出回路がエラーを検出した場合、前記後段装置へのデータ転送を中止し、エラー通知を前記相手デバイスに送信し、前記アドレスポインタを所定のデータ単位分デクリメントし、前記相手デバイスのアドレスポイントを前記所定のデータ単位分デクリメントさせる命令コードを前記相手デバイスに送信し、次の前記送信データを受信する、
ことを特徴とするデータ転送制御装置。
【請求項２】
後段装置からアドレスポインタに基づいて送信データを抽出する制御回路と、
前記送信データを格納するＦＩＦＯ回路と、
相手デバイスに所定のデータ単位で前記送信データを送信する送信回路と、
からなるデータ転送制御装置において、
前記データ転送制御装置は、前記送信データを送信後、
前記相手デバイスから前記送信データに対するエラー検出通知が送られてこない場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを送信し、
前記相手デバイスから前記送信データに対するエラー検出通知が送られてきた場合、前記相手デバイスへのデータ送信を中止し、前記アドレスポインタを前記相手デバイスから送られてくる命令コードに基づき所定のデータ単位分デクリメントし、次の前記送信データを送信する、
ことを特徴とするデータ転送制御装置。
【請求項３】
相手ホストから所定のデータ単位で送信される送信データを受信する受信回路と、
前記送信データをチェックし前記送信データにエラーがないか検出するエラー検出回路と、
前記送信データを格納するＦＩＦＯ回路と、
前記ＦＩＦＯ回路に格納された前記送信データをアドレスポインタに基づいて後段デバイスへ転送する制御を行う制御回路と、
からなるデータ転送制御装置において、
前記データ転送制御装置は、前記送信データを受信後、
前記エラー検出回路がエラーを検出しなかった場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを受信し、
前記エラー検出回路がエラーを検出した場合、前記後段装置へのデータ転送を中止し、エラー通知を前記相手ホストに送信し、前記アドレスポインタを所定のデータ単位分デクリメントし、前記相手ホストのアドレスポイントを前記所定のデータ単位分デクリメントさせる命令コードを前記相手ホストに送信し、次の前記送信データを受信する、
ことを特徴とするデータ転送制御装置。
【請求項４】
後段デバイスからアドレスポインタに基づいて送信データを抽出する制御回路と、
前記送信データを格納するＦＩＦＯ回路と、
相手ホストに所定のデータ単位で前記送信データを送信する送信回路と、
からなるデータ転送制御装置において、
前記データ転送制御装置は、前記送信データを送信後、
前記相手ホストから前記送信データに対するエラー検出通知が送られてこない場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを送信し、
前記相手ホストから前記送信データに対するエラー検出通知が送られてきた場合、前記相手デバイスへのデータ送信を中止し、前記アドレスポインタを前記相手ホストから送られてくる命令コードに基づき所定のデータ単位分デクリメントし、次の前記送信データを送信する、
ことを特徴とするデータ転送制御装置。
【請求項５】
請求項１から４のいずれか一項に記載のデータ転送制御装置において、前記データ転送制御装置は、シリアルＡＴＡ II規格で定めるＮＣＱ（Native Command Queuing）に対応している、ことを特徴とするデータ転送制御装置。
【請求項６】
請求項１から５のいずれか一項に記載のデータ転送制御装置において、前記所定のデータ単位は、シリアルＡＴＡ規格で定めるフレーム単位である、ことを特徴とするデータ転送制御装置。
【請求項７】
請求項１から６のいずれか一項に記載のデータ転送制御装置を含むことを特徴とする電子機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データ転送制御装置及び電子機器に関する。
【背景技術】
【０００２】
近年、ストレージデバイス等のシリアルインターフェースとして、シリアルＡＴＡ（Serial AT Attachment）と呼ばれる規格が脚光を浴びている。このシリアルＡＴＡは、従来のパラレルＡＴＡであるＩＤＥ（Integrated Drive Electronics）との間のソフトウェアレベルでの互換性を備えた規格である。そして最初の規格であるシリアルＡＴＡ Ｉのデータ転送速度は１．５Ｇｂｐｓであったが、次の規格であるシリアルＡＴＡ IIではデータ転送速度が３．０Ｇｂｐｓに高速化している。またシリアルＡＴＡ IIでは外部接続についても定義されている。シリアルＡＴＡ IIでは、ＮＣＱ（Native Command Queueing）が新たに規格化され、ＮＣＱによるコマンドの並べ替えは、ハードディスク装置の宿命であるディスク回転待ち時間の低減などの効果が期待される。
【０００３】
このシリアルＡＴＡでは、規格上、ファイルは８ＫＢ単位に分割され、分割単位毎に、ＦＩＳ（Frame Information Structure、フレーム情報構造）と、ＦＩＳの内容に基づいて計算されるＣＲＣ（Cyclic Redundancy Check、巡回冗長検査）コードが１つずつ付加された後、シリアルＡＴＡバスを介して相手デバイスに送信される。相手デバイスは、ＣＲＣコードに基づいてＦＩＳ毎にエラーチェックを行い、エラーが検出されると、後段（たとえばハードディスク）への転送を中止し、送信元へＲ＿ＥＲＲ通知（受信エラー通知）を返す。
【０００４】
送信元（ホスト）は、Ｒ＿ＥＲＲ通知を受けると、再びファイルの最初から８ＫＢ単位のデータに分割し、シリアルＡＴＡバスを介して相手に送信する。すなわち、ファイルの途中からのリトライができない。シリアルＡＴＡ規格においては、８ＫＢ毎にＦＩＳに付加されたＣＲＣエラーチェックを行っているのにもかかわらず、エラーが検出された場合のシリアルＡＴＡバス上のデータ転送がファイルの最初から再開せざるを得ず、転送効率が悪くなっていた。
【０００５】
この問題を解決するために、例えば特許文献１には、ＩＥＥＥ１３９４規格のデータ転送制御装置に関して、第１のコマンドパケットの処理中に上層のデバイスに、データ転送オペレーションにより要求されるデータ転送を中断させるエラーが発生した場合に、エラーステータスを相手ノードに転送するステータス転送手段と、エラーステータスを受けた相手ノードからデータ転送オペレーション要求のための第２のコマンドパケットが転送されてきた場合に、第１のコマンドパケットの内容と第２のコマンドパケットの内容とを比較するコマンド比較処理、又は第１のコマンドパケットにより転送要求された転送データの先頭アドレスである第１のアドレスと第２のコマンドパケットにより転送要求された転送データの先頭アドレスとを比較するアドレス比較処理を行う比較手段と、第１、第２のアドレスが同一であると判断された場合に、エラーの発生により中断したデータ転送を該エラー発生時点のデータ転送の続きから再開する再開手段とを含むデータ転送制御装置が開示されている。すなわち、エラー前後で重複して転送されたデータに対して、重複を解消して後段に転送する発明が開示されている。特許文献２、３、４にも同様の発明が開示されている。
【０００６】
【特許文献１】特開２００１−１７７５４４号公報
【特許文献２】特開２００１−１７７５３６号公報
【特許文献３】特開２００１−１７７５３７号公報
【特許文献４】特開２００１−１７５５４６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、特許文献１〜４では、受信するデータそのものの重複を減じたり、解消したりする発明は、開示されていない。また、シリアルＡＴＡで規格されているＦＩＳを用いたデータ再開に関する発明は、開示されていない。
【０００８】
本発明は、このような事情に鑑みてなされたものであり、エラー後のデータ再開の効率化を実現できるデータ転送制御装置及びこれを含む電子機器を提供することを目的とするものである。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明のデータ転送制御装置では、相手デバイスから所定のデータ単位で送信される送信データを受信する受信回路と、前記送信データをチェックし前記送信データにエラーがないか検出するエラー検出回路と、前記送信データを格納するＦＩＦＯ回路と、前記ＦＩＦＯ回路に格納された前記送信データをアドレスポインタに基づいて後段装置へ転送する制御を行う制御回路と、からなるデータ転送制御装置において、前記データ転送制御装置は、前記送信データを受信後、前記エラー検出回路がエラーを検出しなかった場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを受信し、前記エラー検出回路がエラーを検出した場合、前記後段装置へのデータ転送を中止し、エラー通知を前記相手デバイスに送信し、前記アドレスポインタを所定のデータ単位分デクリメントし、前記相手デバイスのアドレスポイントを前記所定のデータ単位分デクリメントさせる命令コードを前記相手デバイスに送信し、次の前記送信データを受信することを要旨とする。
【００１０】
また、本発明のデータ転送制御装置では、後段装置からアドレスポインタに基づいて送信データを抽出する制御回路と、前記送信データを格納するＦＩＦＯ回路と、相手デバイスに所定のデータ単位で前記送信データを送信する送信回路と、からなるデータ転送制御装置において、前記データ転送制御装置は、前記送信データを送信後、前記相手デバイスから前記送信データに対するエラー検出通知が送られてこない場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを送信し、前記相手デバイスから前記送信データに対するエラー検出通知が送られてきた場合、前記相手デバイスへのデータ送信を中止し、前記アドレスポインタを前記相手デバイスから送られてくる命令コードに基づき所定のデータ単位分デクリメントし、次の前記送信データを送信する。
【００１１】
また、本発明のデータ転送制御装置では、相手ホストから所定のデータ単位で送信される送信データを受信する受信回路と、前記送信データをチェックし前記送信データにエラーがないか検出するエラー検出回路と、前記送信データを格納するＦＩＦＯ回路と、前記ＦＩＦＯ回路に格納された前記送信データをアドレスポインタに基づいて後段デバイスへ転送する制御を行う制御回路と、からなるデータ転送制御装置において、前記データ転送制御装置は、前記送信データを受信後、前記エラー検出回路がエラーを検出しなかった場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを受信し、前記エラー検出回路がエラーを検出した場合、前記後段装置へのデータ転送を中止し、エラー通知を前記相手ホストに送信し、前記アドレスポインタを所定のデータ単位分デクリメントし、前記相手ホストのアドレスポイントを前記所定のデータ単位分デクリメントさせる命令コードを前記相手ホストに送信し、次の前記送信データを受信する。
【００１２】
また、本発明のデータ転送制御装置では、後段デバイスからアドレスポインタに基づいて送信データを抽出する制御回路と、前記送信データを格納するＦＩＦＯ回路と、相手ホストに所定のデータ単位で前記送信データを送信する送信回路と、からなるデータ転送制御装置において、前記データ転送制御装置は、前記送信データを送信後、前記相手ホストから前記送信データに対するエラー検出通知が送られてこない場合、前記アドレスポインタを前記所定のデータ単位分インクリメントし、次の前記送信データを送信し、前記相手ホストから前記送信データに対するエラー検出通知が送られてきた場合、前記相手デバイスへのデータ送信を中止し、前記アドレスポインタを前記相手ホストから送られてくる命令コードに基づき所定のデータ単位分デクリメントし、次の前記送信データを送信する。
【００１３】
また、本発明のデータ転送制御装置では、前記データ転送制御装置は、シリアルＡＴＡ II規格で定めるＮＣＱ（Native Command Queuing）に対応している。
【００１４】
また、本発明のデータ転送制御装置では、前記所定のデータ単位は、シリアルＡＴＡ規格で定めるフレーム単位である。
【００１５】
以上に述べた構成によれば、ホストとデバイス間でデータを転送中にデータエラーが発生した場合でも、ホストとデバイスのそれぞれがエラーが発生した直前のアドレスポインタに戻しデータの転送を再開できるので、従来のようにエラーが発生する度にデータの先頭から転送をやり直す場合に比べても格段に転送効率を向上させることができる。また、ホストとデバイスが自らアドレスポインタを戻すことができるので、制御ソフトウェアを介す必要がなく、転送効率を向上させることもできる。
【００１６】
また本発明は、上記のいずれかのデータ転送制御装置を含む電子機器に関する。
【発明を実施するための最良の形態】
【００１７】
以下、本発明を具体化した実施形態について図面に従って説明する。なお以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではなく、本実施形態で説明される構成の全てが本発明の解決手段として必須であるとは限らない。
（第１実施形態）
【００１８】
＜データ転送制御装置の構成＞
まず、第１実施形態に係るデータ転送制御装置の構成について、図１を参照して説明する。図１は、本発明の第１実施形態に係るデータ転送制御装置の構成を示すブロック図である。図１に示すように、データ転送制御装置１は、ホスト１０と、デバイス２０と、シリアルＡＴＡケーブル３０と、から構成されている。
【００１９】
ホスト１０とデバイス２０は、各々シリアルＡＴＡの層構造を構成する、アプリケーション層１００と、トランスポート層２００と、リンク層３００と、物理層４００と、から構成されている。
【００２０】
次に、シリアルＡＴＡ（以下、ＳＡＴＡ）の層構造について図２及び図３を参照して説明する。図２は、ホストのシリアルＡＴＡの層構造を示すブロック図である。また、図３は、デバイスのシリアルＡＴＡの層構造を示すブロック図である。
【００２１】
＜物理層＞
物理層４００では、物理層コントローラ４０１によりホスト１０とデバイス２０との間のシリアル通信や、シリアルデータからパラレルデータへの変換やパラレルデータからシリアルデータへの変換などが行われる。具体的には、ビット列をシリアル・ビット化するパラレル／シリアル変換回路４０２と、フルスイングのシリアル信号を小振幅の差動信号Ｔｘ＋／Ｔｘ−として転送するトランスミッタ回路４０３と、小振幅の差動信号Ｒｘ＋／Ｒｘ−をフルスイングのシリアル信号に変換するレシーバ回路４０４と、シリアル信号をパラレル信号に変換するシリアル／パラレル変換回路４０５と、を含む。
【００２２】
差動信号Ｔｘ＋／Ｔｘ−、差動信号Ｒｘ＋／Ｒｘ−のＳＡＴＡバス（広義にはシリアルバス）では、振幅電圧±２５０ｍＶのＮＲＺ（Non Retrun to Zero）差動信号によるシリアルストリーム転送が行われる。転送レートとしては１．５Ｇｂｐｓ（ＳＡＴＡ IIでは３．０Ｇｂｐｓ）が用意され、シリアルストリームからデータが抽出される。またＳＳＣ（Spread Spectrum Clocking、スペクトラム拡散クロック）やトランスミッタ・レシーバのインピーダンス測定も行われる。
【００２３】
＜シリアルＡＴＡケーブル＞
シリアルＡＴＡケーブル３０は、７芯であり、差動信号Ｔｘ＋／Ｔｘ−のペアはトランスミッタ回路４０３に割り当てられ、差動信号Ｒｘ＋／Ｒｘ−のペアはレシーバ回路４０４に割り当てられる。上り信号は、デバイス２０側のＴｘ＋／Ｔｘ−からホスト１０（ＨＢＡ：Host Bus Adaptor）側のＲｘ＋／Ｒｘ−に送られ、下り信号は、ホスト１０側のＴｘ＋／Ｔｘ−からデバイス２０側のＲｘ＋／Ｒｘ−に送られる。ＳＡＴＡは半二重のみの仕様になっており、データは一方向のみしか通信できない。従ってＴｘ＋／Ｔｘ−で通信を行っている最中に、バックチャネルとしてＲｘ＋／Ｒｘ−で相手ノードからのプロトコル通信を行うことができ、フロー制御に有効利用できる。
【００２４】
＜リンク層＞
リンク層３００では、リンク層コントローラ３０１により物理層４００とのデータの送受信や、シリアルインターフェースプロトコルの制御や、トランスポート層２００との間でのアプリケーションデータ（ユーザデータ）の送受信が行われる。具体的には、フレーム転送のための伝送路のアービトレーションやフロー制御が行われ、ＣＲＣ挿入／ＣＲＣチェック、スクランブル／デスクランブル処理、プリミティブ挿入／プリミティブデコード、ＦＩＳ(Frame Information Structure)や制御コードをシリアル伝送に適したビット列に変換する８ｂ／１０ｂエンコード、などが行われる。
【００２５】
処理の流れは、ＳＡＴＡバスに送信する場合は、トランスポート層から受信したデータに対し、ＣＲＣ挿入回路３０２でＣＲＣ挿入が行われ、スクランブル回路３０３でスクランブル処理が行われ、プリミティブ挿入回路３０４でプリミティブ挿入が行われ、８ｂ／１０ｂエンコーダ３０５で８ｂ／１０ｂエンコードが行われ、物理層４００に転送される。
【００２６】
また、ＳＡＴＡバスから受信する場合は、物理層４００から受信したデータに対し、１０ｂ／８ｂデコーダ３０６で１０ｂ／８ｂデコード処理が行われ、プリミティブデコーダ３０７でプリミティブデコード処理が行われ、デスクランブル回路３０８でデスクランブルが行われ、エラー検出回路であるＣＲＣチェック回路３０９でＣＲＣチェックが行われ、トランスポート層２００に転送される。
【００２７】
＜トランスポート層＞
トランスポート層２００は、トランスポート層コントローラ２０１と、ホスト１０側のシャドウ・タスクファイルレジスタ（シャドウＴＦＲ、Shadow Task File Register）２０２、デバイス２０側のデバイス・タスクファイルレジスタ（デバイスＴＦＲ、Device Task File Register）２１２と、ＦＩＦＯ回路である送信用のＦＩＳ用ＦＩＦＯ２０３とデータ用ＦＩＦＯ２０４、およびＦＩＳ用ＦＩＦＯ２０３とデータ用ＦＩＦＯ２０４用の選択回路（マルチプレクサ）２０５と、受信用のＦＩＳ用ＦＩＦＯ２０６とデータ用ＦＩＦＯ２０７、およびＦＩＳ用ＦＩＦＯ２０６とデータ用ＦＩＦＯ２０７用の選択回路（マルチプレクサ）２０８と、を含む。
【００２８】
ここで、従来のパラレルＡＴＡ（ＩＤＥ）におけるタスクファイルレジスタについて説明する。従来のパラレルＡＴＡ（ＩＤＥ）では、制御レジスタである全てのタスクファイルレジスタはＣＰＵ（広義には処理部）のアドレス空間にマッピングされる。ＣＰＵ上のソフトウェアは、このタスクファイルレジスタをリード／ライトしてデバイスを制御する。このタスクファイルレジスタはデバイス側のファームウェアからも同時に参照される。
【００２９】
ＳＡＴＡでは、従来のパラレルＡＴＡ（ＩＤＥ）との間でソフトウェアレベルでの互換性が維持されている。そしてＳＡＴＡでは、上述のタスクファイルレジスタが２つ存在することが特徴になっている。即ちホスト１０側に存在するシャドウＴＦＲ２０２とデバイス２０側の従来のタスクファイルレジスタであるデバイスＴＦＲ２１２である。ホスト１０側のＣＰＵ上のソフトウェアからはシャドウＴＦＲ２０２のみが直接アクセス可能となっており、デバイス２０側のファームウェアからはデバイスＴＦＲ２１２のみが直接アクセス可能となっている。この２つのＴＦＲは、コマンド発行時と完了時に２種類のＲｅｇｉｓｔｅｒ  ＦＩＳによりお互いにコピーされる。なおＳＡＴＡでは従来のパラレルＡＴＡ（ＩＤＥ）をエミュレートするために８個のフレーム（ＦＩＳ）が定義されている。
【００３０】
＜アプリケーション層＞
アプリケーション層１００は、パラレルＡＴＡ（ＩＤＥ）規格のホストバスアダプタ（ＨＢＡ：Host Bus Adaptor）と同じインターフェースを通してトランスポート層２００にアクセスする。レジスタアクセスなどはパラレルＡＴＡ（ＩＤＥ）規格のコマンドプロトコルとソフトウェアレベルで互換性を有している。トランスポート層２００は、リンク層３００と送受信するデータをパラレルＡＴＡ（ＩＤＥ）規格のコマンドプロトコル動作に変換する。ホスト１０側のアプリケーション層１００は、メインメモリ１０２とのアクセスを制御する制御回路であるＤＭＡＣ（Direct Memory Access Controller）１１０を含み、デバイス２０側のアプリケーション層１００は、ハードディスク１０４とのアクセスを制御する制御回路であるＨＤＣ（Hard Disk Controller）１２０を含む。
【００３１】
＜ＤＭＡＣの構成＞
次に、ＤＭＡＣの構成について図４を参照して説明する。図４は、ＤＭＡＣの構成を示すブロック図である。
【００３２】
図４に示すように、ＤＭＡＣ１１０は、コントローラ１１２、アドレスポインタ１１３、アドレスインクリメント回路１１４、アドレスデクリメント回路１１５、ＤＭＡカウンタ１１６、バス制御回路１１７を含む。
【００３３】
データ転送の際に、リンク層３００のＣＲＣチェック回路３０９からエラー検出信号Ｒ＿ＥＲＲが送信されなかった場合、アドレスインクリメント回路１１４がＦＩＳの８ＫＢ分のアドレスポインタ１１３をインクリメントし、インクリメントされたアドレスポインタ１１３に基づいてメインメモリ１０２にアドレス信号を出力する。また、データ信号は、バス制御回路１１７を介して、メインメモリ１０２−トランスポート層２００間で転送される。また、後段で生成され、または、用いられる制御信号も同様に、バス制御回路１１７を介して、メインメモリ１０２−トランスポート層２００間で転送される。なお、デバイス２０側であれば、メインメモリがハードディスクとなる。
【００３４】
一方、データ転送の際に、エラー検出信号Ｒ＿ＥＲＲが送信された場合、バス制御回路１１７を介したメインメモリ１０２−トランスポート層２００間のデータ転送は中止される。また、アドレスインクリメント回路１１４がアドレスポインタ１１３のインクリメントを中止する。あるいは、アドレスインクリメント回路１１４がインクリメントしたアドレスポインタ１１３を、アドレスデクリメント回路１１５によりＦＩＳの８ＫＢ分デクリメントする構成としても良い。このような構成とすることで、次にエラーから復帰した場合、エラー発生時のＦＩＳ分のアドレスポインタ１１３が進まず、データの連続性を確保することができる。
【００３５】
＜ＨＤＣの構成＞
次に、ＨＤＣの構成について図５を参照して説明する。図５は、ＨＤＣの構成を示すブロック図である。
【００３６】
図５に示すように、ＨＤＣ１２０は、コントローラ１１２、アドレスポインタ１１３、アドレスインクリメント回路１１４、アドレスデクリメント回路１１５、ＨＤカウンタ１２６、バス制御回路１１７を含む。
【００３７】
データ転送の際に、リンク層３００のＣＲＣチェック回路３０９からエラー検出信号Ｒ＿ＥＲＲが送信されなかった場合、アドレスインクリメント回路１１４がＦＩＳの８ＫＢ分のアドレスポインタ１１３をインクリメントし、インクリメントされたアドレスポインタ１１３に基づいてハードディスク１０４にアドレス信号を出力する。また、データ信号は、バス制御回路１１７を介して、ハードディスク１０４−トランスポート層２００間で転送される。また、後段で生成され、または、用いられる制御信号も同様に、バス制御回路１１７を介して、ハードディスク１０４−トランスポート層２００間で転送される。
【００３８】
一方、データ転送の際に、エラー検出信号Ｒ＿ＥＲＲが送信された場合、バス制御回路１１７を介したハードディスク１０４−トランスポート層２００間のデータ転送は中止される。また、アドレスインクリメント回路１１４がアドレスポインタ１１３のインクリメントを中止する。あるいは、アドレスインクリメント回路１１４がインクリメントしたアドレスポインタ１１３を、アドレスデクリメント回路１１５によりＦＩＳの８ＫＢ分デクリメントする構成としても良い。このような構成とすることで、次にエラーから復帰した場合、エラー発生時のＦＩＳ分のアドレスポインタ１１３が進まず、データの連続性を確保することができる。
【００３９】
＜ホストからデバイスへのデータ送信＞
次に、ホストからデバイスへのデータ送信について図６を参照して説明する。図６は、ホストからデバイスへのデータ送信を説明するブロック図である。
【００４０】
図６に示すように、ホスト１０からデバイス２０にＦＩＳの８ＫＢ単位のデータの転送を開始する際、ホスト１０のアドレスポインタは、ｈ０の位置に置かれ、デバイス２０のアドレスポインタは、ｄ０の位置に置かれる。Ｄａｔａ１〜Ｄａｔａ５が正常に転送された時点で、ホスト１０のアドレスポインタは、ｈ５の位置に置かれ、デバイス２０のアドレスポインタは、ｄ５の位置に置かれる。次にホスト１０からデバイス２０にＤａｔａ６を転送をした際、デバイス２０で受信したＤａｔａ６にエラーが検出されると、デバイス２０からホスト１０にエラー検出信号Ｒ＿ＥＲＲが通知され、この時点で、ホスト１０のアドレスポインタは、ｈ６の位置に置かれ、デバイス２０のアドレスポインタは、ｄ６の位置に置かれる。
【００４１】
従来のデータ転送制御装置１では、ホスト１０のアドレスポインタをｈ０の位置に戻し、デバイス２０のアドレスポインタをｄ０の位置に戻してから、データの再送信を行っていたために、正常に転送できたＤａｔａ１〜Ｄａｔａ５も再送信しなければならなくなり、エラーが検出されるたびに無駄な時間を費やしていた。
【００４２】
本発明においては、エラー検出信号Ｒ＿ＥＲＲが通知されると、ホスト１０、デバイス２０のそれぞれがアドレスポインタの位置をＦＩＳの８ＫＢ分戻すように動作する。つまり、ホスト１０のアドレスポインタをｈ６からｈ５に戻し、デバイス２０のアドレスポインタをｄ６からｄ５に戻す。
【００４３】
＜従来のデバイスからホストへのデータ送信＞
次に、従来のデバイスからホストへのデータ送信について図７を参照して説明する。図７は、従来のデバイスからホストへのデータ送信を説明するフローチャート図である。
【００４４】
まず、ステップＳ１０２では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２のステータスレジスタをチェックし、実行中でないか確認を行う。
【００４５】
次に、ステップＳ１１０では、ホスト１０のＣＰＵは、ホスト１０に対しＤＭＡＣ起動要求コマンドを送信する。ステップＳ１１２では、ホスト１０は、ＤＭＡＣ起動要求コマンドを受けて、ＤＭＡＣ１１０を起動する。
【００４６】
次に、ステップＳ１２０では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２にデバイス２０からホスト１０にデータを送信するためのコマンドを発行する。ステップＳ１２２では、ホスト１０は、シャドウＴＦＲ２０２に書き込まれたコマンドをデバイス２０のデバイスＴＦＲ２１２に送信する。ステップＳ１２４では、デバイス２０は、コマンドを受信しデバイスＴＦＲ２１２に書き込む。
【００４７】
次に、ステップＳ１３４では、デバイス２０は、ＨＤＣ１２０のアドレスポインタ１１３を設定し、ハードディスク１０４に記憶されたデータをＦＩＳ単位分（８ＫＢ）毎に分割してホスト１０に送信する。ステップ１３２では、ホスト１０は、データを受信する。また、ステップＳ１４４では、デバイス２０は、送信すべきデータが終わり（ＥＯＦ）であるか判定し、終わりの場合、送信を終了し、終わりでない場合、ステップＳ１３４に移行する。
【００４８】
次に、ステップＳ１４２では、ホスト１０は、ＣＲＣチェック回路３０９で受信したデータにエラーがないか検出し、エラーがあった場合は、ステップＳ１６２に移行し、エラーがなかった場合は、ステップＳ１５２に移行する。
【００４９】
次に、ステップＳ１６２では、ホスト１０は、エラー検出信号Ｒ＿ＥＲＲを通知する。一方、ステップＳ１５２では、受信したデータをＤＭＡＣ１１０に転送する。ステップＳ１６４では、デバイス２０は、エラー検出信号Ｒ＿ＥＲＲにより、データの送信を中止する。また、Ｓ１６０では、ホスト１０のＣＰＵは、割り込みを監視し、ステップＳ１７０では、ホスト１０のＣＰＵは、エラー検出信号Ｒ＿ＥＲＲの割り込みを検知した場合、ステップＳ１０２に移行し、エラーを感知しない場合、ステップＳ１６０に移行する。
【００５０】
以上説明したように、従来のデバイス２０からホスト１０へのデータ送信では、ホスト１０のＣＰＵは、エラー検出信号Ｒ＿ＥＲＲを検出すると、ＤＭＡＣ起動要求（Ｓ１１０）、コマンド発行（Ｓ１２０）を行ってしまうため、アドレスポインタ１１３は、初期位置に戻ってしまい、データの転送を最初からやり直すように動作していた。
【００５１】
＜本発明のデバイスからホストへのデータ送信＞
次に、本発明のデバイスからホストへのデータ送信について図８を参照して説明する。図８は、本発明のデバイスからホストへのデータ送信を説明するフローチャート図である。
【００５２】
まず、ステップＳ２０２では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２のステータスレジスタをチェックし、実行中でないか確認を行う。
【００５３】
次に、ステップＳ２１０では、ホスト１０のＣＰＵは、ホスト１０に対しＤＭＡＣ起動要求コマンドを送信する。ステップＳ２１２では、ホスト１０は、ＤＭＡＣ起動要求コマンドを受けて、ＤＭＡＣ１１０を起動する。
【００５４】
次に、ステップＳ２２０では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２にデバイス２０からホスト１０にデータを送信するためのコマンドを発行する。ステップＳ２２２では、ホスト１０は、シャドウＴＦＲ２０２に書き込まれたコマンドをデバイス２０のデバイスＴＦＲ２１２に送信する。ステップＳ２２４では、デバイス２０は、コマンドを受信しデバイスＴＦＲ２１２に書き込む。
【００５５】
次に、ステップＳ２３４では、デバイス２０は、ＨＤＣ１２０のアドレスポインタ１１３を設定し、ハードディスク１０４に記憶されたデータをＦＩＳ単位分（８ＫＢ）毎に分割してホスト１０に送信する。ステップ２３２では、ホスト１０は、データを受信する。また、ステップＳ２４４では、デバイス２０は、送信すべきデータが終わり（ＥＯＦ）であるか判定し、終わりの場合、送信を終了し、終わりでない場合、ステップＳ２３４に移行する。
【００５６】
次に、ステップＳ２４２では、ホスト１０は、ＣＲＣチェック回路３０９で受信したデータにエラーがないか検出し、エラーがあった場合は、ステップＳ２６２に移行し、エラーがなかった場合は、ステップＳ２５２に移行する。
【００５７】
次に、ステップＳ２６２では、ホスト１０は、エラー検出信号Ｒ＿ＥＲＲを通知し、ステップＳ２７２に移行する。一方、ステップＳ２５２では、受信したデータをＤＭＡＣ１１０に転送する。ステップＳ２６４では、デバイス２０は、エラー検出信号Ｒ＿ＥＲＲにより、データの送信を中止する。
【００５８】
次に、ステップＳ２７２では、ホスト１０は、ＤＭＡＣ１１０のアドレスポインタ１１３をＦＩＳ単位分戻し、ステップＳ２７３では、デバイス２０にＨＤＣ１２０のアドレスポインタ１１３をＦＩＳ単位分戻すための命令コードを送信し、ステップＳ２３４に移行する。ステップＳ２７４では、デバイス２０は、受信した命令コードに従いＨＤＣ１２０のアドレスポインタ１１３をＦＩＳ単位分戻し、ステップＳ２３４に移行する。
【００５９】
以上説明したように、本発明のデバイス２０からホスト１０へのデータ送信では、エラー検出信号Ｒ＿ＥＲＲが通知された時点で、ホスト１０とデバイス２０がそれぞれアドレスポインタ１１３をＦＩＳ単位分戻し、データ送信を再開するように動作する。
【００６０】
＜従来のホストからデバイスへのデータ送信＞
次に、従来のホストからデバイスへのデータ送信について図９を参照して説明する。図９は、従来のホストからデバイスへのデータ送信を説明するフローチャート図である。
【００６１】
まず、ステップＳ３０２では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２のステータスレジスタをチェックし、実行中でないか確認を行う。
【００６２】
次に、ステップＳ３１０では、ホスト１０のＣＰＵは、ホスト１０に対しＤＭＡＣ起動要求コマンドを送信する。ステップＳ３１２では、ホスト１０は、ＤＭＡＣ起動要求コマンドを受けて、ＤＭＡＣ１１０を起動する。
【００６３】
次に、ステップＳ３２０では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２にホスト１０からデバイス２０にデータを送信するためのコマンドを発行する。ステップＳ３２２では、ホスト１０は、シャドウＴＦＲ２０２に書き込まれたコマンドをデバイス２０のデバイスＴＦＲ２１２に送信する。ステップＳ３２４では、デバイス２０は、コマンドを受信しデバイスＴＦＲ２１２に書き込む。
【００６４】
次に、ステップＳ３２６では、デバイス２０は、受信準備ができたことをホスト１０に通知し、ステップＳ３３２に移行する。
【００６５】
次に、ステップＳ３３２では、ホスト１０は、ＤＭＡＣ１１０のアドレスポインタ１１３を設定し、メインメモリ１０２に記憶されたデータをＦＩＳ単位分（８ＫＢ）毎に分割してデバイス２０に送信する。ステップ３３４では、デバイス２０は、データを受信する。また、ステップＳ３４２では、ホスト１０は、送信すべきデータが終わり（ＥＯＦ）であるか判定し、終わりの場合、送信を終了し、終わりでない場合、ステップＳ３３２に移行する。
【００６６】
次に、ステップＳ３４４では、デバイス２０は、ＣＲＣチェック回路３０９で受信したデータにエラーがないか検出し、エラーがあった場合は、ステップＳ３６４に移行し、エラーがなかった場合は、ステップＳ３５２に移行する。
【００６７】
次に、ステップＳ３６４では、デバイス２０は、エラー検出信号Ｒ＿ＥＲＲを通知する。一方、ステップＳ３５２では、受信したデータをＨＤＣ１２０に転送する。ステップＳ３６２では、ホスト１０は、エラー検出信号Ｒ＿ＥＲＲにより、データの送信を中止する。また、Ｓ３６０では、ホスト１０のＣＰＵは、割り込みを監視し、ステップＳ３７０では、ホスト１０のＣＰＵは、エラー検出信号Ｒ＿ＥＲＲの割り込みを検知した場合、ステップＳ３０２に移行し、エラーを感知しない場合、ステップＳ３６０に移行する。
【００６８】
以上説明したように、従来のホスト１０からデバイス２０へのデータ送信では、ホスト１０のＣＰＵは、エラー検出信号Ｒ＿ＥＲＲを検出すると、ＤＭＡＣ起動要求（Ｓ３１０）、コマンド発行（Ｓ３２０）を行ってしまうため、アドレスポインタ１１３は、初期位置に戻ってしまい、データの転送を最初からやり直すように動作していた。
【００６９】
＜本発明のホストからデバイスへのデータ送信＞
次に、本発明のホストからデバイスへのデータ送信について図１０を参照して説明する。図１０は、本発明のホストからデバイスへのデータ送信を説明するフローチャート図である。
【００７０】
まず、ステップＳ４０２では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２のステータスレジスタをチェックし、実行中でないか確認を行う。
【００７１】
次に、ステップＳ４１０では、ホスト１０のＣＰＵは、ホスト１０に対しＤＭＡＣ起動要求コマンドを送信する。ステップＳ４１２では、ホスト１０は、ＤＭＡＣ起動要求コマンドを受けて、ＤＭＡＣ１１０を起動する。
【００７２】
次に、ステップＳ４２０では、ホスト１０のＣＰＵは、ホスト１０のシャドウＴＦＲ２０２にホスト１０からデバイス２０にデータを送信するためのコマンドを発行する。ステップＳ４２２では、ホスト１０は、シャドウＴＦＲ２０２に書き込まれたコマンドをデバイス２０のデバイスＴＦＲ２１２に送信する。ステップＳ４２４では、デバイス２０は、コマンドを受信しデバイスＴＦＲ２１２に書き込む。
【００７３】
次に、ステップＳ４２６では、デバイス２０は、受信準備ができたことをホスト１０に通知し、ステップＳ４３２に移行する。
【００７４】
次に、ステップＳ４３２では、ホスト１０は、ＤＭＡＣ１１０のアドレスポインタ１１３を設定し、メインメモリ１０２に記憶されたデータをＦＩＳ単位分（８ＫＢ）毎に分割してデバイス２０に送信する。ステップ４３４では、デバイス２０は、データを受信する。また、ステップＳ４４２では、ホスト１０は、送信すべきデータが終わり（ＥＯＦ）であるか判定し、終わりの場合、送信を終了し、終わりでない場合、ステップＳ４３２に移行する。
【００７５】
次に、ステップＳ４４４では、デバイス２０は、ＣＲＣチェック回路３０９で受信したデータにエラーがないか検出し、エラーがあった場合は、ステップＳ４６４に移行し、エラーがなかった場合は、ステップＳ４５２に移行する。
【００７６】
次に、ステップＳ４６４では、デバイス２０は、エラー検出信号Ｒ＿ＥＲＲを通知する。一方、ステップＳ４５２では、受信したデータをＨＤＣ１２０に転送する。ステップＳ４６２では、ホスト１０は、エラー検出信号Ｒ＿ＥＲＲにより、データの送信を中止し、ステップＳ４７２に移行する。
【００７７】
次に、ステップＳ４７２では、ホスト１０は、ＤＭＡＣ１１０のアドレスポインタ１１３をＦＩＳ単位分戻し、ステップＳ４７３では、デバイス２０にＨＤＣ１２０のアドレスポインタ１１３をＦＩＳ単位分戻すための命令コードを送信し、ステップＳ４３２に移行する。ステップＳ４７４では、デバイス２０は、受信した命令コードに従いＨＤＣ１２０のアドレスポインタ１１３をＦＩＳ単位分戻し、ステップＳ４３２に移行する。
【００７８】
以上説明したように、本発明のホスト１０からデバイス２０へのデータ送信では、エラー検出信号Ｒ＿ＥＲＲが通知された時点で、ホスト１０とデバイス２０がそれぞれアドレスポインタ１１３をＦＩＳ単位分戻し、データ送信を再開するように動作する。
【００７９】
以上に述べた前記実施形態によれば、以下の効果が得られる。
【００８０】
本実施形態では、ホストとデバイス間でデータを転送中にデータエラーが発生した場合でも、ホストとデバイスのそれぞれがエラーが発生した直前のアドレスポインタに戻しデータの転送を再開できるので、従来のようにエラーが発生する度にデータの先頭から転送をやり直す場合に比べても格段に転送効率を向上させることができる。また、ホストとデバイスが自らアドレスポインタを戻すことができるので、制御ソフトウェアを介す必要がなく、転送効率を向上させることもできる。
【図面の簡単な説明】
【００８１】
【図１】第１実施形態に係るデータ転送制御装置の構成を示すブロック図。
【図２】ホストのシリアルＡＴＡの層構造を示すブロック図。
【図３】デバイスのシリアルＡＴＡの層構造を示すブロック図。
【図４】ＤＭＡＣの構成を示すブロック図。
【図５】ＨＤＣの構成を示すブロック図。
【図６】ホストからデバイスへのデータ送信を説明するブロック図。
【図７】従来のデバイスからホストへのデータ送信を説明するフローチャート図。
【図８】本発明のデバイスからホストへのデータ送信を説明するフローチャート図。
【図９】従来のホストからデバイスへのデータ送信を説明するフローチャート図。
【図１０】本発明のホストからデバイスへのデータ送信を説明するフローチャート図。
【符号の説明】
【００８２】
１…データ転送制御装置、１０…ホスト、２０…デバイス、３０…シリアルＡＴＡケーブル、１００…アプリケーション層、１０２…メインメモリ、１０４…ハードディスク、１１０…ＤＭＡＣ、１１２…コントローラ、１１３…アドレスポインタ、１１４…アドレスインクリメント回路、１１５…アドレスデクリメント回路、１１６…ＤＭＡカウンタ、１１７…バス制御回路、１２０…ＨＤＣ、１２６…ＨＤカウンタ、２００…トランスポート層、２０１…トランスポート層コントローラ、２０２…シャドウＴＦＲ、２０３…ＦＩＳ用ＦＩＦＯ、２０４…データ用ＦＩＦＯ、２０６…ＦＩＳ用ＦＩＦＯ、２０７…データ用ＦＩＦＯ、２１２…デバイスＴＦＲ、３００…リンク層、３０１…リンク層コントローラ、３０２…ＣＲＣ挿入回路、３０３…スクランブル回路、３０４…プリミティブ挿入回路、３０５…８ｂ／１０ｂエンコーダ、３０６…１０ｂ／８ｂデコーダ、３０７…プリミティブデコーダ、３０８…デスクランブル回路、３０９…ＣＲＣチェック回路、４００…物理層、４０１…物理層コントローラ、４０２…パラレル／シリアル変換回路、４０３…トランスミッタ回路、４０４…レシーバ回路、４０５…シリアル／パラレル変換回路。
【図１】
2008017250.tif 000003
【図２】
2008017250.tif 000004
【図３】
2008017250.tif 000005
【図４】
2008017250.tif 000006
【図５】
2008017250.tif 000007
【図６】
2008017250.tif 000008
【図７】
2008017250.tif 000009
【図８】
2008017250.tif 000010
【図９】
2008017250.tif 000011
【図１０】
2008017250.tif 000012