(57)【特許請求の範囲】
【請求項１】
対象データに含まれている要素データを受信し、受信した前記要素データがエラーを含んでいるか否かを判定する受信コントローラと、
前記要素データを受信した順序にてメモリに格納し、前記要素データが前記エラーを含んでいると前記受信コントローラが判定した場合に、前記エラーを含む前記要素データを格納した位置を保存するメモリコントローラと
を備え、
前記メモリコントローラは、前記対象データに含まれている前記要素データを再受信する場合に、再受信した前記対象データのうち、前記エラーを含む前記要素データに対応している前記要素データ以降に後続するデータを、保存した前記位置を基準として、前記メモリの記憶領域に順に格納し、前記エラーを含んでいると前記受信コントローラが判定した場合に前記要素データより後に前記受信コントローラが受信した前記要素データを、前記メモリに格納しない
受信装置。
【請求項２】
前記メモリコントローラは、前記メモリのうち前記要素データを格納する記憶領域を指し示す格納位置情報と、前記エラーを含む前記要素データを格納した前記位置を表す情報との大小を比較し、比較した大小関係の結果に従い前記要素データを前記格納位置情報が指し示す記憶領域に格納するか否かを判定する
請求項１に記載の受信装置。
【請求項３】
前記受信コントローラは、前記要素データに関して前記エラーが生じた場合であって、前記対象データを再受信し、受信した前記対象データのうち前記保存した位置以降に格納するデータでないときに前記要素データを前記メモリに格納しない
請求項１または請求項２に記載の受信装置。
【請求項４】
前記メモリコントローラは、
前記メモリに前記要素データを格納する処理を実行する有効状態であるか、または、前記要素データを格納する処理を実行しない無効状態であるかを表す転送情報を格納可能な転送情報手段
をさらに備え、
前記受信コントローラは、受信した前記要素データが前記エラーを含んでいる場合に、前記メモリコントローラに、前記要素データを受信する処理を異常終了したことを表す異常信号を送信し、
前記メモリコントローラは、前記大小関係に基づいて、前記エラーを含む前記要素データを保存した前記位置を表す情報よりも前記格納位置情報が小さい場合に前記転送情報に前記無効状態を設定し、前記格納位置情報が、前記エラーを含む前記要素データを保存した前記位置を表す情報以上である場合に前記転送情報に前記有効状態を設定し、設定した前記転送情報に基づき、前記要素データを格納するか否かを判定する
請求項２に記載の受信装置。
【請求項５】
請求項１乃至請求項４のいずれかに記載の受信装置と、
前記対象データを記憶している記憶領域から、所定の単位にて対象データを読み取る読み取り手段と、
読み取った前記対象データを、前記受信コントローラに送信する送信コントローラと、
を備える転送装置。
【請求項６】
対象データに含まれている要素データを受信し、受信した前記要素データがエラーを含んでいるか否かを判定する受信コントローラとメモリコントローラとを備える装置において、
前記メモリコントローラが、前記要素データを受信した順序にてメモリに格納し、前記要素データが前記エラーを含んでいる場合に、前記エラーを含む前記要素データを格納した位置を保存するとともに、前記対象データに含まれている前記要素データを再受信する場合に、再受信した前記対象データのうち、前記エラーを含む前記要素データに対応している前記要素データ以降に後続するデータを、保存した前記位置以降に格納し、前記エラーを含んでいると前記受信コントローラが判定した場合に前記要素データより後に前記受信コントローラが受信した前記要素データを、前記メモリに格納しない
受信方法。
【請求項７】
前記メモリのうち前記要素データを格納する記憶領域を指し示す格納位置情報と、前記エラーを含む前記要素データを格納した前記位置を表す情報との大小を比較し、比較した大小関係の結果に従い前記要素データを前記格納位置情報が指し示す記憶領域に格納するか否かを判定する
請求項６に記載の受信方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、転送対象であるデータを受信する受信装置等に関する。
【背景技術】
【０００２】
ＳＡＴＡに関するインターフェース規格において、命令、ステータス等の制御系ＦＩＳについては、ＦＩＳに関するエラーに対する応答に際して、エラーが生じたフレームを再送信する処理が定義されている。これに対して、該インターフェース規格においては、データＦＩＳについては、ＦＩＳに関するエラー応答に際して、フレームを再送信する処理が定義されていない。
【０００３】
ＳＡＴＡは、シリアルＡＴ＿Ａｔｔａｃｈｍｅｎｔの略称を表す。ＦＩＳは、Ｆｒａｍｅ＿Ｉｎｆｏｒｍａｔｉｏｎ＿Ｓｔｒｕｃｔｕｒｅ（フレーム情報構造）の略称を表す。
【０００４】
該インターフェース規格に従えば、データを送受信している最中にデータＦＩＳに関してエラーが生じた場合に、データＦＩＳを送受信する命令を発行する処理、データＦＩＳを送受信する処理、送受信処理後のステータスを更新する処理等の一連の処理を再実行する必要がある。この結果、データＦＩＳに関してエラーが生じた場合に、該エラーが生じるまでに実行した処理を繰り返し実行する必要があるので、該エラーが生じるまでに実行した処理が無駄である。
【０００５】
特許文献１に開示されたインターフェース装置は、デコード部と、保持部と、ＣＲＣ部と、エラー検出部と、データ処理部とを有する。尚、ＣＲＣは、Ｃｙｃｌｉｃ＿Ｒｅｄｕｎｄａｎｃｙ＿Ｃｈｅｃｋの略称を表す。デコード部は、受信したデータをデコードし、デコード後のデータを保持部に保持する。ＣＲＣ部は、該デコード後のデータに関してＣＲＣエラーを検出する。エラー検出部は、該デコード後のデータに関してデコードエラーを検出する。エラー検出部が検出したデコードエラーが、インターフェースにおける同期を確保している期間に処理されるデータに関するエラーであり、かつ、ＣＲＣ部がＣＲＣエラーを検出しない場合に、データ処理部は、保持部に保持されているデコード後のデータを、有効なデータとして処理する。
【０００６】
特許文献２に開示されたデータ転送制御装置は、受信回路と、エラー検出回路と、ＦＩＦＯ回路と、制御回路とを有する。尚、ＦＩＦＯは、Ｆｉｒｓｔ−Ｉｎ＿Ｆｉｒｓｔ−Ｏｕｔの略称を表す。受信回路は、所定のデータ単位にて送信される送信データを受信する。エラー検出回路は、受信した送信データにおけるエラーを検出する。制御回路は、ＦＩＦＯ回路における領域を指し示すアドレスポインタに基づき、ＦＩＦＯ回路に格納された送信データを後段の装置に転送する処理を制御する。該データ転送制御装置は、エラー検出回路がエラーを検出しなかった場合に、アドレスポインタを所定のデータ単位分、インクリメントすることによって、次の送信データを受信する。該データ転送制御装置は、エラー検出回路がエラーを検出した場合に、通信先におけるアドレスポインタを所定のデータ単位分、デクリメントする命令を通信先に送信し、次の送信データを受信する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１１−２４８９７７号公報
【特許文献２】特開２００８−０１７２５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、たとえ特許文献１を用いたとしても、対象データに関する転送処理にてエラーが生じた場合に、効率よく対象データに関する転送処理を実行することは難しい。この理由は、対象データに関する転送処理にてエラーが生じた場合に、該装置が該転送処理を再実行するからである。
【０００９】
そこで、本発明の主たる目的は、データを転送する処理においてエラーが生じた場合であっても、そのデータを短期間に受信することが可能な受信装置等を提供することである。
【課題を解決するための手段】
【００１０】
前述の目的を達成するために、本発明の一態様において、受信装置は、
対象データに含まれている要素データを受信し、受信した前記要素データがエラーを含んでいるか否かを判定する受信コントローラと、
前記要素データを受信した順序にてメモリに格納し、前記要素データが前記エラーを含んでいると前記受信コントローラが判定した場合に、前記エラーを含む前記要素データを格納した位置を保存するメモリコントローラと
を備え、
前記メモリコントローラは、前記対象データに含まれている前記要素データを再受信する場合に、再受信した前記対象データのうち、前記エラーを含む前記要素データに対応している前記要素データ以降に後続するデータを、保存した前記位置を基準として、前記メモリの記憶領域に順に格納する。
【００１１】
また、本発明の他の見地として、受信方法は、
対象データに含まれている要素データを受信し、受信した前記要素データがエラーを含んでいるか否かを判定する受信コントローラを備える装置において、
前記要素データを受信した順序にてメモリに格納し、前記要素データが前記エラーを含んでいる場合に、前記エラーを含む前記要素データを格納した位置を保存するとともに、前記対象データに含まれている前記要素データを再受信する場合に、再受信した前記対象データのうち、前記エラーを含む前記要素データに対応している前記要素データ以降に後続するデータを、保存した前記位置以降に格納する。
【発明の効果】
【００１２】
本発明に係る転送装置等によれば、データを転送する処理においてエラーが生じた場合であっても、そのデータを短期間に受信することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第１の実施形態に係るコンピュータシステムが有する構成を示すブロック図である。
【図２】ＤＭＡコントローラが有する構成を示すブロック図である。
【図３】ＰＲＤテーブルが有する構成を示すブロック図である。
【図４】命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」に関するＣｏｕｎｔフィールドを概念的に表す図である。
【図５】ＳＡＴＡを介して、ＦＩＳを送信する処理を制御するＳＡＴＡコントローラにおける処理の流れを示すフローチャートである。
【図６】ＳＡＴＡを介して、ＦＩＳを受信する処理を制御するＳＡＴＡコントローラにおける処理の流れを示すフローチャートである。
【図７】ＤＭＡコントローラにおける処理の流れ（１／２）を示すフローチャートである。
【図８】ＤＭＡコントローラにおける処理の流れ（２／２）を示すフローチャートである。
【図９】本発明の第２の実施形態に係るコンピュータシステムが有する構成を示すブロック図である。
【図１０】リード命令の場合に、第２の実施形態に係る転送装置における処理の流れを示すシーケンス図である。
【図１１】転送装置が送受信するデータの一例（１／２）を概念的に表す図である。
【図１２】転送装置が送受信するデータの一例（２／２）を概念的に表す図である。
【図１３】第２の実施形態に係るコンピュータシステムにおける処理の流れを示すシーケンス図である。
【図１４】ＤＭＡコントローラにおける処理の流れ（１／４）を示すフローチャートである。
【図１５】ＤＭＡコントローラにおける処理の流れ（２／４）を示すフローチャートである。
【図１６】ＤＭＡコントローラにおける処理の流れ（３／４）を示すフローチャートである。
【図１７】ＤＭＡコントローラにおける処理の流れ（４／４）を示すフローチャートである。
【図１８】本発明の第３の実施形態に係る転送装置が有する構成を示すブロック図である。
【図１９】第３の実施形態に係る転送装置における処理の流れを示すシーケンス図である。
【図２０】本発明の第４の実施形態に係る転送装置が有する構成を示すブロック図である。
【図２１】第４の実施形態に係る転送装置における処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１４】
次に、本発明を実施する実施形態について図面を参照しながら詳細に説明する。
【００１５】
＜第１の実施形態＞
図１を参照しながら、本発明の第１の実施形態に係るコンピュータシステム１０１が有する構成について詳細に説明する。図１は、本発明の第１の実施形態に係るコンピュータシステム１０１が有する構成を示すブロック図である。
【００１６】
第１の実施形態に係るコンピュータシステム１０１は、大別して、ホスト装置１０２と、デバイス１０７とを有する。ホスト装置１０２は、メモリ１０３と、転送装置１０４とを有する。デバイス１０７は、メモリ１０８と、転送装置１０９とを有する。転送装置１０４は、ＤＭＡコントローラ１０５と、ＳＡＴＡコントローラ１０６とを有する。転送装置１０９は、ＤＭＡコントローラ１１０と、ＳＡＴＡコントローラ１１１とを有する。ホスト装置１０２と、デバイス１０７とは、ＳＡＴＡコントローラ１０６、ＳＡＴＡコントローラ１１１、及び、ＳＡＴＡコントローラ１０６とＳＡＴＡコントローラ１１１とを通信接続可能な通信路を介して、情報（データ）を送受信することができる。通信路は、たとえば、ＳＡＴＡインターフェース１１２である。
【００１７】
図２を参照しながら、ＤＭＡコントローラ１２１（たとえば、ＤＭＡコントローラ１０５、または、ＤＭＡコントローラ１１０）が有する構成について、さらに詳細に説明する。図２は、ＤＭＡコントローラ１２１が有する構成を示すブロック図である。
【００１８】
ＤＭＡコントローラ１２１は、ＰＲＤテーブルポインタレジスタ１２２と、ＰＲＤインデックスレジスタ１２３と、ＤＭＡベースアドレスレジスタ１２４と、ＤＭＡバイトカウントレジスタ１２５とを有する。尚、ＰＲＤは、Ｐｈｙｓｉｃａｌ＿Ｒｅｇｉｏｎ＿Ｄｅｓｃｒｉｐｔｏｒの略称を表す。
【００１９】
ＰＲＤテーブルポインタレジスタ１２２は、メモリ１０３において、ＰＲＤテーブル（図３、後述）を記憶している記憶領域の先頭アドレスを記憶することができる。以降、ＰＲＤテーブルが格納されている記憶領域の先頭アドレスを、「ＰＲＤベースアドレス」（または、「転送ベースアドレス」）と表す。
【００２０】
ＰＲＤインデックスレジスタ１２３は、ＰＲＤテーブルのうち、転送処理している対象データに関する情報を記憶している記憶領域の先頭アドレスを記憶することができる。尚、ＰＲＤインデックスレジスタ１２３は、ＰＲＤテーブルポインタレジスタ１２２に格納されている値を基準とした場合の、相対アドレスであってもよい。この場合に、ＰＲＤテーブルのうち、転送処理しているデータに関する情報を記憶している記憶領域の先頭アドレスは、ＰＲＤテーブルポインタレジスタ１２２に格納されている値と、ＰＲＤインデックスレジスタ１２３に格納されている値との和である。以降、説明の便宜上、ＰＲＤインデックスレジスタ１２３は、該相対アドレスを記憶することができるとする。
【００２１】
ＤＭＡベースアドレスレジスタ１２４は、転送対象である対象データを記憶している記憶領域の先頭アドレスを記憶することができる。
【００２２】
ＤＭＡバイトカウントレジスタ１２５は、該対象データのサイズ（大きさ、長さ）を記憶することができる。
【００２３】
ＤＭＡコントローラ１２１は、さらに、Ｔｒａｎｓｆｅｒカウントレジスタを有してもよい。Ｔｒａｎｓｆｅｒカウントレジスタは、たとえば、対象データに関して、転送処理が完了したデータのサイズ（大きさ、長さ）を記憶することができる。
【００２４】
以降の説明においては、説明の便宜上、ＤＭＡコントローラ１２１は、Ｔｒａｎｓｆｅｒカウントレジスタを有すると仮定する。
【００２５】
尚、本発明の各実施形態においては、特定の値を格納可能なレジスタを用いて表現するが、必ずしも、該特定の値を格納する専用のレジスタでなく、汎用のレジスタを用いて専用のレジスタに相当する機能を実現してもよい。あるいは、値を記憶可能なレジスタは、メモリ１０３における一部の記憶領域であってもよい。また、ホスト装置１０２、及び、デバイス１０７は、それぞれ、図２に示したレジスタを有しているとする。
【００２６】
次に、図３を参照しながら、転送処理において参照するＰＲＤテーブルが有する構成について、さらに詳細に説明する。図３は、ＰＲＤテーブルが有する構成を示すブロック図である。
【００２７】
ＰＲＤテーブルは、転送する対象である対象データが格納されている記憶領域を指し示す先頭アドレス（ベースアドレス）と、該対象データのサイズ（大きさ、長さ）を表すバイトカウントとが関連付けされたアドレスセットを少なくとも１つ記憶することが可能なテーブルである。
【００２８】
先頭アドレスは、メモリ（メモリ１０３、または、メモリ１０８）のうち、該対象データを記憶している記憶領域を指し示す値である。以降、転送する対象である値を記憶している記憶領域の先頭アドレスを「転送ベースアドレス」等と表すとする。以下の説明においては、バイトカウントを「転送サイズ」等と表すこともある。
【００２９】
言い換えると、対象データが複数ある場合に、ＰＲＤテーブルは、各対象データに関する先頭アドレスと、該対象データに関するサイズとが関連付けされたアドレスセットを複数種類、記憶することができる。
【００３０】
説明の便宜上、ＰＲＤテーブルは、Ｎ個（ただしＮは自然数）のアドレスセットを含むとする。また、Ｉ（ただし、１≦Ｉ≦Ｎ）番目のアドレスセットを、「第Ｉアドレスセット」と表す。さらに、該第Ｉアドレスセットに含まれている転送ベースアドレスを、「第Ｉ転送ベースアドレス」と表し、第Ｉアドレスセットに含まれている転送サイズを、「第Ｉ転送サイズ」と表す。また、第Ｉアドレスセットが表す記憶領域に格納可能な対象データを、「第Ｉ対象データ」と表す。
【００３１】
次に、図４を参照しながら、第１の実施形態に係るＳＡＴＡコントローラ１０６が送受信する命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」について説明する。図４は、命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」に関するＣｏｕｎｔフィールドを概念的に表す図である。すなわち、命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」は、Ｆｅａｔｕｒｅフィールドにベンダー固有サブコマンドを有し、Ｃｏｕｎｔフィールドにコマンドの詳細情報を有する。
【００３２】
命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」は、たとえば、デバイス装置が有する機能を有効に設定する、または、無効に設定する命令である。たとえば、デバイス１０７に通知する対象である情報は、ＦｅａｔｕｒｅフィールドとＣｏｕｎｔフィールドとに記載されている情報である。命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」は、たとえば、転送装置等のベンダーに固有のサブ命令を介して実現される。命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」は、Ｆｅａｔｕｒｅフィールドを含む。さらに、Ｓｅｔ＿Ｆｅａｔｕｒｅｓは、Ｃｏｕｎｔフィールドを含む。Ｃｏｕｎｔフィールドは、通常コマンドにおいては、ホスト装置１０２及びデバイス１０７間における転送処理に関する情報（たとえば、データ量、データのサイズ）を格納可能である。
【００３３】
本実施形態に係るＣｏｕｎｔフィールドについて詳細に説明する。Ｃｏｕｎｔフィールドに格納される値の上位４ビット（図４における「ビット［７：４］」）は、たとえば、後述する再送処理に関して処理を繰り返す回数を表す。該値の下位４ビット（図４における「ビット［３：０］」）は、たとえば、指示する内容を表す指示内容に関する値を表す。
【００３４】
該繰り返し回数が０の場合は、たとえば、指示内容に関する値にかかわらずに、再送処理が無効状態であることを表す。該繰り返し回数が１以上である場合は、たとえば、再送処理が有効状態であることを表す。さらに、繰り返し回数が１以上の値である場合に、該値は、たとえば、再送処理を異常終了と判定するか否かの閾値を表す。言い換えれば、繰り返し回数が１以上の値である場合、該繰り返し回数以上に再送処理が要求されたときに、後述の装置は、該再送処理に関して異常終了する。
【００３５】
図４に例示するＣｏｕｎｔフィールドは、上位４ビット（図４における「ビット［７：４］」）に「３」が格納されており、下位４ビット（図４における「ビット［３：０］」）に「０」が格納されている。上位４ビットに格納されている「３」は、再送処理を有効状態に設定すること、及び、再送処理に関する繰り返し回数が３回以上である場合に該再送処理を異常終了することを表す。また、下位４ビットに格納されている「０」は、Ｒ＿ＥＲＲ（ｐ）送信に起因して実行される再送処理であることを表す。
【００３６】
次に、図５及び図６を参照しながら、第１の実施形態に係るＳＡＴＡコントローラ１０６がＦＩＳを送受信する処理を制御する処理について説明する。図５は、ＳＡＴＡを介して、ＦＩＳを送信する処理を制御するＳＡＴＡコントローラ１０６における処理の流れを示すフローチャートである。図６は、ＳＡＴＡを介して、ＦＩＳを受信する処理を制御するＳＡＴＡコントローラ１０６における処理の流れを示すフローチャートである。
【００３７】
説明の便宜上、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、たとえば、ホスト装置１０２がデバイス１０７にデータを出力するライト処理を表す命令（以降、「ライト命令」と表す）を外部装置等から受信するとする。さらに、該ライト命令に応じた処理において、ホスト装置１０２がデバイス１０７に送信する対象であるデータを、「対象データ」と表すとする。また、デバイス１０７がホスト装置１０２にデータを出力する処理を表す命令を、「リード命令」と表すとする。
【００３８】
まず、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、外部装置が送信したライト命令を受信し、受信したライト命令に応じて、デバイス１０７におけるＳＡＴＡコントローラ１１１に対象データに関するＦＩＳを送信する処理を開始する（ステップＳ１０１）。処理を開始した場合に、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、受信したライト命令に基づいて、Ｆｅａｔｕｒｅフィールドを作成し、作成したＦｅａｔｕｒｅフィールドを含む命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」をデバイス１０７におけるＳＡＴＡコントローラ１１１に送信する。この処理によって、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、デバイス１０７におけるＳＡＴＡコントローラ１１１に、ホスト装置１０２に関する状態を通知する。その後、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、デバイス１０７におけるＳＡＴＡコントローラ１１１に、受信した命令（この場合に、ライト命令）を送信する。
【００３９】
さらに、ステップＳ１０１に示す処理において、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、受信した命令に基づく命令パラメタ情報を作成し、その後、ホスト装置１０２におけるＤＭＡコントローラ１０５を起動する制御を実行する。たとえば、命令に基づく命令パラメタ情報は、処理の種類、対象データの大きさ、該対象データを格納している位置情報等である。命令に応じた指示に関する命令パラメタ情報は、必ずしも、上記のすべての項目を含んでいる必要はない。
【００４０】
ホスト装置１０２におけるＳＡＴＡコントローラ１０６が起動する制御を実行するのに応じて、ホスト装置１０２におけるＤＭＡコントローラ１０５は、起動し、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が作成した命令パラメタ情報に基づき処理を実行する。尚、ＤＭＡコントローラ１０５における処理については、図７及び図８を参照しながら後述する。
【００４１】
一方、デバイス１０７におけるＳＡＴＡコントローラ１１１は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が送信した命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」、及び、ライト命令を受信する。すなわち、この例の場合に、デバイス１０７におけるＳＡＴＡコントローラ１１１は、対象データを受信する処理を開始する（ステップＳ１２１）。たとえば、デバイス１０７におけるＳＡＴＡコントローラ１１１は、受信した命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」に含まれているＦｅａｔｕｒｅフィールドに基づき、ホスト装置１０２が再送処理可能な装置であること等を認識し、Ｃｏｕｎｔフィールドに基づき、再送処理を有効または無効にする。さらに、デバイス１０７におけるＳＡＴＡコントローラ１１１は、受信したライト命令に応じた処理を開始する。
【００４２】
ステップＳ１２１に示す処理において、デバイス１０７におけるＳＡＴＡコントローラ１１１は、ライト命令に基づいた命令パラメタ情報を作成し、その後、デバイス１０７におけるＤＭＡコントローラ１１０を起動する制御を実行する。たとえば、命令に基づいた命令パラメタ情報は、処理の種類、対象データのサイズ、該対象データを格納している位置情報等である。デバイス１０７におけるＳＡＴＡコントローラ１１１が起動する制御を実行するのに応じて、デバイス１０７におけるＤＭＡコントローラ１１０は、起動し、デバイス１０７におけるＳＡＴＡコントローラ１１１が作成した命令パラメタ情報に基づき処理を実行する。尚、ＤＭＡコントローラ１１０については、図７及び図８を参照しながら後述する。
【００４３】
次に、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、対象データに関するデータＦＩＳを、デバイス１０７におけるＳＡＴＡコントローラ１１１に送信する（ステップＳ１０２）。尚、この場合に、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、さらに、対象データ（または、ＦＩＳ）に関するエラーを検知可能なデータ（たとえば、ＣＲＣに従い算出されたデータ、以降、「ＣＲＣデータ」と表す）を送信する。すなわち、ＣＲＣデータを参照する処理により、対象データに関するＦＩＳに生じたエラーを検知することができる。尚、ＣＲＣは、Ｃｙｃｌｉｃ＿Ｒｅｄｕｎｄａｎｃｙ＿Ｃｈｅｃｋの略称を表す。本実施形態においては、ＣＲＣに関する説明を省略する。
【００４４】
これに対して、デバイス１０７におけるＳＡＴＡコントローラ１１１は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が送信したデータＦＩＳを受信する（ステップＳ１２２）。さらに、デバイス１０７におけるＳＡＴＡコントローラ１１１は、ＣＲＣデータを受信し、受信したＣＲＣデータに基づき、受信したデータＦＩＳがエラーを含むか否かを判定する（ステップＳ１２３）。言い換えれば、デバイス１０７におけるＳＡＴＡコントローラ１１１は、受信したＣＲＣデータに基づき、対象データを構成する要素データごとに、エラーが生じているか否かを判定する。
【００４５】
デバイス１０７におけるＳＡＴＡコントローラ１１１は、受信したデータＦＩＳがエラーを含んでいない場合に（ステップＳ１２３にてＮＯ）、データＦＩＳを正常に受信したことを表す応答信号（以降、「正常応答信号」と表す）を作成する。デバイス１０７におけるＳＡＴＡコントローラ１１１は、作成した正常応答信号をホスト装置１０２におけるＳＡＴＡコントローラ１０６に送信する（ステップＳ１２７）。
【００４６】
ステップＳ１２３にてＮＯの場合に、デバイス１０７におけるＳＡＴＡコントローラ１１１は、デバイス１０７におけるＤＭＡコントローラ１１０に、正常応答信号を送信する。
【００４７】
デバイス１０７におけるＳＡＴＡコントローラ１１１は、受信したデータＦＩＳがエラーを含んでいる場合に（ステップＳ１２３にてＹＥＳ）、送信する応答信号をある判定基準に従い選び（ステップＳ１２４）、選んだ応答信号を送信する。ある判定基準は、たとえば、エラーが生じた回数が所定の回数以下であるか否かを表す条件である。所定の回数は、たとえば、図４に示す命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」におけるＣｏｕｎｔフィールドに格納されている。デバイス１０７におけるＳＡＴＡコントローラ１１１は、該ある判定基準を満たすと判定する場合に（ステップＳ１２４にてＹＥＳ）、対象データを再送する要求を表す応答信号（以降、「要求応答信号」と表す）を選び、選んだ要求応答信号を、ホスト装置１０２におけるＳＡＴＡコントローラ１０６に送信する（ステップＳ１２５）。ステップＳ１２５に示す処理において、デバイス１０７におけるＳＡＴＡコントローラ１１１は、エラーが生じたデータＦＩＳに関して再送処理を実行する再送通知信号を、デバイス１０７におけるＤＭＡコントローラ１１０に対して出力する。デバイス１０７におけるＤＭＡコントローラ１１０は、デバイス１０７におけるＳＡＴＡコントローラ１１１が出力した再送通知信号を入力する（図８におけるステップＳ１５６、後述）。デバイス１０７におけるＳＡＴＡコントローラ１１１は、該ある判定基準を満たさないと判定する場合に（ステップＳ１２４にてＮＯ）、対象データを正しく受信できなかったことを表す応答信号（以降、「異常応答信号」と表す）を選ぶ。デバイス１０７におけるＳＡＴＡコントローラ１１１は、選んだ異常応答信号を、ステップＳ１２６に示す処理において、デバイス１０７におけるＳＡＴＡコントローラ１１１は、異常通知信号を、デバイス１０７におけるＤＭＡコントローラ１１０に対して出力する。デバイス１０７におけるＤＭＡコントローラ１１０は、デバイス１０７におけるＳＡＴＡコントローラ１１１が出力した異常通知信号を入力する（図８におけるステップＳ１５６、後述）。
【００４８】
言い換えれば、デバイス１０７におけるＳＡＴＡコントローラ１１１は、デバイス１０７におけるＤＭＡコントローラ１１０に対して、ステップＳ１２４にてＹＥＳの場合には、再送通知信号を出力し、ステップＳ１２４にてＮＯの場合には、異常通知信号を出力する。たとえば、デバイス１０７におけるＳＡＴＡコントローラ１１１は、エラーの原因となったデータＦＩＳに関して、該エラーの回数が所定の回数よりも大きな値である場合には異常応答信号を選び、該エラーの回数が所定の回数以下である場合には要求応答信号を選ぶ。
【００４９】
ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、デバイス１０７におけるＳＡＴＡコントローラ１１１が送信した応答信号（正常応答信号、異常応答信号、または、要求応答信号）を受信することにより（ステップＳ１０３）、データＦＩＳを送信する処理を終了する（ステップＳ１０４）。尚、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、対象データを送信して（ステップＳ１０２）から、応答信号を受信する（ステップＳ１０３）までの期間内に、応答信号を待つ処理を実行してもよい。
【００５０】
その後、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、ホスト装置１０２におけるＤＭＡコントローラ１０５に、受信した応答信号を送信する。
【００５１】
係る応答信号を送信する処理について詳細に説明する。ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、受信した応答信号が、正常応答信号であるか否かを判定する（ステップＳ１０５）。ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、受信した応答信号が正常応答信号である場合に（ステップＳ１０５にてＹＥＳ）、エラーが生じなかったことを表す通知信号を、ホスト装置１０２におけるＤＭＡコントローラ１０５に対して出力する。以降、説明の便宜上、エラーが生じなかったことを表す通知信号を、「正常通知信号」と表す。その後、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、データＦＩＳに関する処理を正常終了する（ステップＳ１０９）。ホスト装置１０２におけるＤＭＡコントローラ１０５は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が出力した正常通知信号を入力する（図８におけるステップＳ１５６、後述）。
【００５２】
ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、受信した応答信号が正常応答信号でない場合に（ステップＳ１０５にてＮＯ）、受信した応答信号が要求応答信号であるか否かを判定する（ステップＳ１０６）。ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、応答信号が該要求応答信号である場合に（ステップＳ１０６にてＹＥＳ）、エラーが生じたデータＦＩＳを再送する再送通知信号を、ホスト装置１０２におけるＤＭＡコントローラ１０５に対して出力する。その後、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、対象データを再送する処理に関する命令パラメタ情報を設定した後に再送終了する（ステップＳ１０７）。ホスト装置１０２におけるＤＭＡコントローラ１０５は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が出力した再送通知信号を入力する（図８におけるステップＳ１５６、後述）。
【００５３】
ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、応答信号が該要求応答信号でない場合に（ステップＳ１０６にてＮＯ）、異常終了したことを表す異常通知信号を、ホスト装置１０２におけるＤＭＡコントローラ１０５に対して出力する。その後、ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、データＦＩＳに関する転送処理を異常終了する（ステップＳ１０８）。データＦＩＳに関するエラーが所定の回数よりも大きな場合に異常応答信号が送信されるので、異常終了は、該データＦＩＳに関する転送処理を繰り返し実行したにもかかわらず、該データＦＩＳに関する転送処理が失敗したことを表す。ホスト装置１０２におけるＤＭＡコントローラ１０５は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が出力した異常通知信号を入力する（図８におけるステップＳ１５６、後述）。
【００５４】
次に、図７を参照しながら、ＤＭＡコントローラ１０５における処理について説明する。図７は、ＤＭＡコントローラ１０５における処理の流れ（１／２）を示すフローチャートである。ＤＭＡは、Ｄｉｒｅｃｔ＿Ｍｅｍｏｒｙ＿Ａｃｃｅｓｓの略称を表す。
【００５５】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が起動する制御を実行するのに応じて処理を開始する。同様に、デバイス１０７におけるＤＭＡコントローラ１１０は、デバイス１０７におけるＳＡＴＡコントローラ１１１が起動する制御を実行するのに応じて処理を開始する。
【００５６】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、たとえば、ホスト装置１０２におけるＳＡＴＡコントローラ１０６がステップＳ１０１にて作成した命令パラメタ情報を読み取り、読み取った命令パラメタ情報に基づき、メモリ１０３において、全ての対象データつまりＮ個の対象データを格納可能な記憶領域を確保し、その領域を指し示すＰＲＤテーブルを用意する（ステップＳ１３１）。
ホスト装置１０２におけるＤＭＡコントローラ１０５は、用意したＰＲＤテーブルの先頭アドレス（すなわち、「ＰＲＤベースアドレス」）を、ＰＲＤテーブルポインタレジスタに格納する（ステップＳ１３２）。ホスト装置１０２におけるＤＭＡコントローラ１０５は、命令ＦＩＳに応じた転送処理において、転送するデータを一時的に記憶するメモリ領域を確保する（ステップＳ１３３）。ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＰＲＤインデックスレジスタに処理を開始する対象データの番号（たとえば、１）を格納する（ステップＳ１３４）。
【００５７】
ステップＳ１３１乃至ステップＳ１３４に示す処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、全ての対象データつまりＮ個の対象データを転送する処理に関する準備を実行する。ステップＳ１３４に示す処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、Ｎ個の対象データに含まれている第１対象データを送信する準備を実行する。
【００５８】
同様に、デバイス１０７におけるＤＭＡコントローラ１１０は、デバイス１０７におけるＳＡＴＡコントローラ１１１がステップＳ１２１にて作成した命令パラメタ情報を読み取り、読み取った命令パラメタ情報に基づき、ステップＳ１３１乃至ステップＳ１３４に示した処理と同様の処理を実行する。
【００５９】
ＤＭＡコントローラ１０５は、第Ｉ対象データに関するアドレスが格納されている記憶領域を指し示すアドレスを算出する（ステップＳ１３５）。より具体的に、ステップＳ１３５に示す処理について説明する。まず、ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＰＲＤテーブルポインタレジスタに格納されているＰＲＤベースアドレス、及び、ＰＲＤインデックスレジスタに格納されている値を読み取り、読み取ったＰＲＤベースアドレスと、読み取った値との和を算出する。ＰＲＤテーブルポインタレジスタは、ＰＲＤテーブルを記憶している記憶領域を指し示す先頭アドレスが格納されている。ＰＲＤインデックスレジスタは、ＰＲＤテーブルに含まれるＮ個の対象データのうち、処理している第Ｉ対象データを指し示す値が格納されている。
【００６０】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、算出した先頭アドレスが指し示す記憶領域から第Ｉ対象データに関するアドレスセット（すなわち、ＰＲＤテーブルの一部）を読み取る（ステップＳ１３６）。ホスト装置１０２におけるＤＭＡコントローラ１０５は、読み取ったアドレスセットに含まれている転送ベースアドレスを、ＤＭＡベースアドレスレジスタに格納する（ステップＳ１３７）。ホスト装置１０２におけるＤＭＡコントローラ１０５は、読み取ったアドレスセットに含まれているバイトカウントの値（すなわち、「転送サイズ」）を、ＤＭＡバイトカウントレジスタに格納する（ステップＳ１３８）。ステップＳ１３７及びステップＳ１３８に示す処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、第Ｉ対象データに関する転送ベースアドレスをＤＭＡベースアドレスレジスタに格納し、第Ｉ対象データに関するサイズをＤＭＡバイトカウントレジスタに格納する。
【００６１】
同様に、デバイス１０７におけるＤＭＡコントローラ１１０は、ステップＳ１３５乃至ステップＳ１３８に示した処理と同様の処理を、デバイス１０７にて実行する。
【００６２】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、ステップＳ１３１にて読み取った命令パラメタ情報から再送処理が有効であるか否かを判定する。さらに、ホスト装置１０２におけるＤＭＡコントローラ１０５は、ステップＳ１５６にて入力した通知信号が再送通知信号であるか否かを判定する（ステップＳ１３９）。たとえば、ＤＭＡコントローラ１０５が、該通知信号が格納された記憶領域を参照することにより、ステップＳ１３９に示す処理を実現することができる。ホスト装置１０２におけるＤＭＡコントローラ１０５は、再送処理が有効であり、かつ、通知信号が再送通知信号である場合に（ステップＳ１３９にてＹＥＳ）、Ｔｒａｎｓｆｅｒカウントレジスタに、ＦＩＳオフセットレジスタに格納されているデータを格納する（ステップＳ１４０）。この処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、たとえば、転送処理しているＦＩＳの番号を格納可能なＴｒａｎｓｆｅｒカウントレジスタに、再送要求にて再送を開始するＦＩＳの番号を格納可能な記憶領域に記憶されている値を格納する。すなわち、この処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、第Ｉ対象データに関して、該ＦＩＳの番号から転送する処理を開始する。
【００６３】
尚、説明の便宜上、上述した処理において、ＰＲＤテーブルにおける１つのエントリのサイズと、ＦＩＳのサイズとは同じであるとした。以降に説明する実施形態においても同様である。ただし、ＰＲＤテーブルにおける１つのエントリのサイズと、ＦＩＳのサイズとは必ずしも同じでなくともよい。
【００６４】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、処理の種類が再送処理でないまたは、通知信号が再送通知信号でない場合に（ステップＳ１３９にてＮＯ）、Ｔｒａｎｓｆｅｒカウントレジスタに１を格納する（ステップＳ１４１）。尚、Ｔｒａｎｓｆｅｒカウントレジスタは、ＰＲＤの１エントリの内どれだけのデータを転送したかを記憶している。ホスト装置１０２におけるＤＭＡコントローラ１０５は、たとえば、第Ｉ対象データに関して、１番目のＦＩＳから転送する処理を開始する。
【００６５】
同様に、デバイス１０７におけるＤＭＡコントローラ１０５は、ステップＳ１３１乃至ステップＳ１４１に示した処理と同様の処理を、デバイス１０７にて実行する。
【００６６】
次に、図８を参照しながら、ステップＳ１４０（または、ステップＳ１４１）に後続するＤＭＡコントローラ１０５における処理について説明する。図８は、ＤＭＡコントローラ１０５における処理の流れ（２／２）を示すフローチャートである。
【００６７】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＰＲＤインデックスレジスタに格納されている値を、ＦＩＳインデックスレジスタに格納する（ステップＳ１５２）。さらに、ホスト装置１０２におけるＤＭＡコントローラ１０５は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値（たとえば、１）を、ＦＩＳオフセットレジスタに格納する（ステップＳ１５３）。ステップＳ１５２及びステップＳ１５３に示す処理によって、たとえば、ＦＩＳにエラーが生じた場合であっても、ＦＩＳインデックスレジスタ等を参照することにより、転送装置１０４は、エラーが生じたＦＩＳを再処理することができる。
【００６８】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＤＭＡベースアドレスレジスタに格納されている値と、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値とを読み取り、読み取った２つの値を足し合わせた値を算出する。ホスト装置１０２におけるＤＭＡコントローラ１０５が算出した値は、該ＤＭＡコントローラ１０５が、対象データに関して転送するデータを記憶している記憶領域を表すＤＭＡアドレスを表す。
【００６９】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、算出したＤＭＡアドレスが表す記憶領域を起点として、データＦＩＳのサイズ分の大きさのデータを読み取り、読み取ったデータを該ホスト装置１０２におけるＳＡＴＡコントローラ１０６に対して出力する。
【００７０】
ホスト装置１０２におけるＳＡＴＡコントローラ１０６は、ホスト装置１０２におけるＤＭＡコントローラ１０５が出力したデータを入力し、入力したデータをデバイス１０７におけるＳＡＴＡコントローラ１１１に送信する。デバイス１０７におけるＳＡＴＡコントローラ１１１は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が送信したデータを受信し、受信したデータを、デバイス１０７におけるＤＭＡコントローラ１１０に対して出力する。すなわち、ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＤＭＡ転送する処理を実行する（ステップＳ１５４）。
【００７１】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を読み取り、読み取った値に、転送したデータのサイズを加算する。ホスト装置１０２におけるＤＭＡコントローラ１０５は、加算した結果算出される値をＴｒａｎｓｆｅｒカウントレジスタに格納する。すなわち、ホスト装置１０２におけるＤＭＡコントローラ１１０は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を、転送したデータのサイズ分（たとえば、ＦＩＳの個数）だけ増やす（ステップＳ１５５）。
【００７２】
デバイス１０７におけるＤＭＡコントローラ１１０は、ＤＭＡベースアドレスレジスタに格納されているデータと、Ｔｒａｎｓｆｅｒカウントレジスタに格納されているデータを読み取り、読み取った２つのデータを加算する。この処理にて、ＤＭＡコントローラ１１０が算出した値は、該ＤＭＡコントローラ１１０が、受信したデータを格納する記憶領域を表すＤＭＡアドレスを表す。
【００７３】
デバイス１０７におけるＤＭＡコントローラ１１０は、デバイス１０７におけるＳＡＴＡコントローラ１１１が出力したデータを入力し、算出したＤＭＡアドレスから始まる記憶領域に、入力したデータを格納する。すなわち、デバイス１０７におけるＤＭＡコントローラ１１０は、ＤＭＡ転送する処理を実行する（ステップＳ１５４）。
【００７４】
デバイス１０７におけるＤＭＡコントローラ１１０は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を読み取り、記憶領域に格納したデータの個数と、読み取った値とが加算された値を算出し、算出した値を該Ｔｒａｎｓｆｅｒカウントレジスタに格納する。すなわち、デバイス１０７におけるＤＭＡコントローラ１１０は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を、受信したデータのサイズ分だけ増やす（ステップＳ１５５）。
【００７５】
すなわち、ステップＳ１５２乃至ステップＳ１５５に示す処理によって、デバイス１０７におけるＤＭＡコントローラ１１０、及び、ホスト装置１０２におけるＤＭＡコントローラ１０５は、第Ｉ対象データに関するデータＦＩＳを転送する処理を実行する。
【００７６】
ホスト装置１０２におけるＤＭＡコントローラ１０５は、ホスト装置１０２におけるＳＡＴＡコントローラ１０６が出力した通知信号を入力する（ステップＳ１５６）。ホスト装置１０２におけるＤＭＡコントローラ１０５は、ステップＳ１５６にて受信した通知信号が再送通知信号であるか否かを判定する（ステップＳ１５７）。以降、通知信号が再送通知信号である場合を、再送設定情報が有効であるとも表す。
【００７７】
通知信号が再送通知信号である場合に（ステップＳ１５７にてＹＥＳ）、ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＦＩＳインデックスレジスタに格納されている値を、ＰＲＤインデックスレジスタに格納する（ステップＳ１５８）。その後、ホスト装置１０２におけるＤＭＡコントローラ１０５は、ステップＳ１３５（図７）に示す処理を実行する。通知信号が再送通知信号である場合に、ステップＳ１５８に示す処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＰＲＤインデックスレジスタにおける値をステップＳ１５２にて格納した値に設定する。
【００７８】
通知信号が再送通知信号でない場合に（ステップＳ１５７にてＮＯ）、ホスト装置１０２におけるＤＭＡコントローラ１０５は、複数の対象データに関する転送処理がすべて完了したか否かを判定する（ステップＳ１５９）。
【００７９】
ステップＳ１５９において、ホスト装置１０２におけるＤＭＡコントローラ１０５は、たとえば、ＰＲＤインデックスレジスタに格納されている値の最上位ビットが「０」であるか、または、「１」であるかを判定する。この処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、転送処理を実行したアドレスセットが第Ｎ対象データであるか否かを判定する。すなわち、ホスト装置１０２におけるＤＭＡコントローラ１０５は、対象データが複数ある場合に、すべての対象データに関して、該対象データを転送する処理が完了したか否かを判定する。
【００８０】
複数の対象データに関する転送処理がすべて完了した場合に（ステップＳ１５９にてＹＥＳ）、ホスト装置１０２におけるＤＭＡコントローラ１０５は、対象データを転送する処理を終了する。また、転送処理が完了していない対象データがある場合に（ステップＳ１５９にてＮＯ）、ホスト装置１０２におけるＤＭＡコントローラ１０５は、ＰＲＤインデックスレジスタの値を、１増やす（ステップＳ１６０）。ステップＳ１６０に示す処理によって、ホスト装置１０２におけるＤＭＡコントローラ１０５は、第（Ｉ＋１）対象データに関する処理を開始することができる。
【００８１】
同様に、デバイス１０７におけるＤＭＡコントローラ１１０は、ステップＳ１５２乃至ステップＳ１６０に示した処理と同様の処理を、デバイス１０７にて実行する。
【００８２】
次に、本実施形態に係る転送装置１０４が奏する効果について説明する。
【００８３】
第１の実施形態に係る転送装置１０４によれば、データを転送する処理においてエラーが生じた場合であっても、そのデータを短期間に転送することができるとともに、ハードウェアに関する故障が生じる場合であっても処理を停止することができる。
【００８４】
本実施形態に係る転送装置１０４が上述した効果を奏する理由を、特許文献１及び特許文献２と対比しながら以下に説明する。
【００８５】
たとえば、第Ｉ（ただし、１≦Ｉ≦Ｎの整数）対象データを転送する処理において転送されるＮ個のデータＦＩＳのうち、２つのデータＦＩＳにてエラーが生じるとする。該２つのデータＦＩＳは、第ＡデータＦＩＳ、及び、第ＢデータＦＩＳであるとする。この前提において、特許文献１に示された装置が、該対象データを転送する処理の流れについて説明し、次に、本実施形態に係る転送装置１０４が、該対象データを転送する処理の流れについて説明する。その後、該２つの処理の違いが、上述した効果を奏する理由について説明する。
【００８６】
特許文献１に示された装置は、対象データに関する処理を実行する場合に、大別して、転送処理に関する準備処理（各種レジスタの設定等）と、対象データを転送する転送処理と実行する。該装置は、第ＡデータＦＩＳにてエラーが生じた場合に、対象データに関する処理を再実行する。すなわち、該装置は、第ＡデータＦＩＳに関してエラーが生じる場合に、該準備処理と、該転送処理とを再実行する。さらに、対象データに関する処理において第ＢデータＦＩＳにてエラーが生じた場合に、該装置は、対象データに関する処理を再実行する。すなわち、上述したような例において、該装置は、該準備処理と、該転送処理とを３回分、実行する。
【００８７】
これに対して、転送装置１０４は、第ＡデータＦＩＳにエラーが生じた場合に、ステップＳ１５８に示した処理によって、ステップＳ１３１乃至ステップＳ１３４に示す準備処理を実行することなく、転送処理（ステップＳ１３５乃至ステップＳ１３８、及び、ステップＳ１５２乃至ステップＳ１５６等に相当）を実行する。さらに、転送装置１０４は、２度目の該転送処理において、第ＢデータＦＩＳにエラーが生じた場合に、同様の理由により、ステップＳ１３１乃至ステップＳ１３４に示す準備処理を実行することなく、転送処理を実行する。この結果、本実施形態に係る転送装置１０４によれば、１度（回）の転送処理で済むので、特許文献１に示された装置に比べ、準備処理が少なくなる。したがって、本実施形態に係る転送装置１０４によれば、転送エラーが生じるような状況において、効率よくデータを転送することができる。
【００８８】
また、特許文献２に示された装置は、対象データを記憶しているハードウェア（たとえば、記憶領域）が故障した場合に、処理を終了することができない。この理由は、該装置が、エラーの原因であるデータに関して、エラーが生じている期間に繰り返し該データに関する転送処理を繰り返すからである。たとえば、記憶領域が故障した場合に、該記憶領域に格納されているデータに関して、エラーは、該データを読み取るたびに生じる。該装置は、エラーが生じるのに応じて繰り返し転送処理を実行するので、転送処理を終了することができない。
【００８９】
これに対して、第１の実施形態に係る転送装置は、図４に示すＣｏｕｎｔフィールドに基づき、再送処理を実行するか否かを判定する（図６におけるステップＳ１２４）ので、所定の回数以下の転送処理を繰り返す。したがって、第１の実施形態に係る転送装置によれば、ハードウェアに関する故障が生じる場合であっても処理を停止することができる。
【００９０】
＜第２の実施形態＞
次に、本発明の第２の実施形態について説明する。
【００９１】
以降の説明においては、本実施形態に係る特徴的な部分を中心に説明すると共に、上述した第１の実施形態と同様な構成については、同一の参照番号を付すことにより、重複する説明を省略する。
【００９２】
図９を参照しながら、本発明の第２の実施形態に係るコンピュータシステム２０１が有する構成について詳細に説明する。図９は、本発明の第２の実施形態に係るコンピュータシステム２０１が有する構成を示すブロック図である。
【００９３】
第２の実施形態に係るコンピュータシステム２０１は、大別して、ホスト装置２０２と、デバイス２０７とを有する。ホスト装置２０２は、メモリ１０３と、転送装置２０４とを有する。デバイス２０７は、メモリ１０８と、転送装置２０９とを有する。転送装置２０４は、ＤＭＡコントローラ２０５と、ＳＡＴＡコントローラ２０６とを有する。転送装置２０９は、ＤＭＡコントローラ２１０と、ＳＡＴＡコントローラ２１１とを有する。ホスト装置２０２と、デバイス２０７とは、ＳＡＴＡコントローラ２０６、ＳＡＴＡコントローラ２０６、及び、ＳＡＴＡコントローラ２０６とＳＡＴＡコントローラ２０６とを通信接続可能な通信路（たとえば、ＳＡＴＡインターフェース１１２）を介して、情報（データ）を送受信することができる。
【００９４】
図１０を参照しながら、第２の実施形態に係る転送装置２０４における処理について説明する。図１０は、ホスト装置２０２がデバイス２０７におけるデータを読み取るリード命令の場合に、第２の実施形態に係る転送装置２０４における処理の流れを示すシーケンス図である。
【００９５】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ホスト装置２０２がデバイス２０７からデータを受信するリード命令、または、ホスト装置２０２がデバイス２０７にデータを送信するライト命令等を表す命令ＦＩＳを、デバイス２０７におけるＳＡＴＡコントローラ２１１に送信する（ステップＳ２０１）。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ホスト装置２０２におけるＤＭＡコントローラ２０５に対して出力する（ステップＳ２０３）。
【００９６】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が出力した命令ＦＩＳを入力する（ステップＳ２０４）。ホスト装置２０２におけるＤＭＡコントローラ２０５は、命令ＦＩＳを入力するのに応じて、命令パラメタ情報を読み取る等の処理を開始する。
【００９７】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が送信した該命令ＦＩＳを受信し（ステップＳ２０２）、受信した命令ＦＩＳを、デバイス２０７におけるＤＭＡコントローラ２１０に対して出力する（ステップＳ２０５）。デバイス２０７におけるＤＭＡコントローラ２１０は、命令ＦＩＳを入力するのに応じて処理を開始する。
【００９８】
尚、ＳＡＴＡコントローラ２０６がステップＳ２０３（または、ステップＳ２０５）に示した処理にてＤＭＡコントローラ２０５を起動する態様は、上述した例（たとえば、ＦＩＳ）に限定されず、たとえば、上述したような命令パラメタ情報を入出力する態様であってもよい。
【００９９】
転送装置２０４においては、命令ＦＩＳの内容に応じて、ライト命令に応じた処理、または、リード命令に応じた処理が実行される。尚、該ライト命令に応じた処理、または、該リード命令に応じた処理において、ＳＡＴＡコントローラ２０６は、データを、ＦＩＳの単位のサイズにて分割し、該ＦＩＳを送受信する。また、ＳＡＴＡコントローラ２０６は、該データを構成しているすべてのＦＩＳに関して、受信した命令に応じて、次に示すライト命令に応じた処理、または、リード命令に応じた処理を繰り返し実行する。
【０１００】
まず、受信した命令がライト命令である場合における処理について説明する。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ホスト装置２０２におけるＤＭＡコントローラ２０５が処理を開始するのに応じて出力するデータＦＩＳを入力し、入力したデータＦＩＳを、デバイス２０７におけるＳＡＴＡコントローラ２１１に送信する。デバイス２０７におけるＳＡＴＡコントローラ２１１は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が送信したデータＦＩＳを受信し、受信したデータＦＩＳを、デバイス２０７におけるＤＭＡコントローラ２１０に対して出力する。
【０１０１】
次に、受信した命令がリード命令である場合における処理について説明する。受信した命令がライト命令である場合には、該命令がリード命令である場合における処理と比較して、データを受信する側、データを送信する側の処理を入れ替えた処理が実行される。このため、以降の説明においては、受信した命令がリード命令である場合の例を参照しながら、本実施形態に係る転送装置２０４における処理について説明することとし、受信した命令がライト命令である場合については説明を省略する。
【０１０２】
デバイス２０７におけるＤＭＡコントローラ２１０は、第Ｉ（ただし、１≦Ｉ≦Ｎ）対象データを格納している記憶領域から第Ｉ対象データに関するデータＦＩＳを読み取り、読み取ったデータＦＩＳを、デバイス２０７におけるＳＡＴＡコントローラ２１１に対して出力する（ステップＳ２０７）。たとえば、デバイス２０７におけるＤＭＡコントローラ２１０は、第Ｉ対象データを、ＦＩＳの単位に分割し、分割後のデータＦＩＳをデバイス２０７におけるＳＡＴＡコントローラ２１１に対して出力する。
【０１０３】
以降、転送装置２０９が受信した命令がリード命令である場合の例を参照しながら、本実施形態に係る転送装置における処理について説明する。
【０１０４】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、デバイス２０７におけるＤＭＡコントローラ２１０が出力したデータＦＩＳを入力し（ステップＳ２０８）、入力した第Ｉ対象データに関するデータＦＩＳを、ホスト装置２０２におけるＤＭＡコントローラ２０５に送信する（ステップＳ２０９）。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、デバイス２０７におけるＳＡＴＡコントローラ２１１が送信したデータＦＩＳを受信し（ステップＳ２１０）、受信したデータＦＩＳを、ホスト装置２０２におけるＤＭＡコントローラ２０５に対して出力する（ステップＳ２１１）。
【０１０５】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が出力したデータＦＩＳを入力し（ステップＳ２１２）、入力したデータＦＩＳをメモリ１０３に格納する。
【０１０６】
デバイス２０７における転送装置２０９及び、ホスト装置２０２における転送装置２０４は、たとえば、第Ｉ対象データに関して、ステップＳ２０７乃至ステップＳ２１２に示した処理と同様の処理を繰り返すことにより、第Ｉ対象データに関する転送処理を実行する（ステップＳ２１３乃至ステップＳ２１８）。
【０１０７】
尚、ステップＳ２０７乃至ステップＳ２１２に示した一連の処理、または、ステップＳ２１３乃至ステップＳ２１８に示した一連の処理において、データＦＩＳを出力する処理（ステップＳ２１１、または、ステップＳ２１７）の後に、ステップＳ２１９及びステップＳ２２０に示す処理が実行される。すなわち、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、データＦＩＳを出力する処理（ステップＳ２１１、または、ステップＳ２１７）の後に、たとえば、ステップＳ１２３（図６）に示した判定処理を実行することによって、受信したデータＦＩＳがエラーを含むか否かを判定する。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、該判定処理に応じて、応答信号を作成し、デバイス２０７におけるＳＡＴＡコントローラ２１１に、作成した応答信号を送信する（ステップＳ２１９）。デバイス２０７におけるＳＡＴＡコントローラ２１１は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が送信した応答信号を受信する（ステップＳ２２０）。言い換えれば、ステップＳ２１１の後に、ステップＳ２１９、及び、ステップＳ２２０が実行され、ステップＳ２１７の後に、ステップＳ２１９、及び、ステップＳ２２０が実行される。
【０１０８】
次に、図１１及び図１２を参照しながら、転送装置２０４が実行する転送処理の流れについて説明する。図１１及び図１２は、転送装置２０４が送受信するデータの一例を概念的に表す図である。
【０１０９】
転送処理において送受信されるデータは、大別して、命令ＦＩＳ、データＦＩＳ、及び、状態ＦＩＳを含む。命令ＦＩＳ、データＦＩＳ、及び、状態ＦＩＳは、図１１及び図１２に示すような構成を有しており、ＤＡＴＡ部分（図１１及び図１２の「データ送信」における「ＤＡＴＡ」）のフォーマットが相互に異なっている。
【０１１０】
状態ＦＩＳは、たとえば、応答信号が送受信された後のホスト装置２０２（または、デバイス２０７）における状態に関するデータである。
【０１１１】
データＦＩＳは、第Ｉ対象データに関するデータＦＩＳ（または、第Ｉ対象データ）が、正しいデータであるか否かを、少なくとも検出可能なＣＲＣ（図１２における「ＣＲＣ」）データを含む。ＣＲＣは、Ｃｙｃｌｉｃ＿Ｒｅｄｕｎｄａｎｃｙ＿Ｃｈｅｃｋの略称を表す。データＦＩＳを受信する装置は、ＣＲＣデータに基づき、受信したデータＦＩＳがエラーを含むか否かを判定することができる。
【０１１２】
尚、データを格納可能な「ＤＡＴＡ」欄は、該「ＤＡＴＡ」欄に含まれているデータに基づき算出される値を格納可能な「ＣＲＣ」欄を含んでいる。
【０１１３】
ＳＡＴＡに関するインターフェース規格に従えば、対象データは、８キロバイト（＝１６セクタ×５１２バイト）毎に分割され、分割されたデータがデータＦＩＳとして転送される。転送されるデータ量は、実行される命令に応じて、セクタ数によって指定することができる。該インターフェース規格に従えば、指定することができるセクタ数の最大は、たとえば、６５５３５セクタである。したがって、該インターフェース規格に従えば、指定可能な最大のセクタ数を有するデータ量を転送する場合には、該データ量は、４０９６（＝６５５３５÷１６）個のデータＦＩＳに分割される。
【０１１４】
以降の説明においては、説明の便宜上、データは、１６個のセクタ毎に分割されているとする。尚、必ずしも、１６個のセクタに分割されている必要はない。すなわち、１個のＦＩＳは、最大８キロバイトのデータを有することができる。尚、該ＦＩＳは、８キロバイト以下のサイズであってもよい。
【０１１５】
次に、図１３を参照しながら、第２の実施形態に係るコンピュータシステム２０１における処理について説明する。図１３は、第２の実施形態に係るコンピュータシステム２０１における処理の流れを示すシーケンス図である。説明の便宜上、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、デバイス２０７からホスト装置２０２にデータを転送するリード命令を外部装置から受信するとする。
【０１１６】
まず、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、外部装置が送信したリード命令を受信し、受信したリード命令に応じて、対象データを受信する処理を開始する。たとえば、この処理において、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、受信したリード命令に先立って、図４に例示するようなＣｏｕｎｔフィールドを作成し、作成したＣｏｕｎｔフィールドを含む命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」をデバイス２０７におけるＳＡＴＡコントローラ２１１に送信する（ステップＳ２３１）。さらに、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、受信した命令（この例では、リード命令）をデバイス２０７におけるＳＡＴＡコントローラ２１１に送信する。尚、「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」に対しても、状態ＦＩＳがデバイス２０７からホスト装置２０２に送信する処理が実行されるが、本実施形態においては、状態ＦＩＳの処理に関する説明を省略する。
【０１１７】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が送信した命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」及びリード命令を受信（ステップＳ２３２）する。デバイス２０７におけるＳＡＴＡコントローラ２１１は、受信した命令「Ｓｅｔ＿Ｆｅａｔｕｒｅｓ」内のＣｏｕｎｔフィールドに含まれている繰り返し回数（すなわち、第１の実施形態に示した所定の回数）を読み取り、さらに、受信したリード命令に応じて、対象データを送信する処理を開始する。
【０１１８】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、受信したデータ（すなわち、リード命令）がエラーを含んでいるか否かを判定する。デバイス２０７におけるＳＡＴＡコントローラ２１１は、受信した命令ＦＩＳのデータがエラーを含んでいる場合に、受信した命令ＦＩＳがエラーを含んでいることを通知する異常応答信号を作成し、作成した異常応答信号をホスト装置２０２におけるＳＡＴＡコントローラ２０６に送信する。デバイス２０７におけるＳＡＴＡコントローラ２１１は、受信したデータがエラーを含んでいない場合に、受信したデータがエラーを含んでいないことを通知する正常応答信号を作成し、作成した正常応答信号をホスト装置２０２におけるＳＡＴＡコントローラ２０６に送信する（ステップＳ２３３）。尚、図１３は、説明の便宜上、リード命令を送受信する処理において、エラーが生じていない場合の処理を示す。
【０１１９】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、デバイス２０７におけるＳＡＴＡコントローラ２１１が送信した応答信号を受信する（ステップＳ２３７）。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、受信した応答信号が正常応答信号である場合に、リード命令を送信する処理を正常終了する。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、受信した応答信号が異常応答信号である場合に、リード命令を送信する処理を異常終了する。
【０１２０】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、該リード命令に応じた指示に関する命令パラメタ情報を作成し（ステップＳ２３８）、その後、ホスト装置２０２におけるＤＭＡコントローラ２０５を起動する制御を実行する（ステップＳ２３９）。たとえば、命令に応じた指示に関する命令パラメタ情報は、処理の種類、対象データのサイズ、該対象データを格納している位置情報等である。命令に応じた指示に関する命令パラメタ情報は、必ずしも、上記のすべての項目を含んでいる必要はない。ホスト装置２０２におけるＳＡＴＡコントローラ２０６が起動する制御を実行するのに応じて、ホスト装置２０２におけるＤＭＡコントローラ２０５は、起動し、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が作成した命令パラメタ情報に基づき処理を実行する。尚、ＤＭＡコントローラ２０５については、図１４乃至図１７を参照しながら後述する。
【０１２１】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、ステップＳ２３２にて受信した命令（この例では、リード命令）に応じた指示に関する命令パラメタ情報を作成し（ステップＳ２３４）、その後、デバイス２０７におけるＤＭＡコントローラ２１０を起動する制御を実行する（ステップＳ２３５）。たとえば、命令に応じた指示に関する命令パラメタ情報は、処理の種類、対象データのサイズ、該対象データを格納している位置情報等である。デバイス２０７におけるＳＡＴＡコントローラ２１１が起動する制御を実行するのに応じて、デバイス２０７におけるＤＭＡコントローラ２１０は、起動し、デバイス２０７におけるＳＡＴＡコントローラ２１１が作成した命令パラメタ情報に基づき処理を実行する。尚、ＤＭＡコントローラ２０５については、図１４乃至図１７を参照しながら後述する。
【０１２２】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、デバイス２０７におけるＤＭＡコントローラ２１０が出力したデータＦＩＳを入力し（ステップＳ２３６）、該データＦＩＳを、ホスト装置２０２におけるＳＡＴＡコントローラ２０６に送信する（ステップＳ２４０）。この場合に、デバイス２０７におけるＳＡＴＡコントローラ２１１は、第Ｉ対象データに関するデータＦＩＳを送信する。尚、該データＦＩＳは、対象データに関するエラーを検知可能なデータ（たとえば、ＣＲＣに従い算出されたデータ、以降、「ＣＲＣ」データと表す）を含んでいる。
【０１２３】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、デバイス２０７におけるＳＡＴＡコントローラ２１１が送信したＣＲＣデータを含むデータＦＩＳを受信する（ステップＳ２４１）。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、受信したデータＦＩＳを、ホスト装置２０２におけるＤＭＡコントローラ２０５に対して出力する（ステップＳ２４２）。ホスト装置２０２におけるＤＭＡコントローラ２０５は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が出力したデータＦＩＳを入力し、入力したデータＦＩＳをメモリ１０３に格納する。
【０１２４】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、第Ｉ（ただし、１≦Ｉ≦Ｎ、Ｉは整数）対象データに関するデータＦＩＳとともに受信したＣＲＣデータに基づき、第Ｉ対象データに関して受信したデータＦＩＳがエラーを含むか否かを判定する（ステップＳ２４３）。
【０１２５】
受信したデータＦＩＳがエラーを含まない場合に（ステップＳ２４３にてＮＯ）、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ホスト装置２０２におけるＤＭＡコントローラ２０５に対して、対象データを受信する処理を正常終了することを表す指示情報（以降、「正常指示情報」と表す）を出力する（ステップＳ２４４）。その後、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、第Ｉ対象データに関するデータＦＩＳを正しく受信したことを表す正常応答信号を作成し、デバイス２０７におけるＳＡＴＡコントローラ２１１に、作成した正常応答信号を送信する（ステップＳ２５０）。
【０１２６】
受信したデータＦＩＳがエラーを含む場合に（ステップＳ２４３にてＹＥＳ）、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ホスト装置２０２におけるＤＭＡコントローラ２０５に対して、対象データを受信する処理を異常終了することを表す指示情報（以降、「異常指示情報」と表す）を出力する（ステップＳ２４５）。すなわち、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ステップＳ２４５に示す処理において、対象データに関するデータＦＩＳを送信する処理を終了する情報を、ホスト装置２０２におけるＤＭＡコントローラ２０５に対して出力する。その後、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、再送する処理が有効状態であるか否かを判定する（ステップＳ２４６）。
【０１２７】
再送する処理が無効状態である場合に（ステップＳ２４６にてＮＯ）、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、異常応答信号を作成し（ステップＳ２４９）、作成した異常応答信号を、デバイス２０７におけるＳＡＴＡコントローラ２１１に送信する。
【０１２８】
再送する処理が有効状態である場合に（ステップＳ２４６にてＹＥＳ）、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ホスト装置２０２におけるＤＭＡコントローラ２０５が出力した命令信号（図１６におけるステップＳ２７６、または、ステップＳ２７８、後述）を入力する。
【０１２９】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、入力した命令信号が継続命令信号（図１６、後述）である場合に（ステップＳ２４７にてＹＥＳ）、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、正常応答信号を作成する（ステップＳ２４８）。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、作成した正常応答信号を、デバイス２０７におけるＳＡＴＡコントローラ２１１に送信する（ステップＳ２５０）。この例の場合に、継続命令信号は、図１６におけるステップＳ２７５示すような、ホスト装置２０２におけるＤＭＡコントローラ２０５が出力する命令信号であり、詳細については後述する。
【０１３０】
すなわち、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ステップＳ２４７に示した処理によって、対象データがエラーを含む場合であっても、該継続命令信号を受信した場合に正常応答信号を、デバイス２０７におけるＳＡＴＡコントローラ２１１に送信する。対象データを送信する側であるデバイス２０７におけるＳＡＴＡコントローラ２１１は、該正常応答信号を受信し、受信した正常応答信号に基づいて処理を実行する。この場合に、正常応答信号、または、異常応答信号に基づく送信側の処理は、特許文献１に示された装置における転送装置における処理であってよい。
【０１３１】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、入力した命令信号が異常命令信号である場合に（ステップＳ２４７にてＮＯ）、異常応答信号を作成する（ステップＳ２４９）。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、作成した異常応答信号を、デバイス２０７におけるＳＡＴＡコントローラ２１１に送信する（ステップＳ２５０）。この例の場合に、異常命令信号は、図１６におけるステップＳ２７８に示すような、ホスト装置２０２におけるＤＭＡコントローラ２０５が出力する命令信号であり、詳細については後述する。
【０１３２】
すなわち、ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、デバイス２０７におけるＳＡＴＡコントローラ２１１に、正常応答信号、または、異常応答信号を送信する。
【０１３３】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が送信した応答信号（すなわち、正常応答信号、または、異常応答信号）を受信する（ステップＳ２５１）。受信した応答信号が正常応答信号である場合に（ステップＳ２５２にてＮＯ）、デバイス２０７におけるＳＡＴＡコントローラ２１１は、デバイス２０７におけるＤＭＡコントローラ２１０に正常指示信号を送信し、対象データを送受信する処理を正常終了する（ステップＳ２５３）。受信した応答信号が異常応答信号である場合に（ステップＳ２５２にてＹＥＳ）、デバイス２０７におけるＳＡＴＡコントローラ２１１は、デバイス２０７におけるＤＭＡコントローラ２１０に異常指示信号を送信し、対象データを送受信する処理を異常終了する（ステップＳ２５４）。すなわち、ステップＳ２５４において（すなわち、エラーが生じた場合に）、デバイス２０７におけるＳＡＴＡコントローラ２１１は、対象データに含まれる要素データを受信する処理を終了する情報を、デバイス２０７におけるＤＭＡコントローラ２１０に対して出力する。
【０１３４】
対象データが複数ある場合に、ホスト装置２０２、及び、デバイス２０７は、図１３におけるステップＳ２３５、ステップＳ２３６、及び、ステップＳ２３９乃至ステップＳ２５４に示す処理を繰り返し実行する。
【０１３５】
すべての対象データを送受信する処理の後に、デバイス２０７におけるＳＡＴＡコントローラ２１１は、ＳＡＴＡコントローラ２０６における状態を表す状態信号を作成し、ホスト装置２０２におけるＳＡＴＡコントローラ２０６に、作成した状態信号を送信する。状態信号は、たとえば、正常な状態を表す正常状態信号、または、異常な状態を表す異常状態信号である。
【０１３６】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、デバイス２０７におけるＳＡＴＡコントローラ２１１が送信した状態信号（すなわち、正常状態信号、または、異常状態信号）を受信する。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、データＦＩＳの場合と同様に受信したＦＩＳにエラーが含まれるかどうかを判定し、判定結果に応じた応答信号を作成し、デバイス２０７におけるＳＡＴＡコントローラ２１１に、作成した応答信号を送信する。ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、ＦＩＳがエラーを含んでいるか否かを表す信号を送信する。
【０１３７】
デバイス２０７におけるＳＡＴＡコントローラ２１１は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が送信した応答信号（すなわち、正常応答信号、または、異常応答信号）を受信する。受信した応答信号が正常応答信号である場合に、デバイス２０７におけるＳＡＴＡコントローラ２１１は、状態信号を送受信する処理を正常終了する。受信した応答信号が異常応答信号である場合に、デバイス２０７におけるＳＡＴＡコントローラ２１１は、状態信号を送受信する処理を異常終了する。
【０１３８】
尚、図１３のステップＳ２３２乃至ステップＳ２３６、ステップＳ２４０、及び、ステップＳ２５１乃至ステップＳ２５４を参照すると、これらの処理は、ＳＡＴＡに関するインターフェース規格に従う装置が実行する処理と同様の処理である。すなわち、本実施形態に係るＳＡＴＡコントローラによれば、対象データを送信するＳＡＴＡコントローラ（上述した例では、デバイス２０７におけるＳＡＴＡコントローラ２１１）は、ＳＡＴＡに関するインターフェース規格に従う装置が実行する処理と同様の処理を実行する。
【０１３９】
次に、ＤＭＡコントローラ２０５（または、ＤＭＡコントローラ２１０）における処理について説明する。
【０１４０】
本実施形態に係るＤＭＡコントローラ２０５は、自コントローラにおいて、再送処理に関する処理の状態に関する情報（以降、「再送処理情報」と表す）を記憶可能な記憶領域（メモリ１０３、レジスタ等）を有するとする。再送処理情報は、再送処理においてメモリ１０３にデータを格納する処理を実行する状態を表す有効状態、再送処理においてメモリ１０３にデータを格納しない状態を表す準備状態、または、再送処理が実行されている状態とは異なる状態を表す無効状態である。さらに、本実施形態に係るＤＭＡコントローラ２０５は、ＤＭＡに関する転送処理を実行するか否かを表すＤＭＡ転送情報を記憶可能な記憶領域（メモリ１０３、レジスタ等）を有するとする。ＤＭＡ転送情報は、メモリに格納する処理を実行することを表す「有効状態」または、メモリに格納する処理を実行しないことを表す「無効状態」である。
【０１４１】
本実施形態に係る命令パラメタ情報は、たとえば、処理の種類、対象データのサイズ、該対象データを格納している位置情報、処理が再実行処理であるか否かを表す再実行情報を含んでもよい。命令パラメタ情報は、さらに、再送処理機能に有効状態に設定するか、無効状態に設定するかを表す再送設定情報を含んでもよい。
【０１４２】
次に、図１４乃至図１７を参照しながら、ＤＭＡコントローラ２０５における処理について説明する。図１４乃至図１７は、ＤＭＡコントローラ２０５における処理の流れを示すフローチャートである。対象データを送信する側であるＤＭＡコントローラ２１０は、ＳＡＴＡに関するインターフェース規格に従う転送装置におけるＤＭＡコントローラと同様に、主として、図１４乃至図１７に示した処理のうち、一部の処理のみを実行する。
【０１４３】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が起動する制御を実行するのに応じて起動し、その後、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が作成した命令パラメタ情報を読み取る。同様に、デバイス２０７におけるＤＭＡコントローラ２１０は、デバイス２０７におけるＳＡＴＡコントローラ２１１が起動する制御を実行するのに応じて起動し、その後、デバイス２０７におけるＳＡＴＡコントローラ２１１が作成した命令パラメタ情報を読み取る。
【０１４４】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、命令パラメタ情報における処理の種類が再送処理である場合に（ステップＳ２６０にてＹＥＳ）、再送処理情報が準備状態であるか否かを判定する（ステップＳ２６１）。ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ２６１にてＹＥＳの場合に、再送処理情報に有効状態を設定する（ステップＳ２６２）。この処理に対して、デバイス２０７におけるＤＭＡコントローラ２１０は、ステップＳ２６０乃至ステップＳ２６２に示す処理を実行しない。
【０１４５】
デバイス２０７におけるＤＭＡコントローラ２１０は、読み取った命令パラメタ情報から対象データ数を読み取り、読み取った対象データ数に基づき、デバイス２０７におけるメモリ１０３に、該転送処理にて参照するＰＲＤテーブルを格納する記憶領域を確保する（ステップＳ１３１）。デバイス２０７におけるＤＭＡコントローラ２１０は、確保した記憶領域の先頭アドレスをＰＲＤテーブルポインタレジスタに格納し（ステップＳ１３２）、その後、転送処理にて一時的にデータを記憶する記憶領域を表すＤＭＡ転送領域を確保する（ステップＳ１３３）。
【０１４６】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ２６０にてＮＯの場合に、ステップＳ１３１乃至ステップＳ１３３に示す処理を実行する。
【０１４７】
デバイス２０７におけるＤＭＡコントローラ２１０は、ＰＲＤインデックスレジスタに、まだ、対象データに関する処理が実行されていないことを表す値（たとえば、「１」）を格納する（ステップＳ１３４）。同様に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＰＲＤインデックスレジスタに、まだ、対象データに関する処理が実行されていないことを表す値（たとえば、「１」）を格納する（ステップＳ１３４）。
【０１４８】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＰＲＤテーブルポインタレジスタに格納されている値、及び、ＰＲＤインデックスレジスタに格納されている値を読み取り、たとえば、読み取った２つの値を加算する。すなわち、ホスト装置２０２におけるＤＭＡコントローラ２０５は、第Ｉ対象データに関するアドレスセットが格納されている記憶領域を指し示すアドレスを算出する（ステップＳ１３５）。ホスト装置２０２におけるＤＭＡコントローラ２０５は、算出した先頭アドレスが指し示す記憶領域から、ＰＲＤテーブルにおけるアドレスセットを読み取る（ステップＳ１３６）。この処理によって、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＰＲＤテーブルにおいて、処理対象である第Ｉ対象データの先頭アドレスを格納している記憶領域のアドレスを特定する。さらに、ホスト装置２０２におけるＤＭＡコントローラ２０５は、特定したアドレスが指し示す記憶領域から、対象データを格納する先を表す記憶領域を指し示すアドレスを読み取る。
【０１４９】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、読み取ったアドレスセットから、ＤＭＡ転送処理にて転送するデータを格納している記憶領域を表す先頭アドレスと、該データのサイズとを読み取る。ホスト装置２０２におけるＤＭＡコントローラ２０５は、読み取った先頭アドレスを、ＤＭＡベースアドレスレジスタに格納し（ステップＳ１３７）、読み取ったサイズを、ＤＭＡバイトカウントレジスタに格納する（ステップＳ１３８）。すなわち、ステップＳ１３５及びステップＳ１３６に示す処理によって、ホスト装置２０２におけるＤＭＡコントローラ２０５は、処理対象である第Ｉ対象データを格納する記憶領域を指し示す先頭アドレスを読み出し、読み出した先頭アドレスをＤＭＡベースアドレスレジスタに格納する処理等を実行する。
【０１５０】
同様に、デバイス２０７におけるＤＭＡコントローラ２１０は、ステップＳ１３５乃至ステップＳ１３８に示した処理と同様の処理を、デバイス２０７にて実行する。この処理によって、デバイス２０７におけるＤＭＡコントローラ２１０は、ＰＲＤテーブルにおいて、処理対象である対象データの先頭アドレスを格納している記憶領域のアドレスを特定する。デバイス２０７におけるＤＭＡコントローラ２１０は、特定したアドレスが指し示す記憶領域から、対象データを格納している記憶領域を指し示すアドレス、及び、該対象データのサイズを読み取る。デバイス２０７におけるＤＭＡコントローラ２１０は、処理対象である対象データを格納している記憶領域を指し示す先頭アドレスを読み出し、読み出した先頭アドレスをＤＭＡベースアドレスレジスタに格納する処理等を実行する。
【０１５１】
次に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ホスト装置２０２におけるＴｒａｎｓｆｅｒカウントレジスタに、まだ、対象データに関するデータＦＩＳに対して処理が実行されていないことを表す値（たとえば、１）を格納する（ステップＳ２６３）。デバイス２０７におけるＤＭＡコントローラ２１０は、デバイス２０７におけるＴｒａｎｓｆｅｒカウントレジスタに、まだ、対象データに関するＦＩＳに対して処理が実行されていないことを表す値（たとえば、１）を格納する。尚、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値は、たとえば、対象データに関するＦＩＳのうち、処理対象であるＦＩＳが格納されているアドレスを表す。すなわち、ステップＳ２６３に示す処理によって、ホスト装置２０２（または、デバイス２０７）におけるＤＭＡコントローラ２０５は、まだ、対象データに関するＦＩＳを送信していないことを表す値（たとえば、１）を、Ｔｒａｎｓｆｅｒカウントレジスタに格納する。
【０１５２】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、再送処理情報が準備状態であるか否かを判定する（ステップＳ２６４）。再送処理情報が準備状態を表す場合に（ステップＳ２６４にてＹＥＳ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡ転送情報に無効状態を設定する（ステップＳ２６９）。再送処理情報が準備状態でない場合に（ステップＳ２６４にてＮＯ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、再送処理情報が有効状態であるか否かを判定する（ステップＳ２６５）。
【０１５３】
再送処理情報が無効状態である場合に（ステップＳ２６５にてＹＥＳ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＰＲＤインデックスレジスタに格納されている値を、ＦＩＳインデックスレジスタに格納する（ステップＳ１５２）。さらに、ホスト装置２０２におけるＤＭＡコントローラ２０５は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値（たとえば、１）を、ＦＩＳオフセットレジスタに格納する（ステップＳ１５３）。その後、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡ転送情報を有効に設定する（ステップＳ２７０）。ステップＳ１５２及びステップＳ１５３に示す処理によって、ＤＭＡコントローラ２０５は、たとえば、ＤＭＡ転送する処理を開始した時点でのＴｒａｎｓｆｅｒカウントレジスタの値、及び、ＰＲＤインデックスレジスタに格納されている値を記憶することができる。すなわち、ステップＳ１５３に示す処理によって、対象データを転送する処理にてエラーが生じる場合であっても、Ｔｒａｎｓｆｅｒカウントレジスタは、たとえば、ステップＳ１５４にて処理するデータＦＩＳを識別可能な識別子を格納している。
【０１５４】
再送処理情報が有効状態である場合に（ステップＳ２６５にてＹＥＳ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＰＲＤインデックスレジスタに格納されている値と、ＦＩＳインデックスレジスタに格納されている値との大小を比較する。
【０１５５】
ＰＲＤインデックスレジスタに格納されている値が、ＦＩＳインデックスレジスタに格納されている値よりも大きな値である場合に（ステップＳ２６６にてＹＥＳ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡ転送情報を有効に設定する（ステップＳ２７０）。ＰＲＤインデックスレジスタに格納されている値は、たとえば、処理する対象である対象データを識別可能な番号を表す。以降、説明の便宜上、ＰＲＤインデックスレジスタに格納されている値は、対象データを識別可能な番号であるとする。また、ＦＩＳインデックスレジスタに格納されているデータは、たとえば、対象データを処理する場合に保存された対象データの番号を表す。したがって、ＰＲＤインデックスレジスタに格納されている値が、ＦＩＳインデックスレジスタに格納されている値よりも大きな値である状態は、本実施形態に係る転送装置２０４が処理する対象データが、まだ、メモリ１０３に格納されていない（すなわち、未処理である）状態を表す。
【０１５６】
ＰＲＤインデックスレジスタに格納されている値が、ＦＩＳインデックスレジスタに格納されている値以下である場合に（ステップＳ２６６にてＮＯ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、２つの該値が等しいか否かを判定する（ステップＳ２６７）。ホスト装置２０２におけるＤＭＡコントローラ２０５は、２つの該値が等しくない場合に（ステップＳ２６７にてＮＯ）、ＤＭＡ転送情報に無効状態を設定する（ステップＳ２６９）。ステップＳ２６７にてＮＯである状態は、ＰＲＤインデックスレジスタに格納されている値が、ＦＩＳインデックスレジスタに格納されている値未満である状態、すなわち、本実施形態に係る転送装置２０４が処理する対象データが処理済みである状態を表す（ステップＳ２６７にてＮＯ）。このため、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡ転送情報に無効状態を設定する（ステップＳ２６９）。
【０１５７】
ＰＲＤインデックスレジスタに格納されている値が、ＦＩＳインデックスレジスタに格納されている値と等しい場合に（ステップＳ２６７にてＹＥＳ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されているデータと、ＦＩＳオフセットレジスタに格納されているデータとを比較する（ステップＳ２６８）。
【０１５８】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されているデータの方が小さい場合に（ステップＳ２６８にてＹＥＳ）、ＤＭＡ転送情報に無効状態を設定する（ステップＳ２６９）。ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ２６８にてＮＯの場合に、ＤＭＡ転送情報に有効状態を設定する（ステップＳ２７０）。すなわち、ステップＳ２６８に示す処理によって、メモリ１０３にデータを格納する処理を実行するホスト装置２０２におけるＤＭＡコントローラ２０５は、エラーが生じた位置を格納しているＦＩＳインデックスレジスタに基づき、対象データを格納する記憶領域を特定する。
【０１５９】
ステップＳ２６７にてＹＥＳの状態は、２つの該値が等しい場合、すなわち、ホスト装置２０２におけるＤＭＡコントローラ２０５が処理する第Ｉ対象データが、再実行されている対象データであることを表す。また、ステップＳ２６８にてＹＥＳの状態は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されているデータの方が小さい場合、すなわち、ホスト装置２０２におけるＤＭＡコントローラ２０５が処理する第Ｉ対象データに関して、該第Ｉ対象データに関するデータＦＩＳが格納済みの状態であることを表す。ステップＳ２６８にてＮＯの状態は、該第Ｉ対象データに関するデータＦＩＳが未処理の（転送処理されていない）状態であることを表す。
【０１６０】
デバイス２０７におけるＤＭＡコントローラ２１０は、図１５に示した処理を実行しない。デバイス２０７におけるＤＭＡコントローラ２１０は、図１４に示すステップＳ２６３の次に、図１６に示すステップＳ１５４（後述）を実行する。
【０１６１】
ステップＳ１５４に示す処理において、デバイス２０７におけるＤＭＡコントローラ２１０は、ＤＭＡベースアドレスレジスタに格納されている値と、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値とを足し算する。この処理によって、デバイス２０７におけるＤＭＡコントローラ２１０は、転送データに関するデータＦＩＳを格納している記憶領域の先頭アドレスを表すＤＭＡアドレスを算出する。
【０１６２】
デバイス２０７におけるＤＭＡコントローラ２１０は、メモリ１０３のうち、算出したＤＭＡアドレスを先頭アドレスとする記憶領域から、所定の大きさ（たとえば、ＦＩＳのサイズ）分のデータを読み取り、読み取ったデータをデバイス２０７におけるＳＡＴＡコントローラ２１１に対して出力する。この場合に、デバイス２０７におけるＳＡＴＡコントローラ２１１は、入力したデータをホスト装置２０２におけるＳＡＴＡコントローラ２０６に送信する。すなわち、デバイス２０７における転送装置２０４は、第Ｉ対象データを、ホスト装置２０２における転送装置２０４に送信するＤＭＡ転送処理を実行する（ステップＳ１５４）。
【０１６３】
デバイス２０７におけるＤＭＡコントローラ２１０は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を読み取り、転送処理にて転送したデータ数と、読み取った値とを足し算し、算出した値をＴｒａｎｓｆｅｒカウントレジスタに格納する。すなわち、デバイス２０７におけるＤＭＡコントローラ２１０は、転送したデータＦＩＳのデータ数分だけ、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を増やす（ステップＳ１５５）。
【０１６４】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６は、デバイス２０７におけるＳＡＴＡコントローラ２１１が送信したデータを受信し（ステップＳ１５４にて送信）、受信したデータをホスト装置２０２におけるＤＭＡコントローラ２０５に対して出力する。
【０１６５】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が出力したデータを入力する。ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ２６９（図１５）、または、ステップＳ２７０（図１５）にて設定したＤＭＡ転送情報が有効状態であるか、または、無効状態であるかを判定する（ステップＳ２７１）。
【０１６６】
ＤＭＡ転送情報が有効状態である場合に（ステップＳ２７１にてＹＥＳ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡベースアドレスレジスタに格納されている値と、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値とを足し算する。ホスト装置２０２におけるＤＭＡコントローラ２０５は、入力したデータを、メモリ１０３のうち、算出したＤＭＡアドレスを先頭アドレスとする記憶領域（すなわち、メモリ１０３の一部）に格納する。すなわち、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡ転送情報が有効状態である場合に（ステップＳ２７１にてＹＥＳ）、データＦＩＳに関するＤＭＡ転送処理を実行する（ステップＳ１５４）。ＤＭＡ転送情報が無効状態である場合に（ステップＳ２７１にてＮＯ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、第Ｉ対象データに関するＤＭＡ転送処理を実行しない。
【０１６７】
言い換えると、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ２７１、ステップＳ１５４、及び、ステップＳ１５５に示す処理によって、ＤＭＡ転送情報に基づき、入力したデータＦＩＳをメモリ１０３に格納するか否かを制御する。すなわち、ホスト装置２０２におけるＤＭＡコントローラ２０５は、対象データを再送する処理において、ＤＭＡ転送情報が有効状態である場合に、入力したデータをメモリ１０３に格納する。ホスト装置２０２におけるＤＭＡコントローラ２０５は、対象データを再送する処理において、ＤＭＡ転送情報が無効状態である場合に、入力したデータをメモリ１０３に格納しない。
【０１６８】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を読み取り、転送処理にて転送したデータ数と、読み取った値とを足し算し、算出した値をＴｒａｎｓｆｅｒカウントレジスタに格納する。この処理によって、デバイス２０７におけるＤＭＡコントローラ２１０は、たとえば、転送したデータＦＩＳのデータ数分だけ、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を増やす（ステップＳ１５５）。言い換えると、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡ転送情報が無効状態である場合であっても、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値を更新する。次に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、再送設定情報が有効状態であるか否かを判定する（ステップＳ１５７）。
【０１６９】
再送設定情報が有効状態である場合に（ステップＳ１５７にてＹＥＳ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ホスト装置２０２におけるＳＡＴＡコントローラ２０６が出力した指示情報（図１３におけるステップＳ２４４、または、ステップＳ２４５）を入力する。ホスト装置２０２におけるＤＭＡコントローラ２０５は、入力した指示情報が正常指示情報であるか否かを判定する（ステップＳ２７２）。ホスト装置２０２におけるＤＭＡコントローラ２０５は、受信した指示情報が正常指示情報であり（ステップＳ２７２にてＹＥＳ）、ＤＭＡ転送情報が有効状態である場合に（ステップＳ２７４にてＹＥＳ）、再送処理情報に無効状態を設定する（ステップＳ２７７）。ＤＭＡ転送情報が有効状態であり（ステップＳ２７４にてＹＥＳ）、さらに、対象データに関する転送処理が正常（すなわち、正常指示情報）である場合（ステップＳ２７２にてＹＥＳ）は、エラーが生じていたデータを正しく受信した状態を表す。この場合に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、再送処理情報に無効状態を設定する（ステップＳ２７７）。
【０１７０】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、受信した指示情報が正常指示情報であり（ステップＳ２７２にてＹＥＳ）、ＤＭＡ転送情報に格納されている値が無効状態である場合に（ステップＳ２７４にてＮＯ）、ステップＳ２７７に示す処理を実行しない。再送処理情報が有効状態であり（ステップＳ１５７にてＹＥＳ）、ＤＭＡ転送情報が無効状態であり（すなわち、メモリ１０３にデータＦＩＳを格納しない）、さらに、対象データに関する転送処理が正常（すなわち、正常指示情報）である場合（ステップＳ２７２にてＹＥＳ）は、エラーが生じたデータＦＩＳをメモリ１０３が記憶している状態を表す。
【０１７１】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６が出力した指示情報が異常指示情報である場合に（ステップＳ２７２にてＮＯ）、ホスト装置２０２におけるＤＭＡコントローラ２０５は、所定の条件を満たすか否かを判定する（ステップＳ２７３）。係る所定の条件は、以下に示す条件１及び条件２を満たすか否かである。すなわち、
条件１：ＤＭＡ転送情報が無効状態であるか否か、
条件２：再送処理情報が有効状態であるか否か。
【０１７２】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、条件１にてＹＥＳ、かつ、条件２にてＹＥＳの場合に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、処理を継続することを指示する命令信号（すなわち、継続指示信号）を作成する。ホスト装置２０２におけるＤＭＡコントローラ２０５は、作成した継続命令信号をホスト装置２０２におけるＳＡＴＡコントローラ２０６に対して出力する（ステップＳ２７５）。
【０１７３】
条件１及び条件２を満たす（ステップＳ２７３にてＹＥＳ）の場合は、ステップＳ２６８（図１５）にてＹＥＳの場合、または、ステップＳ２６７にてＮＯの場合を表す。この場合には、対象データに関する再転送処理を実行している処理において、エラーが生じる以前にメモリ１０３に格納済みのデータＦＩＳをメモリ１０３に格納しない場合を表す。すなわち、この場合には、受信したデータＦＩＳに関してエラーが生じていた場合であっても、ホスト装置２０２におけるＤＭＡコントローラ２０５は、該データＦＩＳをメモリ１０３に格納しない。
【０１７４】
ホスト装置２０２におけるＳＡＴＡコントローラ２０６が出力した指示情報が異常指示情報であり（ステップＳ２７２にてＮＯ）、かつ、ステップＳ２７３にてＮＯの場合には、ホスト装置２０２におけるＤＭＡコントローラ２０５は、再送処理情報に準備状態を設定する（ステップＳ２７６）。その後、ホスト装置２０２におけるＤＭＡコントローラ２０５は、処理を異常終了することを指示する命令信号（すなわち、異常命令信号）を作成し、作成した異常命令信号をホスト装置２０２におけるＳＡＴＡコントローラ２０６に送信する（ステップＳ２７８）。
【０１７５】
ステップＳ２７３にてＮＯの場合には、ホスト装置２０２におけるＤＭＡコントローラ２０５は、対象データのうち、エラーが生じたデータＦＩＳをメモリ１０３に格納している。したがって、メモリ１０３は、エラーが生じたデータＦＩＳを記憶している。この場合に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、再送処理情報に準備状態を設定する（ステップＳ２７６）。この結果に、該データＦＩＳを再転送する処理に含まれるステップＳ２６４にてＹＥＳと判定されるので、転送装置２０４は、ステップＳ１５４にて、入力した情報をメモリ１０３に格納しない。すなわち、転送装置２０４は、対象データに関する転送処理において、該データＦＩＳに後続するデータＦＩＳをメモリ１０３に格納しない。言い換えれば、対象データを受信する受信装置を表す転送装置２０４は、対象データを受信する処理にてエラーが生じるのに応じて、エラーが生じたデータＦＩＳに後続するデータＦＩＳをメモリ１０３に格納する処理を実行しない。
【０１７６】
上述した受信側のＳＡＴＡコントローラの処理に対して、デバイス２０７におけるＤＭＡコントローラ２１０は、図１６に示した処理に関して、ステップＳ１５７、ステップＳ２７２乃至ステップＳ２７８に示す処理を実行しない。すなわち、デバイス２０７におけるＤＭＡコントローラ２１０は、ステップＳ１５５に示す処理を実行した後に、図１７に示すステップＳ２８１に示す処理を実行する。
【０１７７】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＤＭＡバイトカウントレジスタに格納されているデータと、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値とを比較する。すなわち、この処理によって、ホスト装置２０２におけるＤＭＡコントローラ２０５は、対象データに関するデータＦＩＳを転送する処理が完了したか否かを判定する（ステップＳ２８１）。ＤＭＡバイトカウントレジスタに格納されているデータと、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値とが異なる場合（すなわち、対象データに関する処理が終了していない場合）に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ２６４（図１５）に示す処理を実行する。
【０１７８】
同様に、デバイス２０７におけるＤＭＡコントローラ２０５は、ステップＳ２８１に示した処理と同様の処理を、デバイス２０７にて実行する。
【０１７９】
ＤＭＡバイトカウントレジスタに格納されているデータと、Ｔｒａｎｓｆｅｒカウントレジスタに格納されている値とが一致している場合（すなわち、対象データに関する処理が終了した場合、ステップＳ２８１にてＹＥＳ）に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、すべての対象データを転送したか否かを判定する（ステップＳ１５９）。
たとえば、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ１５９に示す処理において、ＰＲＤインデックスレジスタに格納されているデータを読み取り、読み取ったデータの最上位ビットが０であるか否かを判定する（ステップＳ１５９）。
【０１８０】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、読み取ったデータの最上位ビットが０である場合に（ステップＳ１５９にてＮＯ）、たとえば、ＰＲＤインデックスレジスタに格納されている値を、次の対象データを指し示すサイズ分（たとえば、１）だけ増やす（ステップＳ１６０）。その後、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ステップＳ１３５（図１４）に示す処理を実行する。この場合に、ホスト装置２０２におけるＤＭＡコントローラ２０５は、ＰＲＤインデックスレジスタに格納されている値を、次の対象データを指し示すサイズ分（たとえば、１）増やす処理により、処理した対象データに後続している対象データに関する処理を実行することができる。
【０１８１】
ホスト装置２０２におけるＤＭＡコントローラ２０５は、すべての対象データに関する転送処理が終了した場合に（ステップＳ１５９にてＹＥＳ）、処理を終了する。
【０１８２】
これに対して、デバイス２０７におけるＤＭＡコントローラ２０５は、図１７に示した処理と同様の処理を、デバイス２０７にて実行する。
【０１８３】
次に、本実施形態に係る転送装置２０４が奏する効果について説明する。
【０１８４】
第２の実施形態に係る転送装置２０４によれば、データを転送する処理においてエラーが生じた場合であっても、そのデータを短期間に受信することができる。この理由は、対象データに関する送受信にエラーが生じた場合であっても、該対象データに関するＦＩＳのうち、正常に送受信されているＦＩＳに関しては、転送装置２０４がメモリ１０３に格納する処理等を実行しないからである。
【０１８５】
第２の実施形態に係る転送装置２０４によれば、そのデータを短期間に受信することができる理由について、本実施形態においても特許文献１と特許文献２と対比しながら、さらに、詳細に説明する。
【０１８６】
ＳＡＴＡに関するインターフェース規格によれば、対象データを転送する処理が異常終了した場合に、対象データを正しく転送するためには、該対象データを、再度、転送する必要がある。すなわち、該インターフェース規格に準拠した装置は、データＦＩＳに関して異常終了を表す出力を検知した場合に、該データＦＩＳに関連している命令処理を無効にし、その後、該命令処理を再実行する。たとえば、該装置は、４０９６個のデータＦＩＳを送信した後に異常終了を表す出力を検知した場合に、４０９６個のデータＦＩＳを送信する処理を実行する。したがって、該装置によれば、４０９６個分のＦＩＳを送信する処理に要する送信時間が無駄になってしまう。
【０１８７】
これに対して、本実施形態に係る転送装置２０４は、データＦＩＳを転送することによってエラーが生じた場合に、該エラーが生じたる原因であるデータＦＩＳをメモリ１０３に格納する処理を実行する。この結果、本実施形態に係る転送装置２０４によれば、該データＦＩＳに関する処理を再実行する処理時間を削減することができる。
【０１８８】
たとえば、下記の状態１乃至状態３を満たす場合の例を参照しながら、上述した効果を奏する理由について説明する。説明の便宜上、対象データは、Ｎ個のデータＦＩＳを含むとする。
【０１８９】
状態１：１回目の処理にて、第Ｅ（ただし、１≦Ｅ≦Ｎ）データＦＩＳに関する転送処理にてエラーが生じる、
状態２：２回目の処理にて、第ＦデータＦＩＳ、及び、第ＣデータＦＩＳに関する転送処理にてエラーが生じる（ただし、１≦Ｆ＜Ｅ＜Ｃ≦Ｎ）、
状態３：３回目の処理にて、第ＤデータＦＩＳ（ただし、１≦Ｄ＜Ｃ）に関する転送処理にてエラーが生じる。
【０１９０】
特許文献１及び特許文献２に示した装置は、第１の実施形態に示したように、対象データに含まれるデータＦＩＳに関する転送処理にてエラーが生じた場合に、再度、対象データを転送する処理を実行する。たとえば、状態１乃至状態３を満たす例の場合に、該装置は、対象データに関して、状態１にて第ＥデータＦＩＳに起因する１回、状態２にて第Ｆ及びＣデータＦＩＳに起因する２回、及び、状態３にて第ＣデータＦＩＳに起因する１回の再転送処理を実行する。すなわち、該装置は、対象データを転送する処理に関して、状態３以降に正常に転送する転送処理を含め、合計５回の転送処理を実行する。
【０１９１】
これに対して、本実施形態に係る転送装置２０４は、３回の転送処理を実行するのみで対象データを転送することができる。この理由について、転送装置２０４における処理に沿って説明する。
【０１９２】
本実施形態に係るＳＡＴＡコントローラ２０６は、まず、対象データに関するデータＦＩＳを送信することにより、対象データに関する転送処理を実行する。ＤＭＡコントローラ２０５は、ＳＡＴＡコントローラ２０６が転送処理した対象データを、たとえば、ＦＩＳの単位にてメモリ１０３に格納する。しかし、状態１によって、第ＥデータＦＩＳがエラーであるので、記憶領域は、第ＥデータＦＩＳに関するエラーを含む対象データを記憶している。
【０１９３】
次に、ＳＡＴＡコントローラ２０６は、対象データに関するデータＦＩＳを送信することにより、対象データに関する転送処理を実行する。ＤＭＡコントローラ２０５は、ＳＡＴＡコントローラ２０６が転送処理した対象データのうち、図１５及び図１６に示す処理に従って、第ＥデータＦＩＳ以降のデータをメモリ１０３に格納する。従って、第ＦデータＦＩＳがエラーである場合であっても、ＤＭＡコントローラ２０５は、第ＥデータＦＩＳ以前にある第ＦデータＦＩＳをメモリ１０３に格納しない。これに対して、ＤＭＡコントローラ２０５は、第ＥデータＦＩＳ以降にある第ＣデータＦＩＳをメモリ１０３に格納する。したがって、記憶領域は、第ＣデータＦＩＳに関するエラーを含む対象データを記憶している。
【０１９４】
次に、ＳＡＴＡコントローラ２０６は、対象データに関するデータＦＩＳを送信することにより、対象データに関する転送処理を実行する。ＤＭＡコントローラ２０５は、ＳＡＴＡコントローラ２０６が転送処理した対象データのうち、図１５及び図１６に示す処理に従って、第ＣデータＦＩＳ以降のデータをメモリ１０３に格納する。状態３の場合に、エラーは、第ＣデータＦＩＳ以前にある第ＤデータＦＩＳにて生じる。ＤＭＡコントローラ２０５は、たとえ、ＳＡＴＡコントローラ２０６がエラーを含むＦＩＳを送受信する場合であっても、第ＣデータＦＩＳ以前にあるデータＦＩＳをメモリ１０３に格納しない。したがって、記憶領域は、エラーを含まない対象データを記憶している。この結果、転送装置２０４は、３回の転送処理を実行するのみで対象データを転送することができる。
【０１９５】
尚、上述した説明においては、説明の便宜上、ＤＭＡコントローラがＦＩＳを作成するとして説明したが、ＤＭＡコントローラが出力したデータに基づいて、ＳＡＴＡコントローラがＦＩＳを作成する態様であってもよい。
【０１９６】
＜第３の実施形態＞
図１８及び図１９を参照しながら、本発明の第３の実施形態に係る転送装置３０１が有する構成と、転送装置３０１における処理の流れについて詳細に説明する。図１８は、本発明の第３の実施形態に係る転送装置３０１が有する構成を示すブロック図である。図１９は、第３の実施形態に係る転送装置３０１における処理の流れを示すシーケンス図である。
【０１９７】
第３の実施形態に係る転送装置３０１は、送信部３０２と、受信部３０３とを有する。転送装置３０１は、さらに、送信部３０２がアクセス可能なメモリ３０４と、受信部３０３がアクセス可能なメモリ３０５とを有してもよい。
【０１９８】
送信部３０２は、メモリ３０４のうち、第１識別子が表す記憶領域に記憶されている第１データに関して送信処理を実行するとする。また、受信部３０３は、メモリ３０５のうち、第２識別子が表す記憶領域に、受信した第１データを格納する受信処理を実行するとする。送受信処理したエラーがない場合に、送信処理に応じて、第１識別子は、メモリ３０４のうち、次の記憶領域を指し示す識別子に更新されるとする。同様に、送受信処理したエラーがない場合に、受信処理に応じて、第２識別子は、メモリ３０５のうち、次の記憶領域を指し示す識別子に更新されるとする。
【０１９９】
送信部３０２は、第１データが記憶された記憶領域を指し示す第１識別子を、たとえば、記憶装置（または、メモリ３０４）に格納する（ステップＳ３０１）。次に、送信部３０２は、第１識別子が表す記憶領域から第１データを読み取り（ステップＳ３０２）、読み取った第１データを受信部３０３に送信する（ステップＳ３０３）。
【０２００】
受信部３０３は、受信した第１データを格納する記憶領域を指し示す第２識別子を、たとえば、記憶装置（または、メモリ３０５）に格納する（ステップＳ３０４）。次に、受信部３０３は、送信部３０２が送信した第１データを受信し（ステップＳ３０５）、受信した第１データを、第２識別子が表す記憶領域に格納する（ステップＳ３０６）。
【０２０１】
次に、受信部３０３は、受信した第１データがエラーを含むか否かを判定する（ステップＳ３０７）。たとえば、受信部３０３は、エラーを検知可能なＣＲＣデータに基づいて、第１データがエラーを含むか否かを判定する。受信部３０３は、第１データがエラーを含む場合に（ステップＳ３０７にてＹＥＳ）、第１データを再送する処理を要求する要求信号を、送信部３０２に送信する（ステップＳ３０８）。
【０２０２】
送信部３０２は、該要求信号を受信し（ステップＳ３０９）、受信した要求信号に応じて、記憶装置に格納した第１識別子を読み取り（ステップＳ３１０）、読み取った第１識別子が表す記憶領域から、第２データを読み取る（ステップＳ３１１）。送信部３０２は、読み取った第２データを受信部３０３に送信する（ステップＳ３１２）。
【０２０３】
受信部３０３は、該要求信号を送信した場合に、記憶装置から第２識別子を読み取る（ステップＳ３１３）。次に、受信部３０３は、送信部３０２が送信した第２データを受信し（ステップＳ３１４）、読み取った第２識別子が表す記憶領域に、受信した第２データを格納する（ステップＳ３１５）。
【０２０４】
送信部３０２、及び、受信部３０３は、たとえば、第１の実施形態に示したＳＡＴＡコントローラ、及び、ＤＭＡコントローラを用いて実現することができる。
【０２０５】
次に、本実施形態に係る転送装置３０１が奏する効果について説明する。
【０２０６】
第３の実施形態に係る転送装置３０１によれば、データを転送する処理においてエラーが生じた場合であっても、そのデータを短期間に転送することができる。この理由は、対象データを転送する処理においてエラーが生じた場合に、転送処理に伴う記憶領域を確保する等の処理を実行することなく、該対象データを再送する処理を実行するからである。すなわち、対象データがエラーを含んでいる場合に、転送装置３０１は、確保されている記憶領域を再利用することにより、転送処理を再度実行する。
【０２０７】
これに対して、特許文献１に示された装置は、転送した対象データにエラーが生じた場合に、転送する処理をはじめから実行する。したがって、該装置は、対象データを転送する処理が実行される場合に、対象データに関する転送処理を実行するたびに、転送処理に伴う記憶領域を確保する処理を実行する。この結果、該装置を用いて転送処理する場合の処理量は、本実施形態に係る転送装置３０１を用いて転送処理する場合の処理量に比べて多い。
【０２０８】
また、特許文献２には、エラーが生じた場合に再送する処理において、命令コードに従い、アドレスポインタを、エラーが生じたアドレスポインタに戻す処理が記載されているものの、具体的な処理については記載されていない。
【０２０９】
これに対して、第３の実施形態に係る転送装置３０１は、第１データに関する送受信処理の前に、第１識別子、及び、第２識別子を記憶装置に格納し、第２データに関する送受信処理の前に、記憶装置に格納した識別子を読み取る処理を実行する。したがって、本実施形態には、記憶領域を指し示す識別子に関する処理が具体的に記載されている。
【０２１０】
したがって、第３の実施形態に係る転送装置３０１によれば、データを転送する処理においてエラーが生じた場合であっても、そのデータを短期間に転送することができる。
【０２１１】
＜第４の実施形態＞
図２０及び図２１を参照しながら、本発明の第４の実施形態に係る受信装置４０４が有する構成と、受信装置４０４における処理の流れについて詳細に説明する。図２０は、本発明の第４の実施形態に係る受信装置４０４が有する構成を示すブロック図である。図１９は、第４の実施形態に係る受信装置４０４における処理の流れを示すフローチャートである。
【０２１２】
第４の実施形態に係る受信装置４０４は、受信コントローラ４０１と、メモリ格納部４０２とを有する。受信装置４０４は、さらに、メモリ格納部４０２とは異なる記憶領域おして、たとえば、メモリ４０３を有してもよい。
【０２１３】
説明の便宜上、メモリ４０３は、転送された対象である対象データを記憶可能であるとする。対象データは、複数の要素データを含むとする。
【０２１４】
受信コントローラ４０１は、対象データにおける複数の要素データを受信する受信処理を実行する（ステップＳ４０１）。受信コントローラ４０１は、受信した要素データを、メモリ格納部４０２に対して出力する。
【０２１５】
メモリ格納部４０２は、受信コントローラ４０１が出力した要素データを入力し、入力した要素データをメモリ４０３に格納する（ステップＳ４０２）。尚、ステップＳ４０２にて、メモリ格納部４０２は、受信した対象データを、その対象データに含まれる受信した要素データの順序にて、メモリ４０３に格納するとする。
【０２１６】
受信コントローラ４０１は、受信した要素データにエラーが生じたか否かを判定する。受信コントローラ４０１は、受信した要素データがエラーを含んでいる場合に、エラーを含む要素データを格納した記憶領域を表す位置を保存する（ステップＳ４０３）。
【０２１７】
受信装置４０４は、エラーが生じた対象データを再度受信する再受信処理を実行する（ステップＳ４０４）。
【０２１８】
説明の便宜上、受信装置４０４は、再受信した対象データに含まれる各要素データに関して、ステップＳ４０２にて要素データを格納した位置に格納するとする。
【０２１９】
次に、受信装置４０４は、再度受信した対象データにおける要素データに関して、ステップＳ４０３にて保存した位置を読み取り、読み取った位置以降に格納する要素データであるか否かを判定する（ステップＳ４０５）。受信装置４０４は、再度受信した要素データが、読み取った位置以降に格納する要素データである場合に、該要素データをメモリ４０３に格納する（ステップＳ４０６）。受信装置４０４は、再度受信した要素データが、読み取った位置以降に格納する要素データでない場合に、該要素データをメモリ４０３に格納しない（ステップＳ４０７）。
【０２２０】
位置は、エラーが生じた要素データを表す識別番号であってもよい。
【０２２１】
受信コントローラ４０１は、たとえば、第２の実施形態に示したＳＡＴＡコントローラを用いて実現することができる。また、メモリ格納部４０２は、ＤＭＡコントローラを用いて実現することができる。また、対象データを転送する処理に必要な記憶領域は、たとえば、ＰＲＤテーブルを格納可能な記憶領域、または、対象データを一時的に格納可能な転送領域である。また、要素データは、たとえば、対象データに関するデータＦＩＳであってもよい。
【０２２２】
次に、本実施形態に係る受信装置４０４が奏する効果について説明する。
【０２２３】
第４の実施形態に係る受信装置４０４によれば、対象データを転送する処理においてエラーが生じた場合であっても、その対象データを短期間に受信することができる。この理由は、対象データを受信する処理においてエラーが生じた場合に、エラーが生じるまでに格納されていたデータを、再度、メモリ４０３に格納する処理を実行しないからである。
【０２２４】
これに対して、特許文献１に示された装置は、転送した対象データにエラーが生じた場合に、転送する処理をはじめから実行する。したがって、該装置は、対象データを転送する処理が実行される場合に、対象データに関する転送処理を実行するたびに、転送処理において、受信したデータをメモリに格納する処理を繰り返し実行する。この結果、該装置を用いて転送処理する場合の処理量は、本実施形態に係る受信装置４０４を用いて転送処理する場合の処理量に比べて多い。
【０２２５】
したがって、第４の実施形態に係る受信装置４０４によれば、データを転送する処理においてエラーが生じた場合であっても、そのデータを短期間に受信することができる。
【０２２６】
以上、上述した実施形態を模範的な例として本発明を説明した。しかし、本発明は、上述した実施形態には限定されない。すなわち、本発明は、本発明のスコープ内において、当業者が理解し得る様々な態様を適用することができる。
【０２２７】
尚、上述した各実施形態の一部又は全部は、以下の付記のようにも記載されうる。しかし、上述した各実施形態により例示的に説明した本発明は、以下には限られない。すなわち、
（付記１）
対象データに含まれている要素データを受信し、受信した前記要素データがエラーを含んでいるか否かを判定する受信コントローラと、
前記要素データを受信した順序にてメモリに格納し、前記要素データが前記エラーを含んでいると前記受信コントローラが判定した場合に、前記エラーを含む前記要素データを格納した位置を保存するメモリコントローラと
を備え、
前記メモリコントローラは、前記対象データに含まれている前記要素データを再受信する場合に、再受信した前記対象データのうち、前記エラーを含む前記要素データに対応している前記要素データ以降に後続するデータを、保存した前記位置を基準として、前記メモリの記憶領域に順に格納する
受信装置。
【０２２８】
（付記２）
前記メモリコントローラは、前記エラーを含んでいると前記受信コントローラが判定した場合に前記要素データより後に前記受信コントローラが受信した前記要素データを、前記メモリに格納しない
付記１に記載の受信装置。
【０２２９】
（付記３）
前記メモリコントローラは、前記メモリのうち前記要素データを格納する記憶領域を指し示す格納位置情報と、格納した前記位置との相対的な位置関係に基づいて、前記要素データを前記格納位置情報が指し示す記憶領域に格納するか否かを判定する
付記２に記載の受信装置。
【０２３０】
（付記４）
前記受信コントローラは、前記要素データに関して前記エラーが生じた場合であり、さらに前記メモリコントローラが、前記要素データを前記メモリに格納しない場合に、前記要素データを送信した送信元に、前記要素データを受信する処理を正常に終了したことを表す正常状態信号を送信する
付記１乃至付記３のいずれかに記載の受信装置。
【０２３１】
（付記５）
前記メモリコントローラは、
前記メモリに前記要素データを格納する処理を実行する有効状態であるか、または、前記要素データを格納する処理を実行しない無効状態であるかを表す転送情報を格納可能な転送情報手段
をさらに備え、
前記受信コントローラは、受信した前記要素データが前記エラーを含んでいる場合に、前記メモリコントローラに、前記要素データを受信する処理を異常終了したことを表す異常信号を送信し、
前記メモリコントローラは、前記大小関係に基づいて前記転送情報を設定し、設定した前記転送情報に基づき、前記要素データを格納するか否かを判定する
付記１乃至付記４のいずれかに記載の受信装置。
【０２３２】
（付記６）
前記メモリコントローラは、前記メモリのうち前記要素データを格納する記憶領域を指し示す格納位置情報が、前記位置よりも小さな値である場合に前記転送情報に前記無効状態を設定し、前記メモリのうち前記要素データを格納する記憶領域を指し示す格納位置情報が、前記位置以上の値である場合に前記転送情報に前記有効状態を設定する
付記１乃至付記５のいずれかに記載の受信装置。
【０２３３】
（付記７）
付記１乃至付記６のいずれかに記載の受信装置と、
前記対象データを記憶している記憶領域から、所定の単位にて対象データを読み取る読み取り手段と、
読み取った前記対象データを、前記受信コントローラに送信する送信コントローラと、
を備える転送装置。
【０２３４】
（付記８）
対象データに含まれている要素データを受信し、受信した前記要素データがエラーを含んでいるか否かを判定する受信コントローラを備える装置において、
前記要素データを受信した順序にてメモリに格納し、前記要素データが前記エラーを含んでいる場合に、前記エラーを含む前記要素データを格納した位置を保存するとともに、前記対象データに含まれている前記要素データを再受信する場合に、再受信した前記対象データのうち、前記エラーを含む前記要素データに対応している前記要素データ以降に後続するデータを、保存した前記位置以降に格納する
受信方法。
【０２３５】
（付記９）
前記エラーを含んでいる前記要素データより後に前記受信コントローラが受信した前記要素データを、前記メモリに格納しない
付記８に記載の受信方法。
【０２３６】
（付記１０）
前記メモリのうち前記要素データを格納する記憶領域を指し示す格納位置情報と、格納した前記位置との大小関係に基づいて、前記要素データを前記格納位置情報が指し示す記憶領域に格納するか否かを判定する
付記９に記載の受信方法。
【０２３７】
（付記１１）
送信する対象である第１データが記憶された記憶領域を指し示す第１識別子を第１記憶手段に保存し、前記第１識別子が表す前記記憶領域から前記第１データを読み取り、読み取った前記第１データを送信する送信手段と、
受信した前記第１データを格納する記憶領域を指し示す第２識別子を第２記憶手段に保存し、前記送信コントローラが送信した前記第１データを受信し、受信した前記第１データを前記第２識別子が表す前記記憶領域に格納し、受信した前記第１データがエラーを含むか否かを判定し、前記第１データが前記エラーを含む場合に、前記第１データを再送する処理を要求する要求信号を前記送信手段に送信する受信手段と
を備え、
前記送信手段は、前記要求信号に応じて、前記第１識別子を前記第１記憶手段から読み取り、読み取った前記第１識別子が表す前記記憶領域から第２データを読み取り、読み取った前記第２データを、前記受信手段に送信し、
前記受信手段は、前記送信手段に前記要求信号を送信した場合に、前記第２識別子を前記第２記憶手段から読み取り、前記第２データを受信し、受信した前記第２データを前記第２識別子が表す前記記憶領域に格納する
転送装置。
【０２３８】
（付記１２）
前記受信手段は、前記第１データがエラーを含み、さらに、受信した前記第１データがエラーを含む回数が所定の回数以下である場合に、前記要求信号を前記送信手段に送信する
付記１１に記載の転送装置。
【符号の説明】
【０２３９】
１０１    コンピュータシステム
１０２    ホスト装置
１０３    メモリ
１０４    転送装置
１０５    ＤＭＡコントローラ
１０６    ＳＡＴＡコントローラ
１０７    デバイス
１０８    メモリ
１０９    転送装置
１１０    ＤＭＡコントローラ
１１１    ＳＡＴＡコントローラ
１１２    ＳＡＴＡインターフェース
１２１    ＤＭＡコントローラ
１２２    ＰＲＤテーブルポインタレジスタ
１２３    ＰＲＤインデックスレジスタ
１２４    ＤＭＡベースアドレスレジスタ
１２５    ＤＭＡバイトカウントレジスタ
２０１    コンピュータシステム
２０２    ホスト装置
２０４    転送装置
２０５    ＤＭＡコントローラ
２０６    ＳＡＴＡコントローラ
２０７    デバイス
２０９    転送装置
２１０    ＤＭＡコントローラ
２１１    ＳＡＴＡコントローラ
３０１    転送装置
３０２    送信部
３０３    受信部
３０４    メモリ
３０５    メモリ
４０１    受信コントローラ
４０２    メモリ格納部
４０３    メモリ
４０４    受信装置
【図１】
0006641131.tif 000002
【図２】
0006641131.tif 000003
【図３】
0006641131.tif 000004
【図４】
0006641131.tif 000005
【図５】
0006641131.tif 000006
【図６】
0006641131.tif 000007
【図７】
0006641131.tif 000008
【図８】
0006641131.tif 000009
【図９】
0006641131.tif 000010
【図１０】
0006641131.tif 000011
【図１１】
0006641131.tif 000012
【図１２】
0006641131.tif 000013
【図１３】
0006641131.tif 000014
【図１４】
0006641131.tif 000015
【図１５】
0006641131.tif 000016
【図１６】
0006641131.tif 000017
【図１７】
0006641131.tif 000018
【図１８】
0006641131.tif 000019
【図１９】
0006641131.tif 000020
【図２０】
0006641131.tif 000021
【図２１】
0006641131.tif 000022