(57)【特許請求の範囲】
【請求項１】
ホストに接続される目標装置のメモリからデータを取得する方法であって、
前記目標装置により、複数のデータパケットを前記メモリから取得するリクエストを含む第１のコマンドを前記ホストから受信するステップと、
前記目標装置により、前記複数のデータパケットを前記メモリから取得するステップと、
前記目標装置により、各々のデータパケットが取得される都度、各々の取得されたデータパケットを前記ホストに送信するステップと、
前記目標装置により、取得された複数のデータパケットに対応する誤り訂正符号（ＥＣＣ）パケットを取得し、前記誤り訂正符号（ＥＣＣ）パケットの取得は、前記複数のデータパケットが前記ホストに送信された後に生じるステップと、
前記目標装置により、取得された複数のデータパケットの中から、誤りを有する一又は二以上のデータパケットを特定するＥＣＣアルゴリズムを実行し、前記ＥＣＣアルゴリズムの実行は、前記リクエストに係る前記複数のデータパケットのうちの全てのデータパケットが前記ホストに送信された後に生じるステップと、
前記目標装置により、一又は二以上の訂正されたデータパケットを前記ホストに送信し、取得された複数のデータパケットのうち、誤りを有する一又は二以上のデータパケットを置換するステップと、
前記目標装置により、完了パケットを前記ホストに送信するステップとを含む方法。
【請求項２】
前記メモリが不揮発性メモリである、請求項１に記載の方法。
【請求項３】
前記不揮発性メモリが相変化メモリ（ＰＣＭ）である、請求項２に記載の方法。
【請求項４】
前記ＥＣＣアルゴリズムはＢＣＨ符号を誤り訂正符号として利用して実行される、請求項１に記載の方法。
【請求項５】
ホストに接続される目標装置のメモリからデータを取得する方法であって、
前記目標装置により、複数のデータパケットを前記メモリから取得するリクエストを含む第１のコマンドを前記ホストから受信するステップと、
前記目標装置により、前記複数のデータパケットを前記メモリから取得するステップと、
前記目標装置により、各々のデータパケットが取得される都度、最後に取得されたデータパケットを除く各々の取得されたデータパケットを前記ホストに送信するステップと、
前記目標装置により、前記取得された複数のデータパケットに対応する誤り訂正符号（ＥＣＣ）パケットを取得し、前記誤り訂正符号（ＥＣＣ）パケットの取得は、前記複数のデータパケットが前記ホストに送信された後に生じるステップと、
前記目標装置により、前記取得された複数のデータパケットの中から、誤りを有する一又は二以上のデータパケットを特定するＥＣＣアルゴリズムを実行して、前記ＥＣＣアルゴリズムの実行は、前記リクエストに係る前記複数のデータパケットのうちの全てのデータパケットが前記ホストに送信された後に生じるステップと、
前記目標装置により、一又は二以上の訂正されたデータパケットを前記ホストに送信し、取得された複数のデータパケットのうち、誤りを有する一又は二以上のデータパケットを置換するステップと、
前記目標装置により、最後に取得されたデータパケットを完了パケットとして送信するステップとを含む方法。
【請求項６】
前記メモリが不揮発性メモリである、請求項５に記載の方法。
【請求項７】
前記不揮発性メモリが相変化メモリ（ＰＣＭ）である、請求項６に記載の方法。
【請求項８】
前記ＥＣＣアルゴリズムはＢＣＨ符号を誤り訂正符号として利用して実行される、請求項５に記載の方法。
【請求項９】
ホストに接続される目標装置のメモリからデータを取得する方法であって、
前記目標装置により、複数のデータパケットを前記メモリから取得するリクエストを含む第１のコマンドを前記ホストから受信するステップと、
前記目標装置により、前記複数のデータパケットを前記メモリから取得するステップと、
各々の取得されたデータパケットに対して誤り検出アルゴリズムを実行して、前記取得されたデータパケットが誤りを含んでいるか否かを判定するステップと、
前記目標装置により、各々のデータパケットが取得される都度、各々の取得されたデータパケットを前記ホストに送信するステップと、
前記目標装置により、前記取得された複数のデータパケットに対応する誤り訂正符号（ＥＣＣ）パケットを取得し、前記誤り訂正符号（ＥＣＣ）パケットの取得は、前記複数のデータパケットが前記ホストに送信された後に生じるステップと、
前記目標装置により、前記取得された複数のデータパケットの中から、誤りを有する一又は二以上のデータパケットを特定するＥＣＣアルゴリズムを実行し、前記ＥＣＣアルゴリズムの実行は、前記リクエストに係る前記複数のデータパケットのうちの全てのデータパケットが前記ホストに送信された後に生じるステップと、
前記目標装置により、一又は二以上の訂正されたデータパケットを前記ホストに送信し、取得された複数のデータパケットのうち、誤りを有する一又は二以上のデータパケットを置換するステップと、
前記目標装置により、完了パケットを前記ホストに送信するステップとを含む方法。
【請求項１０】
前記メモリが不揮発性メモリである、請求項９に記載の方法。
【請求項１１】
ホストに接続されるように構成され、且つメモリに接続されるように構成されたメモリコントローラであって、
前記メモリコントローラは、
前記メモリから複数のデータパケットを取得するリクエストを含む第１のコマンドを前記ホストから受信すべく構成されたインターフェースコントローラと、
前記インターフェースコントローラに接続されるストレージコントローラとを含み、
前記ストレージコントローラが、
前記複数のデータパケットを前記メモリから取得し、
前記インターフェースコントローラに対し、各々のデータパケットが取得される都度、各々の取得されたデータパケットを前記ホストに送信するよう命令し、
前記取得された複数のデータパケットに対応する誤り訂正符号化（ＥＣＣ）パケットを取得し、前記誤り訂正符号（ＥＣＣ）パケットの取得は、前記複数のデータパケットが前記ホストに送信された後に生じ、
前記取得された複数のデータパケットの中から、誤りを有する一又は二以上のデータパケットを特定するＥＣＣアルゴリズムを実行して、前記ＥＣＣアルゴリズムの実行は、前記リクエストに係る前記複数のデータパケットのうちの全てのデータパケットが前記ホストに送信された後に生じ、
一又は二以上の訂正されたデータパケットを前記ホストに送信するよう前記インターフェースコントローラに命令して、取得された複数のデータパケットのうち、誤りを有する一又は二以上のデータパケットを置換し、
完了パケットを前記ホストに送信する
よう構成されているメモリコントローラ。
【請求項１２】
前記メモリが不揮発性メモリである、請求項１１に記載のメモリコントローラ。
【請求項１３】
前記不揮発性メモリが相変化メモリ（ＰＣＭ）である、請求項１２に記載のメモリコントローラ。
【請求項１４】
前記ＥＣＣアルゴリズムはＢＣＨ符号を誤り訂正符号として利用して実行される、請求項１１に記載のメモリコントローラ。
【請求項１５】
ホストに接続されるように構成され、且つメモリに接続されるように構成されたメモリコントローラであって、
前記メモリコントローラは、
前記メモリから複数のデータパケットを取得するリクエストを含む第１のコマンドを前記ホストから受信すべく構成されたインターフェースコントローラと、
前記インターフェースコントローラに接続されるストレージコントローラとを含み、
前記ストレージコントローラが、
複数のデータパケットを前記メモリから取得し、
各々のデータパケットが取得される都度、最後に取得されたデータパケットを除く各々の取得されたデータパケットを前記ホストに送信するよう前記インターフェースコントローラに命令し、
前記取得された複数のデータパケットに対応する誤り訂正符号化（ＥＣＣ）パケットを取得し、前記誤り訂正符号（ＥＣＣ）パケットの取得は、前記複数のデータパケットが前記ホストに送信された後に生じ、
前記取得された複数のデータパケットの中から、誤りを有する一又は二以上のデータパケットを特定するＥＣＣアルゴリズムを実行し、前記ＥＣＣアルゴリズムの実行は、前記リクエストに係る前記複数のデータパケットのうちの全てのデータパケットが前記ホストに送信された後に生じ、
一又は二以上の訂正されたデータパケットを前記ホストに送信するよう前記インターフェースコントローラに命令して、取得された複数のデータパケットのうち、誤りを有する一又は二以上のデータパケットを置換し、
最後に取得されたデータパケットを完了パケットとして送信するよう前記インターフェースコントローラに命令すべく構成されているメモリコントローラ。
【請求項１６】
前記メモリが不揮発性メモリである、請求項１５に記載のメモリコントローラ。
【請求項１７】
前記不揮発性メモリが相変化メモリ（ＰＣＭ）である、請求項１６に記載のメモリコントローラ。
【請求項１８】
前記ＥＣＣアルゴリズムはＢＣＨ符号を誤り訂正符号として利用して実行される、請求項１５に記載のメモリコントローラ。
【請求項１９】
ホストに接続されるように構成され、且つメモリに接続されるように構成されたメモリコントローラであって、
前記メモリコントローラは、
前記メモリから複数のデータパケットを取得するリクエストを含む第１のコマンドを前記ホストから受信すべく構成されたインターフェースコントローラと、
前記インターフェースコントローラに接続されるストレージコントローラとを含み、
前記ストレージコントローラが、
前記複数のデータパケットを前記メモリから取得し、
各々の取得されたデータパケットに対して誤り検出アルゴリズムを実行して、前記取得されたデータパケットが誤りを含んでいるか否かを判定し、
前記インターフェースコントローラに対し、各々のデータパケットが取得される都度、最後に取得されたデータパケットを除く各々の取得されたデータパケットを前記ホストに送信するよう命令し、
前記取得された複数のデータパケットに対応する誤り訂正符号（ＥＣＣ）パケットを取得し、前記誤り訂正符号（ＥＣＣ）パケットの取得は、前記複数のデータパケットが前記ホストに送信された後に生じ、
前記取得された複数のデータパケットの中から、誤りを有する一又は二以上のデータパケットを特定するＥＣＣアルゴリズムを実行して、前記ＥＣＣアルゴリズムの実行は、前記リクエストに係る前記複数のデータパケットのうちの全てのデータパケットが前記ホストに送信された後に生じ、
一又は二以上の訂正されたデータパケットを前記ホストに送信するようインターフェースコントローラに命令して、取得された複数のデータパケットのうち、誤りを有する一又は二以上のデータパケットを置換し、
最後に取得されたデータパケットを完了パケットとして送信する
よう構成されているメモリコントローラ。
【請求項２０】
前記メモリが不揮発性メモリである、請求項１９に記載のメモリコントローラ。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、不揮発性固体装置に格納されたデータの送信、特に誤り訂正の完了前にデータを送信するためのシステムおよび方法に関する。
【背景技術】
【０００２】
不揮発性固体装置（ＳＳＤｓ）は、コンピュータシステムにおける一次および二次記憶用に広範に利用されている。相変化メモリ（ＰＣＭ）、抵抗ＲＡＭ（ＲｅＲＡＭ）、および磁気ＲＡＭ（ＭＲＡＭ）等、いくつかの不揮発性メモリのビット誤り率は動的読み出しアクセスメモリ（ＤＲＡＭ）のビット誤り率よりも高い場合があり得るが、ＮＡＮＤフラッシュメモリのビット誤り率よりも大幅に下げることができる。従って、これらの中間的ビット誤り率は、ＤＲＡＭで用いる短いハミング符号よりも良好な誤り訂正を必要とする。このため、誤り訂正アルゴリズムを実行する場合、長い待ち時間が生じる恐れがある。例えば、全ＢＣＨ符号（符号の発明者、Ｒａｊ  Ｂｏｓｅ、Ｄ．Ｋ．Ｒａｙ−Ｃｈａｕｄｈｕｒｉ、およびＡｌｅｘｉｓ  Ｈｏｃｑｕｅｎｇｈｅｍの頭字語）等の誤り訂正符号（ＥＣＣ）を例えば５１２Ｂブロックに対して実行する際に、記憶媒体からビットを読み出す時間の約半分の時間を要する場合がある。
【０００３】
更に、例えば４ｋｂの任意のブロックにおける誤りの確率は、大部分のブロックで誤りが生じないように充分に低くてよい。従って、大部分の読み出しにおいて、誤り訂正アルゴリズムによる待ち時間は無駄になる。また、従来のシステムは、非パイプライン化フローを実行しており、通常は、単一の５１２Ｂブロックを再構築するため全てのビットを記憶媒体から読み出し、次いでＥＣＣアルゴリズムを実行し、ＥＣＣアルゴリズムが完了した後でデータのホストへの送信を開始することができる。従って、ＥＣＣアルゴリズムが完了するまでブロックの送信は遅延する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願第１４／４６６，５３８号明細書
【特許文献２】米国特許出願第１４／４８９，８８１号明細書
【発明の概要】
【課題を解決するための手段】
【０００５】
本開示は、通信プロトコルに従う動作を実行する方法およびシステムに関する。
【０００６】
一実施形態は、通信プロトコルでの動作を実行する方法を含んでいてよい。本方法は、ホストおよびメモリと通信状態にある目標装置を設けるステップと、目標装置により、複数のデータパケットをメモリから取得するリクエストを含む第１のコマンドをホストから受信するステップとを含んでいてよい。本方法はまた、目標装置により、複数のデータパケットをメモリから取得するステップと、目標装置により、各々のデータパケットが取得される都度、各々の取得されたデータパケットをホストに送信するステップとを含んでいてよい。本方法は更に、目標装置により、取得された複数のデータパケットに対応する誤り訂正符号（ＥＣＣ）パケットを取得するステップと、目標装置により、ＥＣＣアルゴリズムを実行して、取得された複数のデータパケットの潜在的な誤りを識別および訂正するステップとを含んでいてよい。本方法はまた、取得されたデータパケットのいずれかに誤りがある場合、目標装置により、訂正されたデータパケットをホストに送信するステップと、目標装置により、完了パケットをホストに送信するステップとを含んでいてよい。
【０００７】
代替的な一実施形態は、通信プロトコルでの動作を実行する方法を含んでいてよい。本方法は、ホストおよびメモリと通信状態にある目標装置を設けるステップと、目標装置により、複数のデータパケットをメモリから取得するリクエストを含む第１のコマンドをホストから受信するステップとを含んでいてよい。本方法はまた、目標装置により、複数のデータパケットをメモリから取得するステップと、目標装置により、各々のデータパケットが取得される都度、最後に取得されたデータパケットを除く各々の取得されたデータパケットをホストに送信するステップとを含んでいてよい。本方法はまた、目標装置により、取得された複数のデータパケットに対応する誤り訂正符号（ＥＣＣ）パケットを取得するステップと、目標装置により、ＥＣＣアルゴリズムを実行して、取得された複数のデータパケットの潜在的な誤りを識別および訂正するステップとを含んでいてよい。本方法は更に、取得されたデータパケットのいずれかに誤りがある場合、目標装置により、訂正されたデータパケットをホストに送信するステップと、目標装置により、最後に取得されたデータパケットを送信するステップとを含んでいてよい。
【０００８】
代替的な一実施形態は、通信プロトコルでの動作を実行するメモリコントローラを含んでいてよい。メモリコントローラは、ホストおよびメモリと通信状態にあって、メモリから複数のデータパケットを取得するリクエストを含む第１のコマンドをホストから受信すべく構成されたインターフェースコントローラと、ストレージコントローラとを含んでいてよい。ストレージコントローラは、複数のデータパケットをメモリから取得して、各々のデータパケットが取得される都度、最後に取得されたデータパケットを除く各々の取得されたデータパケットをホストに送信するようインターフェースコントローラに命令すべく構成されていてよい。ストレージコントローラは更に、取得された複数のデータパケットに対応する誤り訂正符号化（ＥＣＣ）パケットを取得すると共に、ＥＣＣアルゴリズムを実行して、取得された複数のデータパケットの潜在的な誤り識別および訂正すべく構成されていてよい。ストレージコントローラは更に、取得されたデータパケットのいずれかに誤りがある場合、訂正されたデータパケットをホストに送信するようインターフェースコントローラに命令すると共に、最後に取得されたデータパケットを送信するようインターフェースコントローラに命令すべく構成されていてよい。
【０００９】
代替的な一実施形態は、通信プロトコルでの動作を実行するメモリコントローラを含んでいてよい。メモリコントローラは、ホストおよびメモリと通信状態にあって、メモリから複数のデータパケットを取得するリクエストを含む第１のコマンドをホストから受信すべく構成されたインターフェースコントローラと、ストレージコントローラとを含んでいてよい。ストレージコントローラは、複数のデータパケットをメモリから取得すると共に、各々の取得されたデータパケットに対して誤り検出アルゴリズムを実行して、取得されたデータパケットが誤りを含んでいるか否かを判定すべく構成されていてよい。ストレージコントローラは更に、インターフェースコントローラに対し、各々のデータパケットが取得される都度、最後に取得されたデータパケットを除く各々の取得されたデータパケットをホストに送信するよう命令し、取得された複数のデータパケットに対応する誤り訂正符号パケットを取得し、ＥＣＣアルゴリズムを実行して、取得された複数のデータパケットの潜在的な誤りを識別および訂正すべく構成されていてよい。ストレージコントローラは更に、取得されたデータパケットのいずれかに誤りがある場合、訂正されたデータパケットをホストに送信するようインターフェースコントローラに命令すると共に、最後に取得されたデータパケットを送信するようインターフェースコントローラに命令すべく構成されていてよい。
【００１０】
本開示の各種の目的、特徴、および利点は、同一要素には同一参照番号が付与された添付図面を参照しながら以下の詳細な記述を精査することにより理解が深まろう。添付図面は例示目的に過ぎず、請求項により範囲を規定する本発明を一切限定するものではない。
【図面の簡単な説明】
【００１１】
【図１】本開示の複数の実施形態による、通信プロトコルを実行する例示的システムを示す。
【図２Ａ】記憶媒体からデータを送信する従来方式の実施例を示す。
【図２Ｂ】本開示の複数の態様による、記憶媒体からデータを送信する実施例を示す。
【図２Ｃ】本開示の複数の態様による、記憶媒体からデータを送信する実施例を示す。
【図３Ａ】記憶媒体からデータを送信する従来方式の実施例を示す。
【図３Ｂ】本開示の複数の態様による、記憶媒体からデータを送信する実施例を示す。
【図３Ｃ】本開示の複数の態様による、記憶媒体からデータを送信する実施例を示す。
【図４】本開示の複数の態様による、記憶媒体からデータを送信する例示的な方法を示す。
【図５】本開示の複数の態様による、記憶媒体からデータを送信する例示的な方法を示す。
【発明を実施するための形態】
【００１２】
不揮発性メモリに格納されたデータを送信するシステムおよび方法を提供する。データパケットは、誤り訂正を実行する前に不揮発性メモリから取得されたならば、ホストに送信することができる。１ブロックの全てのデータパケットが不揮発性メモリから取得されたならば、誤り訂正を実行することができる。取得されたデータパケットのいずれかに誤りがある場合、訂正してホストに再送信することができる。
【００１３】
図１は、本開示の複数の実施形態による、通信プロトコルを実行する例示的なシステム１００を示す。システム１００は、目標装置１０４およびストレージ１２２と通信状態にあるホスト１０２を含んでいる。ホスト１０２は、ユーザーアプリケーション１０６、オペレーティングシステム１０８、ドライバ１１０、ホストメモリ１１２、待ち行列１１８ａ、および通信プロトコル１１４ａを含んでいる。目標装置１０４は、インターフェースコントローラ１１７、通信プロトコル１１４ｂ、待ち行列１１８ｂ、およびストレージ１２２と通信状態にあるストレージコントローラ１２０を含んでいる。
【００１４】
ホスト１０２は、オペレーティングシステム１０８上でユーザーレベルアプリケーション１０６を実行することができる。オペレーティングシステム１０８は、ホストメモリ１１２とのインターフェースを提供するドライバ１１０を動作させることができる。いくつかの実施形態において、メモリ１１２はＤＲＡＭであってよい。ホストメモリ１１２は、待ち行列１１８ａを用いて、目標装置１０４に処理を指示するホスト１０２からのコマンドを格納することができる。格納または待ち行列に追加されたコマンドの例として、ホスト１０２から読み出しまたは書き込み動作を含んでいてよい。通信プロトコル１１４ａにより、ホスト１０２はインターフェースコントローラ１１７を用いて目標装置１０４と通信可能になる。
【００１５】
目標装置１０４は、インターフェースコントローラ１１７および通信プロトコル１１４ｂを用いてホスト１０２と通信可能である。通信プロトコル１１４ｂは、ストレージコントローラ１２０を介してストレージ１２２にアクセスするための待ち行列１１８を設けることができる。例えば、ユーザーレベルアプリケーション１０６は、データ取得のためストレージ１２２へのアクセスリクエストを生成することができる。目標装置１０４は、ストレージ１２２からメモリブロックが取得された場合に誤りを訂正する誤り訂正符号を実行することができる。
【００１６】
上述のように、全ＢＣＨ符号等の誤り訂正符号を例えば５１２Ｂブロックで実行するには、ストレージ１２２からデータを読み出す時間の約半分の時間を消費する場合がある。従来のシステム、例えば非パイプライン化フローを実行するシステム等は通常、１ブロックを再構築するため全てのビットを記憶媒体から読み出し、次いでＥＣＣアルゴリズム実行し、ＥＣＣアルゴリズムが完了した後で訂正されたデータのホストへの送信を開始することができる。これを図２Ａの２００で一般的に示し、パケット、例えば４個のパケット２０２を記憶媒体からホストに送信する例示的な方法を示す。特定の例において、システムは、最初にパケット２０２およびＥＣＣパケット２０４を読み出し、次いで誤り訂正アルゴリズム２０６を実行していずれかのパケットに誤りがあるか否かを判定して、誤りが検出されたならば訂正する。システムは次いで、４個ブロックおよび転送が完了した旨を通知する終了パケット２０８をホストに送信することができる。当業者には、ＥＣＣビットは、訂正スキームの設計により当該ビットが媒体上に配置された仕方に依存して複数のパケットであり得ることが理解されよう。
【００１７】
本開示の複数の態様によれば、誤り訂正アルゴリズムを実行する前に、記憶媒体からデータパケットがホストに送信される。これを図２Ｂの２１０で一般的に示す。開示するシステムおよび方法は最初にパケット２０２を取得する。各パケットは、記憶媒体から取得される都度、ホストに送信される。例えば、第１のパケットが取得された場合、ホストに送信される（２１２）。第２のパケットが取得された場合も、同様にホストに送信される（２１４）。当該動作は、記憶媒体から全てのパケット２０２が取得されるまで続けられる。全てのパケットが取得された後で、ＥＣＣパケット２０４が読みだされて誤り訂正アルゴリズム２０６が実行される。アルゴリズムが誤りを一切検出しなかった場合、終了パケット２０８が送信されて転送が完了した旨をホストに通知する。図２Ｂに示すように、開示する方法では、記憶装置から取得されたデータパケットに誤りが無い最も一般的な場合に、待ち時間を大幅に節約できる（２１６）。例えば、待ち時間の節約は、全てのデータパケットをホストに送信するために要する時間にほぼ等しい。
【００１８】
開示するシステムおよび方法では、記憶媒体から取得されたデータが誤りを含んでいる場合でも待ち時間の節約ができることになる。一般に図２Ｃの２２０に、取得されたデータパケットに誤りがある場合にデータパケットをホストに送信する際の待ち時間の節約を示す。具体的には、図に示す例において、第２のデータパケット２１８は誤りを含んでいる。開示する方法ではパケットがホストに送信される前に誤り検出および訂正アルゴリズムが完了するまで待たないため、誤りがあるパケット２１８がホストで受信される。誤りが検出された（２０６）場合、誤りがあるデータパケット２１８は訂正され、正しいデータパケット２２０がホストに再送信される。誤りがある複数のパケットが記憶媒体から取得された場合、誤りがある全てのパケットが訂正されてホストに送信される。次いで転送が完了した旨をホストに通知する終了パケット２０８が送信される。図２Ｃにも示すように、開示する方法では、たとえ記憶装置から取得されたデータパケットに誤りがある、例えば取得されたデータに１個の誤りがある（２２４）場合でも、待ち時間を大幅に節約できる。
【００１９】
図３Ａは、従来のシステムの非パイプライン化フローの代替的な実施例を示す。具体的には、一般に図３Ａの３００に、別々の完了パケットを送信することなく、パケット、例えば４個のパケット３０２を記憶媒体からホストに送信する例示的な別の仕方を示す。特定の例において、システムは最初に、パケット３０２およびＥＣＣパケット３０４を取得し、次いで誤り訂正アルゴリズム３０６を実行していずれかのパケットに誤りがあるか否かを判定して、誤りが検出されたならば訂正する。次いでシステムは、４個のブロックをホストに送信することができる。最後のパケット３０８はまた、転送が完了した旨をホストに通知可能な完了パケットとしても機能することができる。他の完了検出手順を優先して完了信号を除去し得る例示的なプロトコルが、例えば２０１４年８月２２日出願の（特許文献１）“Ａｃｋ−ｌｅｓｓ  ｐｒｏｔｏｃｏｌ  ｆｏｒ  ｎｏｔｉｃｉｎｇ  ｃｏｍｐｌｅｔｉｏｎ  ｏｆ  ｒｅａｄ  ｒｅｑｕｅｓｔｓ”および２０１４年９月１８日出願の（特許文献２）“Ａｃｋｎｏｗｌｅｄｇｅｍｅｎｔ−ｌｅｓｓ  ｐｒｏｔｏｃｏｌ  ｆｏｒ  ｓｏｌｉｄ  ｓｔａｔｅ  ｄｒｉｖｅ  ｉｎｔｅｒｆａｃｅ”に記述されており、共にその内容の全文を本明細書に引用している。
【００２０】
本開示の代替的な複数の態様によれば、完了パケットを送信することなく、誤り訂正アルゴリズムを実行する前に、記憶媒体からのデータパケット３０２をホストに送信することができる。これを図３Ｂの３１０で一般的に示す。開示するシステムおよび方法は最初にパケット３０２を取得する。各パケットが記憶媒体から取得される都度、ホストに送信される。例えば、第１のパケット３１２が取得された場合、ホストに送信される。第２のパケット３１４が取得された場合も、同様にホストに送信される。開示の複数の態様によれば、誤りの検出および訂正アルゴリズムが実行されるまで、最後のパケット３０８はホストに送信されない。具体的には、ＥＣＣパケット３０４が記憶媒体から取得された後で、ＥＣＣアルゴリズムが実行される（３０６）。誤りが検出されなかった場合、最後のパケット３０８がホストに送信される。最後のパケット３０８がホスト側で受信された場合、転送が完了した旨をホストに通知することができる。図３Ｂに示すように、開示する方法では、記憶装置から取得されたデータパケットに誤りが無い最も一般的な場合、待ち時間を大幅に節約できる（３１６）。
【００２１】
図３Ｃの２２０で一般的に、データパケットに誤りがあり、且つ完了パケットが無い場合にデータパケットをホストに送信する際の待ち時間の節約を示す。具体的には、図に示す例において、第２のデータパケット３１４は誤りを含んでいる。開示する方法は誤りの検出、およびパケットがホストに送信される前に訂正アルゴリズムが完了するのを待たないため、誤りがある第２のパケット３１４がホスト側で受信される。本開示の複数の態様によれば、誤りの検出および訂正アルゴリズムが実行されるまで最後のパケット３０８は送信されない。第２のパケット３１４に誤りが検出された場合、誤りがあるデータパケット３１４が訂正され（３０６）、正しいデータパケットがホストに再送信される（３１６）。訂正パケット３１６が送信された後で、本方法は最後のデータパケット３０８を送信することができる。最後のパケット３０８がホスト側で受信された場合、転送が完了した旨をホストに通知することができる。当業者には、取得された最後のデータパケットに誤りがある場合、訂正されたデータパケットがホストに送信されることが理解されよう。図３Ｃに示すように、開示する方法では、たとえ記憶装置から取得されたデータパケットに誤りがある、例えば取得されたデータに１個の誤りがある（３２４）場合でも、待ち時間を大幅に節約できる。
【００２２】
本開示の代替的な複数の態様によれば、誤りが検出された後で、誤って取得されたパケットのサブセットだけ、例えば誤りを含んでいるサブセットだけがホストに再送信される。サブセットがホスト側で受信された場合、パケットの適当な部分を上書きすることができる。
【００２３】
開示の代替的な複数の態様によれば、データパケットが記憶媒体から取得された場合、誤り検出アルゴリズム、例えば症状確認（誤りがあるビットの個数を示す値を返す多項式の計算）が実行され、取得されたデータパケットに誤りがあるか否かが判定される。取得された全てのパケットに誤りが無い場合、それ以上ＥＣＣアルゴリズムは実行されない。
【００２４】
図４は、本開示の複数の態様による、データパケットをホストに送信する例示的な方法のフロー図４００を示す。メモリコントローラが、複数のデータパケットをメモリから取得することができる（４０２）。メモリコントローラがデータパケットを取得した場合、ホストに送信する（４０４）。メモリコントローラはまた、取得されたデータパケットに対応するＥＣＣパケットを取得することができる（４０６）。ＥＣＣパケットを取得したならば、メモリコントローラは、ＥＣＣアルゴリズムを実行して、取得されたデータパケットにおける潜在的な誤りを識別および訂正することができる（４０８）。本方法は次いで、取得されたデータパケットに誤りがあるか否かを調べることができる（４１０）。誤りが検出されなかった場合、メモリコントローラは完了パケットをホストに送信することができる（４１２）。取得されたデータに誤りがある場合、メモリコントローラはホストに、訂正されたデータパケットを送信し（４１４）、次いで完了パケットを送信することができる（４１２）。
【００２５】
図５は、本開示の代替的な複数の態様による、データパケットをホストに送信する例示的な方法のフロー図５００を示す。メモリコントローラは、複数のデータパケットをメモリから取得することができる（５０２）。メモリコントローラがデータパケットを取得した場合、最後に取得されたデータパケットを除いて、各パケットをホストに送信することができる（５０４）。メモリコントローラはまた、取得されたデータパケットに対応するＥＣＣパケットを取得することができる（５０６）。ＥＣＣパケットを取得したならば、メモリコントローラは、ＥＣＣアルゴリズムを実行して、取得されたデータパケット５０８における潜在的な誤りを識別および訂正することができる。本方法は次いで、取得されたデータパケット５１０に誤りがあるか否かを調べることができる。誤りが検出されなかった場合、メモリコントローラは、最後に取得されたパケットをホスト５１２に送信することができる。取得されたデータに誤りがある場合、メモリコントローラはホストに対し、訂正されたデータパケット５１４、次いで最後に取得されたパケット５１２を送信することができる。
【００２６】
当業者には、ここに記述する明細書本文および図面における各種の例示的項目が電子ハードウェア、コンピュータソフトウェア、両者の組合せにより実現できることが理解されよう。ハードウェアとソフトウェアが互いに代替可能であることを示すために、各種の例示的ブロック、モジュール、素子、要素、方法、およびアルゴリズムは、それらの機能の観点から一般的に記述してきた。このような機能をハードウェア、ソフトウェア、またはそれら組合せとして実現するか否かは、特定のアプリケーションおよびシステム全体に課される設計上の制約に依存する。当業者であれば、記述された機能を特定のアプリケーションの各々について様々な仕方で実現することができる。各種の要素およびブロックは、主題である技術の範囲から逸脱することなく、全て異なる仕方で構成（例えば、異なる順序で配置、または異なる仕方で分割）することができる。
【００２７】
更に、通信プロトコルの実行は、単一のコンピュータシステム内で集中的に、または互いに接続された複数のコンピュータシステムにまたがって異なる要素が配置された状態で分散的に実現することができる。本明細書に記述する方法を実行すべく適合された任意の種類のコンピュータシステムその他の装置も本明細書に記述する機能の実行に適している。
【００２８】
ハードウェアとソフトウェアの典型的な組合せとして、ロードおよび実行された場合に本明細書に記述する方法を実行すべくコンピュータシステムを制御するコンピュータプログラムを備えた汎用コンピュータシステムがあり得る。通信プロトコル用の方法はまた、本明細書に記述する方法を実行可能にする全ての特徴を含むと共にコンピュータシステムにロードされた場合に当該方法を実行可能なコンピュータプログラム製品に埋め込まれていてもよい。
【００２９】
本文脈におけるコンピュータプログラムまたはアプリケーションとは、情報処理機能を有するシステムに、特定の機能を直接実行させるか、または、ａ）別の言語、符号、または表記への変換、ｂ）異なる媒体形式での再現、の一方または両方を実行した後で、実行させることを目的とする命令の組の任意の言語、符号または表記による表現を意味している。重要な点として、当該通信プロトコルは、その趣旨または基本的属性から逸脱することなく、他の特定の形式で実施可能であり、従って、本発明の範囲を示すものとして上述の明細書本文ではなく、以下の請求項を参照されたい。
【００３０】
通信プロトコルについて、例示的な実施形態を具体的に参照しながら詳細に述べてきた。しかし、上述の明細書本文に記述しているように、本開示の趣旨および範囲内で各種の修正および変更が可能であることは明らかであり、そのような修正および変更は等価物であって本開示の一部をなすものと考えられたい。
【符号の説明】
【００３１】
１００  システム
１０２  ホスト
１０４  目標装置
１０６  アプリケーション
１０８  オペレーティングシステム
１１０  ドライバ
１１２  メモリ
１１４ａ  通信プロトコル
１１４ｂ  通信プロトコル
１１７  インターフェースコントローラ
１１８ａ  待ち行列
１１８ｂ  待ち行列
１２０  ストレージコントローラ
１２２  ストレージ
２０２  パケット
２０４  ＥＣＣパケット
２０６  誤り訂正アルゴリズム
２０８  終了パケット
２１２  ホストに送信
２１４  ホストに送信
２１６  最も一般的な場合での待ち時間の節約
２２０  再送信
２２４  誤りが１個の場合での待ち時間の節約
３０２  パケット
３０４  ＥＣＣパケット
３０６  訂正
３０８  パケット
３１２、３１４  パケット
３１６  最も一般的な場合での待ち時間の節約
３２４  誤りが１個の場合での待ち時間の節約
【図１】
0006389499.tif 000002
【図２Ａ】
0006389499.tif 000003
【図２Ｂ】
0006389499.tif 000004
【図２Ｃ】
0006389499.tif 000005
【図３Ａ】
0006389499.tif 000006
【図３Ｂ】
0006389499.tif 000007
【図３Ｃ】
0006389499.tif 000008
【図４】
0006389499.tif 000009
【図５】
0006389499.tif 000010