(57)【要約】【課題】  正常にフレームを伝送できる装置を実現する。【解決手段】  実施形態によれば、外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース（ＳＡＳ）のパケットモードでフレームを送受信可能な装置は、コントローラを具備する。前記コントローラは、前記外部装置にフレームを送信し、前記外部装置によって前記フレームが正常に受信されなかった場合、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成される。【選択図】図４
2019133614.tif 000002
【特許請求の範囲】
【請求項１】
外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース（ＳＡＳ）のパケットモードでフレームを送受信可能な装置であって、
前記外部装置にフレームを送信し、前記外部装置によって前記フレームが正常に受信されなかった場合、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成されるコントローラを具備する装置。
【請求項２】
前記フレームは、シリアル・スモール・コンピュータ・システム・インターフェース・プロトコル（ＳＳＰ）フレームである請求項１記載の装置。
【請求項３】
前記コントローラは、前記外部装置から前記フレームに対する応答を受信し、前記応答が受信エラーを示すＮＡＫプリミティブを含むとき、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成される請求項２記載の装置。
【請求項４】
前記フレームは、アドレス・フレームである請求項１記載の装置。
【請求項５】
前記コントローラは、さらに、前記フレームに対するタイムアウトを検出したことに応じ、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成される請求項４記載の装置。
【請求項６】
ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信する機能を、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するタイミング毎にオンまたはオフに設定する一つ以上のスイッチをさらに具備する請求項３または請求項５に記載の装置。
【請求項７】
前記コントローラは、前記外部装置にフレームを送信し、前記外部装置から前記フレームに対する、受信エラーを示すＮＡＫプリミティブを含む応答を受信する動作がＮ回連続した場合に、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信する機能を有効にするように構成される請求項１記載の装置。
【請求項８】
前記コントローラは、前記外部装置にアドレス・フレームを送信し、前記アドレス・フレームに対するタイムアウトがＮ回連続した場合に、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信する機能を有効にするように構成される請求項１記載の装置。
【請求項９】
外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース（ＳＡＳ）のパケットモードでフレームを送受信可能な装置であって、
プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを含むＳＡＳプロトコル・レイヤ（ＳＰＬ）パケットを前記外部装置に送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成されるコントローラを具備する装置。
【請求項１０】
前記コントローラは、さらに、フレームの送信開始を示すプリミティブを前記外部装置に送信した後にのみ、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成される請求項９記載の装置。
【請求項１１】
前記コントローラは、さらに、第１フレームの送信開始を示すプリミティブを前記外部装置に送信した後と、前記第１フレームの送信完了を示すプリミティブを前記外部装置に送信する前に、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを前記外部装置に送信した後とにのみ、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成される請求項９記載の装置。
【請求項１２】
ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信する機能を、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するタイミング毎にオンまたはオフに設定する一つ以上のスイッチをさらに具備する請求項９乃至請求項１１のいずれか一項に記載の装置。
【請求項１３】
前記コントローラは、前記外部装置にフレームを送信し、前記外部装置から前記フレームに対する、受信エラーを示すＮＡＫプリミティブを含む応答を受信する動作がＮ回連続した場合に、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信する機能を有効にするように構成される請求項９記載の装置。
【請求項１４】
前記コントローラは、前記外部装置にアドレス・フレームを送信し、前記アドレス・フレームに対するタイムアウトがＮ回連続した場合に、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信する機能を有効にするように構成される請求項９記載の装置。
【請求項１５】
外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース（ＳＡＳ）のパケットモードでフレームを送受信可能な装置の制御方法であって、
前記外部装置にフレームを送信し、
前記外部装置によって前記フレームが正常に受信されなかった場合、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信する制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース（シリアル・アタッチドＳＣＳＩ：ＳＡＳ）を用いて接続される装置、および該装置の制御方法に関する。
【背景技術】
【０００２】
ＳＡＳは、二つの装置間を接続するためのインターフェース規格の一つである。ＳＡＳでは、例えば、イニシエータ・デバイス（以下、イニシエータとも称する）とターゲット・デバイス（以下、ターゲットとも称する）との間で接続を確立し、コマンドやユーザデータ等を送受信するための仕様が規定されている。
【０００３】
イニシエータとターゲットとはそれぞれ、送受信されるインターフェイスデータのビットの偏りを避けるための機構であるスクランブラおよびデスクランブラを備える。イニシエータのスクランブラとターゲットのデスクランブラとが同期している場合、イニシエータにより送信され、ターゲットにより受信されるインターフェイスデータは、適切にスクランブル／デスクランブルされる。同様に、ターゲットのスクランブラとイニシエータのデスクランブラとが同期している場合、ターゲットにより送信され、イニシエータにより受信されるインターフェイスデータは、適切にスクランブル／デスクランブルされる。
【０００４】
ＳＡＳ４では、ＳＡＳ  Ｇｅｎ５が新たに規格されている。ＳＡＳ  Ｇｅｎ５では、ＳＡＳ  Ｇｅｎ４でサポートされていたｄｗｏｒｄモードに替わり、パケットモードがサポートされる。ｄｗｏｒｄモードではインターフェイスデータが４０ビット単位で扱われるのに対して、パケットモードではインターフェイスデータが１５０ビット単位で扱われる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】米国特許出願公開第２０１７／００９９３７１号明細書
【特許文献２】米国特許出願公開第２０１２／０１９２０３８号明細書
【特許文献３】米国特許出願公開第２０１５／０１５４０７０号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００６】
また、ｄｗｏｒｄモードとパケットモードとでは、スクランブラとデスクランブラとが同期されるタイミングが異なっている。ｄｗｏｒｄモードでは、フレームの開始を示すプリミティブ（制御信号）の送信に応じてスクランブラが初期化され、このプリミティブの受信に応じてデスクランブラが初期化される。
【０００７】
これに対して、パケットモードでは、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブ（以下、ＰＡＣＫＥＴ＿ＳＹＮＣとも称する）の送信に応じてスクランブラが初期化され、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じてデスクランブラが初期化される。ＰＡＣＫＥＴ＿ＳＹＮＣが送受信されるタイミングは、フレームの送受信とは何等関係がない。そのため、予期せぬ動作によってスクランブラとデスクランブラとの同期ずれが発生した場合には、再度、ＰＡＣＫＥＴ＿ＳＹＮＣが送受信されるまで同期ずれが継続し、イニシエータとターゲットとの間で伝送されるフレームにエラーが発生し続ける可能性がある。
【０００８】
本実施形態が解決しようとする課題は、正常にフレームを伝送できる装置および制御方法を提供することである。
【課題を解決するための手段】
【０００９】
実施形態によれば、外部装置との間で、シリアル・アタッチド・スモール・コンピュータ・システム・インターフェース（ＳＡＳ）のパケットモードでフレームを送受信可能な装置は、コントローラを具備する。前記コントローラは、前記外部装置にフレームを送信し、前記外部装置によって前記フレームが正常に受信されなかった場合、ＰＡＣＫＥＴ＿ＳＹＮＣエクステンデッド・バイナリ・プリミティブを前記外部装置に送信するように構成される。
【図面の簡単な説明】
【００１０】
【図１】第１実施形態に係る装置を含む情報処理システムの構成を示すブロック図。
【図２】ＳＡＳ  Ｇｅｎ５の装置に設けられるスクランブラの動作と、ＳＡＳ  Ｇｅｎ４の装置に設けられるスクランブラの動作との相違を説明するための図。
【図３】ＳＡＳ  Ｇｅｎ４の装置の構成を示すブロック図。
【図４】第１実施形態の装置の構成を示すブロック図。
【図５】第１実施形態の装置によって送受信されるパケットの構成を示す図。
【図６】第１実施形態の装置に設けられるスクランブラおよびデスクランブラの構成を示すブロック図。
【図７】図１の情報処理システムにおける正常なフレーム送信例を示す図。
【図８】図１の情報処理システムにおいて、フレーム送信に対してＣＲＣエラーが連続して発生する例を示す図。
【図９】図１の情報処理システムにおいて、ＣＲＣエラーを示すプリミティブを受信したことに応じてＰＡＣＫＥＴ＿ＳＹＮＣが送信される例を示す図。
【図１０】第１実施形態の装置によって実行される送信制御処理の手順の例を示すフローチャート。
【図１１】第１実施形態の装置によって実行される応答制御処理の手順の例を示すフローチャート。
【図１２】第１実施形態の装置によって実行されるプリミティブ・セグメント送信処理の手順の例を示すフローチャート。
【図１３】第１実施形態の装置によって実行されるフレーム・セグメント送信処理の手順の例を示すフローチャート。
【図１４】第１実施形態の装置によって実行されるフレーム制御処理の手順の例を示すフローチャート。
【図１５】第１実施形態の装置によって実行される受信制御処理の手順の例を示すフローチャート。
【図１６】第２実施形態に係る装置を含む情報処理システムにおいて、タイムアウトが検出された後にＰＡＣＫＥＴ＿ＳＹＮＣが送信される例を示す図。
【図１７】第２実施形態の装置によって実行される送信制御処理の手順の例を示すフローチャート。
【図１８】第２実施形態の装置によって実行される応答制御処理の手順の例を示すフローチャート。
【図１９】第２実施形態の装置によって実行される受信制御処理の手順の例を示すフローチャート。
【図２０】第３実施形態に係る装置を含む情報処理システムにおいて、プリミティブが送信された後にＰＡＣＫＥＴ＿ＳＹＮＣが送信される例を示す図。
【図２１】第３実施形態の装置によって実行される送信制御処理の手順の例を示すフローチャート。
【図２２】第３実施形態の装置によって実行される送信制御処理の手順の別の例を示すフローチャート。
【図２３】第４実施形態に係る装置を含む情報処理システムにおいて、フレーム送信開始を示すプリミティブが送信された後にＰＡＣＫＥＴ＿ＳＹＮＣが送信される例を示す図。
【図２４】フレーム中のプリミティブにより同期ずれが発生する例を示す図。
【図２５】第５実施形態に係る装置を含む情報処理システムにおいて、フレーム送信開始を示すプリミティブが送信された後と、フレーム中のプリミティブが送信された後とに、ＰＡＣＫＥＴ＿ＳＹＮＣが送信される例を示す図。
【発明を実施するための形態】
【００１１】
以下、実施の形態について図面を参照して説明する。
【００１２】
（第１実施形態）  
まず、図１を参照して、第１実施形態に係る装置を含む情報処理システムの構成を説明する。この情報処理システム１は、ＳＡＳインターフェースにより相互に接続される二つの装置を備える。これら装置の一方はイニシエータ・デバイス（イニシエータ）１０であり、他方はターゲット・デバイス（ターゲット）２０である。
【００１３】
イニシエータ１０は、例えば、コンピュータ等のホストである。ターゲット２０は、例えば、ＨＤＤ、ＳＳＤ等のストレージデバイスである。イニシエータ１０とターゲット２０とは、ＳＡＳによる規定に基づき動作するインターフェース装置１０Ａ，２０Ａをそれぞれ備えている。イニシエータ１０とターゲット２０とは、インターフェース装置１０Ａ，２０Ａを介して、コマンドやユーザデータ等を送受信することができる。イニシエータ１０とターゲット２０とは、それぞれ、フレームを送信するトランスミッタ・デバイスとフレームを受信するレシーバ・デバイス（Ｒｘ）のいずれとしても動作可能である。伝送されるフレームは、ＣＲＣを含み、フレームデータの信頼性が確保されている。
【００１４】
フレームは、アドレス・フレーム、シリアル・スモール・コンピュータ・システム・インターフェース・プロトコル（ＳＳＰ）フレーム、シリアル・マネージメント・プロトコル（ＳＭＰ）フレーム、またはシリアル・アドバンスド・テクノロジー・アタッチメント・トンネルド・プロトコル（ＳＴＰ）フレームである。
【００１５】
イニシエータ１０のインターフェース装置１０Ａとターゲット２０のインターフェース装置２０Ａとはそれぞれ、送受信されるインターフェイスデータのビットの偏りを避けるための機構であるスクランブラおよびデスクランブラを備える。イニシエータ１０からターゲット２０にフレームデータ（フレーム）が送信される場合、イニシエータ１０は、スクランブラによってスクランブルされたフレームデータをターゲット２０に送信し、ターゲット２０は、イニシエータ１０から受信したフレームデータをデスクランブラによってデスクランブルする。同様に、ターゲット２０からイニシエータ１０にフレームデータが送信される場合、ターゲット２０は、スクランブラによってスクランブルされたフレームデータをイニシエータ１０に送信し、イニシエータ１０は、ターゲット２０から受信したフレームデータをデスクランブラによってデスクランブルする。
【００１６】
スクランブラとデスクランブラとはそれぞれ、動作（ＲＵＮ）毎に状態が遷移し、それによりスクランブル／デスクランブルに用いられるパターン（信号）が切り替わる。スクランブラとデスクランブラとは初期状態からの動作回数が同じであれば、すなわち、スクランブラとデスクランブラとが同期しているならば、同一のパターンを生成する。
【００１７】
したがって、イニシエータ１０のスクランブラとターゲット２０のデスクランブラとが同期していれば、これらスクランブラとデスクランブラとがスクランブル／デスクランブルのための同一のパターンを生成するので、イニシエータ１０からターゲット２０に伝送されるフレームデータを適切にスクランブル／デスクランブルすることができる。同様に、ターゲット２０のスクランブラとイニシエータ１０のデスクランブラとが同期していれば、これらスクランブラとデスクランブラとがスクランブル／デスクランブルのための同一のパターンを生成するので、ターゲット２０からイニシエータ１０に伝送されるフレームデータを適切にスクランブル／デスクランブルすることができる。
【００１８】
しかし、イニシエータ１０のスクランブラとターゲット２０のデスクランブラとの間で動作回数のずれ（同期ずれ）が発生した場合や、ターゲット２０のスクランブラとイニシエータ１０のデスクランブラとの間で動作回数のずれが発生した場合には、アイドル中に検出する術はなく、フレームの受信時に受信エラーとして検出されることになる。この受信エラーは、例えば、ＣＲＣエラーである。
【００１９】
ところで、ＳＡＳ  Ｇｅｎ４のｄｗｏｒｄモードと、ＳＡＳ  Ｇｅｎ５のパケットモードとでは、スクランブラおよびデスクランブラの動作に異なる点がある。図２は、ＳＡＳ  Ｇｅｎ４のスクランブラおよびデスクランブラと、ＳＡＳ  Ｇｅｎ５のスクランブラおよびデスクランブラとで、動作が同じである点と異なる点とを示す。
【００２０】
図２に示すように、ＳＡＳ  Ｇｅｎ４のスクランブラは、プリミティブが送信されるときに動作せず、プリミティブをスクランブルしない。また、ＳＡＳ  Ｇｅｎ４のデスクランブラは、プリミティブが受信されるときに動作せず、プリミティブをデスクランブルしない。
【００２１】
一方、ＳＡＳ  Ｇｅｎ５のスクランブラは、プリミティブが送信されるときに動作するが、プリミティブをスクランブルしない。また、ＳＡＳ  Ｇｅｎ５のデスクランブラは、プリミティブが受信されるときに動作するが、プリミティブをデスクランブルしない。
【００２２】
ここで、スクランブラが動作するとは、スクランブラの動作回数が増加し、スクランブラの状態が次の状態に遷移することを意味する。スクランブラは、状態が遷移する毎に、スクランブルのための異なるパターンを生成する。また、デスクランブラが動作するとは、デスクランブラの動作回数が増加し、デスクランブラの状態が次の状態に遷移することを意味する。デスクランブラは、状態が遷移する毎に、デスクランブルのための異なるパターンを生成する。
【００２３】
また、ＳＡＳ  Ｇｅｎ４のスクランブラおよびデスクランブラは、フレーム内のｄｗｏｒｄまたはフレーム外のｄｗｏｒｄが送信されるときに動作し、ｄｗｏｒｄをスクランブルする。同様に、ＳＡＳ  Ｇｅｎ５のスクランブラおよびデスクランブラは、フレーム内のｄｗｏｒｄまたはフレーム外のｄｗｏｒｄが送信されるときに動作し、ｄｗｏｒｄをスクランブルする。
【００２４】
このように、ＳＡＳ  Ｇｅｎ４のスクランブラおよびデスクランブラと、ＳＡＳ  Ｇｅｎ５のスクランブラおよびデスクランブラとでは、プリミティブが送受信されるときに動作するかどうかという点において異なっている。
【００２５】
図３および図４に示すように、ＳＡＳ  Ｇｅｎ４の装置３０と本実施形態のＳＡＳ  Ｇｅｎ５の装置１０，２０とは、上述した相違点に応じて異なる構成を有している。
【００２６】
図３は、ＳＡＳ  Ｇｅｎ４の装置３０の構成を示す。この装置３０は、イニシエータとターゲットのいずれとしても動作し得る。この装置３０は、ＳＡＳ  Ｇｅｎ４インターフェースにより接続された別の装置３０との間で、プリミティブやフレームデータを含むフレームを送受信することができる。
【００２７】
装置３０は、コントローラ１０１、プリミティブ・ジェネレータ１０２、３２ｂ４０ｂ（８ｂ１０ｂ）エンコーダ１０３、フレーム送信コントローラ１０４、ＣＲＣジェネレータ１０５、スクランブラ１０６、４０ｂ３２ｂ（１０ｂ８ｂ）デコーダ１０７、プリミティブ・デコーダ１０８、デスクランブラ１０９、ＣＲＣデコーダ１１０、およびフレーム受信コントローラ１１１を備える。これら各部１０１〜１１１は、Ｓｙｓｔｅｍ−ｏｎ−ａ−ｃｈｉｐ（ＳｏＣ）内の回路によって実現され得る。なお、これら各部１０１〜１１１の機能は、回路のようなハードウェアとして実現されてもよいし、ファームウェアとして実現されてもよい。
【００２８】
コントローラ１０１は、装置３０内の様々なコンポーネントの動作を制御する。コントローラ１０１は、別の装置３０にフレームを送信するために装置３０内の各部を制御し、別の装置３０からフレームを受信するために装置３０内の各部を制御する。また、コントローラ１０１は、フレーム制御機構１１５を有している。フレーム制御機構１１５は、受信したプリミティブやフレームに応じた応答等の処理機能や、タイムアウトを検出するためのタイマ機能を備える。フレーム制御機構１１５は、フレームが送信されたとき、カウンタ１１５Ｂをインクリメントすると共に、タイマ１１５Ａを起動する。フレーム制御機構１１５は、送信したフレームに対する応答が受信されたとき、カウンタ１１５Ｂをデクリメントする。そして、カウンタ１１５Ｂが０になった場合、タイマ１１５Ａを停止する。また、フレーム制御機構１１５は、タイマ１１５Ａがタイムアウトを検出した場合、タイムアウトに応じた処理が行われるように制御する。カウンタ１１５Ｂは、送信されたフレームの数と受信された応答（ＡＣＫ／ＮＡＫ）の数とのバランスを示す。
【００２９】
以下では、フレームが送信される場合とフレームが受信される場合とについて、装置３０内の各部の動作を説明する。
【００３０】
まず、装置３０が別の装置３０にフレームを送信する場合について説明する。この場合、コントローラ１０１、プリミティブ・ジェネレータ１０２、３２ｂ４０ｂエンコーダ１０３、フレーム送信コントローラ１０４、ＣＲＣジェネレータ１０５、およびスクランブラ１０６が動作する。
【００３１】
プリミティブ・ジェネレータ１０２は、コントローラ１０１またはＣＲＣジェネレータ１０５による要求（通知）に応じて、プリミティブを生成し、生成されたプリミティブを３２ｂ４０ｂエンコーダ１０３に出力する。また、生成されたプリミティブが、フレームの開始を示すＳＯＦプリミティブ（以下、ＳＯＦとも称する）またはＳＯＡＦプリミティブ（以下、ＳＯＡＦとも称する）である場合、プリミティブ・ジェネレータ１０２は、ＳＯＦまたはＳＯＡＦが送信されることをスクランブラ１０６に通知する。
【００３２】
フレーム送信コントローラ１０４は、コントローラ１０１による要求に応じて、フレームに含まれるフレームデータの送信を制御する。フレーム送信コントローラ１０４は、例えば、３２ビット単位のフレームデータ（４個のデータバイト）をＣＲＣジェネレータ１０５に出力する。
【００３３】
ＣＲＣジェネレータ１０５は、フレームに含まれるフレームデータのＣＲＣ値を算出する。ＣＲＣジェネレータ１０５は、フレームデータとＣＲＣ値とをスクランブラ１０６に出力する。また、ＣＲＣジェネレータ１０５は、フレーム内の全てのフレームデータを用いてＣＲＣ値を算出した後に、プリミティブ・ジェネレータ１０２に、Ｂ＿ＥＯＦｓ（Ｂ＿ＥＯＦ（０）、Ｂ＿ＥＯＦ（１）、Ｂ＿ＥＯＦ（２）、またはＢ＿ＥＯＦ（３））プリミティブ（以下、Ｂ＿ＥＯＦｓとも称する）またはＥＯＡＦプリミティブ（以下、ＥＯＡＦとも称する）の生成を要求するか、あるいはＣＲＣ値が算出されたことを通知する。この要求または通知に応じて、プリミティブ・ジェネレータ１０２はＢ＿ＥＯＦｓまたはＥＯＡＦを生成する。
【００３４】
より具体的には、Ｂ＿ＥＯＦｓの生成が要求された場合、プリミティブ・ジェネレータ１０２は、送信されるフレーム内のフレームデータに含まれるＤａｔａ  ｄｗｏｒｄの数（以下、送信データ数とも称する）に応じて、Ｂ＿ＥＯＦ（＄ＰＡＤ）を生成する。＄ＰＡＤは変数であり、下記の式（１）により決定される。  
【００３５】
＄ＰＡＤ  ＝  ４−（送信データ数  ｍｏｄ  ４）      式（１）  
この変数＄ＰＡＤは、送信されるフレーム内のフレームデータのサイズが４Ｄｗｏｒｄの倍数でない場合に、４Ｄｗｏｒｄの倍数になるようにフレームデータに追加されるパッドｄｗｏｒｄの数を表す。また、ＣＲＣ値の算出には、追加されるパッドｄｗｏｒｄは用いられない。そのため、プリミティブ・ジェネレータ１０２は、送信先の装置３０でフレームデータに追加されたパッドｄｗｏｒｄの数が分かるように、この数に対応するＢ＿ＥＯＦ（＄ＰＡＤ）を生成する。
【００３６】
スクランブラ１０６は、ビットの偏りを避けるために、入力されたインターフェイスデータをスクランブルする。スクランブラ１０６は、例えば、繰り返しのパターンを最小化するために、線形フィードバック・シフト・レジスタによって生成されたパターンと、入力されたデータの各ビットとを排他的論理和（ＸＯＲ）演算することにより、データをスクランブルする。スクランブラ１０６は、スクランブルされたインターフェイスデータを３２ｂ４０ｂエンコーダ１０３に出力する。インターフェイスデータをスクランブルした後、スクランブラ１０６の状態は次の状態に遷移する、すなわち、スクランブラ１０６の動作回数（ＲＵＮ回数）が１だけ増加する。
【００３７】
スクランブラ１０６は、プリミティブ・ジェネレータ１０２によって、ＳＯＦまたはＳＯＡＦが送信されることが通知されたとき、スクランブラ１０６を初期化する。初期化により、スクランブラ１０６は初期状態に設定され、したがって、スクランブラ１０６の動作回数は０になる。
【００３８】
３２ｂ４０ｂエンコーダ１０３は、入力された情報（プリミティブ、またはスクランブルされたフレームデータもしくはＣＲＣ値）に３２ｂ４０ｂエンコード処理を施すことにより、すなわち、入力された情報内の８ビット毎に８ｂ１０ｂエンコード処理を施すことにより、４０ビットの情報を生成する。つまり、３２ｂ４０ｂエンコード処理により、入力された３２ビットの情報が４０ビットの情報に変換される。３２ｂ４０ｂエンコーダ１０３は、生成された４０ビットの情報を別の装置３０に送信する。
【００３９】
以上の動作により、装置３０はフレームを別の装置３０に送信することができる。フレームが送信されたことは、フレーム制御機構１１５に通知される。フレーム制御機構１１５は、この通知に応じて、上述したようにタイマ１１５Ａおよびカウンタ１１５Ｂを用いた処理を行う。
【００４０】
また、装置３０が別の装置３０からフレームを受信する場合、コントローラ１０１、４０ｂ３２ｂ（１０ｂ８ｂ）デコーダ１０７、プリミティブ・デコーダ１０８、デスクランブラ１０９、ＣＲＣデコーダ１１０、およびフレーム受信コントローラ１１１が動作する。
【００４１】
４０ｂ３２ｂデコーダ１０７は、別の装置から受信された情報に４０ｂ３２ｂデコード処理を施すことにより、３２ビットの情報（プリミティブ、またはスクランブルされたフレームデータ）を取得する。つまり、４０ｂ３２ｂデコード処理により、受信された４０ビットの情報から、３２ビットの情報およびデータ／プリミティブ・インジケータが取得される。４０ｂ３２ｂデコーダ１０７は、データ／プリミティブ・インジケータを用いて、取得された３２ビットの情報にプリミティブとフレームデータのいずれが含まれているかを判定する。そして、４０ｂ３２ｂデコーダ１０７は、情報にプリミティブが含まれる場合には、その情報をプリミティブ・デコーダ１０８に出力し、情報にフレームデータ（またはＣＲＣ値）が含まれる場合には、その情報をデスクランブラ１０９に出力する。
【００４２】
プリミティブ・デコーダ１０８は、入力されたプリミティブを識別し、コントローラ１０１等と連携してそのプリミティブに応じた動作を行う。例えば、識別されたプリミティブがＳＯＦまたはＳＯＡＦである場合、プリミティブ・デコーダ１０８は、ＳＯＦまたはＳＯＡＦが受信されたことをデスクランブラ１０９に通知する。また、識別されたプリミティブがＢ＿ＥＯＦｓまたはＥＯＡＦである場合、プリミティブ・デコーダ１０８は、ＣＲＣデコーダ１１０に対して、ＣＲＣチェックを要求する。
【００４３】
デスクランブラ１０９は、入力されたデータをデスクランブルする。入力されたデータは、送信側である別の装置３０においてスクランブルされたデータである。デスクランブラ１０９は、例えば、線形フィードバック・シフト・レジスタによって生成されたパターンと、入力されたデータの各ビットとを排他的論理和（ＸＯＲ）演算することにより、データをデスクランブルする。デスクランブラ１０９は、デスクランブルされたデータをＣＲＣデコーダ１１０に出力する。データをデスクランブルした後、デスクランブラ１０９の状態は次の状態に遷移する、すなわち、デスクランブラ１０９の動作回数（ＲＵＮ回数）が１だけ増加する。
【００４４】
デスクランブラ１０９は、プリミティブ・デコーダ１０８によって、ＳＯＦまたはＳＯＡＦが受信されたことが通知されたとき、デスクランブラ１０９を初期化する。初期化により、デスクランブラ１０９は初期状態に設定され、したがって、デスクランブラ１０９の動作回数は０になる。
【００４５】
ＣＲＣデコーダ１１０は、受信されたフレーム内のデスクランブルされたフレームデータとＣＲＣ値とを用いて、当該フレームにＣＲＣエラーが発生しているかどうかを判定する。ＣＲＣデコーダ１１０は、例えば、プリミティブ・デコーダ１０８によって、Ｂ＿ＥＯＦｓまたはＥＯＡＦが受信されたことが通知されたとき、フレームにＣＲＣエラーが発生しているかどうかを判定する。
【００４６】
あるフレームデータがスクランブルされたときのスクランブラ１０６の動作回数と、当該データがデスクランブルされたときのデスクランブラ１０９の動作回数とが同一であるならば、すなわち、これらスクランブラ１０６とデスクランブラ１０９とが同期しているならば、デスクランブラ１０９は、フレームデータやＣＲＣ値を適切にデスクランブルすることができる。そして、フレームデータとＣＲＣ値とが適切にデスクランブルされた場合、受信されたフレームから、スクランブラ１０６とデスクランブラ１０９の同期ずれに起因するＣＲＣエラーは検出されない。
【００４７】
一方、あるフレームデータがスクランブルされたときのスクランブラ１０６の動作回数と、当該フレームデータがデスクランブルされたときのデスクランブラ１０９の動作回数とが同一でないならば、すなわち、これらスクランブラ１０６とデスクランブラ１０９とが同期していなければ、デスクランブラ１０９は、フレームデータやＣＲＣ値を適切にデスクランブルすることができない。ＣＲＣデコーダ１１０は、フレームデータやＣＲＣ値が適切にデスクランブルされなかった場合、受信されたフレームにＣＲＣエラーが発生していることを検出する。
【００４８】
ＣＲＣエラーが発生していない場合、ＣＲＣデコーダ１１０は、デスクランブルされたフレームデータをフレーム受信コントローラ１１１に出力する。この場合、フレーム受信コントローラ１１１は、コントローラ１０１等と連携して、入力されたフレームデータ（デスクランブルされたフレームデータ）を処理する。例えば、装置３０がストレージデバイスであるならば、ユーザデータを記憶媒体に格納するための処理等が行われる。例えば、フレームがＳＳＰフレームであるならば、コントローラ１０１は、上述したフレームを送信するための動作により、肯定応答を示すＡＣＫプリミティブを送信するように、装置３０内の各部を制御してもよい。また、例えば、フレームが接続要求のためのオープン・アドレス・フレームであるならば、コントローラ１０１は、接続要求を承認することを示すＯＰＥＮ＿ＡＣＣＥＰＴプリミティブ、あるいは接続要求を拒絶することを示すＯＰＥＮ＿ＲＥＪＥＣＴプリミティブを送信するように、装置３０内の各部を制御してもよい。
【００４９】
一方、ＣＲＣエラーが発生している場合、ＣＲＣデコーダ１１０は、ＣＲＣエラーが発生していることをフレーム受信コントローラ１１１に通知する。そして、例えば、フレームがＳＳＰフレームである場合、フレーム受信コントローラ１１１は、コントローラ１０１等と連携して、上述したプリミティブを送信するための動作により、受信エラーが発生したことを示すＮＡＫプリミティブを送信するように、装置３０内の各部を制御する。また、例えば、フレームがアドレス・フレームである場合、何も応答しない。なお、ＮＡＫプリミティブは、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）プリミティブ、ＮＡＫ（ＲＥＳＥＲＶＥＤ  ０）プリミティブ、ＮＡＫ（ＲＥＳＥＲＶＥＤ  １）プリミティブ、またはＮＡＫ（ＲＥＳＥＲＶＥＤ  ２）プリミティブである。以下では、送信されるＮＡＫプリミティブが、ＣＲＣエラーが発生したことを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）である場合を主に例示する。
【００５０】
以上の動作により、装置３０はフレームを別の装置３０から受信することができる。
【００５１】
このような構成により、ＳＡＳ  Ｇｅｎ４の装置３０では、ＳＯＦまたはＳＯＡＦの送信に応じてスクランブラ１０６が初期化され、プリミティブの送信時にはスクランブラ１０６は動作しない。また、ＳＡＳ  Ｇｅｎ４の装置３０では、ＳＯＦまたＳＯＡＦの受信に応じてデスクランブラ１０９が初期化され、プリミティブの受信時にはデスクランブラ１０９は動作しない。
【００５２】
これに対して、本実施形態のＳＡＳ  Ｇｅｎ５の装置であるイニシエータ１０およびターゲット２０では、パケットモードにおいて、スクランブラおよびデスクランブラは以下のように構成される。  
（１）ＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じてスクランブラが初期化される。  
（２）プリミティブの送信時にスクランブラが動作する（動作回数が１だけ増加する）。
（３）ＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じてデスクランブラが初期化される。  
（４）プリミティブの受信時にデスクランブラが動作する（動作回数が１だけ増加する）。
【００５３】
図４は、ＳＡＳ  Ｇｅｎ５の装置の構成を示す。この装置は、イニシエータ１０とターゲット２０のいずれとしても動作し得る。以下では、ＳＡＳ  Ｇｅｎ５の装置を、イニシエータ／ターゲット１０，２０とも表記する。イニシエータ１０とターゲット２０とは、ＳＡＳ  Ｇｅｎ５インターフェースにより接続され、パケットモードにおいて、プリミティブやフレームデータを含むフレームをパケット単位で送受信することができる。アドレス・フレーム、ＳＳＰフレーム、ＳＭＰフレーム、およびＳＴＰフレームは、それぞれ一つ以上のパケットで構成される。
【００５４】
図５は、イニシエータ１０とターゲット２０との間で送受信されるパケット（ＳＡＳプロトコル・レイヤ（ＳＰＬ）パケット）３１の構成を示す。図５に示すように、パケットは、１５０ビットのサイズを有し、２ビットのヘッダ３１１と、１２８ビットのペイロード３１２と、２０ビットのフォワード・エラー・コレクション（ＦＥＣ）情報３１３とを含む。
【００５５】
ヘッダ３１１は、ペイロード３１２の種別を特定する。ペイロード３１２は、アイドルｄｗｏｒｄセグメント、プリミティブ・セグメント、スクランブルド・アイドル・セグメント、およびＳＰＬフレーム・セグメントの内のいずれか一つのセグメントを含む。
【００５６】
アイドルｄｗｏｒｄセグメントは、四つのアイドルｄｗｏｒｄを含み、フレーム外で送信される。プリミティブ・セグメントは、プリミティブ、バイナリ・プリミティブ、プリミティブ・パラメータ、またはエクステンデッド・バイナリ・プリミティブを含む。スクランブルド・アイドル・セグメントは、任意の四つのＤａｔａ  ｄｗｏｒｄを含む。ＳＰＬフレーム・セグメントは、アドレス・フレームの四つのＤａｔａ  ｄｗｏｒｄを含むアドレス・フレーム・セグメントと、ＳＳＰフレームの四つのＤａｔａ  ｄｗｏｒｄを含むＳＳＰフレーム・セグメントと、ＳＭＰフレームの四つのＤａｔａ  ｄｗｏｒｄを含むＳＭＰフレーム・セグメントと、ＳＴＰフレームの四つのＤａｔａ  ｄｗｏｒｄを含むＳＴＰフレーム・セグメントとの内のいずれか一つのセグメントを含む。
【００５７】
また、ＦＥＣ情報３１３には、エラー検出およびエラー訂正のための情報が含まれており、例えば、リード・ソロモン符号が用いられる。
【００５８】
図４に戻り、イニシエータ／ターゲット１０，２０は、コントローラ２０１、プリミティブ・ジェネレータ２０２、１２８ｂ１３０ｂ（８ｂ１０ｂ）エンコーダ２０３、スクランブラ２０４、ＦＥＣエンコーダ２０５、フレーム送信コントローラ２０６、ＣＲＣジェネレータ２０７、ＦＥＣデコーダ２０８、デスクランブラ２０９、１３０ｂ１２８ｂ（１０ｂ８ｂ）デコーダ２１０、プリミティブ・デコーダ２１１、ＣＲＣデコーダ２１２、およびフレーム受信コントローラ２１３を備える。
【００５９】
コントローラ２０１は、イニシエータ／ターゲット１０，２０内の様々なコンポーネントの動作を制御する。コントローラ２０１は、別のイニシエータ／ターゲット１０，２０にフレームを送信するためにイニシエータ／ターゲット１０，２０内の各部を制御し、別のイニシエータ／ターゲット１０，２０からフレームを受信するためにイニシエータ／ターゲット１０，２０内の各部を制御する。また、コントローラ２０１は、フレーム制御機構２１５を有している。フレーム制御機構２１５は、受信したプリミティブやフレームデータに応じた応答等の処理機能や、タイムアウトを検出するためのタイマ機能を備える。フレーム制御機構２１５は、フレームが送信されたとき、カウンタ２１５Ｂをインクリメントすると共に、タイマ２１５Ａを起動する。フレーム制御機構２１５は、送信したフレームに対する応答が受信されたとき、カウンタ２１５Ｂをデクリメントする。そして、カウンタ２１５Ｂが０になった場合、タイマ２１５Ａを停止する。また、フレーム制御機構２１５は、タイマ２１５Ａがタイムアウトを検出した場合、タイムアウトに応じた処理を行う。カウンタ２１５Ｂは、送信されたフレームの数と受信された応答（ＡＣＫ／ＮＡＫ）の数とのバランスを示す。
【００６０】
コントローラ２０１は、例えば、別のイニシエータ／ターゲット１０，２０にフレームを送信し、そのフレーム対する応答を受信し、当該応答がＣＲＣエラーを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含むとき、ＰＡＣＫＥＴ＿ＳＹＮＣをその別のイニシエータ／ターゲット１０，２０に送信するように構成される。また、コントローラ２０１は、別のイニシエータ／ターゲット１０，２０にフレームを送信し、そのフレーム対する、ＣＲＣエラーを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含む応答を受信する動作がＮ回連続して行われた場合に、ＰＡＣＫＥＴ＿ＳＹＮＣをその別のイニシエータ／ターゲット１０，２０に送信する機能を有効にするように構成されてもよい。なお、Ｎは１以上の整数である。
【００６１】
ＳＡＳ４では、ＰＨＹ＿Ｒｅａｄｙ（ＳＰ  ｓｔａｔｅ  ｍａｃｈｉｎｅ  ＳＰ１５）の後、スクランブラ・イニシャライゼーション・タイマまたはＳＰ−Ｒｅｓｙｎｃに従ったタイミングでＰＡＣＫＥＴ＿ＳＹＮＣを送信することが規定されている。ＰＡＣＫＥＴ＿ＳＹＮＣは、このようなＳＡＳ４で規定された以外のベンダ独自のタイミングで送信することもできる。
【００６２】
以下では、フレームが送信される場合とフレームが受信される場合とについて、イニシエータ／ターゲット１０，２０内の各部の動作を説明する。
【００６３】
まず、イニシエータ／ターゲット１０，２０が別のイニシエータ／ターゲット１０，２０にフレームを送信する場合について説明する。この場合、コントローラ２０１、プリミティブ・ジェネレータ２０２、１２８ｂ１３０ｂエンコーダ２０３、スクランブラ２０４、ＦＥＣエンコーダ２０５、フレーム送信コントローラ２０６、およびＣＲＣジェネレータ２０７が動作する。
【００６４】
プリミティブ・ジェネレータ２０２は、コントローラ２０１またはＣＲＣジェネレータ２０７による要求（通知）に応じて、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを生成する。プリミティブが生成された場合、プリミティブ・ジェネレータ２０２は、そのプリミティブを１２８ｂ１３０ｂエンコーダ２０３に出力する。また、バイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブが生成された場合、プリミティブ・ジェネレータ２０２は、そのバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブをスクランブラ２０４に出力する。なお、ＰＡＣＫＥＴ＿ＳＹＮＣが生成された場合、プリミティブ・ジェネレータ１０２は、ＰＡＣＫＥＴ＿ＳＹＮＣが送信されることをスクランブラ２０４に通知する。
【００６５】
１２８ｂ１３０ｂエンコーダ２０３は、入力されたプリミティブに２ビットのヘッダ情報を付加することにより、１３０ビットの情報を生成する。１２８ｂ１３０ｂエンコーダ２０３は、生成された１３０ビットの情報をスクランブラ２０４に出力する。
【００６６】
フレーム送信コントローラ２０６は、コントローラ２０１による要求に応じて、フレームに含まれるフレームデータの送信を制御する。フレーム送信コントローラ１０４は、例えば、パケットのペイロードとなる１２８ビット単位のフレームデータ（１６個のデータバイト）と、２ビットのヘッダ情報とをＣＲＣジェネレータ２０７に出力する。
【００６７】
ＣＲＣジェネレータ２０７は、フレームに含まれるフレームデータのＣＲＣ値を算出する。ＣＲＣジェネレータ２０７は、パケット単位で、フレームデータおよび／またはＣＲＣ値とヘッダ情報とをスクランブラ２０４に出力する。また、ＣＲＣジェネレータ２０７は、フレームに含まれる全てのフレームデータを用いてＣＲＣ値を算出した後に、プリミティブ・ジェネレータ２０２に、Ｂ＿ＥＯＦｓプリミティブまたはＥＯＡＦプリミティブの生成を要求し、ＣＲＣ値が算出されたことを通知する。この要求または通知に応じて、プリミティブ・ジェネレータ２０２はＢ＿ＥＯＦｓまたはＥＯＡＦを生成する。
【００６８】
スクランブラ２０４は、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブが入力された場合、スクランブラ２０４の状態を次の状態に遷移させる、すなわち、スクランブラ２０４の動作回数（ＲＵＮ回数）を１だけ増加させる。なお、スクランブラ２０４は、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブをスクランブルしない。スクランブラ２０４は、送信されるパケットのペイロードである、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを含むプリミティブ・セグメントをＦＥＣエンコーダ２０５に出力する。
【００６９】
また、スクランブラ２０４は、フレームデータおよび／またはＣＲＣ値が入力された場合、ビットの偏りを避けるために、フレームデータおよび／またはＣＲＣ値をスクランブルする。スクランブルされたフレームデータおよび／またはＣＲＣ値を含むフレーム・セグメントは、送信されるパケットのペイロードである。また、このペイロードには、２ビットのヘッダ情報が付加されている。スクランブラ２０４は、ヘッダ情報とペイロードとをＦＥＣエンコーダ２０５に出力する。そして、フレームデータをスクランブルした後、スクランブラ２０４の状態は次の状態に遷移する、すなわち、スクランブラ２０４の動作回数（ＲＵＮ回数）が１だけ増加する。
【００７０】
図６は、スクランブラ２０４の構成を示す。スクランブラ２０４は、繰り返しのパターンを最小化するために、パターン・ジェネレータ２７によって生成されたパターン（信号）と、入力データ２６１の各ビットとを排他的論理和（ＸＯＲ）演算２８することにより、入力データ２６１がスクランブルされた出力データ２６２を取得する。例えば、入力データ２６１および出力データ２６２は１２８ビットのデータであり、パターン・ジェネレータ２７は１２８ビットのパターンを生成する。パターン・ジェネレータ２７は、例えば、線形フィードバック・シフト・レジスタであり、Ｖａｌｉｄ信号に応じて、その状態が次の状態に遷移する（すなわち、動作回数が１だけ増加する）。
【００７１】
また、スクランブラ２０４は、プリミティブ・ジェネレータ２０２によって、ＰＡＣＫＥＴ＿ＳＹＮＣが送信されることが通知されたとき、スクランブラ２０４のパターン・ジェネレータ２７を初期化する。初期化により、パターン・ジェネレータ２７は初期状態に設定され、したがって、パターン・ジェネレータ２７の動作回数は０になる。スクランブラ２０４の初期化は、より具体的には、このスクランブラ２０４内のパターン・ジェネレータ２７の初期化を意味している。
【００７２】
図４に戻り、ＦＥＣエンコーダ２０５は、入力された情報（ヘッダとペイロード）にＦＥＣエンコード処理を施すことにより、２０ビットのＦＥＣ情報を付加して、１５０ビットの情報を生成する。上述したように、ＦＥＣ情報には、エラー検出およびエラー訂正のための情報が含まれている。ＦＥＣエンコーダ２０５は、生成された１５０ビットの情報で構成されるパケットを別のイニシエータ／ターゲット１０，２０に送信する。
【００７３】
以上の動作により、イニシエータ／ターゲット１０，２０は、フレームを構成するパケットを別のイニシエータ／ターゲット１０，２０に送信することができる。フレームが送信されたことは、フレーム制御機構２１５に通知される。フレーム制御機構２１５は、この通知に応じて、上述したようにタイマ２１５Ａおよびカウンタ２１５Ｂを用いた処理を行う。
【００７４】
また、イニシエータ／ターゲット１０，２０が別のイニシエータ／ターゲット１０，２０からフレームを受信する場合、コントローラ２０１、ＦＥＣデコーダ２０８、デスクランブラ２０９、１３０ｂ１２８ｂ（１０ｂ８ｂ）デコーダ２１０、プリミティブ・デコーダ２１１、ＣＲＣデコーダ２１２、およびフレーム受信コントローラ２１３が動作する。
【００７５】
ＦＥＣデコーダ２０８は、別のイニシエータ／ターゲット１０，２０から受信された１５０ビット毎の情報（パケット）にＦＥＣデコード処理を施すことにより、１３０ビットの情報を生成する。生成される１３０ビットの情報には、ヘッダとペイロードとが含まれる。また、ＦＥＣデコード処理には、ＦＥＣ情報を用いたエラー検出およびエラー訂正のための処理が含まれる。ＦＥＣデコーダ２０８は、デコードの成功または失敗をコントローラ２０１等に通知するようにしてもよい。デコードが成功した場合、ＦＥＣデコーダ２０８は、生成された１３０ビットの情報をデスクランブラ２０９に出力する。
【００７６】
デスクランブラ２０９は、入力された情報のペイロードとして、プリミティブ・セグメント（プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブ）が含まれる場合、デスクランブラ２０９の状態を次の状態に遷移させる、すなわち、デスクランブラ２０９の動作回数が１だけ増加する。なお、デスクランブラ２０９は、プリミティブ・セグメントをデスクランブルしない。デスクランブラ２０９は、プリミティブ・セグメントにプリミティブが含まれる場合、プリミティブ・セグメントを１３０ｂ１２８ｂデコーダ２１０に出力する。また、デスクランブラ２０９は、プリミティブ・セグメントにバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブが含まれる場合、プリミティブ・セグメントをプリミティブ・デコーダ２１１に出力する。
【００７７】
また、デスクランブラ２０９は、入力された情報のペイロードとして、フレーム・セグメント（フレームデータおよび／またはＣＲＣ値）が含まれる場合、当該ペイロードをデスクランブルする。デスクランブラ２０９は、デスクランブルされたフレーム・セグメントをＣＲＣデコーダ２１２に出力する。フレーム・セグメントをデスクランブルした後、デスクランブラ２０９の状態は次の状態に遷移する、すなわち、デスクランブラ２０９の動作回数が１だけ増加する。
【００７８】
デスクランブラ２０９は、図６を参照して上述したスクランブラ２０４と同様の構成を有する。すなわち、デスクランブラ２０９は、パターン・ジェネレータ２７によって生成されたパターン（信号）と、入力データ２６１の各ビットとを排他的論理和（ＸＯＲ）演算２８することにより、入力データ２６１がスクランブルされた出力データ２６２を取得する。
【００７９】
また、デスクランブラ２０９は、プリミティブ・デコーダ２１１によって、ＰＡＣＫＥＴ＿ＳＹＮＣが受信されたことが通知されたとき、デスクランブラ２０９のパターン・ジェネレータ２７を初期化する。初期化により、パターン・ジェネレータ２７は初期状態に設定され、したがって、パターン・ジェネレータ２７の動作回数は０になる。デスクランブラ２０９の初期化は、より具体的には、このデスクランブラ２０９内のパターン・ジェネレータ２７の初期化を意味している。
【００８０】
１３０ｂ１２８ｂデコーダ２１０は、入力された情報から２ビットのヘッダ情報が除かれた１２８ビットの情報（プリミティブ）を取得する。１３０ｂ１２８ｂデコーダ２１０は、取得された１２８ビットの情報をプリミティブ・デコーダ２１１に出力する。
【００８１】
プリミティブ・デコーダ２１１は、入力された情報に含まれるプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを識別し、コントローラ１０１等と連携してそのプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブに応じた動作を行う。
【００８２】
入力された情報にＰＡＣＫＥＴ＿ＳＹＮＣが含まれる場合、プリミティブ・デコーダ２１１は、ＰＡＣＫＥＴ＿ＳＹＮＣが受信されたことをデスクランブラ２０９に通知する。
【００８３】
入力された情報にＢ＿ＥＯＦｓまたはＥＯＡＦが含まれる場合、プリミティブ・デコーダ２１１は、ＣＲＣデコーダ２１２に対して、ＣＲＣチェックを要求し、ＣＲＣ値が算出されたことを通知する。
【００８４】
また、入力された情報にＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）が含まれる場合、プリミティブ・デコーダ２１１は、コントローラ２０１等と連携して、上述したＳＰＬパケットを送信するための動作により、ＰＡＣＫＥＴ＿ＳＹＮＣを含むＳＰＬパケットを送信するように、装置３０内の各部を制御する。ＣＲＣエラーを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を受信したときに、ＰＡＣＫＥＴ＿ＳＹＮＣを送信することにより、このイニシエータ／ターゲット１０，２０内のスクランブラ２０４と、別のイニシエータ／ターゲット１０，２０内のデスクランブラ２０９とを初期化し、同期させることができる。
【００８５】
上述したように、デスクランブラ２０９は、プリミティブ・デコーダ２１１によって、ＰＡＣＫＥＴ＿ＳＹＮＣが受信されたことが通知されたとき、デスクランブラ２０９（パターン・ジェネレータ２７）を初期化する。初期化により、デスクランブラ２０９は初期状態に設定され、したがって、デスクランブラ２０９の動作回数は０になる。
【００８６】
ＣＲＣデコーダ２１２は、受信されたフレーム内のデスクランブルされたフレームデータとＣＲＣ値とを用いて、当該フレームにＣＲＣエラーが発生しているかどうかを判定する。ＣＲＣデコーダ２１２は、例えば、プリミティブ・デコーダ２１１によって、Ｂ＿ＥＯＦｓまたはＥＯＡＦが受信されたことが通知されたとき、フレームにＣＲＣエラーが発生しているかどうかを判定する。
【００８７】
あるフレームデータがスクランブルされたときのスクランブラ２０４の動作回数と、当該フレームデータがデスクランブルされたときのデスクランブラ２０９の動作回数とが同一であるならば、すなわち、これらスクランブラ２０４とデスクランブラ２０９とが同期しているならば、デスクランブラ２０９は、フレームデータやＣＲＣ値を適切にデスクランブルすることができる。そして、フレームデータとＣＲＣ値とが適切にデスクランブルされた場合、受信されたフレームから、スクランブラ２０４とデスクランブラ２０９の同期ずれに起因するＣＲＣエラーは検出されない。
【００８８】
一方、あるフレームデータがスクランブルされたときのスクランブラ２０４の動作回数と、当該フレームデータがデスクランブルされたときのデスクランブラ２０９の動作回数とが同一でないならば、すなわち、これらスクランブラ２０４とデスクランブラ２０９とが同期していなければ、デスクランブラ２０９は、フレームデータやＣＲＣ値を適切にデスクランブルすることができない。ＣＲＣデコーダ２１２は、フレームデータやＣＲＣ値が適切にデスクランブルされなかった場合、受信されたフレームにＣＲＣエラーが発生していることを検出する。
【００８９】
ＣＲＣエラーが発生していない場合、ＣＲＣデコーダ２１２は、デスクランブルされたフレームデータをフレーム受信コントローラ２１３に出力する。この場合、フレーム受信コントローラ２１３は、コントローラ２０１等と連携して、入力されたフレームデータ（デスクランブルされたフレームデータ）を処理する。例えば、ストレージデバイスであるターゲット２０がフレームを受信したならば、ユーザデータを記憶媒体に格納するための処理等が行われる。例えば、フレームがＳＳＰフレームであるならば、コントローラ２０１は、上述したＳＰＬパケットを送信するための動作により、肯定応答を示すＡＣＫプリミティブを含むＳＰＬパケットを送信するように、イニシエータ／ターゲット１０，２０内の各部を制御してもよい。また、例えば、フレームが接続要求のためのオープン・アドレス・フレームであるならば、コントローラ２０１は、接続要求を承認することを示すＯＰＥＮ＿ＡＣＣＥＰＴプリミティブ、あるいは接続要求を拒絶することを示すＯＰＥＮ＿ＲＥＪＥＣＴプリミティブを含むＳＰＬパケットを送信するように、イニシエータ／ターゲット１０，２０内の各部を制御してもよい。
【００９０】
一方、ＣＲＣエラーが発生している場合、ＣＲＣデコーダ２１２は、フレームを破棄し、ＣＲＣエラーが発生していることをフレーム受信コントローラ２１３に通知し得る。そして、例えば、フレームがＳＳＰフレームである場合、フレーム受信コントローラ２１３は、コントローラ２０１等と連携して、上述したＳＰＬパケットを送信するための動作により、ＣＲＣエラーが発生したことを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）プリミティブを含むＳＰＬパケットを送信するように、イニシエータ／ターゲット１０，２０内の各部を制御する。また、例えば、フレームがアドレス・フレームである場合、何も応答しない。
【００９１】
以上の動作により、イニシエータ／ターゲット１０，２０は、フレームを別のイニシエータ／ターゲット１０，２０から受信し、受信したフレームを処理することができる。受信されたフレームがＡＣＫやＮＡＫのような応答を含む場合、応答が受信されたことがフレーム制御機構２１５に通知される。フレーム制御機構２１５は、この通知に応じて、上述したようにタイマ２１５Ａおよびカウンタ２１５Ｂを用いた処理を行う。
【００９２】
このような構成により、本実施形態のイニシエータ／ターゲット１０，２０では、ＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じてスクランブラ２０４が初期化され、プリミティブの送信時にスクランブラ２０４が動作する。また、本実施形態のイニシエータ／ターゲット１０，２０では、ＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じてデスクランブラ１０９が初期化され、プリミティブの受信時にデスクランブラ２０９が動作する。
【００９３】
なお、イニシエータ／ターゲット１０，２０には、ＰＡＣＫＥＴ＿ＳＹＮＣを別のイニシエータ／ターゲット１０，２０に送信する機能を、ＰＡＣＫＥＴ＿ＳＹＮＣを別のイニシエータ／ターゲット１０，２０に送信するタイミング毎にオンまたはオフに設定する一つ以上のスイッチがさらに設けられていてもよい。スイッチは、設定される送信タイミング毎に設けられる。つまり、一つ以上のスイッチは、一つ以上の送信タイミングにそれぞれ関連付けられる。なお、スイッチのオンまたはオフの設定は、例えば、対応するレジスタに設定された値で表されてもよい。その場合、例えば、コントローラ２０１が、レジスタの値に基づいて、スイッチに割り当てられたタイミングでのＰＡＣＫＥＴ＿ＳＹＮＣの送信機能をオンまたはオフに設定する。設定される送信タイミングは、例えば、送信したフレームに対する、ＣＲＣエラーを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）が受信されたタイミングである。
【００９４】
コントローラ２０１は、例えば、別のイニシエータ／ターゲット１０，２０にフレームを送信し、このフレームに対する、ＣＲＣエラーを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含む応答を受信する動作がＮ回連続して行われた場合に、オンに設定されたスイッチに関連付けられた送信タイミングでＰＡＣＫＥＴ＿ＳＹＮＣをその別のイニシエータ／ターゲット１０，２０に送信する機能を有効にするように構成され得る。この回数Ｎも、レジスタに設定され得る。
【００９５】
図７は、ターゲット２０からイニシエータ１０に正常にフレームが送信される例を示す。送信されるフレームは、ＳＳＰフレーム、ＳＭＰフレーム、またはＳＴＰフレームである。
【００９６】
以下では、ターゲット２０からイニシエータ１０にＳＳＰフレームが送信される場合のプリミティブおよびフレームデータの送受信を例示する。ここでは、ＳＳＰフレームが送信される前に、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期していることを想定する。図７に示すように、ＳＳＰフレームの送信が開始される前の時点において、ターゲット２０のスクランブラ２０４の動作回数（ＲＵＮ回数）とイニシエータ１０のデスクランブラ２０９の動作回数とはＡ＋０であり、同一である。
【００９７】
ターゲット２０からイニシエータ１０にＳＳＰフレームが送信される場合、まず、ターゲット２０は、ＳＳＰフレームの開始を示すＳＯＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ１１）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加して、Ａ＋０からＡ＋１になる。すなわち、ターゲット２０のスクランブラ２０４の状態が次の状態に遷移し、イニシエータ１０のデスクランブラ２０９の状態が次の状態に遷移する。
【００９８】
次に、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ１２）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加する。図７に示す例では、一つ以上のパケットが送受信されたことに応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とは、Ａ＋１からＢ＋１に増加している。
【００９９】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、ＳＳＰフレームの送信完了を示すＢ＿ＥＯＦｓを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ１３）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加して、Ｂ＋１からＢ＋２になる。
【０１００】
Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生していなければ、ＡＣＫを含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ１４）。なお、図示していないが、この送受信に応じて、イニシエータ１０のスクランブラ２０４の動作回数とターゲット２０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加する。
【０１０１】
以上のパケットの送受信では、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とが一致しており、したがって、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期している。そのため、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生せず、イニシエータ１０は正常にＳＳＰフレームを受信することができる。
【０１０２】
なお、図示したイニシエータ１０とターゲット２０とを置き換えることにより、イニシエータ１０からターゲット２０にＳＳＰフレームが送信される場合にも同様に、パケットを送受信することができる。
【０１０３】
一方、図８は、ターゲット２０からイニシエータ１０に正常にＳＳＰフレームが送信されない例を示す。ここでは、ＳＳＰフレームが送信される前に、予期せぬ動作により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との間で同期ずれが発生していることを想定する。図８に示すように、ＳＳＰフレームの送信が開始される前の時点において、ターゲット２０のスクランブラ２０４の動作回数がＡ＋０であるのに対して、イニシエータ１０のデスクランブラ２０９の動作回数がＺ＋０であり、動作回数が異なっている。
【０１０４】
ターゲット２０からイニシエータ１０にＳＳＰフレームが送信される場合、まず、ターゲット２０は、ＳＳＰフレームの開始を示すＳＯＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ２０１）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数が１だけ増加してＡ＋０からＡ＋１になり、イニシエータ１０のデスクランブラ２０９の動作回数が１だけ増加してＺ＋０からＺ＋１になる。すなわち、ターゲット２０のスクランブラ２０４の状態が次の状態に遷移し、イニシエータ１０のデスクランブラ２０９の状態が次の状態に遷移する。
【０１０５】
次に、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ２０２，Ａ２０３）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加する。図８に示す例では、一つ以上のパケットが送受信されたことに応じて、ターゲット２０のスクランブラ２０４の動作回数がＡ＋１からＢ＋０に増加し、イニシエータ１０のデスクランブラ２０９の動作回数がＺ＋１からＹ＋０に増加している。
【０１０６】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、フレームの送信完了を示すＢ＿ＥＯＦｓを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ２０４）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数はＢ＋０からＢ＋１に増加し、イニシエータ１０のデスクランブラ２０９の動作回数はＹ＋０からＹ＋１に増加する。
【０１０７】
Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生しているので、ＳＳＰフレームを破棄し、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ２０５）。なお、図示していないが、この送受信に応じて、イニシエータ１０のスクランブラ２０４の動作回数とターゲット２０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加する。
【０１０８】
以上のＡ２０１からＡ２０４におけるパケットの送受信では、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とが一致しておらず、したがって、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期していない。そのため、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生し、イニシエータ１０は正常にＳＳＰフレームを受信することができない。
【０１０９】
この後、ターゲット２０とイニシエータ１０にＳＳＰフレームをさらに送信するために、パケットが送受信される場合（Ａ２０６からＡ２１０）も同様に、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期していないため、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが繰り返し発生する。
【０１１０】
本実施形態では、このようなスクランブラ２０４とデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが繰り返し発生することを防止するために、ＰＡＣＫＥＴ＿ＳＹＮＣを用いてイニシエータ１０とターゲット２０とを同期させる。より具体的には、ターゲット２０からイニシエータ１０にＰＡＣＫＥＴ＿ＳＹＮＣを送信することにより、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とを初期化し、同期させる。また、イニシエータ１０からターゲット２０にＰＡＣＫＥＴ＿ＳＹＮＣを送信することにより、イニシエータ１０のスクランブラ２０４とターゲットのデスクランブラ２０９とを初期化し、同期させる。
【０１１１】
図９は、ＣＲＣエラーを示すプリミティブ（例えば、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ））を受信したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣが送信される例を示す。
【０１１２】
Ａ３０１からＡ３０４までのＳＳＰフレーム送信のためのパケットの送受信は、図８に示したＡ２０１からＡ２０４までのパケットの送受信と同様である。また、図８に示したＡ２０５と同様に、Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生しているので、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ３０５）。
【０１１３】
そして、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含むパケットを受信したターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ３０６）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、Ｂ＋２からＢ＋３に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は、Ｙ＋３からＹ＋４に増加した後、０に初期化される。したがって、ＰＡＣＫＥＴ＿ＳＹＮＣの送受信に応じた初期化により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期する。
【０１１４】
次いで、ターゲット２０からイニシエータ１０にＳＳＰフレームがさらに送信される場合、ターゲット２０は、フレームの開始を示すＳＯＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ３０７）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加して、０から１になる。
【０１１５】
そして、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ３０８，Ａ３０９）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加する。図９に示す例では、一つ以上のパケットが送受信されたことに応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とは、１からＣ＋０に増加している。
【０１１６】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、ＳＳＰフレームの送信完了を示すＢ＿ＥＯＦｓを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ３１０）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加して、Ｃ＋０からＣ＋１になる。
【０１１７】
Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生していないので、ＡＣＫを含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ３１１）。なお、図示していないが、この送受信に応じて、イニシエータ１０のスクランブラ２０４の動作回数とターゲット２０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加する。
【０１１８】
以上のように、ターゲット２０は、イニシエータ１０からＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を受信したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣをイニシエータ１０に送信する。これにより、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが初期化され、同期する。そのため、これ以降のパケットの送受信では、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生せず、イニシエータ１０は正常にＳＳＰフレームを受信することができる。
【０１１９】
なお、図示したイニシエータ１０とターゲット２０とを置き換えることにより、イニシエータ１０からターゲット２０に正常にＳＳＰフレームを送信することができる。
【０１２０】
図１０から図１５のフローチャートを参照して、イニシエータ１０またはターゲット２０によって実行される送信制御処理、応答制御処理、フレーム制御処理、および受信制御処理の手順について説明する。以下では、説明を分かりやすくするために、ターゲット２０からイニシエータ１０にフレームが送信される場合を例示するが、記載されるターゲット２０とイニシエータ１０とを置き換えることにより、同様にして、イニシエータ１０からターゲット２０にフレームを送信することができる。
【０１２１】
図１０のフローチャートは、ターゲット２０によって実行される送信制御処理の手順の例を示す。このターゲット２０は、イニシエータ１０にフレームを送信した後に、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を受信したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成されている。
【０１２２】
まず、ターゲット２０は、イニシエータ１０へフレームを送信する必要があるか否かを判定する（ステップＳ１０１）。フレームを送信する必要がない場合（ステップＳ１０１のＮＯ）、ステップＳ１０１に戻り、イニシエータ１０へフレームを送信する必要があるか否かが再度判定される。なお、この場合に、ターゲット２０は、例えば、アイドルｄｗｏｒｄセグメントを含むパケットをイニシエータ１０に送信してもよい。
【０１２３】
フレームを送信する必要がある場合（ステップＳ１０１のＹＥＳ）、ターゲット２０は、ＳＯＦを生成し（ステップＳ１０２）、このＳＯＦを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ１０３）。このプリミティブ・セグメント処理については、図１１のフローチャートを参照して後述する。
【０１２４】
次いで、ターゲット２０は、フレームを構成する未送信のフレームデータがあるか否かを判定する（ステップＳ１０４）。未送信フレームデータがある場合（ステップＳ１０４のＹＥＳ）、ターゲット２０は、１パケット分以上の未送信フレームデータがあるか否かを判定する（ステップＳ１０５）。１パケット分のフレームデータは、例えば、４つのｄｗｏｒｄに相当するフレームデータである。１パケット分以上の未送信フレームデータがある場合（ステップＳ１０５のＹＥＳ）、ターゲット２０は、未送信フレームデータで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行し（ステップＳ１０６）、ステップＳ１０４に戻る。フレーム・セグメント送信処理については、図１２を参照して後述する。
【０１２５】
１パケット分以上の未送信フレームデータがない場合（ステップＳ１０５のＮＯ）、ターゲット２０は、フレームを構成するフレームデータのＣＲＣ値を算出する（ステップＳ１０７）。そして、ターゲット２０は、未送信フレームデータと算出されたＣＲＣ値とで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ１０８）。
【０１２６】
また、未送信フレームデータがない場合（ステップＳ１０４のＮＯ）、例えば、フレームを構成する全てのフレームデータがイニシエータ１０に送信済みである場合、ターゲット２０は、フレームを構成するフレームデータのＣＲＣ値を算出する（ステップＳ１０９）。そして、ターゲット２０は、算出されたＣＲＣ値とパッドｄｗｏｒｄとで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ１１０）。
【０１２７】
フレームを構成する全てのフレームデータとＣＲＣ値とがパケット単位でイニシエータ１０に送信された後（ステップＳ１０８またはステップＳ１１０の後）、ターゲット２０は、フレームの送信完了を示すＢ＿ＥＯＦｓを生成し（ステップＳ１１１）、このＢ＿ＥＯＦｓを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ１１２）。そして、ターゲット２０（フレーム送信コントローラ２０６）は、フレームを送信したことをコントローラ２０１内のフレーム制御機構２１５に通知し（ステップＳ１１３）、処理を終了する。フレーム制御機構２１５の動作については、図１４のフローチャートを参照して後述する。
【０１２８】
図１１のフローチャートは、ターゲット２０によって実行される応答制御処理の手順の例を示す。  
【０１２９】
まず、ターゲット２０は、イニシエータ１０から応答を受信したか否かを判定する（ステップＳ１２１）。応答が受信されていない場合（ステップＳ１２１のＮＯ）、ステップＳ１２１に戻り、応答が受信されたか否かが再度判定される。
【０１３０】
応答が受信された場合（ステップＳ１２１のＹＥＳ）、ターゲット２０（プリミティブ・デコーダ２１１）は、コントローラ２０１内のフレーム制御機構２１５に、応答を受信したことを通知する（ステップＳ１２２）。フレーム制御機構２１５の動作については、図１４のフローチャートを参照して後述する。そして、ターゲット２０は、応答の種別を判別する（ステップＳ１２３）。応答がＡＣＫである場合（ステップＳ１２３のＡＣＫ）、処理を終了する。
【０１３１】
一方、応答がＮＡＫ（ＣＲＣ＿ＥＲＲＯＲ）である場合（ステップＳ１２３のＮＡＫ（ＣＲＣ  ＥＲＲＯＲ））、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣを生成し（ステップＳ１２４）、このＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ１２５）。そして、ターゲット２０は、スクランブラ２０４を初期化し（ステップＳ１２６）、処理を終了する。初期化により、スクランブラ２０４の動作回数は０になる。
【０１３２】
以上により、送信したフレームに対する応答が、ＣＲＣエラーを示すＮＡＫ（ＣＲＣ＿ＥＲＲＯＲ）である場合に、ＰＡＣＫＥＴ＿ＳＹＮＣを送信し、ターゲット２０のスクランブラ２０４を初期化すると共に、イニシエータ１０のデスクランブラ２０９を初期化し、同期させることができる。したがって、ＣＲＣエラーが繰り返し発生することを防止することができる。
【０１３３】
図１２のフローチャートは、ターゲット２０により実行されるプリミティブ・セグメント送信処理の手順の例を示す。
【０１３４】
まず、ターゲット２０は、送信されるプリミティブの種別に応じて処理を分岐する（ステップＳ２１）。プリミティブが送信される場合（ステップＳ２１のプリミティブ）、ターゲット２０は、そのプリミティブを１２８ｂ１３０ｂ変換し、プリミティブ・セグメントを生成する（ステップＳ２２）。一方、バイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブが送信される場合（ステップＳ２１のバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブ）、ターゲット２０は、そのバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブを用いて、プリミティブ・セグメントを生成する（ステップＳ２３）。
【０１３５】
次いで、ターゲット２０は、スクランブラ２０４の状態を次の状態に遷移させる（ステップＳ２４）。つまり、ターゲット２０は、スクランブラ２０４の動作回数（ＲＵＮ回数）を１だけ増加させる。
【０１３６】
そして、ターゲット２０は、ＦＥＣのためのパリティ・シンボルが付加されたパケットを生成し（ステップＳ２５）、当該パケットをイニシエータ１０に送信する（ステップＳ２６）。
【０１３７】
以上により、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを含むパケットを送信することができる。その際、スクランブラ２０４は、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブをスクランブルしないが、スクランブラ２０４の状態は次の状態に遷移する。
【０１３８】
図１３のフローチャートは、ターゲット２０によって実行されるフレーム・セグメント送信処理の手順の例を示す。
【０１３９】
まず、ターゲット２０は、送信されるフレームデータとＣＲＣ値の少なくとも一方を含むフレーム・セグメントを生成する（ステップＳ３１）。ターゲット２０は、スクランブラ２０４によりフレーム・セグメントをスクランブルする（ステップＳ３２）。そして、ターゲット２０は、スクランブラ２０４の状態を次の状態に遷移させる（ステップＳ３３）。
【０１４０】
次いで、ターゲット２０は、ＦＥＣのためのパリティ・シンボルが付加されたパケットを生成し（ステップＳ３４）、当該パケットをイニシエータ１０に送信する（ステップＳ３５）。
【０１４１】
以上により、フレームデータとＣＲＣ値の少なくとも一方を含むパケットを送信することができる。その際、フレームデータおよびＣＲＣ値がスクランブラ２０４によりスクランブルされると共に、スクランブラ２０４の状態は次の状態に遷移する。
【０１４２】
図１４のフローチャートは、ターゲット２０により実行されるフレーム制御処理の手順の例を示す。より具体的には、このフレーム制御処理は、コントローラ２０１内のフレーム制御機構２１５の動作により実現される。
【０１４３】
まず、ターゲット２０（フレーム制御機構２１５）は、フレームが送信されたことが通知されたか否かを判定する（ステップＳ１３１）。フレームが送信されたことが通知された場合（ステップＳ１３１のＹＥＳ）、ターゲット２０は、カウンタ２１５Ｂをインクリメントする、すなわち、カウンタ２１５Ｂの値を１だけ増やす（ステップＳ１３２）。このカウンタ２１５Ｂは、送信されたフレームの数と受信された応答（ＡＣＫ／ＮＡＫ）の数とのバランスを示す。そして、ターゲット２０は、タイマ２１５Ａを起動する（ステップＳ１３３）。
【０１４４】
一方、フレームが送信されたことが通知されていない場合（ステップＳ１３１のＮＯ）、またはステップＳ１３３の後、ターゲット２０は、応答が受信されたことが通知されたか否かを判定する（ステップＳ１３４）。応答が受信されたことが通知された場合（ステップＳ１３４のＹＥＳ）、ターゲット２０は、カウンタ２１５Ｂをデクリメントする、すなわち、カウンタ２１５Ｂの値を１だけ減らす（ステップＳ１３５）。
【０１４５】
応答が受信されたことが通知されていない場合（ステップＳ１３４のＮＯ）、またはステップＳ１３５の後、ターゲット２０は、カウンタ２１５Ｂが０になったか否かを判定する（ステップＳ１３６）。カウンタ２１５Ｂが０になった場合（ステップＳ１３６のＹＥＳ）、ターゲット２０は、タイマ２１５Ａを停止し（ステップＳ１３７）、ステップＳ１３１に戻る。
【０１４６】
カウンタが０になっていない場合（ステップＳ１３６のＮＯ）、ターゲット２０は、タイマ２１５Ａがタイムアウトしたか否かを判定する（ステップＳ１３８）。タイマ２１５Ａがタイムアウトした場合（ステップＳ１３８のＹＥＳ）、ターゲット２０は、タイムアウトに応じた処理を行い（ステップＳ１３９）、ステップＳ１３１に戻る。一方、タイマ２１５Ａがタイムアウトしていない場合（ステップＳ１３８のＮＯ）、ステップＳ１３１に戻る。
【０１４７】
以上により、フレームの送信および応答の受信に応じてタイマ２１５Ａの起動／停止を制御すると共に、タイムアウトが発生した場合に適切に処理することができる。
【０１４８】
図１５のフローチャートを参照して、イニシエータ１０によって実行される受信制御処理の手順の例を説明する。
【０１４９】
まず、イニシエータ１０は、ターゲット２０からパケットを受信したか否かを判定する（ステップＳ４０１）。パケットを受信していない場合（ステップＳ４０１のＮＯ）、ステップＳ４０１に戻り、パケットを受信したか否かが再度判定される。
【０１５０】
パケットを受信した場合（ステップＳ４０１のＹＥＳ）、イニシエータ１０は、そのパケットにＦＥＣデコード処理を施す（ステップＳ４０２）。ＦＥＣデコード処理では、エラーの有無の判定、エラー位置の特定、エラー訂正、デコードの成功または失敗の通知等が行われる。
【０１５１】
ＦＥＣデコード処理が成功した場合には、イニシエータ１０は、デコードされたパケットに含まれるセグメントがプリミティブ・セグメントであるか否かを判定する（ステップＳ４０３）。パケットに含まれるセグメントがプリミティブ・セグメントでない場合（ステップＳ４０３のＮＯ）、イニシエータ１０は、そのセグメントをデスクランブルする（ステップＳ４０４）。そして、イニシエータ１０は、デスクランブラ２０９の状態を次の状態に遷移させ（ステップＳ４０５）、すなわち、デスクランブラ２０９の動作回数（ＲＵＮ回数）を１だけ増加させ、ステップＳ４０１に戻る。なお、プリミティブ・セグメントでないセグメントは、ＳＰＬフレーム・セグメント、アイドルｄｗｏｒｄセグメント、およびスクランブルド・アイドル・セグメントのいずれかである。
【０１５２】
一方、パケットに含まれるセグメントがプリミティブ・セグメントである場合（ステップＳ４０３のＹＥＳ）、イニシエータ１０は、デスクランブラ２０９の状態を次の状態に遷移させる（ステップＳ４０６）。そして、このプリミティブ・セグメントにプリミティブが含まれる場合には（ステップＳ４０７のプリミティブ）、イニシエータ１０は、プリミティブ・セグメントを１３０ｂ１２８ｂ変換する（ステップＳ４０８）。プリミティブ・セグメントにバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブが含まれる場合には（ステップＳ４０７のバイナリ・プリミティブまたはエクステンデッド・バイナリ・プリミティブ）、ステップＳ４０８がスキップされる。
【０１５３】
次いで、イニシエータ１０は、プリミティブ・セグメントにＰＡＣＫＥＴ＿ＳＹＮＣが含まれているか否かを判定する（ステップＳ４０９）。プリミティブ・セグメントにＰＡＣＫＥＴ＿ＳＹＮＣが含まれている場合（ステップＳ４０９のＹＥＳ）、イニシエータ１０は、デスクランブラ２０９を初期化し（ステップＳ４１０）、ステップＳ４０１に戻る。初期化により、デスクランブラ２０９の動作回数は０になる。
【０１５４】
また、プリミティブ・セグメントにＰＡＣＫＥＴ＿ＳＹＮＣが含まれていない場合（ステップＳ４０９のＮＯ）、イニシエータ１０は、プリミティブ・セグメントにフレームの送信完了を示すＢ＿ＥＯＦｓが含まれているか否かを判定する（ステップＳ４１１）。Ｂ＿ＥＯＦｓは、Ｂ_ＥＯＦ（０）、Ｂ_ＥＯＦ（１）、Ｂ_ＥＯＦ（２）、Ｂ_ＥＯＦ（３）、Ｂ_ＥＯＦ（０）（ＲＥＳＥＲＶＥＤ  １）、Ｂ_ＥＯＦ（１）（ＲＥＳＥＲＶＥＤ  ０）、Ｂ_ＥＯＦ（１）（ＲＥＳＥＲＶＥＤ  １）、Ｂ_ＥＯＦ（２）（ＲＥＳＥＲＶＥＤ  ０）、Ｂ_ＥＯＦ（２）（ＲＥＳＥＲＶＥＤ  １）、Ｂ_ＥＯＦ（３）（ＲＥＳＥＲＶＥＤ  ０）、及びＢ_ＥＯＦ（３）（ＲＥＳＥＲＶＥＤ  １）である。プリミティブ・セグメントにＢ＿ＥＯＦｓが含まれている場合（ステップＳ４１１のＹＥＳ）、イニシエータ１０は、フレームのＣＲＣ値をチェックし（ステップＳ４１２）、フレームにＣＲＣエラーが発生しているか否かを判定する（ステップＳ４１３）。
【０１５５】
ＣＲＣエラーが発生している場合（ステップＳ４１３のＹＥＳ）、イニシエータ１０は、フレームを破棄し、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を生成する（ステップＳ４１４）。そして、イニシエータ１０は、このＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行し（ステップＳ４１５）、ステップＳ４０１に戻る。このプリミティブ・セグメント処理については、図１１のフローチャートを参照して上述した通りである。
【０１５６】
ＣＲＣエラーが発生していない場合（ステップＳ４１３のＮＯ）、イニシエータ１０はＡＣＫを生成し（ステップＳ４１６）、このＡＣＫを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行し（ステップＳ４１７）、ステップＳ４０１に戻る。
【０１５７】
また、プリミティブ・セグメントにＢ＿ＥＯＦｓが含まれていない場合（ステップＳ４１１のＮＯ）、そのプリミティブ・セグメントに含まれるプリミティブに応じた動作を行い（ステップＳ４１８）、ステップＳ４０１に戻る。
【０１５８】
以上により、後続するフレームでエラーが発生することを抑制することができる。
【０１５９】
（第２実施形態）  
第１実施形態では、イニシエータ１０およびターゲット２０は、ＣＲＣエラーを示すプリミティブを受信したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣを送信する。これに対して、第２実施形態では、イニシエータ１０およびターゲット２０は、タイムアウトを検出したことに応じてＰＡＣＫＥＴ＿ＳＹＮＣを送信する。タイムアウトは、例えば、アドレス・フレームの送信時のエラーに起因して発生する。アドレス・フレームには、初期化のために用いられるアイデンティファイ・アドレス・フレームと、接続要求のために用いられるオープン・アドレス・フレームとがある。
【０１６０】
第２実施形態に係る情報処理システム１の構成は第１実施形態の情報処理システム１の構成と同様であり、第２実施形態と第１実施形態とでは、コントローラ２０１によって実行される処理の手順のみが異なる。以下、第１実施形態と異なる点のみを説明する。
【０１６１】
コントローラ２０１は、別のイニシエータ／ターゲット１０，２０にアドレス・フレームを送信し、そのアドレス・フレーム対するタイマ満了を検出したとき、ＰＡＣＫＥＴ＿ＳＹＮＣをその別のイニシエータ／ターゲット１０，２０に送信するように構成される。また、コントローラ２０１は、別のイニシエータ／ターゲット１０，２０にアドレス・フレームを送信し、そのアドレス・フレーム対するタイマ満了を検出する動作がＮ回連続して行われた場合に、ＰＡＣＫＥＴ＿ＳＹＮＣをその別のイニシエータ／ターゲット１０，２０に送信する機能を有効にするように構成されてもよい。上述したように、コントローラ２０１は、タイマ機能を有し、アドレス・フレームの送信に応じてタイマを開始し、タイマ満了（例えば、アドレス・フレーム送信から１ミリ秒）までに、そのアドレス・フレームに対する応答が受信されたか否かを検出することができる。タイマ満了までに応答が受信されない場合には、タイムアウトを検出する。
【０１６２】
図１６は、タイムアウトを検出したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣが送信される例を示す。ここでは、アドレス・フレームが送信される前に、予期せぬ動作により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との間で同期ずれが発生していることを想定する。図１６に示すように、アドレス・フレームの送信が開始される前の時点において、ターゲット２０のスクランブラ２０４の動作回数がＡ＋０であるのに対して、イニシエータ１０のデスクランブラ２０９の動作回数がＺ＋０であり、動作回数が異なっている。
【０１６３】
ターゲット２０からイニシエータ１０にアドレス・フレームが送信される場合、まず、ターゲット２０は、アドレス・フレームの開始を示すＳＯＡＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ４０１）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数が１だけ増加してＡ＋０からＡ＋１になり、イニシエータ１０のデスクランブラ２０９の動作回数が１だけ増加してＺ＋０からＺ＋１になる。
【０１６４】
次に、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ４０２，Ａ４０３）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加する。図１６に示す例では、一つ以上のパケットが送受信されたことに応じて、ターゲット２０のスクランブラ２０４の動作回数がＡ＋１からＢ＋０に増加し、イニシエータ１０のデスクランブラ２０９の動作回数がＺ＋１からＹ＋１に増加している。
【０１６５】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、アドレス・フレームの送信完了を示すＥＯＡＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ４０４）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数はＢ＋０からＢ＋１に増加し、イニシエータ１０のデスクランブラ２０９の動作回数はＹ＋１からＹ＋２に増加する。
【０１６６】
ＥＯＡＦを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生しているので、アドレス・フレームを破棄し、ターゲット２０に対して何も応答しない。その結果、ターゲット２０は、アドレス・フレームに対するタイマの満了によりタイムアウトを検出する（Ａ４０５）。
【０１６７】
タイムアウト検出後、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ４０６）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、Ｂ＋２からＢ＋３に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は、Ｙ＋３からＹ＋４に増加した後、０に初期化される。したがって、ＰＡＣＫＥＴ＿ＳＹＮＣの送受信に応じた初期化により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期する。
【０１６８】
次いで、ターゲット２０からイニシエータ１０にアドレス・フレームが再度送信される場合、ターゲット２０は、アドレス・フレームの開始を示すＳＯＡＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ４０７）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加して、０から１になる。
【０１６９】
そして、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ４０８，Ａ４０９）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加する。図１６に示す例では、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とは、１からＣ＋０に増加している。
【０１７０】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、アドレス・フレームの送信完了を示すＥＯＡＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ４１０）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加して、Ｃ＋０からＣ＋１になる。
【０１７１】
ＥＯＡＦを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生していなければ、応答のためのプリミティブを含むパケットを送信し、ターゲット２０はこのパケットを受信する。例えば、送信されたアドレス・フレームがオープン・アドレス・フレームである場合、応答のためのプリミティブは、接続要求を承認することを示すＯＰＥＮ＿ＡＣＣＥＰＴ、あるいは接続要求を拒絶することを示すＯＰＥＮ＿ＲＥＪＥＣＴである。
【０１７２】
以上のように、ターゲット２０は、タイムアウトを検出したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣをイニシエータ１０に送信する。これにより、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが初期化され、同期する。そのため、これ以降のパケットの送受信では、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生せず、イニシエータ１０は正常にアドレス・フレームを受信することができる。
【０１７３】
なお、図示したイニシエータ１０とターゲット２０とを置き換えることにより、イニシエータ１０からターゲット２０に正常にアドレス・フレームを送信することができる。
【０１７４】
図１７のフローチャートは、ターゲット２０によって実行される送信制御処理の手順の例を示す。このターゲット２０は、イニシエータ１０にアドレス・フレームを送信した後にタイムアウトを検出したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成されている。
【０１７５】
まず、ターゲット２０は、イニシエータ１０へアドレス・フレームを送信する必要があるか否かを判定する（ステップＳ５０１）。アドレス・フレームを送信する必要がない場合（ステップＳ５０１のＮＯ）、ステップＳ５０１に戻り、イニシエータ１０へアドレス・フレームを送信する必要があるか否かが再度判定される。なお、この場合に、ターゲット２０は、例えば、アイドルｄｗｏｒｄセグメントを含むパケットをイニシエータ１０に送信してもよい。
【０１７６】
アドレス・フレームを送信する必要がある場合（ステップＳ５０１のＹＥＳ）、ターゲット２０は、ＳＯＡＦを生成し（ステップＳ５０２）、このＳＯＡＦを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ５０３）。このプリミティブ・セグメント処理については、図１２のフローチャートを参照して上述した通りである。
【０１７７】
次いで、ターゲット２０は、フレームを構成する未送信のフレームデータがあるか否かを判定する（ステップＳ５０４）。未送信フレームデータがある場合（ステップＳ５０４のＹＥＳ）、ターゲット２０は、１パケット分以上の未送信フレームデータがあるか否かを判定する（ステップＳ５０５）。１パケット分以上の未送信フレームデータがある場合（ステップＳ５０５のＹＥＳ）、ターゲット２０は、未送信フレームデータで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行し（ステップＳ５０６）、ステップＳ５０４に戻る。フレーム・セグメント送信処理については、図１３を参照して上述した通りである。
【０１７８】
１パケット分以上の未送信フレームデータがない場合（ステップＳ５０５のＮＯ）、ターゲット２０は、フレームを構成するフレームデータのＣＲＣ値を算出する（ステップＳ５０７）。そして、ターゲット２０は、未送信フレームデータと算出されたＣＲＣ値とで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ５０８）。
【０１７９】
また、未送信フレームデータがない場合（ステップＳ５０４のＮＯ）、例えば、フレームを構成する全てのフレームデータがイニシエータ１０に送信済みである場合、ターゲット２０は、フレームを構成するフレームデータのＣＲＣ値を算出する（ステップＳ５０９）。そして、ターゲット２０は、算出されたＣＲＣ値とパッドｄｗｏｒｄとで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ５１０）。
【０１８０】
フレームを構成する全てのフレームデータとＣＲＣ値とがパケット単位でイニシエータ１０に送信された後（ステップＳ５０８またはステップＳ５１０の後）、ターゲット２０は、アドレス・フレームの送信完了を示すＥＯＡＦを生成し（ステップＳ５１１）、このＥＯＡＦを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ５１２）。そして、ターゲット２０（フレーム送信コントローラ２０６）は、コントローラ２０１のフレーム制御機構２１５に、アドレス・フレームを送信したことを通知する（ステップＳ５１３）。
【０１８１】
図１８のフローチャートは、ターゲット２０によって実行される応答制御処理の手順の例を示す。  
【０１８２】
まず、ターゲット２０は、イニシエータ１０から応答を受信したか否かを判定する（ステップＳ５２１）。応答を受信した場合（ステップＳ５１３のＹＥＳ）、ターゲット２０（プリミティブ・デコーダ２１１）は、応答を受信したことをコントローラ２０１内のフレーム制御機構２１５に通知する（ステップＳ５２２）。フレーム制御機構２１５の動作については、図１４のフローチャートを参照して上述したとおりである。なお、図１４では、ＳＳＰフレームの送信に対して、ＡＣＫまたはＮＡＫの応答が受信される場合について説明したが、この応答を、オープン・アドレス・フレームの送信に対しては、ＯＰＥＮ＿ＡＣＣＥＰＴまたはＯＰＥＮ＿ＲＥＪＥＣＴの応答に置き換え、アイデンティファイ・アドレス・フレームの送信に対しては、アイデンティファイ・アドレス・フレームの受信に置き換えることにより、同様のフレーム制御機構２１５の動作を実現できる。ターゲット２０は、その応答の内容に応じた動作を行い（ステップＳ５２３）、処理を終了する。
【０１８３】
一方、応答を受信していない場合（ステップＳ５２１のＮＯ）、ターゲット２０は、アドレス・フレームに対するタイマの満了によるタイムアウトが検出されたか否かを判定する（ステップＳ５２４）。タイムアウトが検出されていない場合（ステップＳ５２４のＮＯ）、ステップＳ５２１に戻る。
【０１８４】
一方、タイムアウトが検出された場合（ステップＳ５２４のＹＥＳ）、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣを生成し（ステップＳ５２５）、このＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ５２６）。そして、ターゲット２０は、スクランブラ２０４を初期化し（ステップＳ５２７）、処理を終了する。初期化により、スクランブラ２０４の動作回数は０になる。
【０１８５】
図１９は、イニシエータ１０によって実行される受信制御処理の手順の例を説明する。
【０１８６】
ステップＳ６０１からステップＳ６０８までの手順は、図１５のフローチャートを参照して上述したステップＳ４０１からステップＳ４０８までの手順と同様である。
【０１８７】
ステップＳ６０１からステップＳ６０８までの手順の後、イニシエータ１０は、プリミティブ・セグメントにＰＡＣＫＥＴ＿ＳＹＮＣが含まれているか否かを判定する（ステップＳ６０９）。プリミティブ・セグメントにＰＡＣＫＥＴ＿ＳＹＮＣが含まれている場合（ステップＳ６０９のＹＥＳ）、イニシエータ１０は、デスクランブラ２０９を初期化し（ステップＳ６１０）、ステップＳ６０１に戻る。初期化により、デスクランブラ２０９の動作回数は０になる。
【０１８８】
また、プリミティブ・セグメントにＰＡＣＫＥＴ＿ＳＹＮＣが含まれていない場合（ステップＳ６０９のＮＯ）、イニシエータ１０は、プリミティブ・セグメントにアドレス・フレームの送信完了を示すＥＯＡＦが含まれているか否かを判定する（ステップＳ６１１）。プリミティブ・セグメントにＥＯＡＦが含まれている場合（ステップＳ６１１のＹＥＳ）、イニシエータ１０は、フレームのＣＲＣ値をチェックし（ステップＳ６１２）、フレームにＣＲＣエラーが発生しているか否かを判定する（ステップＳ６１３）。
【０１８９】
ＣＲＣエラーが発生している場合（ステップＳ６１３のＹＥＳ）、イニシエータ１０は、フレームを破棄し（ステップＳ４１４）、ターゲット２０に対して何等応答せずにステップＳ６０１に戻る。
【０１９０】
ＣＲＣエラーが発生していない場合（ステップＳ６１３のＮＯ）、イニシエータ１０は応答のためのプリミティブを生成する（ステップＳ６１５）。応答のためのプリミティブは、例えば、アドレス・フレームが接続要求のためのオープン・アドレス・フレームであるならば、接続要求を受け入れるＯＰＥＮ＿ＡＣＣＥＰＴプリミティブか、あるいは接続要求を拒絶するＯＰＥＮ＿ＲＥＪＥＣＴプリミティブである。イニシエータ１０は、この応答のためのプリミティブを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行し（ステップＳ６１６）、ステップＳ６０１に戻る。
【０１９１】
また、プリミティブ・セグメントにＥＯＡＦが含まれていない場合（ステップＳ６１１のＮＯ）、そのプリミティブ・セグメントに含まれるプリミティブに応じた動作を行い（ステップＳ６１７）、ステップＳ６０１に戻る。
【０１９２】
以上により、後続するフレームでエラーおよびタイムアウトが発生することを抑制することができる。
【０１９３】
（第３実施形態）  
第１実施形態では、イニシエータ１０およびターゲット２０は、ＣＲＣエラーを示すプリミティブを受信したことに応じて、ＰＡＣＫＥＴ＿ＳＹＮＣを送信する。また、第２実施形態では、イニシエータ１０およびターゲット２０は、タイムアウトを検出したことに応じてＰＡＣＫＥＴ＿ＳＹＮＣを送信する。これに対して、第３実施形態では、イニシエータ１０およびターゲットは、ＣＲＣエラーが発生することを事前に防止するようにＰＡＣＫＥＴ＿ＳＹＮＣを送信する。
【０１９４】
また、図２を参照して上述したように、ＳＡＳ  Ｇｅｎ４の装置（イニシエータ／ターゲット）では、プリミティブの送信時にスクランブラ１０６の動作回数が増加せず、プリミティブの受信時にデスクランブラ１０９の動作回数が増加しない（すなわち、状態が遷移しない）。一方、ＳＡＳ  Ｇｅｎ５の装置（イニシエータ１０／ターゲット２０）では、プリミティブの送信時にスクランブラ２０４の動作回数が増加し、プリミティブの受信時にデスクランブラ２０９の動作回数が増加する（すなわち、状態が遷移する）。
【０１９５】
しかし、ＳＡＳ  Ｇｅｎ５の装置には、過誤により、ＳＡＳ  Ｇｅｎ４の装置と同様にプリミティブの送受信時にスクランブラ２０４／デスクランブラ２０９の動作回数を増加させるように構成されていない装置が含まれる可能性がある。そのため、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブを送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成することにより、スクランブラ２０４とデスクランブラ２０９とを確実に同期させることができる。
【０１９６】
第３実施形態に係る情報処理システム１の構成は第１実施形態および第２実施形態の情報処理システム１の構成と同様であり、第３実施形態と第１実施形態および第２実施形態とでは、コントローラ２０１によって実行される処理の手順のみが異なる。以下、第１実施形態および第２実施形態と異なる点のみを説明する。
【０１９７】
コントローラ２０１は、スクランブラが初期化されるプリミティブ以外のプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを別のイニシエータ／ターゲット１０，２０に送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣをその別のイニシエータ／ターゲット１０，２０に送信するように構成される。
【０１９８】
図２０は、イニシエータ１０およびターゲット２０が、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブを送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成される例を示す。以下では、ＳＳＰフレームが送信される場合を例示するが、ＳＭＰフレーム、ＳＴＰフレーム、アドレス・フレーム等の他のフレームが送信される場合にも適用することができる。
【０１９９】
また、ここでは、ＳＳＰフレームが送信される前に、予期せぬ動作により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との間で同期ずれが発生していることを想定する。図２０に示すように、ＳＳＰフレームの送信が開始される前の時点において、ターゲット２０のスクランブラ２０４の動作回数がＡ＋０であるのに対して、イニシエータ１０のデスクランブラ２０９の動作回数がＺ＋０であり、動作回数が異なっている。
【０２００】
ターゲット２０からイニシエータ１０にＳＳＰフレームが送信される場合、まず、ターゲット２０は、ＳＳＰフレームの開始を示すＳＯＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ５０１）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数が１だけ増加してＡ＋０からＡ＋１になり、イニシエータ１０のデスクランブラ２０９の動作回数が１だけ増加してＺ＋０からＺ＋１になる。
【０２０１】
そして、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブであるＳＯＦが送信されたので、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ５０２）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、Ａ＋１からＡ＋２に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は、Ｚ＋１からＺ＋２に増加した後、０に初期化される。したがって、ＰＡＣＫＥＴ＿ＳＹＮＣの送受信に応じた初期化により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期する。
【０２０２】
次いで、ターゲット２０は、フレームデータを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ５０３）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加する。図２０に示す例では、一つ以上のパケットが送受信されたことに応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とが０からＢ＋０に増加する。
【０２０３】
フレームデータを含む一つ以上のパケットが送信された後、ターゲット２０は、ＳＳＰフレームの送信中に、あるプリミティブ（ここでは、ＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴエクステンデッド・バイナリ・プリミティブ）を含むパケットを送信する（Ａ５０４）。ＳＡＳ  Ｇｅｎ５では、フレーム送信中にもプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブの送信が可能である。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とはＢ＋０からＢ＋１に増加する。
【０２０４】
そして、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のエクステンデッド・バイナリ・プリミティブであるＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴが送信されたので、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ５０５）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、Ｂ＋１からＢ＋２に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は、Ｂ＋１からＢ＋２に増加した後、０に初期化される。したがって、ＰＡＣＫＥＴ＿ＳＹＮＣの送受信に応じた初期化により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期する。
【０２０５】
次いで、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ５０６，Ａ５０７）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加し、Ｃ＋０になる。
【０２０６】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、ＳＳＰフレームの送信完了を示すＢ＿ＥＯＦｓを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ５０８）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とはＣ＋０からＣ＋１に増加する。
【０２０７】
ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブであるＢ＿ＥＯＦｓが送信されたので、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ５０９）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とは、Ｃ＋１からＣ＋２に増加した後、０に初期化される。
【０２０８】
そして、Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生していないので、ＡＣＫを含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ５１０）。
【０２０９】
さらに、ターゲット２０は、ＳＳＰフレームの送信後に、あるプリミティブ（ここでは、ＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴエクステンデッド・バイナリ・プリミティブ）を含むパケットを送信する（Ａ５１１）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とは０から１に増加する。
【０２１０】
そして、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のエクステンデッド・バイナリ・プリミティブであるＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴが送信されたので、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ５１２）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、１から２に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は、１から２に増加した後、０に初期化される。したがって、ＰＡＣＫＥＴ＿ＳＹＮＣの送受信に応じた初期化により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期する。
【０２１１】
以上のように、ターゲット２０は、イニシエータ１０に対して、ＳＯＦやＢ＿ＥＯＦｓ、ＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴのような、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブのいずれかを送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣをさらに送信する。これにより、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが初期化され、同期する。そのため、これ以降のパケットの送受信では、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生せず、イニシエータ１０は正常にＳＳＰフレームを受信することができる。
【０２１２】
図２１のフローチャートは、ターゲット２０によって実行される送信制御処理の手順の例を示す。このターゲット２０は、イニシエータ１０にＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブのいずれかを送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成されている。
【０２１３】
まず、ターゲット２０は、イニシエータ１０へフレームを送信する必要があるか否かを判定する（ステップＳ７０１）。フレームを送信する必要がない場合（ステップＳ７０１のＮＯ）、ステップＳ７０１に戻り、イニシエータ１０へフレームを送信する必要があるか否かが再度判定される。なお、この場合に、ターゲット２０は、例えば、アイドルｄｗｏｒｄセグメントを含むパケットをイニシエータ１０に送信してもよい。
【０２１４】
フレームを送信する必要がある場合（ステップＳ７０１のＹＥＳ）、ターゲット２０は、ＳＯＦを生成し（ステップＳ７０２）、このＳＯＦを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ７０３）。このプリミティブ・セグメント処理については、図１２のフローチャートを参照して上述した通りである。
【０２１５】
さらに、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣを生成し（ステップＳ７０４）、このＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ７０５）。そして、ターゲット２０は、スクランブラ２０４を初期化する（ステップＳ７０６）。初期化により、スクランブラ２０４の動作回数は０になる。
【０２１６】
次いで、ターゲット２０は、フレームを構成する未送信のフレームデータがあるか否かを判定する（ステップＳ７０７）。未送信フレームデータがある場合（ステップＳ７０７のＹＥＳ）、ターゲット２０は、１パケット分以上の未送信フレームデータがあるか否かを判定する（ステップＳ７０８）。１パケット分以上の未送信フレームデータがある場合（ステップＳ７０８のＹＥＳ）、ターゲット２０は、未送信フレームデータで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行し（ステップＳ７０９）、ステップＳ７０７に戻る。フレーム・セグメント送信処理については、図１３を参照して上述した通りである。
【０２１７】
１パケット分以上の未送信フレームデータがない場合（ステップＳ７０８のＮＯ）、ターゲット２０は、フレームを構成するフレームデータのＣＲＣ値を算出する（ステップＳ７１０）。そして、ターゲット２０は、未送信フレームデータと算出されたＣＲＣ値とで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ７１１）。
【０２１８】
また、未送信フレームデータがない場合（ステップＳ７０７のＮＯ）、例えば、フレームを構成する全てのフレームデータがイニシエータ１０に送信済みである場合、ターゲット２０は、フレームを構成するフレームデータのＣＲＣ値を算出する（ステップＳ７１２）。そして、ターゲット２０は、算出されたＣＲＣ値とパッドｄｗｏｒｄとで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ７１３）。
【０２１９】
フレームを構成する全てのフレームデータとＣＲＣ値とがパケット単位でイニシエータ１０に送信された後（ステップＳ７１１またはステップＳ７１３の後）、ターゲット２０は、フレームの送信完了を示すＢ＿ＥＯＦｓを生成し（ステップＳ７１４）、このＢ＿ＥＯＦｓを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ７１５）。
【０２２０】
さらに、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣを生成し（ステップＳ７１６）、このＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ７１７）。そして、ターゲット２０は、スクランブラ２０４を初期化する（ステップＳ７１８）。初期化により、スクランブラ２０４の動作回数は０になる。
【０２２１】
なお、ＳＡＳ  Ｇｅｎ５では、フレーム送信中にもプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブの送信が可能である。その場合、例えば、図２１のステップＳ７０９の手順は、図２２に示すフローチャートの手順に置き換えられる。
【０２２２】
図２２に示すように、ターゲット２０は、フレームの送信中に（ここでは、ステップＳ７０８において１パケット分以上の未送信フレームデータがある場合に）、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを送信する必要があるか否かを判定する（ステップＳ７２１）。プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを送信する必要がない場合（ステップＳ７２１のＮＯ）、ターゲット２０は、未送信フレームデータで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ７２７）。フレーム・セグメント送信処理については、図１３を参照して上述した通りである。
【０２２３】
一方、プリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを送信する必要がある場合（ステップＳ７２１のＹＥＳ）、ターゲット２０は、要求されているプリミティブ（例えば、ＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴ）を生成し（ステップＳ７２２）、生成されたプリミティブを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ７２５）。プリミティブ・セグメント送信処理については、図１２を参照して上述した通りである。
【０２２４】
さらに、ターゲット２０は、ＰＡＣＫＥＴ＿ＳＹＮＣを生成し（ステップＳ７２４）、このＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットをイニシエータ１０に送信するためのプリミティブ・セグメント送信処理を実行する（ステップＳ７２５）。そして、ターゲット２０は、スクランブラ２０４を初期化する（ステップＳ７２６）。初期化により、スクランブラ２０４の動作回数は０になる。
【０２２５】
そして、ターゲット２０は、未送信フレームデータで構成されるフレーム・セグメントを含むパケットをイニシエータ１０に送信するためのフレーム・セグメント送信処理を実行する（ステップＳ７２７）。
【０２２６】
なお、受信制御処理については、図１５のフローチャートに示した通りである。
【０２２７】
（第４実施形態）  
第４実施形態は、イニシエータ１０およびターゲットが、ＣＲＣエラーが発生することを事前に防止するようにＰＡＣＫＥＴ＿ＳＹＮＣを送信する別の例を示す。
【０２２８】
第４実施形態に係る情報処理システム１の構成は、第１乃至第３実施形態の情報処理システム１の構成と同様であり、第４実施形態と第１乃至第３実施形態とでは、コントローラ２０１によって実行される処理の手順のみが異なる。以下、第１乃至第３実施形態と異なる点のみを説明する。
【０２２９】
第２実施形態におけるタイムアウトの検出には、例えば、１ミリ秒を要する。また、このアドレス・フレームがアイデンティファイ・アドレス・フレームである場合には、Ｐｈｙ  ｒｅｓｅｔ  ｓｅｑｕｅｎｃｅの要因となり、リンク・リセット・シーケンスの再実行が必要になる。このリンク・リセット・シーケンスの再実行には、例えば、５００ミリ秒を要する。したがって、タイムアウトの発生は、その後のリカバリ処理に長時間を要する可能性がある。
【０２３０】
また、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブを送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成した場合には、ＰＡＣＫＥＴ＿ＳＹＮＣを送信することによるオーバヘッドが大きくなる。例えば、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットに相当する１５０ビット分だけ、送受信量が増加する。
【０２３１】
そのため、図２３に示すように、イニシエータ１０およびターゲット２０に設けられるコントローラ２０１は、ＣＲＣがチェックされることになるフレームの送信開始を示すプリミティブ（例えば、ＳＯＦ，ＳＯＡＦ）を送信した後にだけ、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成されてもよい。これにより、送受信量（オーバヘッド）の増加を抑制しつつ、ＣＲＣエラーが発生することを事前に防止することができる。
【０２３２】
ここでは、ＳＳＰフレームが送信される前に、予期せぬ動作により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との間で同期ずれが発生していることを想定する。図２３に示すように、ＳＳＰフレームの送信が開始される前の時点において、ターゲット２０のスクランブラ２０４の動作回数がＡ＋０であるのに対して、イニシエータ１０のデスクランブラ２０９の動作回数がＺ＋０であり、動作回数が異なっている。
【０２３３】
ターゲット２０からイニシエータ１０にＳＳＰフレームが送信される場合、まず、ターゲット２０は、ＳＳＰフレームの開始を示すＳＯＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ６１）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数が１だけ増加してＡ＋０からＡ＋１になり、イニシエータ１０のデスクランブラ２０９の動作回数が１だけ増加してＺ＋０からＺ＋１になる。
【０２３４】
そして、ターゲット２０は、ＳＯＦが送信されたので、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ６２）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、Ａ＋１からＡ＋２に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は、Ｚ＋１からＺ＋２に増加した後、０に初期化される。したがって、ＰＡＣＫＥＴ＿ＳＹＮＣの送受信に応じた初期化により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期する。
【０２３５】
次いで、ターゲット２０は、フレームデータを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ６３）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加し、Ｂ＋０になる。
【０２３６】
フレームデータを含む一つ以上のパケットが送信された後、ターゲット２０は、ＳＳＰフレームの送信中に、あるプリミティブ（ここでは、ＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴエクステンデッド・バイナリ・プリミティブ）を含むパケットを送信する（Ａ６４）。ＳＡＳ  Ｇｅｎ５では、フレーム送信中にもプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブの送信が可能である。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とはＢ＋０からＢ＋１に増加する。
【０２３７】
次いで、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ６５，Ａ６６）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加し、Ｃ＋０になる。
【０２３８】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲットは、ＳＳＰフレームの送信完了を示すＢ＿ＥＯＦｓを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ６７）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とはＣ＋０からＣ＋１に増加する。
【０２３９】
そして、Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生していないので、ＡＣＫを含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ６８）。
【０２４０】
以上のように、ターゲット２０は、イニシエータ１０に対して、ＳＯＦやＳＯＡＦのような、フレームの送信開始を示すプリミティブを送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣをさらに送信する。これにより、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが初期化され、同期する。そのため、これ以降のパケットの送受信では、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生せず、イニシエータ１０は正常にＳＳＰフレームを受信することができる。また、フレームの送信開始を示すプリミティブを送信した後にだけ、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するので、ＰＡＣＫＥＴ＿ＳＹＮＣを送信することによるオーバヘッドを低減することができる。
【０２４１】
なお、図示したイニシエータ１０とターゲット２０とを置き換えることにより、イニシエータ１０からターゲット２０に正常にＳＳＰフレームを送信することができる。
【０２４２】
上述した動作におけるフレームの送信制御処理は、図２１のフローチャートに示した手順から、破線の枠Ｂ１内に含まれるＳ７１６からＳ７１８の手順を除くことにより実現される。なお、図２１のＳ７０９の手順が、図２２のフローチャートに示す手順に置き換えられた場合には、上述した動作におけるフレームの送信制御処理は、Ｓ７２２からＳ７２６の手順をさらに除くことにより実現される。また、受信制御処理については、図１５のフローチャートに示した通りである。
【０２４３】
（第５実施形態）  
第５実施形態は、イニシエータ１０およびターゲットが、ＣＲＣエラーが発生することを事前に防止するようにＰＡＣＫＥＴ＿ＳＹＮＣを送信するさらに別の例を示す。
【０２４４】
第５実施形態に係る情報処理システム１の構成は、第１乃至第４実施形態の情報処理システム１の構成と同様であり、第５実施形態と第１乃至第４実施形態とでは、コントローラ２０１によって実行される処理の手順のみが異なる。以下、第１乃至第４実施形態と異なる点のみを説明する。
【０２４５】
上述したように、ＳＡＳ  Ｇｅｎ５の装置には、過誤により、ＳＡＳ  Ｇｅｎ４の装置のようにプリミティブの送受信時にスクランブラ２０４／デスクランブラ２０９の動作回数を増加させるように構成されていない装置が含まれる可能性がある。その場合、図２４に示すように、フレーム送信開始を示すプリミティブ（ＳＯＦ）を送信した後に、ＰＡＣＫＥＴ＿ＳＹＮＣを送信したとしても、そのフレームの送信途中にプリミティブが送信されたことにより、イニシエータのスクランブラの動作回数とターゲット２０のデスクランブラ２０９の動作回数とにずれが生じることがある。
【０２４６】
図２４に示す例では、ＳＳＰフレームが送信される前に、予期せぬ動作により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との間で同期ずれが発生していることを想定する。図２４に示すように、ＳＳＰフレームの送信が開始される前の時点において、ターゲット２０のスクランブラ２０４の動作回数がＡ＋０であるのに対して、イニシエータ１０のデスクランブラ２０９の動作回数がＺ＋０であり、動作回数が異なっている。
【０２４７】
ターゲット２０からイニシエータ１０にＳＳＰフレームが送信される場合、まず、ターゲット２０は、ＳＳＰフレームの開始を示すＳＯＦを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ７１）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数が１だけ増加してＡ＋０からＡ＋１になるが、イニシエータ１０のデスクランブラ２０９の動作回数は増加せず、Ｚ＋０のままである。
【０２４８】
そして、ターゲット２０は、ＳＯＦが送信されたので、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ７２）。このターゲット２０は、第４実施形態のターゲット２０と同様に、ＣＲＣがチェックされることになるフレームの送信開始を示すプリミティブ（例えば、ＳＯＦ，ＳＯＡＦ）を送信した後にだけ、ＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成されている。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、Ａ＋１からＡ＋２に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は０に初期化される。したがって、ＰＡＣＫＥＴ＿ＳＹＮＣの送受信に応じた初期化により、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期する。
【０２４９】
次いで、ターゲット２０は、フレームデータを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ７３）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加し、Ｂ＋０になる。
【０２５０】
フレームデータを含む一つ以上のパケットが送信された後、ターゲット２０は、ＳＳＰフレームの送信中に、あるプリミティブ（ここでは、ＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴエクステンデッド・バイナリ・プリミティブ）を含むパケットを送信する（Ａ７４）。ＳＡＳ  Ｇｅｎ５では、フレーム送信中にもプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブの送信が可能である。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数が１だけ増加して、Ｂ＋０からＢ＋１になる一方、イニシエータ１０のデスクランブラ２０９の動作回数は増加せず、Ｂ＋０のままである。その結果、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との間で同期ずれが発生する。
【０２５１】
次いで、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ７５，Ａ７６）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１だけ増加する。図２４に示す例では、一つ以上のパケットが送受信されたことに応じて、ターゲット２０のスクランブラ２０４の動作回数がＢ＋１からＣ＋１に増加し、イニシエータ１０のデスクランブラ２０９の動作回数がＢ＋０からＣ＋０に増加している。
【０２５２】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、フレームの送信完了を示すＢ＿ＥＯＦｓを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ７７）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数はＣ＋１からＣ＋２に増加するが、イニシエータ１０のデスクランブラ２０９の動作回数はＣ＋０のままである。
【０２５３】
Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生しているので、ＳＳＰフレームを破棄し、ＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ７８）。
【０２５４】
以上のパケットの送受信では、ＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴを含むパケットの送受信以降、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とが一致しておらず、したがって、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが同期していない。そのため、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生し、イニシエータ１０は正常にＳＳＰフレームを受信することができない。
【０２５５】
そのため、図２５に示すように、イニシエータ１０およびターゲット２０に設けられるコントローラ２０１は、フレーム送信開始を示すプリミティブ（例えば、ＳＯＦ，ＳＯＡＦ）が送信された後にＰＡＣＫＥＴ＿ＳＹＮＣを送信し、さらに、フレーム送信開始を示すプリミティブを送信してからフレーム送信完了を示すプリミティブ（例えば、Ｂ＿ＥＯＦｓ，ＥＯＡＦ）を送信するまでの間に、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブ、バイナリ・プリミティブ、およびエクステンデッド・バイナリ・プリミティブが送信された後にＰＡＣＫＥＴ＿ＳＹＮＣを送信するように構成されてもよい。
【０２５６】
図２５に示す例において、Ａ８１からＡ８３までのパケットの送受信は、図２４に示したＡ７１からＡ７３までのパケットの送受信と同様である。また、図２４に示したＡ７４と同様に、ターゲット２０は、ＳＳＰフレームの送信途中にＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ８４）。
【０２５７】
そして、ターゲット２０は、フレーム送信開始を示すＳＯＦを送信してからフレーム送信完了を示すＢ＿ＥＯＦｓを送信するまでの間に、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のエクステンデッド・バイナリ・プリミティブであるＬＩＮＫ＿ＲＡＴＥ＿ＭＡＮＡＧＥＭＥＮＴが送信されたので、ＰＡＣＫＥＴ＿ＳＹＮＣを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ８５）。このＰＡＣＫＥＴ＿ＳＹＮＣの送信に応じて、ターゲット２０のスクランブラ２０４の動作回数は、Ｂ＋１からＢ＋２に増加した後、０に初期化される。また、このＰＡＣＫＥＴ＿ＳＹＮＣの受信に応じて、イニシエータ１０のデスクランブラ２０９の動作回数は０に初期化される。これにより、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とを同期させることができる。
【０２５８】
次いで、ターゲット２０は、フレームデータとＣＲＣとを含む一つ以上のパケットを送信し、イニシエータ１０はこの一つ以上のパケットを受信する（Ａ８６，Ａ８７）。この一つ以上のパケットに含まれる各パケットの送受信毎に、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とがそれぞれ１ずつ増加する。図２５に示す例では、一つ以上のパケットが送受信されたことに応じて、ターゲット２０のスクランブラ２０４の動作回数とイニシエータ１０のデスクランブラ２０９の動作回数とが０からＣ＋０に増加する。
【０２５９】
フレームデータとＣＲＣとを含む一つ以上のパケットが送信された後、ターゲット２０は、ＳＳＰフレームの送信完了を示すＢ＿ＥＯＦｓを含むパケットを送信し、イニシエータ１０はこのパケットを受信する（Ａ８８）。この送受信に応じて、ターゲット２０のスクランブラ２０４の動作回数がＣ＋０からＣ＋１に増加する一方、イニシエータ１０のデスクランブラ２０９の動作回数はＣ＋０のままである。
【０２６０】
そして、Ｂ＿ＥＯＦｓを含むパケットを受信したイニシエータ１０は、ＣＲＣをチェックし、ＣＲＣエラーが発生していないので、ＡＣＫを含むパケットを送信し、ターゲット２０はこのパケットを受信する（Ａ８９）。
【０２６１】
以上のように、ターゲット２０は、イニシエータ１０に対して、フレーム送信開始を示すプリミティブが送信された後にＰＡＣＫＥＴ＿ＳＹＮＣを送信し、さらに、フレーム送信開始を示すプリミティブを送信してからフレーム送信完了を示すプリミティブを送信するまでの間に、ＰＡＣＫＥＴ＿ＳＹＮＣ以外のプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブが送信された後にＰＡＣＫＥＴ＿ＳＹＮＣを送信する。これにより、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９とが初期化され、同期する。そのため、これ以降のパケットの送受信では、ターゲット２０のスクランブラ２０４とイニシエータ１０のデスクランブラ２０９との同期ずれに起因するＣＲＣエラーが発生せず、イニシエータ１０は正常にＳＳＰフレームを受信することができる。
【０２６２】
また、ＳＡＳ  Ｇｅｎ５の装置に、過誤により、ＳＡＳ  Ｇｅｎ４の装置のようにプリミティブの送受信時にスクランブラ２０４／デスクランブラ２０９の動作回数を増加させるように構成されていない装置が含まれる場合にも、上記の構成により、スクランブラ２０４とデスクランブラ２０９とを確実に同期させることができる。
【０２６３】
なお、図示したイニシエータ１０とターゲット２０とを置き換えることにより、ターゲット２０は正常にＳＳＰフレームを受信することができる。
【０２６４】
上述した動作におけるフレームの送信制御処理は、例えば、図２１のステップＳ７０９の手順を、図２２に示すフローチャートの手順に置き換え、さらに、破線の枠Ｂ１内に含まれるＳ７１６からＳ７１８の手順を除くことにより実現される。なお、受信制御処理については、図１５のフローチャートに示した通りである。
【０２６５】
以上説明したように、第１乃至第５実施形態によれば、正常にフレームを伝送することができる。伝送されるフレームでは、スクランブラ／デスクランブラの同期ずれによるエラーが発生することが抑制される。イニシエータ／ターゲット１０，２０は、外部装置（別のイニシエータ／ターゲット１０，２０）との間で、ＳＡＳのパケットモードでフレームを送受信可能な装置である。コントローラ２０１は、外部装置にフレームを送信し、外部装置によってフレームが正常に受信されなかった場合（例えば、この外部装置からフレームに対する応答を受信し、応答がＣＲＣエラーを示すＮＡＫ（ＣＲＣ  ＥＲＲＯＲ）を含むとき）、ＰＡＣＫＥＴ＿ＳＹＮＣを外部装置に送信するように構成される。これにより、後続するフレームでエラーが発生することを抑制することができる。
【０２６６】
また、コントローラ２０１は、外部装置にアドレス・フレームを送信し、アドレス・フレームに対するタイムアウトを検出したことに応じ、ＰＡＣＫＥＴ＿ＳＹＮＣを外部装置に送信するように構成されてもよい。これにより、後続するフレームでエラーおよびタイムアウトが発生することを抑制することができる。
【０２６７】
また、コントローラ２０１は、以下のタイミングでＰＡＣＫＥＴ＿ＳＹＮＣを外部装置に送信してもよい。
（１）スクランブラが初期化されるプリミティブ以外のプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを前記外部装置に送信した後
（２）フレームの送信開始を示すプリミティブを前記外部装置に送信した後  
（３）フレームの送信開始を示すプリミティブを外部装置に送信した後、およびこのフレームが送信されている期間内に、スクランブラが初期化されるプリミティブ以外のプリミティブ、バイナリ・プリミティブ、またはエクステンデッド・バイナリ・プリミティブを外部装置に送信した後  
これにより、ＣＲＣエラーが発生することを事前に防止することができる。
【０２６８】
本発明のいくつかの実施形態に記載された様々な機能の各々は、回路（処理回路）によって実現されてもよい。処理回路の例には、中央処理装置（ＣＰＵ）のような、プログラムされたプロセッサが含まれる。このプロセッサは、メモリに格納されたコンピュータプログラム（命令群）を実行することによって、記載された機能それぞれを実行する。このプロセッサは、電気回路を含むマイクロプロセッサであってもよい。処理回路の例には、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、マイクロコントローラ、コントローラ、他の電気回路部品も含まれる。これら実施形態に記載されたＣＰＵ以外の他のコンポーネントの各々もまた処理回路によって実現されてもよい。
【０２６９】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【０２７０】
１…情報処理システム、１０…イニシエータ・デバイス、２０…ターゲット・デバイス、２０１…コントローラ、２０２…プリミティブ・ジェネレータ、２０３…１２８ｂ１３０ｂエンコーダ、２０４…スクランブラ、２０５…ＦＥＣエンコーダ、２０６…フレーム送信コントローラ、２０７…ＣＲＣジェネレータ、２０８…ＦＥＣデコーダ、２０９…デスクランブラ、２１０…１３０ｂ１２８ｂデコーダ、２１１…プリミティブ・デコーダ、２１２…ＣＲＣデコーダ、２１３…フレーム受信コントローラ。
【図１】
2019133614.tif 000003
【図２】
2019133614.tif 000004
【図３】
2019133614.tif 000005
【図４】
2019133614.tif 000006
【図５】
2019133614.tif 000007
【図６】
2019133614.tif 000008
【図７】
2019133614.tif 000009
【図８】
2019133614.tif 000010
【図９】
2019133614.tif 000011
【図１０】
2019133614.tif 000012
【図１１】
2019133614.tif 000013
【図１２】
2019133614.tif 000014
【図１３】
2019133614.tif 000015
【図１４】
2019133614.tif 000016
【図１５】
2019133614.tif 000017
【図１６】
2019133614.tif 000018
【図１７】
2019133614.tif 000019
【図１８】
2019133614.tif 000020
【図１９】
2019133614.tif 000021
【図２０】
2019133614.tif 000022
【図２１】
2019133614.tif 000023
【図２２】
2019133614.tif 000024
【図２３】
2019133614.tif 000025
【図２４】
2019133614.tif 000026
【図２５】
2019133614.tif 000027