(57)【要約】【課題】ホストからデバイスに送信されるコマンドの送信量を減らして、データの転送速度を高速化させる。【解決手段】ホストは、転送種別であるリードまたはライトを指定するための命令コード、転送すべきデータが格納されているまたは転送すべきデータが格納されるデバイス側のセクタ領域を指定するためのパラメータ11-1、及び予備領域を含むSCSIコマンドの予備領域に、転送すべきデータの個数Pを表す要求LBA数データ10を挿入し、さらに、SCSIコマンドの後に、デバイス側のセクタ領域を指定するための(P-1)個のパラメータ11-2〜11-Pを追加して拡張コマンドを生成し、USBストレージデバイスに送信することによって、ホストとUSBストレージデバイス間で、一回のコマンド送信で、SCSIコマンドに記述されたパラメータによって指定された1個のデータ、及びSCSIコマンドの後に記述された追加パラメータによって指定された(P-1)個のデータを連続して転送する。【選択図】図１
2008210226.tif 000002
【特許請求の範囲】
【請求項１】
ホストとＵＳＢストレージデバイス間でデータを転送するデータ転送方法において、
前記ホストは、
転送種別であるリードまたはライトを指定するための命令コード、転送すべきデータが格納されているまたは転送すべきデータが格納される前記ＵＳＢストレージデバイス側のセクタ領域を指定するためのパラメータ、及び予備領域を含むＳＣＳＩコマンドを用いて、当該ＳＣＳＩコマンドの当該予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データを挿入し、さらに、当該ＳＣＳＩコマンドの後に、前記ＵＳＢストレージデバイス側のセクタ領域を指定するための（Ｐ−１）個の追加パラメータを付加することによって、拡張コマンドを生成し、
前記拡張コマンドを前記ＵＳＢストレージデバイスに送信することによって、
前記ホストと前記ＵＳＢストレージデバイス間で、一回のコマンド送信で、前記ＳＣＳＩコマンドに記述された前記パラメータによって指定された１個のデータ、及び前記ＳＣＳＩコマンドの後に記述された前記追加パラメータによって指定された（Ｐ−１）個のデータを連続して転送する
ことを特徴とするホストとＵＳＢストレージデバイス間のデータ転送方法。
【請求項２】
請求項１に記載のホストとＵＳＢストレージデバイス間のデータ転送方法において、
前記拡張コマンドの前記追加パラメータは、前記ＵＳＢストレージデバイス側のセクタ領域を指定するための（Ｐ−１）個のＬＢＡの先頭アドレス、及び転送すべきデータの長さを表す（Ｐ−１）個の転送長データを含んでいる
ことを特徴とするホストとＵＳＢストレージデバイス間のデータ転送方法。
【請求項３】
請求項１に記載のホストとＵＳＢストレージデバイス間のデータ転送方法において、
前記ホストは、
前記拡張コマンドを前記ＵＳＢストレージデバイスに送信した後に、前記ＵＳＢストレージデバイスから前記拡張コマンドに対応するデータを取得した場合に、以降のコマンド送信では、前記拡張コマンドを前記ＵＳＢストレージデバイスに送信し、及び、
前記拡張コマンドを前記ＵＳＢストレージデバイスに送信した後に、前記ＵＳＢストレージデバイスから前記拡張コマンドに対応していないデータを取得した場合に、以降のコマンド送信では、前記ＳＣＳＩコマンドを前記ＵＳＢストレージデバイスに送信する
ことを特徴とするホストとＵＳＢストレージデバイス間のデータ転送方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、ホストとＵＳＢストレージデバイス間のデータ転送方法に関する。
【背景技術】
【０００２】
近年、各種のデータを記憶するＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）ストレージデバイス（以下、「デバイス」または「記憶装置」と称する場合もある）が、広く普及している（例えば、特許文献１参照）。このＵＳＢストレージデバイスは、例えばパーソナルコンピュータやＰＤＡ（Ｐｅｒｓｏｎａｌ  ｄａｔａ  Ａｓｓｉｓｔａｎｔ）等の、ホストにマウント（接続）されて、ホストとの間で各種のデータの転送を行う。なお、ここでは、「転送」とは、受信動作及び送信動作の双方またはいずれか一方を意味している。
【０００３】
従来のデータ転送方法は、ホストとＵＳＢストレージデバイス間において、ホストが、ＲＥＡＤコマンド（読出コマンド）またはＷＲＩＴＥコマンド（書込コマンド）として、転送すべきデータに関するパラメータが記述されたＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）コマンド（図８参照）を、ＵＳＢストレージデバイスに送信することによって、行われる。このデータ転送方法は、ＵＳＢ２．０の規格によって規定されている。なお、図８は、従来のデータ転送方法で用いるコマンドのフォーマットの一例を示す図である。
【０００４】
図８に示すＳＣＳＩコマンドは、ホストからＵＳＢストレージデバイスヘのデバイスアクセスに使用される。なお、ホストからＵＳＢストレージデバイスヘのデバイスアクセスとは、ホストがＵＳＢストレージデバイスからデータをリード（読み出し）する処理及びホストがＵＳＢストレージデバイスにデータをライト（書き込み）する処理の双方またはいずれか一方を意味している。
【０００５】
このＳＣＳＩコマンドは、一般にＣＤＢ（Ｃｏｍｍａｎｄ  Ｄｅｓｃｒｉｐｔｏｒ  Ｂｌｏｃｋ）と称される、複数バイト（ｂｙｔｅ）からなる定型のフォーマットとして形成されている。
【０００６】
図８に示す例では、従来のデータ転送方法で用いるＳＣＳＩコマンドは、各バイトを８ビット（ｂｉｔ）とする、１０バイトの構成となっている。このＳＣＳＩコマンドは、０〜９バイト目に亘って、命令コード（Ｏｐｅｒａｔｉｏｎ  Ｃｏｄｅ）領域、予備（Ｒｅｓｅｒｖｅｄ）領域、ＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ：論理ユニット番号）領域、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ：論理ブロックアドレス）領域、転送長（Ｔｒａｎｓｆｅｒ  Ｌｅｎｇｔｈ）領域、制御コード（Ｃｏｎｔｒｏｌ  Ｃｏｄｅ）領域等を有している。
【０００７】
命令コード領域は、「ＲＥＡＤ」や「ＷＲＩＴＥ」等の命令コードが挿入される領域である。図８に示す例では、命令コード領域は、０バイト目の全域、すなわち、０〜７ビット目に形成されている。ＳＣＳＩコマンドは、０バイト目の命令コード領域に、「ＲＥＡＤ」を表す命令コードが挿入された場合に、ＲＥＡＤコマンドとして機能し、「ＷＲＩＴＥ」を表す命令コードが挿入された場合に、ＷＲＩＴＥコマンドとして機能する。
【０００８】
予備領域は、予備の空き領域である。図８に示す例では、予備領域は、１バイト目の０〜４ビット目及び６バイト目の全域に形成されている。
【０００９】
ＬＵＮ領域は、ＬＵＮ（Ｌｏｇｉｃａｌ  Ｕｎｉｔ  Ｎｕｍｂｅｒ）が挿入される領域である。図８に示す例では、ＬＵＮ領域は、１バイト目の５〜７ビット目に形成されている。なお、ＬＵＮは、ＵＳＢストレージデバイスのユニットに付された論理的なユニット番号である。
【００１０】
ＬＢＡ領域は、ＬＢＡ（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ）の先頭アドレスが挿入される領域である。図８に示す例では、ＬＢＡ領域は、２〜５バイト目の全域に形成されている。なお、ＬＢＡは、ＵＳＢストレージデバイス内の全てのセクタ領域に付された論理的なセクタ番号である。ＬＢＡの値は、０から始まり、対応するセクタ領域毎に順次増加する。ホストは、ＵＳＢストレージデバイスからデータをリード（読み出し）する場合に、または、ＵＳＢストレージデバイスにデータをライト（書き込み）する場合に、このＬＢＡ領域にＬＢＡの先頭アドレスを挿入することによって、リードすべきデータが格納されているＵＳＢストレージデバイスの格納領域、または、ライトすべきデータを格納するＵＳＢストレージデバイスの格納領域を指定する。
【００１１】
転送長領域は、転送すべきデータの長さを表す転送長データが挿入される領域である。図８に示す例では、転送長領域は、７〜８バイト目の全域に形成されている。なお、転送長領域には、パラメータリスト長（Ｐａｒａｍｅｔｅｒ  Ｌｉｓｔ  Ｌｅｎｇｔｈ）データや割当長（Ａｌｌｏｃａｔｉｏｎ  Ｌｅｎｇｔｈ）データ等が挿入される場合もある。
【００１２】
制御コード領域は、チェックコード等の制御用の信号が挿入される領域である。図８に示す例では、制御コード領域は、９バイト目の全域に形成されている。
【００１３】
なお、「ＬＢＡ領域」に記述されたＬＢＡの先頭アドレス及び「転送長領域」に記述された転送長データが、上述の「転送すべきデータに関するパラメータ」１１−１となる。
【００１４】
以下、図９−１、並びに、図９−２（Ａ）及び（Ｂ）を参照して、従来のデータ転送方法におけるリード処理時のホスト及びデバイスの動作の概要につき説明する。なお、図９−１、並びに、図９−２（Ａ）及び（Ｂ）は、それぞれ、リード処理時の従来のデータ転送方法の概要を示す図である。
【００１５】
図９−１は、リード処理時において、ホストとデバイスとの間で転送されるデータの一例を示している。
【００１６】
図９−１に示すように、リード処理は、コマンド転送ステージ、データ転送ステージ、ステータス転送ステージ等の工程を経て行われる。
【００１７】
「コマンド転送ステージ」とは、ホストがコマンドをデバイスに送信するステージである。なお、リード処理では、ホストは、コマンド転送ステージで、ＲＥＡＤコマンドをデバイスに送信する。このＲＥＡＤコマンドは、図８に示すフォーマットに対して、０バイト目の命令コード領域に、命令コード「ＲＥＡＤ」が挿入され、さらに、２〜８バイト目のＬＢＡ領域及び転送長領域に、リードすべきデータに関するパラメータ、すなわち、リードすべきデータが格納されているセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入された構成となっている。なお、ホストからＲＥＡＤコマンドを受信したデバイスは、コマンドの受信に応答して、ＡＣＫ（Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）応答またはＮＡＫ（Ｎｅｇａｔｉｖｅ  Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ）応答をホストに送信する。「ＡＣＫ応答」とは、確認応答または肯定応答を意味している。ＡＣＫ応答は、例えば、受信側が送信側から送信されたデータ（但し、コマンド等を含む）を正しく受信できた場合に送信される。「ＮＡＫ応答」とは、否定応答を意味している。ＮＡＫ応答は、例えば、受信側が送信側から送信されたデータ（但し、コマンド等を含む）を正しく受信できなかった場合に送信される。図９−１に示す例では、デバイスは、ＡＣＫ応答をホストに送信している。
【００１８】
「データ転送ステージ」とは、ホスト及びデバイスのいずれか一方が送信側となり、他方が受信側となって、データを送信するステージである。リード処理では、デバイスは、データ転送ステージで、リードデータをホストに送信する。なお、デバイスからリードデータを受信したホストは、データの受信に応答して、ＡＣＫ応答またはＮＡＫ応答をデバイスに送信する。図９−１に示す例では、ホストは、ＡＣＫ応答をデバイスに送信している。
【００１９】
「ステータス転送ステージ」とは、デバイスがステータスをホストに送信するステージである。なお、デバイスからステータスを受信したホストは、ステータスの受信に対応するＡＣＫ応答またはＮＡＫ応答をデバイスに送信する。図９−１に示す例では、ホストは、ＡＣＫ応答をデバイスに送信している。
【００２０】
ホスト及びデバイスは、このようなリード処理を、リードすべき複数のデータの数だけ繰り返し行う。
【００２１】
図９−２（Ａ）は、ＲＥＡＤコマンドの具体例を示しており、図９−２（Ｂ）は、図９−２（Ａ）に示す複数のＲＥＡＤコマンドによって指定された各セクタ領域の位置を示している。
【００２２】
図９−２（Ａ）に示すように、リード処理時において、ホストは、リードすべき複数のデータが格納されている各セクタ領域を個々に指定する複数のＲＥＡＤコマンドを生成して、生成した複数のＲＥＡＤコマンドをデバイスに順次送信する。
【００２３】
これらのＲＥＡＤコマンドは、上述の通り、命令コード領域に、命令コード「ＲＥＡＤ」が挿入され、さらに、ＬＢＡ領域及び転送長領域に、リードすべきデータに関するパラメータ、すなわち、リードすべきデータが格納されているセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入された構成となっている（図８参照）。なお、ＲＥＡＤコマンドは、ホストによって、リードすべき複数のデータが格納されている各セクタ領域が、ファイルアロケーションテーブル（Ｆｉｌｅ  Ａｌｌｏｃａｔｉｏｎ  Ｔａｂｌｅ（ＦＡＴ））情報に基づいて、特定され、これら各セクタ領域が個々に指定されるように生成される。「ＦＡＴ情報」とは、デバイスにおけるデータの格納領域を表す情報である。ＦＡＴ情報は、デバイスがホストにマウント（接続）された時にデバイスからホストに送信されている。
【００２４】
図９−２（Ａ）に示す例では、ホストは、ＬＢＡの先頭アドレスを「０」とし、転送長を「２」とするセクタ領域を指定するＲＥＡＤコマンド、ＬＢＡの先頭アドレスを「４」とし、転送長を「１」とするセクタ領域を指定するＲＥＡＤコマンド、ＬＢＡの先頭アドレスを「７」とし、転送長を「２」とするセクタ領域を指定するＲＥＡＤコマンド、…、ＬＢＡの先頭アドレスを「９８」とし、転送長を「１」とするセクタ領域を指定するＲＥＡＤコマンドをそれぞれ生成して、各ＲＥＡＤコマンドをデバイスに順次送信している。
【００２５】
デバイスは、ホストから各ＲＥＡＤコマンドを受信する度に、各ＲＥＡＤコマンドによって指定されたセクタ領域（図９−２（Ｂ）参照）に格納されているデータをホストに順次送信する。これによって、ホストは、デバイスからデータをリードする。
【００２６】
ホストは、リードすべき全てのデータをリードし終わるまで、各ＲＥＡＤコマンドを繰り返し送信する。そして、ホストは、リードすべき全てのデータをリードし終わった時点で、リード処理を終了する。
【００２７】
リード処理時の従来のデータ転送方法の動作の概要は、以上の通りである。
【００２８】
次に、以下、図１０−１、並びに、図１０−２（Ａ）及び（Ｂ）を参照して、従来のデータ転送方法におけるライト処理時のホスト及びデバイスの動作の概要につき説明する。なお、図１０−１、並びに、図１０−２（Ａ）及び（Ｂ）は、それぞれ、ライト処理時の従来のデータ転送方法の概要を示す図である。
【００２９】
図１０−１は、ライト処理時において、ホストとデバイスとの間で転送されるデータの一例を示している。
【００３０】
図１０−１に示すように、ライト処理は、リード処理と同様に、コマンド転送ステージ、データ転送ステージ、ステータス転送ステージ等の工程を経て行われる。
【００３１】
なお、ライト処理では、ホストは、コマンド転送ステージで、ＲＥＡＤコマンドの代わりに、ＷＲＩＴＥコマンドをデバイスに送信する。このＷＲＩＴＥコマンドは、図８に示すフォーマットに対して、０バイト目の命令コード領域に、命令コード「ＷＲＩＴＥ」が挿入され、さらに、ＬＢＡ領域及び転送長領域に、ライトすべきデータに関するパラメータ、すなわち、ライトすべきデータが格納されるセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入された構成となっている。なお、ホストからＷＲＩＴＥコマンドを受信したデバイスは、コマンドの受信に応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。図１０−１に示す例では、デバイスは、ＡＣＫ応答をホストに送信している。
【００３２】
また、ライト処理では、ホストは、データ転送ステージで、ライトデータをデバイスに送信する。なお、ホストからライトデータを受信したデバイスは、データの受信に応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。図１０−１に示す例では、デバイスは、ＡＣＫ応答をホストに送信している。
【００３３】
また、ライト処理では、デバイスは、ステータス転送ステージで、ステータスをホストに送信する。なお、デバイスからステータスを受信したホストは、ステータスの受信に対応するＡＣＫ応答またはＮＡＫ応答をデバイスに送信する。図１０−１に示す例では、ホストは、ＡＣＫ応答をデバイスに送信している。
【００３４】
ホスト及びデバイスは、このようなライト処理を、ライトすべき複数のデータの数だけ繰り返し行う。
【００３５】
図１０−２（Ａ）は、ＷＲＩＴＥコマンドの具体例を示しており、図１０−２（Ｂ）は、図１０−２（Ａ）に示す複数のＷＲＩＴＥコマンドによって指定された各セクタ領域の位置を示している。
【００３６】
図１０−２（Ａ）に示すように、ライト処理時において、ホストは、ライトすべき複数のデータが格納される各セクタ領域を個々に指定する複数のＷＲＩＴＥコマンドを生成して、生成した複数のＷＲＩＴＥコマンドをデバイスに順次送信する。
【００３７】
これらのＷＲＩＴＥコマンドは、上述の通り、命令コード領域に、命令コード「ＷＲＩＴＥ」が挿入され、さらに、ＬＢＡ領域及び転送長領域に、ライトすべきデータに関するパラメータ、すなわち、ライトすべきデータが格納されるセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入された構成となっている（図８参照）。なお、ＷＲＩＴＥコマンドは、ホストによって、ライトすべき複数のデータが格納される各セクタ領域が、ＦＡＴ情報に基づいて、特定され、これら各セクタ領域が個々に指定されるように生成される。
【００３８】
図１０−２（Ａ）に示す例では、ホストは、ＬＢＡの先頭アドレスを「０」とし、転送長を「２」とするセクタ領域を指定するＷＲＩＴＥコマンド、ＬＢＡの先頭アドレスを「４」とし、転送長を「１」とするセクタ領域を指定するＷＲＩＴＥコマンド、ＬＢＡの先頭アドレスを「７」とし、転送長を「２」とするセクタ領域を指定するＷＲＩＴＥコマンド、…、ＬＢＡの先頭アドレスを「９８」とし、転送長を「１」とするセクタ領域を指定するＷＲＩＴＥコマンドをそれぞれ生成して、各ＷＲＩＴＥコマンドをデバイスに順次送信している。デバイスは、ホストからＷＲＩＴＥコマンドを受信する度に、ＡＣＫ応答をホストに送信する。
【００３９】
ホストは、デバイスからＡＣＫ応答を受信する度に、各ＷＲＩＴＥコマンドによって指定されたセクタ領域（図１０−２（Ｂ）参照）に格納されているデータをデバイスに順次送信する。これによって、ホストは、デバイスにデータをライトする。
【００４０】
ホストは、ライトすべき全てのデータをライトし終わるまで、各ＷＲＩＴＥコマンドを繰り返し送信する。そして、ホストは、ライトすべき全てのデータをライトし終わった時点で、ライト処理を終了する。
【００４１】
ライト処理時の従来のデータ転送方法の動作の概要は、以上の通りである。
【特許文献１】特開２００２−３４２２５５号公報
【発明の開示】
【発明が解決しようとする課題】
【００４２】
上述した従来のデータ転送方法は、例えば、ＵＳＢストレージデバイス内で断片化されて記録されているデータをリードする場合に、ＲＥＡＤコマンドを繰り返し送信することになる。そのため、従来のデータ転送方法は、ホストからデバイスに送信されるコマンドの送信量が増加し、これにより、データの転送速度が低下するという問題がある。
【００４３】
また、従来のデータ転送方法は、例えば、空きセクタが断片化されているＵＳＢストレージデバイスにデータをライトする場合に、ＷＲＩＴＥコマンドを繰り返し送信することになる。そのため、従来のデータ転送方法は、ホストからデバイスに送信されるコマンドの送信量が増加し、これにより、データの転送速度が低下するという問題がある。
【００４４】
そこで、この発明の目的は、ＵＳＢ２．０の規格を維持したまま、従来のデータ転送方法よりも、データの転送速度を高速化させることができる、ホストとＵＳＢストレージデバイス間のデータ転送方法を提供することにある。
【課題を解決するための手段】
【００４５】
上述の課題を解決するために、この発明に係るホストとＵＳＢストレージデバイス間のデータ転送方法は、ホストが、転送種別であるリードまたはライトを指定するための命令コード、転送すべきデータが格納されているまたは転送すべきデータが格納されるＵＳＢストレージデバイス側のセクタ領域を指定するためのパラメータ、及び予備領域を含むＳＣＳＩコマンドを用いて、ＳＣＳＩコマンドの予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データを挿入し、さらに、ＳＣＳＩコマンドの後に、ＵＳＢストレージデバイス側のセクタ領域を指定するための（Ｐ−１）個の追加パラメータを付加することによって、拡張コマンドを生成し、この拡張コマンドをＵＳＢストレージデバイスに送信する。
【００４６】
これによって、ホストは、ホストとＵＳＢストレージデバイス間で、一回のコマンド送信で、Ｐ個の転送すべきデータ、すなわち、拡張コマンドの中のＳＣＳＩコマンドに記述されたパラメータによって指定された１個のデータ、及び拡張コマンドの中のＳＣＳＩコマンドの後に記述された追加パラメータによって指定された（Ｐ−１）個のデータを連続して転送、すなわち、送信または受信する。
【００４７】
なお、このデータ転送方法の実施に当たり、拡張コマンドの追加パラメータは、ＵＳＢストレージデバイス側のセクタ領域を指定するための（Ｐ−１）個のＬＢＡの先頭アドレス、及び転送すべきデータの長さを表す（Ｐ−１）個の転送長データを含んでいることが好ましい。
【００４８】
これによって、拡張コマンドの追加パラメータは、ＳＣＳＩコマンドに記述されたパラメータと同じフォーマットとなる。そのため、この方法によれば、デバイスは、ホストから拡張コマンドを受信した場合に、ＳＣＳＩコマンドに記述されたパラメータに対する処理と同様の処理で、追加パラメータを解読することができる。したがって、ホスト及びデバイスは、従来の規格（具体的には、ＵＳＢ２．０規格）を維持したまま、拡張コマンドを用いて、データ転送を行うことができる。
【００４９】
しかも、拡張コマンドの追加パラメータは、（Ｐ−１）個のＬＢＡの先頭アドレス、及び（Ｐ−１）個の転送長データを含んでいる。そのため、ホストは、この拡張コマンドをデバイスに一回送信するだけで、Ｐ個の転送すべきデータ、すなわち、ＳＣＳＩコマンドに記述されたパラメータによって指定された１個の転送すべきデータ、及び追加パラメータによって指定された（Ｐ−１）個の転送すべきデータを、デバイスに通知することができる。
【００５０】
また、このデータ転送方法の実施に当たり、ホストは、拡張コマンドをＵＳＢストレージデバイスに送信した後に、ＵＳＢストレージデバイスから拡張コマンドに対応するデータを取得した場合に、以降のコマンド送信では、拡張コマンドをＵＳＢストレージデバイスに送信し、及び、拡張コマンドをＵＳＢストレージデバイスに送信した後に、ＵＳＢストレージデバイスから拡張コマンドに対応していないデータを取得した場合に、以降のコマンド送信では、従来のＳＣＳＩコマンドをＵＳＢストレージデバイスに送信することが好ましい。
【００５１】
すなわち、ホストは、デバイスから拡張コマンドに対応するデータを取得した場合に、デバイスが拡張コマンドに対応していると判定し、デバイスから拡張コマンドに対応していないデータを取得した場合に、デバイスが拡張コマンドに対応していないと判定する。そして、ホストは、デバイスが拡張コマンドに対応していると判定された場合に、以降のコマンド送信では、拡張コマンドをＵＳＢストレージデバイスに送信し、デバイスが拡張コマンドに対応していないと判定された場合に、以降のコマンド送信では、従来のコマンドをＵＳＢストレージデバイスに送信する。
【００５２】
この方法によれば、ホストは、デバイスが拡張コマンドに対応していない場合に、以降のコマンド送信では、従来のコマンドを送信する。これにより、この方法は、拡張コマンドの送信機会を増やすことができる。
【００５３】
そのため、この方法によれば、さらに、デバイスに確実にリード処理またはライト処理を実行させながら、ホストからデバイスに送信されるコマンドの送信量を、従来のデータ転送方法よりも減らすことができ、その結果、データの転送速度を、従来のデータ転送方法よりも高速化させることができる。
【発明の効果】
【００５４】
この発明のデータ転送方法では、ホストが、ＵＳＢストレージデバイスヘのデバイスアクセスに使用するＳＣＳＩコマンドを拡張して、一回のコマンド送信で、複数個のパラメータを同時に転送する。これにより、この発明のデータ転送方法は、ＵＳＢ２．０の規格を維持したまま、一回のコマンド送信で、転送すべき複数のデータを指定することができる。そのため、この発明のデータ転送方法は、ホストとデバイス間のコマンドの送信回数が、従来のデータ転送方法よりも格段に減少する。したがって、この発明のデータ転送方法によれば、ホストからデバイスに送信されるコマンドの送信量を、従来のデータ転送方法よりも減らすことができ、その結果、データの転送速度を、従来のデータ転送方法よりも高速化させることができる。
【発明を実施するための最良の形態】
【００５５】
以下、図を参照して、この発明の実施の形態につき、「ホスト及びデバイスの構成」、「この発明のデータ転送方法で用いるコマンド」、「リード処理時のデータ転送方法」、及び「ライト処理時のデータ転送方法」の順番で説明する。各図において、共通する構成要素や同様な構成要素については、同一の符号を付し、それらの重複する説明を省略する。
【００５６】
＜ホスト及びデバイスの構成＞
図１１は、ホスト及ぶＵＳＢストレージデバイスの一構成例を示すブロック図である。図１１に示す例では、ホスト１００とＵＳＢストレージデバイス（以下、単に「デバイス」と称する）２００は、ＵＳＢバス３００で電気的に接続されている。
【００５７】
ホスト１００は、内部に、制御部１１０、データ・プログラム格納部１２０、入出力部１３０等を有している。制御部１１０は、ＣＰＵによって構成されており、内部に、例えば、コマンド・応答生成手段１１２、判定手段１１４等の機能手段を備えている。コマンド・応答生成手段１１２は、データ・プログラム格納部１２０に格納されている通信用プログラムに基づいて、例えば、後述の拡張コマンドや、従来のＳＣＳＩコマンド、その他の各種のコマンド、ＡＣＫ応答、ＮＡＫ応答、その他の各種の応答を生成する。判定手段１１４は、データ・プログラム格納部１２０に格納されている通信用プログラムに基づいて、例えば、図３、及び図６に示す各種の判定ステップで、デバイスから送信されたデータや応答、ステータス等に対して、適宜判定処理を行う。データ・プログラム格納部１２０は、ＲＡＭによって構成されており、内部に、通信用プログラム、送信用データ、ファイルアロケーションテーブル（ＦＡＴ）情報等を格納している。この通信用プログラムは、デバイスとの間の通信を行うためのプログラムである。この通信用プログラムは、例えば、各種のコマンド及び応答の生成や各種の判定に供する条件やデータ等が規定されている。送信用データは、ライト処理時に、ホストからデバイスに送信されるデータである。ＦＡＴ情報は、デバイスにおけるデータの格納領域を表す情報である。
【００５８】
他方、デバイス２００は、内部に、制御部２１０、データ・プログラム格納部２２０、入出力部２３０等を有している。制御部２１０は、ＣＰＵによって構成されており、内部に、例えば、応答・ステータス生成手段２１２、判定手段２１４等の機能手段を備えている。応答・ステータス生成手段２１２は、データ・プログラム格納部２２０に格納されている通信用プログラムに基づいて、例えば、各種の応答やステータスを生成する。判定手段２１４は、データ・プログラム格納部２２０に格納されている通信用プログラムに基づいて、例えば、図４、及び図７に示す各種の判定ステップで、ホストから送信されたコマンドやデータ、応答等に対して、適宜判定処理を行う。データ・プログラム格納部２２０は、ＲＡＭによって構成されており、内部に、通信用プログラム、送信用データ、ＦＡＴ情報等を格納している。この通信用プログラムは、ホストとの間の通信を行うためのプログラムである。この通信用プログラムは、例えば、各種の応答及びステータスの生成や各種の判定に供する条件やデータ等が規定されている。送信用データは、リード処理時に、デバイスからホストに送信されるデータである。ＦＡＴ情報は、上述の通り、デバイスにおけるデータの格納領域を表す情報である。
【００５９】
＜この発明のデータ転送方法で用いるコマンド＞
図１は、この発明のデータ転送方法で用いるコマンドのフォーマットの一例を示す図である。この発明のデータ転送方法は、ホストとＵＳＢストレージデバイス間において、ホストが、例えば図１に示すコマンドをＲＥＡＤコマンドまたはＷＲＩＴＥコマンドとしてＵＳＢストレージデバイス（以下、「デバイス」または「記憶装置」と称する場合もある）に送信することによって、行われる。
【００６０】
図１に示すように、この発明のデータ転送方法で用いるコマンドは、図８に示す従来のＳＣＳＩコマンドと比較すると、１バイト目の０〜４ビット目に、すなわち、１バイト目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数（Ｎｕｍｂｅｒ  ｏｆ  Ｔｒａｎｓｆｅｒｒｅｄ  ＬＢＡ）データ１０が挿入され、さらに、１０バイト目以降に、すなわち、従来のＳＣＳＩコマンドの後に、転送すべきデータに関する、（Ｐ−１）個の追加パラメータ１１−２〜１１−Ｐが付加されている。以下、この発明で用いるコマンドを「拡張コマンド」と称する。以下、拡張コマンドの構成につき詳述する。
【００６１】
拡張コマンドは、０バイト目の命令コード領域（Ｏｐｅｒａｔｉｏｎ  Ｃｏｄｅ領域）に、命令コード「ＲＥＡＤ」が挿入された場合に、ＲＥＡＤコマンドとして機能し、また、命令コード「ＷＲＩＴＥ」が挿入された場合に、ＷＲＩＴＥコマンドとして機能する。以下、命令コード領域に命令コード「ＲＥＡＤ」が挿入された拡張コマンドを「ＲＥＡＤ拡張コマンド」と称し、また、命令コード領域に命令コード「ＷＲＩＴＥ」が挿入された拡張コマンドを「ＷＲＩＴＥ拡張コマンド」と称する場合もある。
【００６２】
拡張コマンドは、２〜８バイト目に亘って、従来のＳＣＳＩコマンドと同様に、１個のパラメータが記述される。この２〜８バイト目に記述された１個のパラメータは、一番目に転送すべきデータに関連している。
【００６３】
拡張コマンドは、０〜９バイト目のフォーマットが、従来のＳＣＳＩコマンドと同じフォーマットとなっている。これは、従来のＳＣＳＩコマンドとの互換性を拡張コマンドに持たせるためである。すなわち、デバイスが、従来のＳＣＳＩコマンドに対する処理と同じ演算処理で、拡張コマンドを解読できるようにするためである。
【００６４】
なお、拡張コマンドは、例えば、１バイト目の０〜４ビット目の予備領域（Ｒｅｓｅｒｖｅｄ領域）に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入されている。この個数Ｐは、２〜８バイト目に記述された１個のパラメータと１０バイト目以降に記述された（Ｐ−１）個の追加パラメータの合計数となっている。この個数Ｐは、データ転送用に予め定められた時間とホスト及びデバイスの演算能力との関係に基づいて、制限されていることが好ましい。図１に示す例では、個数Ｐは、３２個以下に制限されている。なお、図１に示す例では、要求ＬＢＡ数データは、１バイト目の予備領域に挿入されているが、予備領域であれば他の領域（例えば、６バイト目の予備領域）に挿入されるようにしてもよい。
【００６５】
また、拡張コマンドは、１０バイト目以降に、（Ｐ−１）個の追加パラメータが追加されている。この１０バイト目以降に記述された（Ｐ−１）個の追加パラメータは、二番目以降に転送すべきデータに関連している。なお、図１に示す例では、追加パラメータは、（Ｐ−１）個のＬＢＡの先頭アドレス及び（Ｐ−１）個の転送長データ、すなわち、ＬＢＡ（１），転送長（Ｔｒａｎｓｆｅｒ  Ｌｅｎｇｔｈ）（１），…，ＬＢＡ（Ｐ），転送長（Ｔｒａｎｓｆｅｒ  Ｌｅｎｇｔｈ）（Ｐ）となっている。
【００６６】
＜リード処理時のデータ転送方法＞
（データ転送方法の概要）
以下、図２−１、図２−２（Ａ）及び（Ｂ）、並びに、図２−３（Ａ）及び（Ｂ）を参照して、この発明のデータ転送方法におけるリード処理時のホスト及びデバイスの動作の概要につき説明する。なお、図２−１、図２−２（Ａ）及び（Ｂ）、並びに、図２−３（Ａ）及び（Ｂ）は、それぞれ、リード処理時のこの発明のデータ転送方法の概要を示す図である。
【００６７】
図２−１は、リード処理時において、ホストとデバイスとの間で転送されるデータの一例を示している。
【００６８】
図２−１に示すように、この発明のデータ転送方法におけるリード処理は、従来のデータ転送方法（図９−１参照）におけるリード処理と同様に、コマンド転送ステージ、データ転送ステージ、ステータス転送ステージ等の工程を経て行われる。
【００６９】
リード処理では、ホストは、コマンド転送ステージで、ＲＥＡＤ拡張コマンドをデバイスに送信する。このＲＥＡＤ拡張コマンドは、図１に示すフォーマットに対して、０バイト目の命令コード領域に、命令コード「ＲＥＡＤ」が挿入され、１バイト目の０〜４ビット目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入され、２〜８バイト目のＬＢＡ領域及び転送長領域に、一番目にリードすべきデータに関するパラメータ、すなわち、一番目にリードすべきデータが格納されているセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入され、さらに、１０バイト目以降に、（Ｐ−１）個の追加パラメータ、すなわち、二番目以降にリードすべき１乃至複数のデータが格納されているセクタ領域を指定する１乃至複数のＬＢＡの先頭アドレス及び転送長データが追加された構成となっている。なお、ホストからＲＥＡＤ拡張コマンドを受信したデバイスは、コマンドの受信に応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。図２−１に示す例では、デバイスは、ＡＣＫ応答をホストに送信している。
【００７０】
また、リード処理では、デバイスは、データ転送ステージで、リードすべき全てのリードデータを一括してホストに連続送信する。なお、デバイスから全てのリードデータを連続受信したホストは、データの連続受信に応答して、ＡＣＫ応答またはＮＡＫ応答をデバイスに送信する。図２−１に示す例では、ホストは、ＡＣＫ応答をデバイスに送信している。
【００７１】
また、リード処理では、デバイスは、リードすべき全てのリードデータを一括してホストに連続送信した後に、ステータス転送ステージで、ステータスをホストに送信する。なお、デバイスからステータスを受信したホストは、ステータスの受信に対応するＡＣＫ応答またはＮＡＫ応答をデバイスに送信する。図２−１に示す例では、ホストは、ＡＣＫ応答をデバイスに送信している。
【００７２】
図２−２（Ａ）は、ＲＥＡＤ拡張コマンドの具体例を示しており、図２−２（Ｂ）は、図２−２（Ａ）に示す１個のＲＥＡＤ拡張コマンドによって指定された各セクタ領域を示している。
【００７３】
図２−２（Ａ）に示すように、リード処理時において、ホストは、リードすべき複数のデータが格納されている各セクタ領域を一括して指定する１個のＲＥＡＤ拡張コマンドを生成して、生成した１個のＲＥＡＤ拡張コマンドをデバイスに送信する。なお、このとき、ホストは、上述のＦＡＴ情報に基づいて、リードすべき複数のデータが格納されている各セクタ領域を特定し、これら各セクタ領域を一括して指定する１個のＲＥＡＤ拡張コマンドを生成する。
【００７４】
このＲＥＡＤ拡張コマンドは、上述の通り、従来のＲＥＡＤコマンドと同様に、１バイト目の命令コード領域に、命令コード「ＲＥＡＤ」が挿入され、２〜８バイト目のＬＢＡ領域及び転送長領域に、一番目にリードすべきデータに関するパラメータ、すなわち、一番目にリードすべきデータが格納されているセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入された構成となっている（図１参照）。そして、このＲＥＡＤ拡張コマンドは、例えば、１バイト目の０〜４ビット目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入され、さらに、１０バイト目以降に、二番目以降にリードすべきデータに関する（Ｐ−１）個の追加パラメータ、すなわち、二番目以降にリードすべきデータが格納されている各セクタ領域を指定する、（Ｐ−１）個のＬＢＡの先頭アドレス及び転送長データが追加された構成となっている（図１参照）。
【００７５】
図２−２（Ａ）に示す例では、ホストは、ＬＢＡの先頭アドレスを「０」とし、転送長を「２」とするセクタ領域、ＬＢＡの先頭アドレスを「４」とし、転送長を「１」とするセクタ領域、ＬＢＡの先頭アドレスを「７」とし、転送長を「２」とするセクタ領域、…、ＬＢＡの先頭アドレスを「９８」とし、転送長を「１」とするセクタ領域を指定するＲＥＡＤ拡張コマンドを生成して、当該ＲＥＡＤ拡張コマンドをデバイスに送信している。なお、ここでは、ＬＢＡの先頭アドレスを「０」とし、転送長を「２」とするセクタ領域に格納されているデータが、一番目にリードすべきデータとなる。また、ＬＢＡの先頭アドレスを「４」とし、転送長を「１」とするセクタ領域に格納されているデータ、ＬＢＡの先頭アドレスを「７」とし、転送長を「２」とするセクタ領域に格納されているデータ、…、及び、ＬＢＡの先頭アドレスを「９８」とし、転送長を「１」とするセクタ領域に格納されているデータが、それぞれ、二番目以降にリードすべきデータとなる。
【００７６】
デバイスは、ホストからＲＥＡＤ拡張コマンドを受信すると、これに応答して、ＲＥＡＤ拡張コマンドによって指定された各セクタ領域（図２−２（Ｂ）参照）に格納されている全てのデータを一括してホストに連続送信する。これによって、ホストは、デバイスからデータをリードする。
【００７７】
なお、デバイスが拡張コマンドに未対応の装置である場合に、ホスト及びデバイスの動作フローは、以下の通りとなる。
【００７８】
図２−３（Ａ）及び（Ｂ）は、それぞれ、デバイスが拡張コマンドに未対応の装置である場合の動作フローを示している。図２−３（Ａ）は、デバイスがホストから受信した拡張コマンドを解読できなかった場合の動作フローを示しており、図２−３（Ｂ）は、デバイスがホストから受信した拡張コマンドを従来通りのＳＣＳＩコマンドとして解読した場合の動作フローを示している。
【００７９】
図２−３（Ａ）に示すように、リード処理時において、デバイスは、ホストから受信したＲＥＡＤ拡張コマンドを解読できなかった場合に、ＳＴＡＬＬ応答をホストに送信する。なお、「ＳＴＡＬＬ応答」とは、機能停止応答を意味している。ＳＴＡＬＬ応答は、例えば、受信側が送信側から送信されたデータを解読できなかった場合に送信される。
【００８０】
デバイスからＳＴＡＬＬ応答を受信したホストは、リセット信号をデバイスに送信し、さらに、続けて、従来通りのＳＣＳＩコマンドをデバイスに送信する。デバイスは、ホストから従来通りのＳＣＳＩコマンドを受信すると、これに応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。これにより、ホストとデバイスは、従来通りのデータ転送方法で、データの転送を行う。以下の動作は、従来のデータ転送方法の動作と同様である。
【００８１】
また、図２−３（Ｂ）に示すように、リード処理時において、デバイスは、ホストから受信した拡張コマンドを従来通りのＳＣＳＩコマンドとして解読した場合に、ＳＣＳＩコマンドに対するＡＣＫ応答をホストに送信する。この後、デバイスは、ＲＥＡＤ拡張コマンドの２〜８バイト目に記述されたパラメータに対応して、当該ＲＥＡＤ拡張コマンドの２〜８バイト目に記述されたパラメータによって指定されたセクタ領域から一番目にリードすべきデータを読み出してホストに送信する。次に、デバイスは、その後のホストからのＩＮパケットに対しては、コマンドが解読できていないため、ＮＡＫ応答をホストに送信する。
【００８２】
デバイスからＮＡＫ応答を予め定められた時間以上受信したホストは、リセット信号をデバイスに送信し、さらに、続けて、従来通りのＳＣＳＩコマンドをデバイスに送信する。デバイスは、ホストから従来通りのＳＣＳＩコマンドを受信すると、これに応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。これにより、ホストとデバイスは、従来通りのデータ転送方法で、データの転送を行う。以下の動作は、従来のデータ転送方法の動作と同様である。
【００８３】
リード処理時のこの発明のデータ転送方法の動作の概要は、以上の通りである。
【００８４】
リード処理時のこの発明のデータ転送方法では、ホストは、ＲＥＡＤ拡張コマンドをデバイス側に送信した後、予め定められた時間以内に、デバイス側からＲＥＡＤ拡張コマンドに対する正しい応答を受信した場合に、デバイス側が拡張コマンドに対応していると判定して、以降のデータ転送処理では、拡張コマンドをデバイスに送信する。なお、デバイスがＲＥＡＤ拡張コマンドに対する正しい応答を送信した場合とは、デバイスがＲＥＡＤ拡張コマンドの１バイト目の０〜４ビット目に記述された要求ＬＢＡ数データによって指定されたサイズ分のデータ（以下、「要求ＬＢＡ数サイズ分のデータ」と称する場合もある）を送信した場合である。
【００８５】
他方、ホストは、ＲＥＡＤ拡張コマンドをデバイス側に送信した後、予め定められた時間以内に、デバイス側からＲＥＡＤ拡張コマンドに対する正しい応答を受信しなかった場合に、デバイス側が拡張コマンドに対応していないと判定して、以降のデータ転送処理では、従来のＳＣＳＩコマンドをデバイスに送信する。なお、デバイスがＲＥＡＤ拡張コマンドに対する正しい応答を送信しなかった場合とは、デバイスがＲＥＡＤ拡張コマンドの１バイト目の０〜４ビット目に記述された要求ＬＢＡ数サイズ分のデータを送信しなかった場合である。このような場合としては、デバイスが上述のＳＴＡＬＬ応答を送信した場合や、デバイスが拡張コマンドの２〜８バイト目に記述されたパラメータによって指定されたデータのみを送信し、ＲＥＡＤ拡張コマンドの１０バイト目以降に記述された追加パラメータによって指定されたデータを送信しなかった場合、すなわち、ホストのＩＮパケットに対して、上述のＮＡＫ応答を送信した場合等がある。
【００８６】
この発明のデータ転送方法では、ホストは、リード処理時に、以上のように動作することにより、ＲＥＡＤ拡張コマンドの送信機会を増やしている。
【００８７】
そのため、この方法によれば、これによっても、デバイスに確実にリード処理を実行させながら、ホストからデバイスに送信されるコマンドの送信量を、従来のデータ転送方法よりも減らすことができ、その結果、データの転送速度を、従来のデータ転送方法よりも高速化させることができる。
【００８８】
（ホスト側の動作）
以下、図３を参照して、この発明のデータ転送方法におけるリード処理時のホスト側の動作につき詳述する。なお、図３は、リード処理時のホスト側の動作を示すフローチャートである。
【００８９】
図３に示すように、この発明のデータ転送方法では、リード処理時において、ホストは、まず、ＲＥＡＤ拡張コマンドをデバイスに送信する（Ｓ１１０）。
【００９０】
Ｓ１１０の後、ホストは、ＲＥＡＤ拡張コマンドを送信してから予め定められた時間以内に、デバイスからＲＥＡＤ拡張コマンドに対する応答を受信する（Ｓ１２０）。このとき、ホストは、デバイスがＲＥＡＤ拡張コマンドの受信に成功していた場合に、デバイスからＡＣＫ応答を受信し、デバイスがＲＥＡＤ拡張コマンドの解読に失敗していた場合に、デバイスからＳＴＡＬＬ応答を受信する。
【００９１】
ホストは、デバイスから応答を受信すると、これに応答して、受信した応答がＡＣＫ応答か否かを判定する（Ｓ１３０）。
【００９２】
Ｓ１３０の判定で、“イエス（Ｙｅｓ）”と判定された場合に、すなわち、Ｓ１２０で受信した応答がＡＣＫ応答であると判定された場合に、ホストは、デバイスからリードデータを連続して受信する（Ｓ１４０）。このとき、ホストは、デバイスが支障なくリードデータを送信できなかった場合に、デバイスからＮＡＫ応答を受信することになる。なお、「デバイスが支障なくリードデータを送信できなかった場合」とは、後述の図４におけるＳ３４０またはＳ３５０で“ノー（Ｎｏ）”と判定された後、後述のＳ４６０でＮＡＫ応答が送信された場合を意味している。
【００９３】
Ｓ１４０の後、ホストは、Ｓ１４０で受信したデータがＲＥＡＤ拡張コマンドによって指定されたデータか否かを判定する（Ｓ１５０）。なお、このＳ１５０の判定では、ホストは、Ｓ１４０でリードデータを連続して受信できずにＮＡＫ応答を受信した場合に、“ノー”と判定する。
【００９４】
Ｓ１５０の判定で、“イエス”と判定された場合に、すなわち、Ｓ１４０で受信したデータが拡張コマンドによって指定されたデータであると判定された場合に、ホストは、Ｓ１４０で受信したデータが拡張コマンドによって指定された要求ＬＢＡ数サイズ分のデータか否かを判定する（Ｓ１６０）。
【００９５】
Ｓ１６０の判定で、“イエス”と判定された場合に、すなわち、Ｓ１４０で受信したデータが要求ＬＢＡ数サイズ分のデータであると判定された場合に、ホストは、デバイスへＡＣＫ応答を送信し（Ｓ１７０）、デバイスからステータスを受信する（Ｓ１８０）。そして、ホストは、以降のデータ転送処理に拡張コマンドを使用することを決定する（Ｓ１９０）。
【００９６】
他方、Ｓ１３０の判定で、“ノー”と判定された場合に、すなわち、Ｓ１２０で受信した応答がＡＣＫ応答でないと判定された場合に、または、Ｓ１５０の判定で、“ノー”と判定された場合に、すなわち、Ｓ１４０で受信したデータがＲＥＡＤ拡張コマンドによって指定されたデータでないと判定された場合に、または、Ｓ１６０の判定で、“ノー”と判定された場合に、すなわち、Ｓ１４０で受信したデータが要求ＬＢＡ数サイズ分のデータでないと判定された場合に、ホストは、リセット信号をデバイスに送信し（Ｓ２００）、さらに、以降のデータ転送処理に従来のＳＣＳＩコマンドを使用することを決定する（Ｓ２１０）。
【００９７】
Ｓ１９０の後、または、Ｓ２１０の後、ホストは、リード処理を終了する。
【００９８】
（デバイス側の動作）
以下、図４を参照して、この発明のデータ転送方法におけるリード処理時のデバイス側の動作につき詳述する。なお、図４は、リード処理時のデバイス側の動作を示すフローチャートである。
【００９９】
図４に示すように、この発明のデータ転送方法では、リード処理時において、デバイスは、ホストからコマンドを受信する（Ｓ３１０）。
【０１００】
Ｓ３１０の後、デバイスは、Ｓ３１０で受信したコマンドが解読可能か否かを判定する（Ｓ３２０）。
【０１０１】
Ｓ３２０の判定で、“イエス”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドが解読可能であると判定された場合に、デバイスは、Ｓ３１０で受信したコマンドの命令コードを識別し、さらに、Ｓ３１０で受信したコマンドが拡張コマンドか否かを判定する（Ｓ３３０）。
【０１０２】
Ｓ３３０の判定で、“イエス”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドが拡張コマンド（ここでは、ＲＥＡＤ拡張コマンド）であると判定された場合に、デバイスは、Ｓ３１０で受信したコマンドの１バイト目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入されているか否かを判定する（Ｓ３４０）。この判定は、例えば、１バイト目の０〜４ビット目に、１以上の値が挿入されているか否かを識別することによって行われる。
【０１０３】
Ｓ３４０の判定で、“イエス”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドの１バイト目の予備領域に、要求ＬＢＡ数データが挿入されていると判定された場合に、デバイスは、Ｓ３１０で受信したコマンドの受信サイズが拡張コマンドの要求ＬＢＡ数データに対応しているか否かを判定する（Ｓ３５０）。すなわち、デバイスは、拡張コマンドのＳＣＳＩコマンド部分の先頭アドレス及び転送長データのサイズと追加パラメータのＬＢＡの先頭アドレス及び転送長データのサイズの合計と、拡張コマンドの要求ＬＢＡ数データによって指定されたサイズとを比較して、一致しているか否かを判定する。なお、「ＳＣＳＩコマンド部分」とは、図１に示す例では、拡張コマンドの０〜９バイト目の領域となっている。
【０１０４】
Ｓ３５０の判定で、“イエス”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドの受信サイズが拡張コマンドの要求ＬＢＡ数データに対応していると判定された場合に、デバイスは、ＡＣＫ応答をホストに送信する（Ｓ３６０）。
【０１０５】
Ｓ３６０の後、デバイスは、拡張コマンドに対応するデータ転送、すなわち、要求ＬＢＡ数サイズ分のデータの連続送信を行う（Ｓ３７０）。このとき、デバイスは、拡張コマンドによって指定された全てのデータを該当のセクタ領域から読み出し、読み出した全てのデータを一括してホストに連続送信する。この後、デバイスの動作フローは、Ｓ４７０に進む。
【０１０６】
他方、Ｓ３２０の判定で、“ノー”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドが解読可能でないと判定された場合に、デバイスは、ＳＴＡＬＬ応答をホストに送信する（Ｓ３８０）。Ｓ３８０の後、デバイスは、待機状態となり、ホストからリセット信号が送信されるのを待つ。そして、デバイスは、ホストからリセット信号を受信する（Ｓ３９０）と、再び、起動状態となる。このとき、デバイスの動作フローは、Ｓ３１０に戻る。そして、デバイスは、ホストから新たなコマンドが送信されるのを待つことになる。
【０１０７】
また、Ｓ３３０の判定で、“ノー”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドが拡張コマンドでないと判定された場合に、デバイスは、ＡＣＫ応答を送信する（Ｓ４１０）。この後、デバイスの動作フローは、Ｓ４４０に進む。
【０１０８】
また、Ｓ３４０の判定で、“ノー”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドの１バイト目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入されていないと判定された場合に、デバイスは、ＡＣＫ応答をホストに送信する（Ｓ４２０）。この後、デバイスの動作フローは、Ｓ４４０に進む。
【０１０９】
また、Ｓ３５０の判定で、“ノー”と判定された場合に、すなわち、Ｓ３１０で受信したコマンドの受信サイズが拡張コマンドの要求ＬＢＡ数データに対応していないと判定された場合に、デバイスは、ＡＣＫ応答をホストに送信する（Ｓ４３０）。この後、デバイスの動作フローは、Ｓ４４０に進む。
【０１１０】
Ｓ４１０の後、または、Ｓ４２０の後、または、Ｓ４３０の後、デバイスは、従来通りのデータ転送を行う（Ｓ４４０）。すなわち、デバイスは、受信コマンドのＳＣＳＩコマンド部分によって指定されたデータを格納領域から読み出し、読み出したデータをホストに送信する。Ｓ４４０の後、デバイスは、ホストからデータ転送に対する応答が送信されるのを待つことになる。このとき、デバイスは、ホストからＩＮパケットを受信したか否かを監視しながら（Ｓ４５０）、ホストからデータ転送に対する応答が送信されるのを待つ。なお、デバイスは、Ｓ４５０の監視で“イエス”と判定された場合に、すなわち、ホストからデータ転送に対する応答が送信されるまでの間に、ホストからＩＮパケットを受信した場合に、ＮＡＫ応答をホストへ送信する（Ｓ５００）。この場合、デバイスの動作フローは、Ｓ４５０に戻る。そして、デバイスは、再び、ホストからＩＮパケットを受信したか否かを監視しながら、ホストからデータ転送に対する応答が送信されるのを待つ。
【０１１１】
Ｓ３７０の後、または、Ｓ４６０の後、デバイスは、ホストからデータ転送に対する応答を受信する（Ｓ４７０）。このとき、デバイスは、デバイスがリードデータを正しく送信していた場合に、ホストからＡＣＫ応答を受信し、デバイスがリードデータを正しく送信していなかった場合に、ホストからＮＡＫ応答またはリセット信号を受信することになる。
【０１１２】
Ｓ４７０の後、デバイスは、Ｓ４７０で受信した応答がＡＣＫ応答か否かを判定する（Ｓ４８０）。
【０１１３】
Ｓ４８０の判定で、“イエス”と判定された場合に、すなわち、Ｓ４７０で受信した応答がＡＣＫ応答であると判定された場合に、デバイスは、ステータスを送信する（Ｓ４９０）。
【０１１４】
Ｓ４９０の後、デバイスは、ホストからステータスに対する応答を受信する（Ｓ５００）。
【０１１５】
そして、デバイスは、リード処理を終了する。
【０１１６】
他方、Ｓ４８０の判定で、“ノー”と判定された場合に、すなわち、Ｓ４７０で受信した応答がＡＣＫ応答でないと判定された場合に、デバイスの動作フローは、Ｓ３１０に戻る。そして、デバイスは、ホストから新たなコマンドが送信されるのを待つことになる。
【０１１７】
（効果）
以下に、従来のデータ転送方法のリード処理に要する時間とこの発明のデータ転送方法のリード処理に要する時間とを比較して、この発明のデータ転送方法の効果を説明する。
【０１１８】
なお、ここでは、以下の（ａ）〜（ｅ）の条件を前提条件とするものとして説明する。
【０１１９】
（ａ）リードデータサイズを１Ｇ（ギガ）バイトとする。
【０１２０】
（ｂ）１セクタサイズを５１２バイトとする。
【０１２１】
（ｃ）連続して記録されているセクタは、ないものとする。なお、転送長は、全て１とする。
【０１２２】
（ｄ）この発明のデータ転送方法において、拡張コマンドで１度に転送するＬＢＡは、最大３２個とする。
【０１２３】
（ｅ）従来のデータ転送方法において、ＲＥＡＤコマンドの一回の処理時間は、１．５ｍｓとする。また、この発明のデータ転送方法において、ＲＥＡＤ拡張コマンドの一回の処理時間は、１．６ｍｓとする。
【０１２４】
以上の前提条件において、従来のデータ転送方法では、ＲＥＡＤコマンドの送信回数は、（１０２４×１０２４×１０２４）／５１２＝２０９７１５２回となる。
【０１２５】
したがって、従来のデータ転送方法では、データの転送時間は、１．５ｍｓ×２０９７１５２回＝３１４５７２８ｍｓとなる。
【０１２６】
これに対し、この発明のデータ転送方法では、ＲＥＡＤ拡張コマンドの送信回数は、（（１０２４×１０２４×１０２４）／５１２）／３２＝６５５３６回となる。
【０１２７】
したがって、この発明のデータ転送方法では、データの転送時間は、１．６ｍｓ×６５５３６回＝１０４８５８ｍｓとなる。
【０１２８】
よって、上述の前提条件において、この発明のデータ転送方法は、従来のデータ転送方法よりも、約３０００秒高速となっており、効果が有効であることが分かる。
【０１２９】
この発明のデータ転送方法は、ＲＥＡＤ拡張コマンドの送信回数が多ければ多いほど、高速化することができ、効果が有効である。
【０１３０】
また、この発明のデータ転送方法は、ＵＳＢ２．０の規格を維持しており、従来のデータ転送方法と互換性を保っている。そのため、この発明のデータ転送方法は、ホスト及びデバイスのどちらか一方が拡張コマンドに未対応であっても、拡張コマンドを従来のＳＣＳＩコマンドとして処理する。そのため、この発明のデータ転送方法は、ホスト及びデバイスのどちらか一方が拡張コマンドに未対応であっても、問題を生じることなく、データ転送を行うことができる。
【０１３１】
以上の通り、この発明のデータ転送方法では、ホストが、ＵＳＢストレージデバイスヘのデバイスアクセスに使用するＳＣＳＩコマンドを拡張して、一回のコマンド送信で、複数個のパラメータを同時に転送する。
【０１３２】
これにより、この発明のデータ転送方法は、ＵＳＢ２．０の規格を維持したまま、一回のコマンド送信で、転送すべき複数のデータを指定することができる。そのため、この発明のデータ転送方法は、ホストとデバイス間のコマンドの送信回数が、従来のデータ転送方法よりも格段に減少する。したがって、この発明のデータ転送方法によれば、ホストからデバイスに送信されるコマンドの送信量を、従来のデータ転送方法よりも減らすことができ、その結果、データの転送速度を、従来のデータ転送方法よりも高速化させることができる。
【０１３３】
＜ライト処理時のデータ転送方法＞
（データ転送方法の概要）
以下、図５−１、図５−２（Ａ）及び（Ｂ）、並びに、図５−３（Ａ）及び（Ｂ）を参照して、この発明のデータ転送方法におけるライト処理時のホスト及びデバイスの動作の概要につき説明する。なお、図５−１、図５−２（Ａ）及び（Ｂ）、並びに、図５−３（Ａ）及び（Ｂ）は、それぞれ、ライト処理時のこの発明のデータ転送方法の概要を示す図である。
【０１３４】
図５−１は、ライト処理時において、ホストとデバイスとの間で転送されるデータの一例を示している。
【０１３５】
図５−１に示すように、この発明のデータ転送方法におけるライト処理は、従来のデータ転送方法（図１０−１参照）におけるライト処理と同様に、コマンド転送ステージ、データ転送ステージ、ステータス転送ステージ等の工程を経て行われる。
【０１３６】
ライト処理では、ホストは、コマンド転送ステージで、ＷＲＩＴＥ拡張コマンドをデバイスに送信する。このＷＲＩＴＥ拡張コマンドは、図１に示すフォーマットに対して、０バイト目の命令コード領域に、命令コード「ＷＲＩＴＥ」が挿入され、１バイト目の０〜４ビット目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入され、２〜８バイト目のＬＢＡ領域及び転送長領域に、一番目にライトすべきデータに関するパラメータ、すなわち、一番目にライトすべきデータが格納されているセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入され、さらに、１０バイト目以降に、（Ｐ−１）個の追加パラメータ、すなわち、二番目以降にライトすべき１乃至複数のデータが格納されているセクタ領域を指定する１乃至複数のＬＢＡの先頭アドレス及び転送長データが追加された構成となっている。なお、ホストからＷＲＩＴＥ拡張コマンドを受信したデバイスは、コマンドの受信に応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。図５−１に示す例では、デバイスは、ＡＣＫ応答をホストに送信している。
【０１３７】
また、ライト処理では、ホストは、データ転送ステージで、ライトすべき全てのライトデータを一括してデバイスに連続送信する。なお、ホストから全てのライトデータを連続受信したデバイスは、データの連続受信に応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。図５−１に示す例では、デバイスは、ＡＣＫ応答をホストに送信している。
【０１３８】
また、ライト処理では、デバイスは、ホストからライトすべき全てのライトデータを一括して連続受信した後に、ステータス転送ステージで、ステータスをホストに送信する。なお、デバイスからステータスを受信したホストは、ステータスの受信に対応するＡＣＫ応答またはＮＡＫ応答をデバイスに送信する。図５−１に示す例では、ホストは、ＡＣＫ応答をデバイスに送信している。
【０１３９】
図５−２（Ａ）は、ＷＲＩＴＥ拡張コマンドの具体例を示しており、図５−２（Ｂ）は、図５−２（Ａ）に示す１個のＷＲＩＴＥ拡張コマンドによって指定された各セクタ領域を示している。
【０１４０】
図５−２（Ａ）に示すように、ライト処理時において、ホストは、ライトすべき複数のデータが格納されている各セクタ領域を一括して指定する１個のＷＲＩＴＥ拡張コマンドを生成して、生成した１個のＷＲＩＴＥ拡張コマンドをデバイスに送信する。なお、このとき、ホストは、上述のＦＡＴ情報に基づいて、ライトすべき複数のデータが格納されている各セクタ領域を特定し、これら各セクタ領域を一括して指定する１個のＷＲＩＴＥ拡張コマンドを生成する。
【０１４１】
このＷＲＩＴＥ拡張コマンドは、上述の通り、従来のＷＲＩＴＥコマンドと同様に、１バイト目の命令コード領域に、命令コード「ＷＲＩＴＥ」が挿入され、２〜８バイト目のＬＢＡ領域及び転送長領域に、一番目にライトすべきデータに関するパラメータ、すなわち、一番目にライトすべきデータが格納されているセクタ領域を指定するＬＢＡの先頭アドレス及び転送長データが挿入された構成となっている（図１参照）。そして、このＷＲＩＴＥ拡張コマンドは、例えば、１バイト目の０〜４ビット目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入され、さらに、１０バイト目以降に、二番目以降にライトすべきデータに関する（Ｐ−１）個の追加パラメータ、すなわち、二番目以降にライトすべきデータが格納されている各セクタ領域を指定する、（Ｐ−１）個のＬＢＡの先頭アドレス及び転送長データが追加された構成となっている（図１参照）。
【０１４２】
図５−２（Ａ）に示す例では、ホストは、ＬＢＡの先頭アドレスを「０」とし、転送長を「２」とするセクタ領域、ＬＢＡの先頭アドレスを「４」とし、転送長を「１」とするセクタ領域、ＬＢＡの先頭アドレスを「７」とし、転送長を「２」とするセクタ領域、…、ＬＢＡの先頭アドレスを「９８」とし、転送長を「１」とするセクタ領域を指定するＷＲＩＴＥ拡張コマンドを生成して、当該ＷＲＩＴＥ拡張コマンドをデバイスに送信している。なお、ここでは、ＬＢＡの先頭アドレスを「０」とし、転送長を「２」とするセクタ領域に格納されているデータが、一番目にライトすべきデータとなる。また、ＬＢＡの先頭アドレスを「４」とし、転送長を「１」とするセクタ領域に格納されているデータ、ＬＢＡの先頭アドレスを「７」とし、転送長を「２」とするセクタ領域に格納されているデータ、…、及び、ＬＢＡの先頭アドレスを「９８」とし、転送長を「１」とするセクタ領域に格納されているデータが、それぞれ、二番目以降にライトすべきデータとなる。
【０１４３】
デバイスは、ホストからＷＲＩＴＥ拡張コマンドを受信すると、これに応答して、ＷＲＩＴＥ拡張コマンドに対するＡＣＫ応答またはＮＡＫ応答を送信する（図５−１参照）。
【０１４４】
ホストは、デバイスからＷＲＩＴＥ拡張コマンドに対する応答としてＡＣＫ応答を受信すると、これに応答して、ライトすべき全てのデータを一括してデバイスに連続送信する。これによって、ホストは、データをデバイスにライトする。
【０１４５】
なお、デバイスが拡張コマンドに未対応の装置である場合に、ホスト及びデバイスの動作フローは、以下の通りとなる。
【０１４６】
図５−３（Ａ）及び（Ｂ）は、それぞれ、デバイスが拡張コマンドに未対応の装置である場合の動作フローを示している。図５−３（Ａ）は、デバイスがホストから受信した拡張コマンドを解読できなかった場合の動作フローを示しており、図５−３（Ｂ）は、デバイスがホストから受信した拡張コマンドを従来通りのＳＣＳＩコマンドとして解読した場合の動作フローを示している。
【０１４７】
図５−３（Ａ）に示すように、ライト処理時において、デバイスは、ホストから受信したＷＲＩＴＥ拡張コマンドを解読できなかった場合に、ＳＴＡＬＬ応答をホストに送信する。
【０１４８】
デバイスからＳＴＡＬＬ応答を受信したホストは、リセット信号をデバイスに送信し、さらに、続けて、従来通りのＳＣＳＩコマンドをデバイスに送信する。デバイスは、ホストから従来通りのＳＣＳＩコマンドを受信すると、これに応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。これにより、ホストとデバイスは、従来通りのデータ転送方法で、データの転送を行う。以下の動作は、従来のデータ転送方法の動作と同様である。
【０１４９】
また、図５−３（Ｂ）に示すように、ライト処理時において、デバイスは、ホストから受信した拡張コマンドを従来通りのＳＣＳＩコマンドとして解読した場合に、コマンドに対するＡＣＫ応答をホストに送信する。そして、デバイスは、ホストからライトすべきＰ個のデータが一括して連続送信されると、これらを受信する。デバイスは、ホストからライトすべきＰ個のデータを受信すると、これに応答して、まず、一番目にライトすべきデータに対応して、当該一番目にライトすべきデータをＷＲＩＴＥ拡張コマンドの２〜８バイト目に記述されたパラメータによって指定されたセクタ領域に格納するとともに、ＡＣＫ応答をホストに送信する。次に、デバイスは、二番目以降にライトすべきデータに対しては、コマンドが解読できていないため、ＳＴＡＬＬ応答をホストに送信する。
【０１５０】
デバイスからＳＴＡＬＬ応答を受信したホストは、リセット信号をデバイスに送信し、さらに、続けて、従来通りのＳＣＳＩコマンドをデバイスに送信する。デバイスは、ホストから従来通りのＳＣＳＩコマンドを受信すると、これに応答して、ＡＣＫ応答またはＮＡＫ応答をホストに送信する。これにより、ホストとデバイスは、従来通りのデータ転送方法で、データの転送を行う。以下の動作は、従来のデータ転送方法の動作と同様である。
【０１５１】
ライト処理時のこの発明のデータ転送方法の動作の概要は、以上の通りである。
【０１５２】
ライト処理時のこの発明のデータ転送方法では、ホストは、ＷＲＩＴＥ拡張コマンドをデバイス側に送信した後、予め定められた時間以内に、デバイス側からＷＲＩＴＥ拡張コマンドに対する正しい応答を受信した場合に、デバイス側が拡張コマンドに対応していると判定して、以降のデータ転送処理では、拡張コマンドをデバイスに送信する。なお、デバイスがＷＲＩＴＥ拡張コマンドに対する正しい応答を送信した場合とは、デバイスがホストから送信されたライトすべき全てのデータに対応して、ＡＣＫ応答を送信した場合、すなわち、デバイスがホストから送信されたライトすべき全てのデータをＷＲＩＴＥ拡張コマンドによって指定された各セクタ領域に格納した場合である。
【０１５３】
他方、ホストは、ＷＲＩＴＥ拡張コマンドをデバイス側に送信した後、予め定められた時間以内に、デバイス側からＷＲＩＴＥ拡張コマンドに対する正しい応答を受信しなかった場合に、デバイス側が拡張コマンドに対応していないと判定して、以降のデータ転送処理では、従来のＳＣＳＩコマンドをデバイスに送信する。なお、デバイスがＷＲＩＴＥ拡張コマンドに対する正しい応答を送信しなかった場合とは、デバイスがホストから送信されたライトすべき全てのデータをＷＲＩＴＥ拡張コマンドによって指定された各セクタ領域に格納しなかった場合である。このような場合としては、デバイスが上述のＳＴＡＬＬ応答を送信した場合や、デバイスがＷＲＩＴＥ拡張コマンドの２〜８バイト目に記述されたパラメータによって指定されたデータのみを格納し、ＷＲＩＴＥ拡張コマンドの１０バイト目以降に記述された追加パラメータによって指定されたデータを格納しなかった場合、すなわち、ＷＲＩＴＥ拡張コマンドの２〜８バイト目に記述されたパラメータに対応してのみ、ＡＣＫ応答を送信し、１０バイト目以降に記述された追加パラメータに対応したデータに対してＳＴＡＬＬ応答を送信した場合等がある。
【０１５４】
この発明のデータ転送方法では、ホストは、ライト処理時に、以上のように動作することにより、ＷＲＩＴＥ拡張コマンドの送信機会を増やしている。
【０１５５】
そのため、この方法によれば、これによっても、デバイスに確実にライト処理を実行させながら、ホストからデバイスに送信されるコマンドの送信量を、従来のデータ転送方法よりも減らすことができ、その結果、データの転送速度を、従来のデータ転送方法よりも高速化させることができる。
【０１５６】
（ホスト側の動作）
以下、図６を参照して、この発明のデータ転送方法におけるライト処理時のホスト側の動作につき詳述する。なお、図６は、ライト処理時のホスト側の動作を示すフローチャートである。
【０１５７】
図６に示すように、この発明のデータ転送方法では、ライト処理時において、ホストは、まず、ＷＲＩＴＥ拡張コマンドをデバイスに送信する（Ｓ６１０）。
【０１５８】
Ｓ６１０の後、ホストは、ＷＲＩＴＥ拡張コマンドを送信してから予め定められた時間以内に、デバイスからＷＲＩＴＥ拡張コマンドに対する応答を受信する（Ｓ６２０）。このとき、ホストは、デバイスがＷＲＩＴＥ拡張コマンドの解読に成功していた場合に、デバイスからＡＣＫ応答を受信し、デバイスがＷＲＩＴＥ拡張コマンドの解読に失敗していた場合に、デバイスからＳＴＡＬＬ応答を受信する。
【０１５９】
ホストは、デバイスから応答を受信すると、受信した応答がＡＣＫ応答か否かを判定する（Ｓ６３０）。
【０１６０】
Ｓ６３０の判定で、“イエス”と判定された場合に、すなわち、Ｓ６２０で受信した応答がＡＣＫ応答であると判定された場合に、ホストは、ＷＲＩＴＥ拡張コマンドに対応するデータ転送、すなわち、ＷＲＩＴＥ拡張コマンドの１バイト目の０〜４ビット目に記述された要求ＬＢＡ数サイズ分のライトすべき全てのデータを一括してデバイスに連続送信する（Ｓ６４０）。この後、ホストは、待機状態となり、デバイスからデータ転送に対する応答が送信されるのを待つ。このとき、ホストは、デバイスが支障なくライトデータを受信できた場合に、デバイスからＡＣＫ応答を受信し、デバイスが支障なくライトデータを受信できなかった場合に、デバイスからＳＴＡＬＬ応答を受信することになる。なお、「デバイスが支障なくライトデータを受信できなかった場合」とは、後述の図７におけるＳ７８０またはＳ７９０で“ノー”と判定された場合を意味している。
【０１６１】
ホストは、デバイスからデータ転送に対する応答を受信する（Ｓ６５０）。
【０１６２】
Ｓ６５０の後、ホストは、Ｓ６５０でデバイスから受信した応答がＡＣＫ応答か否かを判定する（Ｓ６６０）。
【０１６３】
Ｓ６６０の判定で、“イエス”と判定された場合に、すなわち、Ｓ６５０で受信した応答がＡＣＫ応答であると判定された場合に、ホストは、以降のデータ転送処理に拡張コマンドを使用することを決定する（Ｓ６７０）。
【０１６４】
他方、Ｓ６３０の判定で、“ノー”と判定された場合に、すなわち、Ｓ６２０で受信した応答がＡＣＫ応答でないと判定された場合に、または、Ｓ６６０の判定で、“ノー”と判定された場合に、すなわち、Ｓ６５０で受信した応答がＡＣＫ応答でないと判定された場合に、ホストは、リセット信号をデバイスに送信し（Ｓ６８０）、さらに、以降のデータ転送処理に従来のＳＣＳＩコマンドを使用することを決定する（Ｓ６９０）。
【０１６５】
Ｓ６７０の後、または、Ｓ６９０の後、ホストは、ライト処理を終了する。
【０１６６】
（デバイス側の動作）
以下、図７を参照して、この発明のデータ転送方法におけるライト処理時のデバイス側の動作につき詳述する。なお、図７は、ライト処理時のデバイス側の動作を示すフローチャートである。
【０１６７】
図７に示すように、この発明のデータ転送方法では、ライト処理時において、デバイスは、ホストからコマンドを受信する（Ｓ７１０）。
【０１６８】
Ｓ７１０の後、デバイスは、Ｓ７１０で受信したコマンドが解読可能か否かを判定する（Ｓ７２０）。
【０１６９】
Ｓ７２０の判定で、“イエス”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドが解読可能であると判定された場合に、デバイスは、Ｓ７１０で受信したコマンドの命令コードを識別し、さらに、Ｓ７１０で受信したコマンドが拡張コマンドか否かを判定する（Ｓ７３０）。
【０１７０】
Ｓ７３０の判定で、“イエス”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドが拡張コマンド（ここでは、ＷＲＩＴＥ拡張コマンド）であると判定された場合に、デバイスは、Ｓ７１０で受信したコマンドの１バイト目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入されているか否かを判定する（Ｓ７４０）。この判定は、例えば、１バイト目の０〜４ビット目に、１以上の値が挿入されているか否かを識別することによって行われる。
【０１７１】
Ｓ７４０の判定で、“イエス”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドの１バイト目の予備領域に、要求ＬＢＡ数データが挿入されていると判定された場合に、デバイスは、Ｓ７１０で受信したコマンドの受信サイズが拡張コマンドの要求ＬＢＡ数データに対応しているか否かを判定する（Ｓ７５０）。すなわち、デバイスは、拡張コマンドのＳＣＳＩコマンド部分の先頭アドレス及び転送長データのサイズと追加パラメータのＬＢＡの先頭アドレス及び転送長データのサイズの合計と、拡張コマンドの要求ＬＢＡ数データによって指定されたサイズとを比較して、一致しているか否かを判定する。
【０１７２】
Ｓ７５０の判定で、“イエス”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドの受信サイズが拡張コマンドの要求ＬＢＡ数データに対応していると判定された場合に、デバイスは、ＡＣＫ応答をデバイスに送信する（Ｓ７６０）。このとき、ホストは、ＡＣＫ応答に応答して、ライトすべき全てのデータを一括してデバイスに連続送信することになる。
【０１７３】
Ｓ７６０の後、デバイスは、ホストからライトすべきすべてのデータを連続して受信する（Ｓ７７０）。
【０１７４】
Ｓ７７０の後、デバイスは、Ｓ７７０で受信したデータが拡張コマンドによって指定されたデータか否かを判定する（Ｓ７８０）。
【０１７５】
Ｓ７８０の判定で、“イエス”と判定された場合に、すなわち、Ｓ７７０で受信したデータが拡張コマンドによって指定されたデータであると判定された場合に、デバイスは、Ｓ７７０で受信したデータが拡張コマンドによって指定された要求ＬＢＡ数サイズ分のデータか否かを判定する（Ｓ７９０）。このＳ７９０の判定で、“イエス”と判定された場合は、デバイスの動作フローは、Ｓ８８０に進み、“ノー”と判定される場合は、デバイスの動作フローは、Ｓ８６０に進む。
【０１７６】
他方、Ｓ７２０の判定で、“ノー”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドが解読可能でないと判定された場合に、デバイスは、ＳＴＡＬＬ応答をホストに送信する（Ｓ８００）。この後、デバイスの動作フローは、Ｓ８７０に進む。
【０１７７】
また、Ｓ７３０の判定で、“ノー”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドが拡張コマンドでないと判定された場合に、デバイスは、ＡＣＫ応答を送信する（Ｓ８１０）。このとき、デバイスは、待機状態となり、ホストからライトデータが送信されるのを待つ。そして、デバイスは、ホストからライトデータを受信する（Ｓ８２０）と、再び、起動状態となる。この後、デバイスの動作フローは、Ｓ８８０に進む。
【０１７８】
また、Ｓ７４０の判定で、“ノー”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドの１バイト目の予備領域に、転送すべきデータの個数Ｐを表す要求ＬＢＡ数データが挿入されていないと判定された場合に、デバイスは、ＳＴＡＬＬ応答をホストに送信する（Ｓ８３０）。この後、デバイスの動作フローは、Ｓ８７０に進む。
【０１７９】
また、Ｓ７５０の判定で、“ノー”と判定された場合に、すなわち、Ｓ７１０で受信したコマンドの受信サイズが拡張コマンドの要求ＬＢＡ数データに対応していないと判定された場合に、デバイスは、ＳＴＡＬＬ応答をホストに送信する（Ｓ８４０）。この後、デバイスの動作フローは、Ｓ８７０に進む。
【０１８０】
また、Ｓ７８０の判定で、“ノー”と判定された場合に、すなわち、Ｓ７７０で受信したデータが拡張コマンドによって指定されたデータでないと判定された場合に、デバイスは、ＮＡＫ応答をホストに送信する（Ｓ８５０）。この後、デバイスの動作フローは、Ｓ７７０に戻る。
【０１８１】
また、Ｓ７９０の判定で、“ノー”と判定された場合に、すなわち、Ｓ７７０で受信したデータが要求ＬＢＡ数サイズ分のデータでないと判定された場合に、デバイスは、ＮＡＫ応答をホストに送信する（Ｓ８６０）。この後、デバイスの動作フローは、Ｓ７７０に戻る。
【０１８２】
Ｓ８００の後、Ｓ８３０の後、または、Ｓ８４０の後、デバイスは、待機状態となり、ホストからリセット信号が送信されるのを待つ。そして、デバイスは、ホストからリセット信号を受信する（Ｓ８７０）と、再び、起動状態となる。このとき、デバイスの動作フローは、Ｓ７１０に戻る。そして、デバイスは、ホストから新たなコマンドが送信されるのを待つことになる。
【０１８３】
また、Ｓ７９０の判定で、“イエス”と判定された場合の後、または、Ｓ８２０の後、デバイスは、データを該当のセクタ領域に格納した後に、ライトデータの格納終了を表すＡＣＫ応答、及びステータスをホストに送信する（Ｓ８８０）。このとき、デバイスは、Ｓ７３０で“ノー”と判定されていた場合に、１個のＡＣＫ応答を送信し、その後、ＳＴＡＬＬ応答を送信することになる。このとき、デバイスは、待機状態となり、ホストからデータ転送に対する応答が送信されるのを待つことになる。
【０１８４】
Ｓ８８０の後、デバイスは、ホストからステータスに対する応答を受信する（Ｓ８９０）。
【０１８５】
そして、デバイスは、ライト処理を終了する。
【０１８６】
（効果）
この発明のデータ転送方法は、ライト処理時においても、上述の拡張コマンドを使用しているので、リード処理時と同様の効果を得ることができる。
【０１８７】
この発明は、上述の実施の形態に限定されることなく、この発明の要旨を逸脱しない範囲で種々の変更や変形を行うことができる。
【０１８８】
例えば、上述の拡張コマンドの構成は、従来のＳＣＳＩコマンドの構成が１０バイトとなっている場合の例に合わせた構成となっている。しかしながら、従来のＳＣＳＩコマンドの構成は、１０バイト以外の場合もある。この場合、上述の拡張コマンドの構成は、従来のＳＣＳＩコマンドの構成に合わせて、適宜変形された構成となる。
【０１８９】
また、例えば、ホストは、ＵＳＢストレージデバイスから任意のデータを削除する場合に、ＤＥＬＩＴＥコマンドをＵＳＢストレージデバイスに送信してもよい。なお、ＤＥＬＩＴＥコマンドは、拡張コマンドの０バイト目の命令コード領域に、命令コード「ＤＥＬＩＴＥ」が挿入された構成とすればよい。ホストは、ＲＥＡＤコマンド、ＷＲＩＴＥコマンド、及びＤＥＬＩＴＥコマンド以外のコマンドをデバイスに送信する場合に、従来のＳＣＳＩコマンドを送信することになる。
【図面の簡単な説明】
【０１９０】
【図１】この発明のデータ転送方法で用いるコマンドのフォーマットの一例を示す図である。
【図２−１】リード処理時のこの発明のデータ転送方法の概要を示す図である。
【図２−２】（Ａ）及び（Ｂ）は、それぞれ、リード処理時のこの発明のデータ転送方法の概要を示す図である。
【図２−３】（Ａ）及び（Ｂ）は、それぞれ、リード処理時のこの発明のデータ転送方法の概要を示す図である。
【図３】リード処理時のホスト側の動作を示すフローチャートである。
【図４】リード処理時のデバイス側の動作を示すフローチャートである。
【図５−１】ライト処理時のこの発明のデータ転送方法の概要を示す図である。
【図５−２】（Ａ）及び（Ｂ）は、それぞれ、ライト処理時のこの発明のデータ転送方法の概要を示す図である。
【図５−３】（Ａ）及び（Ｂ）は、それぞれ、ライト処理時のこの発明のデータ転送方法の概要を示す図である。
【図６】ライト処理時のホスト側の動作を示すフローチャートである。
【図７】ライト処理時のデバイス側の動作を示すフローチャートである。
【図８】従来のデータ転送方法で用いるコマンドのフォーマットの一例を示す図である。
【図９−１】リード処理時の従来のデータ転送方法の概要を示す図である。
【図９−２】（Ａ）及び（Ｂ）は、それぞれ、リード処理時の従来のデータ転送方法の概要を示す図である。
【図１０−１】ライト処理時の従来のデータ転送方法の概要を示す図である。
【図１０−２】（Ａ）及び（Ｂ）は、それぞれ、ライト処理時の従来のデータ転送方法の概要を示す図である。
【図１１】ホスト及びＵＳＢストレージデバイスの一構成例を示すブロック図である。
【符号の説明】
【０１９１】
１０    …転送すべきデータの個数Ｐ（要求ＬＢＡ数データ）
１１−１，１１−２，…，１１−Ｐ    …転送すべきデータに関するパラメータ
【図１】
2008210226.tif 000003
【図２−１】
2008210226.tif 000004
【図２−２】
2008210226.tif 000005
【図２−３】
2008210226.tif 000006
【図３】
2008210226.tif 000007
【図４】
2008210226.tif 000008
【図５−１】
2008210226.tif 000009
【図５−２】
2008210226.tif 000010
【図５−３】
2008210226.tif 000011
【図６】
2008210226.tif 000012
【図７】
2008210226.tif 000013
【図８】
2008210226.tif 000014
【図９−１】
2008210226.tif 000015
【図９−２】
2008210226.tif 000016
【図１０−１】
2008210226.tif 000017
【図１０−２】
2008210226.tif 000018
【図１１】
2008210226.tif 000019