(57)【要約】【課題】より確実に通信を行う。【解決手段】マスタは、スレーブと信号の送受信を行う送受信部を備え、送受信部は、スレーブから読み出されるリードデータを受信し、そのリードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う。マスタは、このプリアンブルの２ビット目により、スレーブに対して通信を途中で遮断すること、または、通信の遮断を行わないことを通知することができる。本技術は、例えば、I3Cの規格に準拠して通信を行うバスＩＦに適用できる。【選択図】図１
2017207934.tif 000002
【特許請求の範囲】
【請求項１】
他の通信装置と信号の送受信を行う送受信部を備え、
前記送受信部は、
前記他の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
通信装置。
【請求項２】
前記送受信部は、前記プリアンブルの２ビット目により、次の読みだされるデータがリードデータかCRC（Cyclic Redundancy Check）であるかを問わず、前記他の通信装置に対して通信を途中で遮断すること、または、通信の遮断を行わないことを通知する
請求項１に記載の通信装置。
【請求項３】
前記送受信部は、
前記他の通信装置に対して書き込まれるライトデータを送信し、
前記ライトデータの後に前記他の通信装置に送信するプリアンブルの１ビット目の値と２ビット目の値とが反転するように駆動する
請求項１に記載の通信装置。
【請求項４】
前記送受信部は、
前記他の通信装置に対して書き込まれるライトデータを送信し、
前記ライトデータの後に前記他の通信装置に送信するプリアンブルの１ビット目の値と２ビット目の値とで２回同じ値を送信するように駆動する
請求項１に記載の通信装置。
【請求項５】
前記送受信部は、前記プリアンブルによって、そのプリアンブルに続いてCRC（Cyclic Redundancy Check）およびデータのどちらを送信するかを指定する
請求項１に記載の通信装置。
【請求項６】
前記送受信部は、前記プリアンブルに対して冗長性を持たせるための１ビットのプレパレーションビットを送信する
請求項１に記載の通信装置。
【請求項７】
前記送受信部は、前記プレパレーションビットの１ビットおよび前記プリアンブルの２ビットを用いて、同一の信号を２回送信する
請求項６に記載の通信装置。
【請求項８】
前記送受信部により、次に送信するデータのタイプを指定するプリアンブルが受信されて、そのプリアンブルに続いて受信された信号のビット列と、前記プリアンブルにより送信されることが指定されたタイプにおいて送信されるべきビット列とを比較することにより、エラーの発生を検出するエラー検出部と、
前記エラー検出部によりエラーの発生が検出された場合、前記プリアンブルに続いて所定ビット数に応じたクロックを送信した後に、通信を途中で遮断することを指示するアボート信号を送信するように、前記送受信部に対する指示を行うコンフリクト回避部と
をさらに備える請求項１に記載の通信装置。
【請求項９】
前記送受信部から送信された信号を受信した前記他の通信装置から送信されてくる受信確認信号および非受信確認信号のいずれかを検出する確認信号検出部と、
前記確認信号検出部により前記非受信確認信号が検出されたとき、前記非受信確認信号に続く所定数のビットを無視した後に、通信を途中で遮断することを指示するアボート信号を送信するように、前記送受信部に対する指示を行うコンフリクト回避部と
をさらに備える請求項１に記載の通信装置。
【請求項１０】
前記エラー検出部は、前記データに含まれている２ビットのパリティのうち、一方を偶数パリティとし、他方を奇数パリティとして、前記送受信部が受信したデータに対するパリティチェックを行うことでエラーの発生を検出する
請求項８に記載の通信装置。
【請求項１１】
前記送受信部は、前記他の通信装置がデータ信号線に対する駆動を行って送信するCRC（Cyclic Redundancy Check）ワードの受信直後のビットから、前記データ信号線に対する駆動を行う
請求項１に記載の通信装置。
【請求項１２】
前記送受信部は、通常の転送レートでデータ通信を行うSDR（Standard Data Rate）モード、および、SDRモードよりも高い転送レートでデータ通信を行うHDR（High Data Rate）モードで、信号の送受信を行うことができる
請求項１に記載の通信装置。
【請求項１３】
前記送受信部は、１ビットずつ逐次的にシリアルデータを伝送するデータ信号線、および、所定の周波数のシリアルクロックを伝送するクロック信号線の２本の信号線を介して通信を行う
請求項１に記載の通信装置。
【請求項１４】
前記送受信部、I3C（Improved Inter Integrated Circuit）の規格に準じた通信を行う
請求項１に記載の通信装置。
【請求項１５】
他の通信装置と信号の送受信を行う送受信部により、
前記他の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
ステップを含む通信方法。
【請求項１６】
他の通信装置と信号の送受信を行う送受信部により、
前記他の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
ステップを含む通信処理をコンピュータに実行させるプログラム。
【請求項１７】
バスにおける制御の主導権を有する第１の通信装置と、
前記第１の通信装置による制御に従って通信を行う第２の通信装置と
を備え、
前記第１の通信装置が、前記第２の通信装置と信号の送受信を行う送受信部を備え、
前記送受信部は、
前記第２の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
通信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、通信装置、通信方法、プログラム、および、通信システムに関し、特に、より確実に通信を行うことができるようにした通信装置、通信方法、プログラム、および、通信システムに関する。
【背景技術】
【０００２】
従来、複数のデバイスが実装されたボード内でバスを介したデバイス間の通信に用いられるバスＩＦ（Interface）として、例えば、I2C（Inter-Integrated Circuit）が多く利用されている。
【０００３】
また、近年、I2Cの高速化を実現することが求められており、次世代の規格としてI3C（Improved Inter Integrated Circuit）の規定が進行している。I3Cでは、マスタおよびスレーブは、２本の信号線を用いて双方向に通信を行うことができ、例えば、マスタからスレーブへのデータ転送（ライト転送）と、スレーブからマスタへのデータ転送（リード転送）とが行われる。
【０００４】
例えば、特許文献１には、ホスト・プロセッサとサブシステム・コントローラとを、I2Cにより相互接続するディジタル・データ処理システムが開示されている。また、特許文献２には、標準I2Cプロトコルの上部に層状に配置された通信プロトコルを実現する方法が開示されている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−９９４４８号公報
【特許文献２】特開２００２−１７５２６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上述したようなI3Cでは、例えば、マスタおよびスレーブにおいて、パリティやCRC（Cyclic Redundancy Check）などによるエラー検出が行われることが規定されているが、そのようなエラー検出が用意されていない信号の送受信も行われる。そのため、エラー検出が用意されていない信号にエラーが発生したときに、マスタおよびスレーブが、正常な通信を行うことができなくなることが懸念される。
【０００７】
本開示は、このような状況に鑑みてなされたものであり、より確実に通信を行うことができるようにするものである。
【課題を解決するための手段】
【０００８】
本開示の第１の側面の通信装置は、他の通信装置と信号の送受信を行う送受信部を備え、前記送受信部は、前記他の通信装置から読み出されるリードデータを受信し、前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う。
【０００９】
本開示の第１の側面の通信方法またはプログラムは、他の通信装置と信号の送受信を行う送受信部により、前記他の通信装置から読み出されるリードデータを受信し、前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行うステップを含む。
【００１０】
本開示の第１の側面においては、他の通信装置と信号の送受信を行う送受信部により、他の通信装置から読み出されるリードデータが受信され、そのリードデータの後に送受信されるプリアンブルの２ビット目に対する駆動が常に行われる。
【００１１】
本開示の第２の側面の通信システムは、バスにおける制御の主導権を有する第１の通信装置と、前記第１の通信装置による制御に従って通信を行う第２の通信装置とを備え、前記第１の通信装置が、前記第２の通信装置と信号の送受信を行う送受信部を備え、前記送受信部は、前記第２の通信装置から読み出されるリードデータを受信し、前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う。
【００１２】
本開示の第２の側面においては、バスにおける制御の主導権を有する第１の通信装置と、第１の通信装置による制御に従って通信を行う第２の通信装置とにより通信が行われる。そして、第１の通信装置が、第２の通信装置と信号の送受信を行う送受信部を備え、送受信部により、第２の通信装置から読み出されるリードデータが受信され、リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動が常に行われる。
【発明の効果】
【００１３】
本開示の第１および第２の側面によれば、より確実に通信を行うことができる。
【図面の簡単な説明】
【００１４】
【図１】本技術を適用したバスＩＦの一実施の形態の構成例を示すブロック図である。
【図２】プリアンブルの第１の定義例を示す図である。
【図３】プリアンブルの第１の定義例の変形例を示す図である。
【図４】リード転送時におけるタイミングチャートを示す図である。
【図５】リードコマンドの直後のプリアンブルにおいてACKに１ビットエラーが発生する例を示す図である。
【図６】リードコマンドの直後のプリアンブルにおいてNACKに１ビットエラーが発生する例を示す図である。
【図７】リードデータの直後のプリアンブルの１ビット目が１であるときに、その１ビット目に１ビットエラーが発生する第１の例を示す図である。
【図８】リードデータの直後のプリアンブルの１ビット目が１であるときに、その１ビット目に１ビットエラーが発生する第２の例を示す図である。
【図９】リードデータの直後のプリアンブルの１ビット目が０であるときに、その１ビット目に１ビットエラーが発生する第１の例を示す図である。
【図１０】リードデータの直後のプリアンブルの１ビット目が０であるときに、その１ビット目に１ビットエラーが発生する第２の例を示す図である。
【図１１】マスタのDDRモードでの通信処理を説明するフローチャートである。
【図１２】プリアンブルの第２の定義例を示す図である。
【図１３】リード転送時におけるタイミングチャートを示す図である。
【図１４】リードコマンドに続いてリードデータが送信されるときのプレパレーションビットおよびプリアンブルに１ビットエラーが発生する例を示す図である。
【図１５】リードデータに続いてリードデータが送信されるときのプレパレーションビットおよびプリアンブルに１ビットエラーが発生する例を示す図である。
【図１６】リードコマンドに続いてCRCワードが送信されるときのプレパレーションビットおよびプリアンブルに１ビットエラーが発生する例を示す図である。
【図１７】本技術を適用したコンピュータの一実施の形態の構成例を示すブロック図である。
【発明を実施するための形態】
【００１５】
以下、本技術を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。
【００１６】
＜バスＩＦの構成例＞
【００１７】
図１は、本技術を適用したバスＩＦの一実施の形態の構成例を示すブロック図である。
【００１８】
図１に示されているバスＩＦ１１は、マスタ１２と３台のスレーブ１３−１乃至１３−３とが、データ信号線１４−１およびクロック信号線１４−２を介して接続されて構成される。
【００１９】
マスタ１２は、バスＩＦ１１における制御の主導権を有しており、データ信号線１４−１およびクロック信号線１４−２を介して、スレーブ１３−１乃至１３−３と通信を行うことができる。
【００２０】
スレーブ１３−１乃至１３−３は、マスタ１２による制御に従って、データ信号線１４−１およびクロック信号線１４−２を介して、マスタ１２と通信を行うことができる。なお、スレーブ１３−１乃至１３−３は、それぞれ同様に構成されており、以下、それらを区別する必要がない場合、単にスレーブ１３と称し、スレーブ１３を構成する各ブロックについても同様とする。
【００２１】
データ信号線１４−１およびクロック信号線１４−２は、マスタ１２およびスレーブ１３の間で信号を伝送するのに用いられる。例えば、バスＩＦ１１では、データ信号線１４−１を介して、１ビットずつ逐次的にシリアルデータ（SDA：Serial Data）が伝送され、クロック信号線１４−２を介して、所定の周波数のシリアルクロック（SCL：Serial Clock）が伝送される。
【００２２】
また、バスＩＦ１１では、I3Cの規格に準じて、通信速度が異なる複数の伝送方式が規定されており、マスタ１２は、それらの伝送方式を切り替えることができる。例えば、バスＩＦ１１では、データの転送レートに応じて、通常の転送レートでデータ通信を行うSDR（Standard Data Rate）モード、および、SDRモードよりも高い転送レートでデータ通信を行うHDR（High Data Rate）モードが規定されている。また、HDRモードでは、DDR（Double Data Rate）モード、TSP(Ternary Symbol Pure-Bus)モード、および、TSL(Ternary Symbol Legacy-inclusive-Bus)モードの３つのモードが規格で定義されている。なお、バスＩＦ１１では、通信を開始するときにはSDRモードで通信を行うことが規定されている。
【００２３】
マスタ１２は、送受信部２１、エラー検出部２２、確認信号検出部２３、およびコンフリクト回避部２４を備えて構成される。
【００２４】
送受信部２１は、データ信号線１４−１およびクロック信号線１４−２を介して、スレーブ１３と信号の送受信を行う。例えば、送受信部２１は、クロック信号線１４−２を駆動することにより送信するシリアルクロックのタイミングに合わせて、データ信号線１４−１に対する駆動を行う（電位をＨレベルまたはＬレベルに切り替える）ことにより、スレーブ１３に信号を送信する。また、送受信部２１は、クロック信号線１４−２のシリアルクロックのタイミングに合わせて、スレーブ１３がデータ信号線１４−１に対する駆動を行うことによって、スレーブ１３から送信されてくる信号を受信する。なお、クロック信号線１４−２に対する駆動は、常に、マスタ１２側により行われる。
【００２５】
エラー検出部２２は、送受信部２１が受信した信号に発生しているエラーを検出する。例えば、エラー検出部２２は、送受信部２１が受信した信号に対するパリティチェックや巡回冗長検査（CRC）などを行ったり、スレーブ１３からマスタ１２へ送信権を移行する際に発行されるトークンを確認したりすることで、エラーを検出することができる。そして、エラー検出部２２は、送受信部２１が受信した信号にエラーが発生していることを検出した場合、例えば、送受信部２１に対してスレーブ１３との通信を最初からやり直すように指示することができる。
【００２６】
例えば、エラー検出部２２は、スレーブ１３から送信されてくるデータに含まれている２ビットのパリティのうち、一方を偶数パリティとし、他方を奇数パリティとして、送受信部２１が受信したデータに対するパリティチェックを行うことでエラーの発生を検出する。これにより、エラー検出部２２は、マスタ１２およびスレーブ１３のどちらもデータ信号線１４−１に対する駆動が行われないような状態が発生しても、データが正しいものであるか否かを検出することができる。
【００２７】
確認信号検出部２３は、送受信部２１から送信された信号を受信したスレーブ１３から送信されてくるACK（受信確認信号）またはNACK（非受信確認信号）を検出することにより、スレーブ１３がコマンドやデータなどの受信に成功したか否かを確認する。例えば、バスＩＦ１１では、信号にエラーが発生せずに、スレーブ１３がコマンドやデータなどの受信に成功したときには、スレーブ１３からマスタ１２にACKを送信するように規定されている。また、バスＩＦ１１では、信号にエラーが発生して、スレーブ１３がコマンドやデータなどの受信に失敗したときには、スレーブ１３からマスタ１２にNACKを送信するように規定されている。
【００２８】
従って、確認信号検出部２３は、マスタ１２から送信されるコマンドやデータなどに対して、スレーブ１３から送信されてくるACKを検出した場合には、スレーブ１３がコマンドやデータなどを受信することに成功したと確認することができる。一方、確認信号検出部２３は、マスタ１２から送信されるコマンドやデータなどに対して、スレーブ１３から送信されてくるNACKを検出した場合には、スレーブ１３がコマンドやデータなどを受信することに失敗したと確認することができる。
【００２９】
コンフリクト回避部２４は、例えば、図５を参照して後述するように、確認信号検出部２３によりNACKが検出された場合、NACKに続く所定数のビットを無視した後に、通信を途中で遮断することを指示するアボート信号を送信するように、送受信部２１に対する指示を行う。これにより、コンフリクト回避部２４は、例えば、スレーブ１３から送信されるリードデータと、マスタ１２から送信されるHDR終了コマンドによりコンフリクトが発生することを回避することができる。
【００３０】
また、コンフリクト回避部２４は、例えば、図７を参照して後述するように、トークンおよびCRC5に基づいてエラーが発生していることを検出したときに、プリアンブルにエラーが発生しているものと推定して、所定数のビットの追加クロックを送信した後にアボート信号を送信するように、送受信部２１に対する指示を行う。これにより、コンフリクト回避部２４は、例えば、スレーブ１３から送信されるリードデータと、マスタ１２から送信されるHDR終了コマンドによりコンフリクトが発生することを回避することができる。
【００３１】
スレーブ１３は、送受信部３１およびエラー検出部３２を備えて構成される。
【００３２】
送受信部３１は、データ信号線１４−１およびクロック信号線１４−２を介して、マスタ１２と信号の送受信を行う。例えば、送受信部３１は、クロック信号線１４−２のシリアルクロックのタイミングに合わせて、マスタ１２がデータ信号線１４−１に対する駆動を行うことによって、マスタ１２から送信されてくる信号を受信する。また、送受信部３１は、クロック信号線１４−２のシリアルクロックのタイミングに合わせて、データ信号線１４−１に対する駆動を行うことによって、マスタ１２に信号を送信する。
【００３３】
エラー検出部３２は、マスタ１２のエラー検出部２２と同様に、送受信部３１が受信した信号に発生しているエラーを検出する。そして、エラー検出部３２は、送受信部３１が受信した信号にエラーが発生していない場合、その信号により伝送されるコマンドやデータなどの受信に成功したことを伝えるACKを、送受信部３１によりマスタ１２に送信させる。一方、エラー検出部３２は、送受信部３１が受信した信号にエラーが発生していた場合、その信号により伝送されるコマンドやデータなどの受信に失敗したことを伝えるNACKを、送受信部３１によりマスタ１２に送信させる。
【００３４】
さらに、エラー検出部３２は、例えば、送受信部３１が受信した信号にエラーが発生し、正常な通信を行うことができない場合には、その後の一切の通信を無視し、マスタ１２に対する応答を停止してスレーブ１３を待機状態とさせる。
【００３５】
以上のようにバスＩＦ１１は構成されており、マスタ１２およびスレーブ１３は、データ信号線１４−１およびクロック信号線１４−２を介して信号を送受信することができる。そして、バスＩＦ１１では、マスタ１２が、コンフリクト回避部２４によってコンフリクトの発生を回避することができる。
【００３６】
ここで、バスＩＦ１１では、DDRモード時において、例えば、図２に示すように、プリアンブルと呼ばれる２ビットの信号を使用して、次に送信するデータのタイプを指定するように規定されている。ところで、プリアンブルには、パリティやCRCによるエラー検出が用意されていないため、プリアンブルにエラーが発生した場合には、そのエラーを検出することができない。
【００３７】
また、バスＩＦ１１では、リードデータに続くプリアンブルの２ビット目を、マスタ１２が常に駆動するようにプリアンブルが定義される。これにより、バスＩＦ１１では、例えば、その２ビット目がコンフリクトすることを回避して、より確実に通信を行うことができる。
【００３８】
＜プリアンブルの第１の定義例＞
【００３９】
図２には、バスＩＦ１１におけるプリアンブルの第１の定義例が示されている。以下で説明するように、プリアンブルは、１ビット目（pre[1]）および２ビット目（pre[0]）からなる２ビットの信号により構成される。
【００４０】
HDRモードに入った直後のプリアンブルの１ビット目および２ビット目は、マスタ１２により駆動され、スレーブ１３により受信される。
【００４１】
そして、HDRモードに入った直後のプリアンブルの１ビット目が０であるとき、プリアンブルに続いてコマンドワードが送信されることが指定される。なお、この１ビット目が１であるときの意味は、リザーブされている。また、HDRモードに入った直後のプリアンブルの２ビット目が１であるとき、プリアンブルに続いてコマンドワードが送信されることが指定される。また、この２ビット目が０であるときの意味は、リザーブされている。
【００４２】
リードコマンドの直後のプリアンブルの１ビット目は、マスタ１２により駆動され、スレーブ１３により受信される。また、リードコマンドの直後のプリアンブルの２ビット目は、スレーブ１３により駆動され、マスタ１２により受信される。
【００４３】
そして、リードコマンドの直後のプリアンブルの１ビット目が１であるとき、プリアンブルに続いてデータが送信されることが指定される。なお、この１ビット目が０であるときの意味は、リザーブされている。また、リードコマンドの直後のプリアンブルの２ビット目が０であるとき、スレーブ１３によるリードコマンドの受信が成功したことを示すACKを意味し、この２ビット目が１であるとき、スレーブ１３によるリードコマンドの受信が失敗したことを示すNACKを意味する。
【００４４】
ここで、リードコマンドの直後のプリアンブルの２ビット目は、マスタ１２によりデータ信号線１４−１がＨレベルに維持されること（High Keeper : weak pull up）が必須とされている。これにより、データ信号線１４−１がＨレベルに維持されるビットは、マスタ１２およびスレーブ１３のどちらにも駆動されない場合、その直前のビットが１である場合に限って１となる。
【００４５】
リードデータの直後のプリアンブルの１ビット目は、スレーブ１３により駆動され、マスタ１２により受信される。また、リードデータの直後のプリアンブルの２ビット目は、マスタ１２により常に駆動され、スレーブ１３により受信されるとともに、スレーブ１３による使用が禁止される。
【００４６】
そして、リードデータの直後のプリアンブルの１ビット目が０であるとき、プリアンブルに続いてCRCワードが送信され、この１ビット目が１であるとき、プリアンブルに続いてデータが送信されることが指定される。また、リードデータの直後のプリアンブルの２ビット目が０であるとき、マスタ１２により通信が途中で遮断（Master aborts）されることを意味し、この２ビット目が１であるとき、マスタ１２により通信を途中で遮断しないこと（Master doesn't aborts）を意味する。ここで、リードデータの直後のプリアンブルの２ビット目は、マスタ１２によりデータ信号線１４−１がＨレベルに維持されるが、これは必須ではなく、不定回避のためである。
【００４７】
ライトコマンドの直後のプリアンブルの１ビット目および２ビット目は、マスタ１２により駆動され、スレーブ１３により受信される。
【００４８】
そして、ライトコマンドの直後のプリアンブルの１ビット目が１であるとき、ライトコマンドに続いてデータが送信されることが指定される。なお、この１ビット目が０であるときの意味は、リザーブされている。また、ライトコマンドの直後のプリアンブルの２ビット目が０であるとき、ライトコマンドに続いてデータが送信されることが指定される。なお、この１ビット目が１であるときの意味は、リザーブされている。
【００４９】
ライトデータの直後のプリアンブルの１ビット目および２ビット目は、マスタ１２により駆動され、スレーブ１３により受信される。
【００５０】
そして、ライトデータの直後のプリアンブルの１ビット目が０であるとき、プリアンブルに続いてCRCワードが送信され、この１ビット目が１であるとき、プリアンブルに続いてデータが送信されることが指定される。また、ライトデータの直後のプリアンブルの２ビット目が１であるとき、CRCワードまたはデータが送信されることが指定される。なお、この２ビット目が０であるときの意味は、リザーブされている。
【００５１】
このように、バスＩＦ１１におけるプリアンブルが定義されている。そして、例えば、リードデータの直後のプリアンブルの２ビット目が、マスタ１２により常に駆動されるように定義されることにより、コンフリクトの発生を回避することができる。
【００５２】
例えば、仮に、リードデータの直後のプリアンブルの２ビット目について、CRCワードを伝送する時にはスレーブ１３が駆動し、それ以外はマスタ１２が駆動するように規定したとする。この場合、リードデータを送信する際のプリアンブルにエラーが発生し、スレーブ１３が、CRCワードを送信しようとしたところ、マスタ１２が、リードデータと誤認識したとき、その２ビット目がコンフリクトすることが想定される。即ち、この場合、プリアンブルの１ビット目をマスタ１２が誤認識した場合など、その２ビット目を駆動する主体が異なるため、バスＩＦ１１において信号が衝突することが発生する恐れがある。さらに、この場合、スレーブ１３がCRCワードを送信する場合には、マスタ１２がアボート信号を出力することができないことが想定される。
【００５３】
これに対し、バスＩＦ１１では、リードデータの後に送信されるプリアンブルの２ビット目を、常に、マスタ１２が駆動するように規定される。これにより、例えば、マスタ１２が、アボート信号を出力する際に次のクロックを出さないため、スレーブ１３が駆動することができない状態となり、バスＩＦ１１がコンフリクトすることは発生しない。さらに、上述したように、スレーブ１３がCRCワードを送信する場合には、マスタ１２がアボート信号を出力することができなくなることも回避され、スレーブ１３がCRCワードを送信する場合でも、マスタ１２がアボート信号を出力することができる。
【００５４】
このように、バスＩＦ１１では、マスタ１２が、スレーブ１３から読み出されるリードデータを受信し、そのリードデータの後に送受信されるプリアンブルの２ビット目を常に駆動することで、その２ビット目がコンフリクトすることを回避し、より確実に通信を行うことができる。
【００５５】
図３には、バスＩＦ１１におけるプリアンブルの第１の定義例の変形例が示されている。
【００５６】
図３に示すプリアンブルでは、ライトデータの後に送信されるプリアンブルの２ビット目が、図２と異なるものとなっている。なお、それ以外は、図２と同一であり、それらの詳細な説明は省略する。
【００５７】
即ち、図３に示すように、ライトデータの後に送信されるプリアンブルの２ビット目が０であるとき、そのプリアンブルの次にデータが送信されることが指定される。また、ライトデータの後に送信されるプリアンブルの２ビット目が１であるとき、そのプリアンブルの次にCRCワードが送信されることが指定される。つまり、この例では、ライトデータの後に送信されるプリアンブルの１ビット目と２ビット目の値が反転するように定義される。例えば、プリアンブルの１ビット目が０であり、２ビット目が１であるときにCRCワードが送信され、プリアンブルの１ビット目が１であり、２ビット目が０であるときにライトデータが送信されると定義される。
【００５８】
また、別の例として、例えば、CRCワードが送信されるときにはプリアンブルの１ビット目および２ビット目に０を送信し、データが送信されるときにはプリアンブルの１ビット目および２ビット目に１を送信してもよい。即ち、マスタ１２が、プリアンブルの１ビット目および２ビット目の値を反転させることなく、２回連続して同じ値を送ることで、プリアンブルに発生する１ビットエラーを検出できる。ただし、この場合、マスタ１２およびスレーブ１３のいずれもデータ信号線１４−１に対する駆動を行わない状態と区別することが困難になることより、図３に示すように、プリアンブルの１ビット目と２ビット目の値が反転していたほうが望ましい。
【００５９】
このように、バスＩＦ１１において、ライトデータの後に送信されるプリアンブルの２ビット目を定義することで、例えば、プリアンブルに１ビットエラーが発生したことをスレーブ１３が容易に検出することができる。
【００６０】
＜HDRモードでの通信についての説明＞
【００６１】
図４には、リード転送時におけるタイミングチャートが示されている。
【００６２】
なお、以下の図面において、グレーのハッチングが施されている部分は、スレーブ１３により駆動が行われていることを表している。また、細線の斜線のハッチングが施されている部分は、スレーブ１３により駆動が行われ、マスタ１２によりデータ信号線１４−１がＨレベルに維持されることを表しており、太線の斜線のハッチングが施されている部分は、駆動が行われないこと表している。
【００６３】
図４に示すように、マスタ１２は、まず、SDRモードにおいて、バスＩＦ１１を構成する全てのスレーブ１３を対象として一斉にコマンドを送信することを通知するブロードキャストコマンド（0ｘ7E+R/W=0）を送信する。その後、マスタ１２は、ブロードキャストコマンドの受信が成功したことを確認するためにスレーブ１３から送信されてくるACKを受信して、HDRモードに入るためのコモンコマンドコード（ENTHDR CCC(0ｘ20)）を送信する。このように、マスタ１２は、スレーブ１３に対してHDRモードに入ることを通知してHDRモードに移行する。
【００６４】
その後、HDRモードに移行した直後のプリアンブルの１ビット目および２ビット目は、マスタ１２により駆動され、図４の例では、プリアンブルの次にコマンドワード（DDR command）を送信することが指定（pre[1]:0 , pre[0]:1）されている。そして、そのプリンブルに続いて、マスタ１２によりコマンドワード（Command Code , Slave address , Reserved , Parity）が送信される。
【００６５】
さらに、コマンドワードを送信した直後のプリアンブルについては、１ビット目はマスタ１２により駆動され、２ビット目はスレーブ１３により駆動される。図４の例では、１ビット目により、プリアンブルの次にデータ（DDR Data）を送信することが指定（pre[1]:1）されるとともに、２ビット目により、スレーブ１３においてコマンドの受信に成功したこと（pre[0]:0）が示されている。そして、そのプリンブルに続いて、スレーブ１３によりリードデータ（Data bit , Parity）が送信される。
【００６６】
続いて、リードデータを送信した直後のプリアンブルについては、１ビット目はスレーブ１３により駆動され、２ビット目はマスタ１２により駆動される。図４の例では、１ビット目により、プリアンブルの次にデータ（DDR Data）を送信することが指定（pre[1]:1）されている。また、２ビット目により、次の読みだされるデータがリードデータかCRCであるかを問わず、マスタ１２によりアボート信号（pre[1]:0）または非アボート信号（pre[1]:1）のいずれかが送信され、マスタ１２が、アボート信号を送信した場合には通信が遮断され、非アボート信号を送信した場合には通信が継続される。この２ビット目は、上述したように、常に、マスタ１２により駆動される。
【００６７】
そして、通信が継続される場合、以下、同様に、リードデータの送信が繰り返して行われ、スレーブ１３は、マスタ１２から要求された全てのデータの送信を行う。
【００６８】
その後、最後のリードデータを送信した直後のプリアンブルの１ビット目により、プリアンブルの次にCRCワード（DDR CRC）を送信することが指定（pre[1]:0）される。なお、CRCワードの送信直前のプリアンブルの２ビット目は、スレーブ１３により駆動されることは禁止される。
【００６９】
そして、そのプリンブルに続いて、スレーブ１３によりCRCワード（Token(0xC) , CRC5）が送信された後、マスタ１２によりHDR終了コマンド（HDR Exit）が送信され、HDRモードでの通信が終了される。なお、HDR終了コマンドの１ビット目（セットアップ）はマスタ１２により出力される。また、図示するように、CRCワードの受信直後のビットから、データ信号線１４−１に対する駆動が、スレーブ１３からマスタ１２に切り替えられるようにすることで、安全に早く通信を終了させることができる。
【００７０】
このように、バスＩＦ１１では、HDRモードでリード転送が行われる。そして、バスＩＦ１１では、リードデータの直後のプリアンブルの２ビット目を常に、マスタ１２が駆動することにより、その２ビット目がコンフリクトすることを回避することができる。これにより、バスＩＦ１１では、より確実に通信を行うことができる。
【００７１】
＜プリアンブルエラーの説明＞
【００７２】
図５乃至図１０を参照して、プリアンブルに発生するエラーと、プリアンブルにエラーが発生したときの処理について説明する。
【００７３】
図５および図６を参照して、リードコマンドに続いてリードデータが送信されるときのプリアンブルの２ビット目に、ビットの値が反転する１ビットエラーが発生する例について説明する。上述したように、リードコマンドの直後のプリアンブルの２ビット目は、スレーブ１３からマスタ１２に送信されるACKまたはNACKを示す。
【００７４】
図５には、リードコマンドの直後のプリアンブルにおいて、スレーブ１３から送信されるACKに１ビットエラーが発生する例が示されている。
【００７５】
図５の左側に示すように、通常時には、スレーブ１３が、プリアンブルの２ビット目を０に駆動することにより、マスタ１２はACKが送信されてきたと認識する。この場合、マスタ１２は、ACKを検出したことに応じて、プリアンブルに続いてスレーブ１３から送信されてくるリードデータを受信する処理を行う。
【００７６】
これに対し、エラー時には、図５の右側に示すように、プリアンブルの２ビット目がビット反転して１になるため、マスタ１２は、NACKが送信されてきたものと誤認識してしまう。この場合、マスタ１２は、プリアンブルに発生したエラーを検出することはできないが、NACKを検出したときの通常の処理を行って通信を終了させることができる。即ち、マスタ１２は、スレーブ１３から送信されてくるリードデータのビット数に対応するコンフリクト防止クロック期間が経過した後のプリアンブルの２ビット目を０に駆動して、スレーブ１３にアボート信号を送信する。
【００７７】
このように、マスタ１２は、ACKをNACKと誤認識しても、スレーブ１３に対して通信の遮断することを正常に通知することができるので、その誤認識に基づいてコンフリクトが発生することは回避される。その後、マスタ１２が、HDR終了コマンドを送信することで、HDRモードでの通信が終了される。
【００７８】
図６には、リードコマンドの直後のプリアンブルにおいて、スレーブ１３から送信されるNACKに１ビットエラーが発生する例が示されている。
【００７９】
図６の左側に示すように、通常時には、スレーブ１３が、プリアンブルの２ビット目を１に駆動することにより、マスタ１２はNACKが送信されてきたと認識する。この場合、マスタ１２は、NACKを検出したことに応じて、リードデータのビット数に対応するコンフリクト防止クロック期間が経過した後のプリアンブルの２ビット目を０に駆動して、スレーブ１３にアボート信号を送信する。その後、マスタ１２が、HDR終了コマンドを送信することで、HDRモードでの通信が終了される。
【００８０】
これに対し、図６の右側に示すように、エラー時には、プリアンブルの２ビット目がビット反転して０になるため、マスタ１２は、ACKが送信されてきたものと誤認識してしまう。この場合、マスタ１２は、スレーブ１３から送信されてくるリードデータを受信する処理を行うが、スレーブ１３がリードコマンドの受信に失敗しているため、リードデータが送信されてくることはない。そのため、この期間は、マスタ１２およびスレーブ１３のどちらもデータ信号線１４−１に対する駆動を行わない状態になる。
【００８１】
このとき、マスタ１２は、リードデータが送信されると誤認識している期間において受信した信号に対してパリティチェックなどを行うことによってエラーを検出すること、即ち、リードデータが正常に送信されていないことを検出することができる。例えば、リードデータに含まれるパリティには、リードデータが送信されるとマスタ１２により誤認識されている期間において、データ信号線１４−１に対する駆動が行われないときにエラーが発生したことを検出することができるように定義されている。
【００８２】
このエラーの検出に従い、マスタ１２は、リードデータが送信されると誤認識している期間の直後のプリアンブルの２ビット目を０に駆動して、スレーブ１３にアボート信号を送信する。その後、マスタ１２が、HDR終了コマンドを送信することで、HDRモードでの通信が終了される。
【００８３】
次に、図７および図８を参照して、リードデータに続いてリードデータが送信されるときのプリアンブルの１ビット目に、ビットの値が反転する１ビットエラーが発生する例について説明する。上述したように、リードデータの直後のプリアンブルの１ビット目は、プリアンブルに続いてCRCワードが送信されるとき１に駆動され、プリアンブルに続いてリードデータが送信されるとき０に駆動される。
【００８４】
図７には、リードデータの直後のプリアンブルの１ビット目が１であるときに、その１ビット目に１ビットエラーが発生する第１の例が示されている。
【００８５】
図７の左側に示すように、通常時には、スレーブ１３が、プリアンブルの１ビット目を１に駆動することにより、マスタ１２は、プリアンブルに続いてリードデータが送信されてくると認識する。この場合、マスタ１２は、そのリードデータを受信する処理を行う。
【００８６】
これに対し、エラー時には、図７の右側に示すように、プリアンブルの１ビット目がビット反転して０になるため、マスタ１２は、プリアンブルに続いてCRCワードが送信されてくるものと誤認識してしまう。この場合、マスタ１２は、CRCワードに含まれるトークンおよびCRC5に基づいてエラーが発生していることを検出することができ、プリアンブルにエラーが発生しているものと推定する。
【００８７】
従って、この場合、マスタ１２は、リードデータのビット数（18ビット）と、CRCワードのビット数（9ビット）との差に対応するビット数の追加クロック（9ビット）を送信した後のプリアンブルの２ビット目を０に駆動して、スレーブ１３にアボート信号を送信する。その後、マスタ１２が、HDR終了コマンドを送信することで、HDRモードでの通信が終了される。
【００８８】
図８には、リードデータの直後のプリアンブルの１ビット目が１であるときに、その１ビット目に１ビットエラーが発生する第２の例が示されている。
【００８９】
図８の左側に示すように、スレーブ１３が、リードデータに続いてリードデータを送信しようとする一方で、マスタ１２が、アボート信号を送信して、通信を途中で遮断することがある。
【００９０】
このとき、図７の右側に示すように、リードデータの直後のプリアンブルの１ビット目に１ビットエラーが発生すると、マスタ１２は、プリアンブルに続いてリードデータが送信されてくると誤認識する。このとき、マスタ１２は、そのプリアンブルの２ビット目でアボート信号を送信するため、そのような誤認識があったとしても、問題が発生することなく、HDRモードでの通信が終了される。
【００９１】
次に、図９および図１０を参照して、リードデータに続いてCRCワードが送信されるときのプリアンブルの１ビット目に、ビットの値が反転する１ビットエラーが発生する例について説明する。上述したように、リードデータの直後のプリアンブルの１ビット目は、プリアンブルに続いてCRCワードが送信されるとき１に駆動され、プリアンブルに続いてリードデータが送信されるとき０に駆動される。
【００９２】
図９には、リードデータの直後のプリアンブルの１ビット目が０であるときに、その１ビット目に１ビットエラーが発生する第１の例が示されている。
【００９３】
図９の左側に示すように、通常時には、スレーブ１３が、プリアンブルの１ビット目を０に駆動することにより、マスタ１２は、プリアンブルに続いてCRCワードが送信されてくると認識する。この場合、マスタ１２は、そのCRCワードを受信する処理を行い、その後にHDR終了コマンドを送信する。
【００９４】
これに対し、エラー時には、図９の右側に示すように、プリアンブルの１ビット目がビット反転して１になるため、マスタ１２は、プリアンブルに続いてリードデータが送信されてくるものと誤認識してしまう。この場合、リードデータが送信されるとマスタ１２において誤認識されている期間のうちの、トークンおよびCRCを受信した後の期間は、データ信号線１４−１に対する駆動が行われない状態になる。従って、マスタ１２は、リードデータが送信されると誤認識している期間において受信した信号に対するパリティチェックを行うことによってエラーを検出すること、即ち、リードデータが正常に送信されていないことを検出することができる。
【００９５】
このエラーの検出に従い、マスタ１２は、リードデータが送信されると誤認識している期間の直後のプリアンブルの２ビット目を０に駆動して、スレーブ１３にアボート信号を送信する。その後、マスタ１２が、HDR終了コマンドを送信することで、HDRモードでの通信が終了される。
【００９６】
図１０には、リードデータの直後のプリアンブルの１ビット目が０であるときに、その１ビット目に１ビットエラーが発生する第２の例が示されている。
【００９７】
図１０の左側に示すように、スレーブ１３が、リードデータに続いてCRCワードを送信しようとする一方で、マスタ１２が、アボート信号を送信して、通信を途中で遮断することがある。
【００９８】
このとき、図１０の右側に示すように、リードデータの直後のプリアンブルの１ビット目に１ビットエラーが発生すると、マスタ１２は、プリアンブルに続いてリードデータが送信されてくると誤認識する。このとき、マスタ１２は、そのプリアンブルの２ビット目でアボート信号を送信するため、そのような誤認識があったとしても、問題が発生することなく、HDRモードでの通信が終了される。
【００９９】
以上のように、バスＩＦ１１では、プリアンブルに対するエラー検出が用意されていなくても、マスタ１２により、バスＩＦ１１がデッドロックすることを回避することができ、より確実に通信を行うことができる。
【０１００】
＜コンフリクトの発生を回避する通信方法＞
【０１０１】
図１１は、マスタ１２が、HDRモードのひとつであるDDRモードでスレーブ１３からデータを読み出す通信処理（DDR Read）を説明するフローチャートである。
【０１０２】
ステップＳ１１において、マスタ１２は、通信をSDRモードからHDRモードに切り替える処理を行う。具体的には、マスタ１２では、送受信部２１が、データ信号線１４−１およびクロック信号線１４−２を駆動して、SDRモードにおいて、バスＩＦ１１を構成する全てのスレーブ１３を対象として一斉にコマンドを送信することを通知するブロードキャストコマンド（0ｘ7E+R/W=0）を送信する。その後、マスタ１２では、確認信号検出部２３が、ブロードキャストコマンドの受信が成功したことを確認するためにスレーブ１３から送信されてくるACKを受信すると、送受信部２１が、HDRモードに入るためのコモンコマンドコード（ENTHDR CCC(0ｘ20)）を送信する。
【０１０３】
ステップＳ１２において、マスタ１２の送受信部２１は、データ信号線１４−１およびクロック信号線１４−２を駆動して、リードコマンドを送信する。
【０１０４】
ステップＳ１３において、確認信号検出部２３は、リードコマンドを送信した後のプリアンブルの２ビット目の値を検出し、スレーブ１３からACKおよびNACKのどちらが送信されてきかを判定する。即ち、確認信号検出部２３は、リードコマンドを送信した後のプリアンブルの２ビット目が０であることを検出した場合、スレーブ１３からACKが送信されてきたと判定する。一方、確認信号検出部２３は、リードコマンドを送信した後のプリアンブルの２ビット目が１であることを検出した場合、スレーブ１３からNACKが送信されてきたと判定する。
【０１０５】
ステップＳ１３において、確認信号検出部２３が、スレーブ１３からACKが送信されてきたと判定した場合、処理はステップＳ１４に進み、送受信部２１は、プリアンブルに続いて送信されてくるリードデータを受信する。さらに、送受信部２１は、リードデータに続いて送信されてくるプリアンブルの１ビット目を受信する。
【０１０６】
ステップＳ１５において、マスタ１２は、通信を継続するか否かを判定する。例えば、マスタ１２は、次のリードデータまたはCRCワードが不要であると判断した場合、通信を継続しないと判定することができる。
【０１０７】
ステップＳ１５において、マスタ１２が通信を継続しないと判定した場合、処理はステップＳ１６に進み、送受信部２１は、通信を途中で遮断することを指示するアボート信号（pre[1]:0）をプリアンブルの２ビット目で送信する。その後、処理はステップＳ２１に進み、送受信部２１は、アボート信号に続いて、HDR終了コマンドを送信する。一方、ステップＳ１５において、マスタ１２が通信を継続すると判定した場合、送受信部２１は、通信を途中で遮断しないことを指示する非アボート信号（pre[1]:1）をプリアンブルの２ビット目で送信して、処理はステップＳ１７に進む。
【０１０８】
ステップＳ１７において、送受信部２１は、ステップＳ１４で受信したプリアンブルの１ビット目に基づいて、リードデータおよびCRCワードのどちらの送信を指定しているかを判定する。
【０１０９】
ステップＳ１７において、送受信部２１が、プリアンブルはリードデータの送信を指定していると判定した場合、処理はステップＳ１４に戻り、以下、同様の処理が繰り返される。一方、ステップＳ１７において、送受信部２１が、プリアンブルはCRCワードの送信を指定していると判定した場合、処理はステップＳ１８に進む。
【０１１０】
ステップＳ１８において、送受信部２１は、ステップＳ１３で受信したプリアンブルに続いて送信されてくる信号を受信し、エラー検出部２２は、その信号にエラーが発生しているか否かを判定する。
【０１１１】
ステップＳ１８において、エラー検出部２２が、CRCワードの送信を指定しているプリアンブルに続いて送信されてくる信号にエラーが発生していると判定した場合、処理はステップＳ１９に進む。即ち、この場合、エラー検出部２２によりトークンエラーまたはCRCエラーが検出されると、コンフリクト回避部２４は、プリアンブルにエラーが発生したものと推定する。
【０１１２】
ステップＳ１９において、エラー検出部２２は、図７を参照して説明したような追加クロックを送信し、その後に、通信を途中で遮断することを指示するアボート信号を送信するように、送受信部２１に対する指示を行う。これに従い、送受信部２１は、追加クロックを送信した後、スレーブ１３にアボート信号を送信する。その後、処理はステップＳ２１に進み、送受信部２１は、アボート信号に続いて、HDR終了コマンドを送信する。
【０１１３】
一方、ステップＳ１８において、エラー検出部２２が、CRCワードの送信を指定しているプリアンブルに続いて送信されてくる信号にエラーが発生していないと判定した場合も、ステップＳ２１において、送受信部２１は、HDR終了コマンドを送信する。
【０１１４】
一方、ステップＳ１３において、確認信号検出部２３が、スレーブ１３からNACKが送信されてきたと判定した場合、処理はステップＳ２０に進む。ステップＳ２０において、コンフリクト回避部２４は、リードデータのビット数に対応するコンフリクト防止クロック期間が経過した後に、通信を途中で遮断することを指示するアボート信号を送信するように、送受信部２１に対する指示を行う。これに従い、図６を参照して上述したように、送受信部２１は、スレーブ１３にアボート信号を送信する。その後、処理はステップＳ２１に進み、送受信部２１は、アボート信号に続いて、HDR終了コマンドを送信する。
【０１１５】
これにより、マスタ１２がDDRモードでスレーブ１３からデータを読み出す通信処理（DDR Read）は終了される。
【０１１６】
以上のように、バスＩＦ１１では、リードデータの直後のプリアンブルの２ビット目を常に、マスタ１２が駆動することにより、その２ビット目がコンフリクトすることを回避することができる。また、バスＩＦ１１では、マスタ１２がNACKを受信したと判定した場合、そのNACKがACKの１ビットエラーであったとしても、コンフリクトの発生を回避することができる。さらに、バスＩＦ１１では、スレーブ１３がCRCワードの送信を指定するプリアンブルに１ビットエラーが発生しても、マスタ１２においてCRCワードに基づくエラー検出によりプリアンブルにエラーが発生したと推定することができ、コンフリクトの発生を回避することができる。
【０１１７】
従って、バスＩＦ１１では、プリアンブルにエラー検出が用意されていなくても、プリアンブルにエラーが発生することによるコンフリクトを回避して、より確実に通信を行うことができる。
【０１１８】
＜プリアンブルの第２の定義例＞
【０１１９】
図１２には、バスＩＦ１１におけるプリアンブルの第２の定義例が示されている。
【０１２０】
また、バスＩＦ１１では、プリアンブルに対して冗長性を持たせるために、プリアンブルの１ビット前にプレパレーションビット（ppr）を送信するように定義されている。図１２には、プレパレーションビットの定義例も示されている。
【０１２１】
HDRモードに入った直後のプリアンブルの１ビット前では、プレパレーションビットを送信しないように定義される。また、HDRモードに入った直後のプリアンブルは、図２と同様に定義されている。
【０１２２】
リードコマンドの直後のプリアンブルの１ビット前のプレパレーションビットは、マスタ１２により駆動され、スレーブ１３により受信される。そして、このプレパレーションビットが１であるとき、プリアンブルに続いてデータが送信されることが指定される。なお、このプレパレーションビットが０であるときの意味は、リザーブされている。
【０１２３】
また、リードコマンドの直後のプリアンブルは、１ビット目はスレーブ１３により駆動され、マスタ１２により受信される。そして、この１ビット目が０であるとき、スレーブ１３によるリードコマンドの受信が成功したことを示すACKを意味し、この１ビット目が１であるとき、スレーブ１３によるリードコマンドの受信が失敗したことを示すNACKを意味する。ここで、リードコマンドの直後のプリアンブルの１ビット目は、マスタ１２によりデータ信号線１４−１がＨレベルに維持されることが必須とされている。即ち、リードコマンドの直後のプリアンブルの１ビット目は、その２ビット目と同一となるように定義されている。
【０１２４】
リードデータの直後のプリアンブルの１ビット前のプレパレーションビットは、スレーブ１３により駆動され、マスタ１２により受信される。そして、このプレパレーションビットが０であるとき、リードデータに続いてCRCワードが送信されることが指定され、このプレパレーションビットが１であるとき、リードデータに続いてデータが送信されることが指定される。なお、リードデータの直後のプリアンブルは、図２と同様に定義されている。
【０１２５】
ライトコマンドの直後のプリアンブルの１ビット前のプレパレーションビットは、マスタ１２により駆動され、スレーブ１３により受信される。そして、このプレパレーションビットが１であるとき、ライトコマンドに続いてデータが送信されることが指定され、このプレパレーションビットが０であるときの意味は、リザーブされている。なお、ライトコマンドの直後のプリアンブルは、図２と同様に定義されている。
【０１２６】
ライトデータの直後のプリアンブルの１ビット前のプレパレーションビットは、マスタ１２により駆動され、スレーブ１３により受信される。そして、このプレパレーションビットが０であるとき、ライトデータに続いてCRCワードが送信されることが指定され、このプレパレーションビットが１であるとき、ライトデータに続いてデータが送信されることが指定される。なお、ライトデータの直後のプリアンブルは、図２と同様に定義されている。
【０１２７】
図１２に示すようなプレパレーションビットを用いることで、プリアンブルに発生するエラーを検出可能とすることができる。
【０１２８】
例えば、プリアンブルにエラーが発生して、マスタ１２およびスレーブ１３のどちらもバスＩＦ１１を駆動しない場合に、パリティエラーを検出することが必要になるが、偶然、パリティが正解してしまう可能性がある。そこで、このような偶然に一致する可能性を排除し、プリアンブルにエラーが発生した場合には、マスタ１２が確実にマスターアボートすることができるように、２ビットのパリティを１ビットに変更し、その１ビットにプレパレーションビットを用いるようにすることで、プリアンブルに発生するエラーを検出することができる。具体的には、コマンドおよびデータのパリティを１ビット削除し、図１２に示したようなプレパレーションビットを定義する。
【０１２９】
例えば、上述したように、リードデータの後のプレパレーションビットと、プリアンブルの１ビット目の１ビットを用いて、そのプリアンブルに続いて、リードデータおよびCRCワードのどちらが送信されるかが明示される。これにより、プリアンブルエラーを検知することができる。
【０１３０】
また、リードデータに続くプリアンブルの２ビット目を、マスタ１２が常に駆動するようにすることで、マスターアボートの際にマスタ１２が次のクロックを出力しないために、スレーブ１３が駆動することができない状態となり、コンフリクトの発生を回避することができる。
【０１３１】
また、リードコマンドに続くプリアンブルの１ビット目および２ビット目で、同一のビットを２回送信することで、ACKまたはNACKに発生するエラーを検出可能とすることができる。これによっても、マスタ１２およびスレーブ１３のどちらも駆動しない区間が発生することを回避することができ、パリティエラーが偶然一致することを回避して、マスタ１２によりマスターアボートを行うことができる。この場合のプレパレーションビットは、マスタ１２によりＨレベルに維持されるように、１に吊り上げるために用いられる。
【０１３２】
＜HDRモードでの通信についての説明＞
【０１３３】
図１３には、リード転送時におけるタイミングチャートが示されている。ここで、図１３では、図４に示したタイミングチャートと異なる点について説明する。
【０１３４】
例えば、図４のタイミングチャートでは、コマンドワード（DDR command）の最後の２ビットがパリティであったのに対し、図１３のタイミングチャートでは、その２ビットのうち、１ビット目がパリティとなっており、２ビット目がプレパレーションビットとなっている。同様に、図４のタイミングチャートでは、リードデータ（DDR Data）の最後の２ビットがパリティであったのに対し、図１３のタイミングチャートでは、その２ビットのうち、１ビット目がパリティとなっており、２ビット目がプレパレーションビットとなっている。
【０１３５】
このように、例えば、リードコマンドに続いてリードデータが送信される場合、リードコマンドに続くプリアンブルは、同じ値が２回送信される。また、リードデータに続いてリードデータが送信される場合、リードデータの最後のプレパレーションビットと、リードデータに続くプリアンブルの１ビット目で、同じ値が２回送信される。さらに、リードデータに続いてCRCワードが送信される場合、リードデータの最後のプレパレーションビットと、リードデータに続くプリアンブルの１ビット目で、同じ値が２回送信される。
【０１３６】
このように、バスＩＦ１１では、プレパレーションビットを用いることで、同じビットを２回伝送することができ、冗長化を図ることができることより、プリアンブルに発生するエラーを検出することができる。
【０１３７】
＜プレパレーションビットおよびプリアンブルのエラーの説明＞
【０１３８】
図１４乃至図１６を参照して、プレパレーションビットおよびプリアンブルに発生するエラーについて説明する。
【０１３９】
図１４には、リードコマンドに続いてリードデータが送信されるときのプレパレーションビットおよびプリアンブルに１ビットエラーが発生する例が示されている。上述したように、リードコマンドの直後のプリアンブルの２ビット目は、スレーブ１３からマスタ１２に送信されるACKまたはNACKを示す。
【０１４０】
図１４の左側に示すように、スレーブ１３がACKを送信するときには、プレパレーションビットは１に駆動され、プリアンブルの１ビット目および２ビット目は０に駆動（ppr:1 , pre[1]:0 , pre[0],0）される。
【０１４１】
また、図１４の中央に示すように、スレーブ１３がNACKを送信するときには、プレパレーションビットは１に駆動され、プリアンブルの１ビット目および２ビット目は１に駆動（ppr:1 , pre[1]:1 , pre[0],1）される。なお、図１４には、マスタ１２がNACKを検出した後に、衝突防止用のクロックを１ビット挿入した後に、HDR終了コマンド（HDR Exit）を送信する例が示されている。また、マスタ１２は、このような衝突防止用のクロックを挿入せずに、NACKを検出した直後にHDR終了コマンドを送信してもよい。
【０１４２】
このように、プレパレーションビットおよびプリアンブルの３ビットの組み合わせは、（ppr:1 , pre[1]:0 , pre[0],0）または（ppr:1 , pre[1]:1 , pre[0],1）のいずれかしか取り得ないため、図１４の右側に示すようにエラーが発生したとき、マスタ１２は、１ビットエラーの発生を必ず検出することができる。そして、マスタ１２は、エラーを検出したとき、コンフリクトの発生を回避するため、追加クロックを送信してリードデータに一時的に遷移し（受信データは全て無視する）、その後、マスターアボート処理を行う。
【０１４３】
図１５には、リードデータに続いてリードデータが送信されるときのプレパレーションビットおよびプリアンブルに１ビットエラーが発生する例が示されている。
【０１４４】
図１５の左側に示すように、リードデータに続いてリードデータを送信するとき、プレパレーションビットおよびプリアンブルの１ビット目は１に駆動（ppr:1 , pre[1]:1）される。なお、プリアンブルの２ビット目は、マスタ１２により１または０のどちらかに駆動されるが、マスタ１２がマスターアボートしない場合は、この２ビット目は駆動されず、スレーブ１３は、この値を参照しない。
【０１４５】
図１５の中央に示すように、マスタ１２は、マスターアボートするとき、プリアンブルの２ビット目を０に駆動する。このとき、この２ビット目をスレーブ１３が駆動することはないため、コンフリクトが発生することなく、マスタ１２は、安全に処理を中断することができる。
【０１４６】
そして、プレパレーションビットおよびプリアンブルの１ビット目の２ビットの組み合わせは、（ppr:1 , pre[1]:1）または（ppr:0 , pre[1]:0）のいずれかしか取り得ないため、図１５の右側に示すようにエラーが発生したとき、マスタ１２は、１ビットエラーの発生を必ず検出することができる。そして、マスタ１２は、エラーを検出したとき、マスターアボート処理を行う。
【０１４７】
図１６には、リードデータに続いてCRCワードが送信されるときのプレパレーションビットおよびプリアンブルに１ビットエラーが発生する例が示されている。
【０１４８】
図１６の左側に示すように、リードデータに続いてCRCワードを送信するとき、プレパレーションビットおよびプリアンブルの１ビット目は０に駆動（ppr:0 , pre[1]:0）される。なお、プリアンブルの２ビット目は、マスタ１２により１または０のどちらかに駆動されるが、マスタ１２がマスターアボートしない場合は、この２ビット目は駆動されず、スレーブ１３は、この値を参照しない。
【０１４９】
図１６の中央に示すように、マスタ１２は、マスターアボートするとき、プリアンブルの２ビット目を０に駆動する。このとき、この２ビット目をスレーブ１３が駆動することはないため、コンフリクトが発生することなく、マスタ１２は、安全に処理を中断することができる。
【０１５０】
そして、プレパレーションビットおよびプリアンブルの１ビット目の２ビットの組み合わせは、（ppr:1 , pre[1]:1）または（ppr:0 , pre[1]:0）のいずれかしか取り得ないため、図１６の右側に示すようにエラーが発生したとき、マスタ１２は、１ビットエラーの発生を必ず検出することができる。そして、マスタ１２は、エラーを検出したとき、マスターアボート処理を行う。
【０１５１】
図１４乃至図１６に示したように、コンフリクトの発生を回避して、バスＩＦ１１がデッドロックすることなく、より確実に通信を行うことができる。
【０１５２】
なお、本技術は、I3Cの規格に従ったバスＩＦ１１に限定されることはなく、その他の規格に従ったバスＩＦ１１に適用することができる。また、図１に示すバスＩＦ１１では、スレーブ１３−１乃至１３−３が接続された構成例が示されているが、スレーブ１３は、例えば、１台または２台でもよく、あるいは、３台以上でもよい。
【０１５３】
なお、上述のフローチャートを参照して説明した各処理は、必ずしもフローチャートとして記載された順序に沿って時系列に処理する必要はなく、並列的あるいは個別に実行される処理（例えば、並列処理あるいはオブジェクトによる処理）も含むものである。また、プログラムは、１のCPUにより処理されるものであっても良いし、複数のCPUによって分散処理されるものであっても良い。
【０１５４】
また、本明細書において、システムとは、複数の装置により構成される装置全体を表すものである。
【０１５５】
また、上述した一連の処理は、ハードウエアにより実行することもできるし、ソフトウエアにより実行することもできる。一連の処理をソフトウエアにより実行する場合には、そのソフトウエアを構成するプログラムが、専用のハードウエアに組み込まれているコンピュータ、または、各種のプログラムをインストールすることで、各種の機能を実行することが可能な、例えば汎用のパーソナルコンピュータなどに、プログラムが記録されたプログラム記録媒体からインストールされる。
【０１５６】
＜ハードウエアの構成例＞
【０１５７】
図１７は、上述した一連の処理をプログラムにより実行するコンピュータのハードウエアの構成例を示すブロック図である。
【０１５８】
コンピュータにおいて、CPU（Central Processing Unit）１０１，ROM（Read Only Memory）１０２，RAM（Random Access Memory）１０３、およびEEPROM（Electronically Erasable and Programmable Read Only Memory）１０４は、バス１０５により相互に接続されている。バス１０５には、さらに、入出力インタフェース１０６が接続されており、入出力インタフェース１０６が外部（例えば、図１のデータ信号線１４−１およびクロック信号線１４−２）に接続される。
【０１５９】
以上のように構成されるコンピュータでは、CPU１０１が、例えば、ROM１０２およびEEPROM１０４に記憶されているプログラムを、バス１０５を介してRAM１０３にロードして実行することにより、上述した一連の処理が行われる。また、コンピュータ（CPU１０１）が実行するプログラムは、ROM１０２に予め書き込んでおく他、入出力インタフェース１０６を介して外部からEEPROM１０４にインストールしたり、更新したりすることができる。
【０１６０】
なお、本技術は以下のような構成も取ることができる。
（１）
他の通信装置と信号の送受信を行う送受信部を備え、
前記送受信部は、
前記他の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
通信装置。
（２）
前記送受信部は、前記プリアンブルの２ビット目により、次の読みだされるデータがリードデータかCRC（Cyclic Redundancy Check）であるかを問わず、前記他の通信装置に対して通信を途中で遮断すること、または、通信の遮断を行わないことを通知する
上記（１）に記載の通信装置。
（３）
前記送受信部は、
前記他の通信装置に対して書き込まれるライトデータを送信し、
前記ライトデータの後に前記他の通信装置に送信するプリアンブルの１ビット目の値と２ビット目の値とが反転するように駆動する
上記（１）または（２）に記載の通信装置。
（４）
前記送受信部は、
前記他の通信装置に対して書き込まれるライトデータを送信し、
前記ライトデータの後に前記他の通信装置に送信するプリアンブルの１ビット目の値と２ビット目の値とで２回同じ値を送信するように駆動する
上記（１）または（２）に記載の通信装置。
（５）
前記送受信部は、前記プリアンブルによって、そのプリアンブルに続いてCRC（Cyclic Redundancy Check）およびデータのどちらを送信するかを指定する
上記（１）から（４）までのいずれかに記載の通信装置。
（６）
前記送受信部は、前記プリアンブルに対して冗長性を持たせるための１ビットのプレパレーションビットを送信する
上記（１）から（５）までのいずれかに記載の通信装置。
（７）
前記送受信部は、前記プレパレーションビットの２ビットおよび前記プリアンブルの１ビットを用いて、同一の信号を２回送信する
上記（６）に記載の通信装置。
（８）
前記送受信部により、次に送信するデータのタイプを指定するプリアンブルが受信されて、そのプリアンブルに続いて受信された信号のビット列と、前記プリアンブルにより送信されることが指定されたタイプにおいて送信されるべきビット列とを比較することにより、エラーの発生を検出するエラー検出部と、
前記エラー検出部によりエラーの発生が検出された場合、前記プリアンブルに続いて所定ビット数に応じたクロックを送信した後に、通信を途中で遮断することを指示するアボート信号を送信するように、前記送受信部に対する指示を行うコンフリクト回避部と
をさらに備える上記（１）から（７）までのいずれかに記載の通信装置。
（９）
前記送受信部から送信された信号を受信した前記他の通信装置から送信されてくる受信確認信号および非受信確認信号のいずれかを検出する確認信号検出部と、
前記確認信号検出部により前記非受信確認信号が検出されたとき、前記非受信確認信号に続く所定数のビットを無視した後に、通信を途中で遮断することを指示するアボート信号を送信するように、前記送受信部に対する指示を行うコンフリクト回避部と
をさらに備える上記（１）から（８）までのいずれかに記載の通信装置。
（１０）
前記エラー検出部は、前記データに含まれている２ビットのパリティのうち、一方を偶数パリティとし、他方を奇数パリティとして、前記送受信部が受信したデータに対するパリティチェックを行うことでエラーの発生を検出する
上記（８）に記載の通信装置。
（１１）
前記送受信部は、前記他の通信装置がデータ信号線に対する駆動を行って送信するCRC（Cyclic Redundancy Check）ワードの受信直後のビットから、前記データ信号線に対する駆動を行う
上記（１）から（１０）までのいずれかに記載の通信装置。
（１２）
前記送受信部は、通常の転送レートでデータ通信を行うSDR（Standard Data Rate）モード、および、SDRモードよりも高い転送レートでデータ通信を行うHDR（High Data Rate）モードで、信号の送受信を行うことができる
上記（１）から（１１）までのいずれかに記載の通信装置。
（１３）
前記送受信部は、１ビットずつ逐次的にシリアルデータを伝送するデータ信号線、および、所定の周波数のシリアルクロックを伝送するクロック信号線の２本の信号線を介して通信を行う
上記（１）から（１２）までのいずれかに記載の通信装置。
（１４）
前記送受信部、I3C（Improved Inter Integrated Circuit）の規格に準じた通信を行う
上記（１）から（１３）までのいずれかに記載の通信装置。
（１５）
他の通信装置と信号の送受信を行う送受信部により、
前記他の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
ステップを含む通信方法。
（１６）
他の通信装置と信号の送受信を行う送受信部により、
前記他の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
ステップを含む通信処理をコンピュータに実行させるプログラム。
（１７）
バスにおける制御の主導権を有する第１の通信装置と、
前記第１の通信装置による制御に従って通信を行う第２の通信装置と
を備え、
前記第１の通信装置が、前記第２の通信装置と信号の送受信を行う送受信部を備え、
前記送受信部は、
前記第２の通信装置から読み出されるリードデータを受信し、
前記リードデータの後に送受信されるプリアンブルの２ビット目に対する駆動を常に行う
通信システム。
【０１６１】
なお、本実施の形態は、上述した実施の形態に限定されるものではなく、本開示の要旨を逸脱しない範囲において種々の変更が可能である。
【符号の説明】
【０１６２】
１１  バスＩＦ，  １２  マスタ，  １３  スレーブ，  １４−１  データ信号線，  １４−２  クロック信号線，  ２１  送受信部，  ２２  エラー検出部，  ２３  確認信号検出部，  ２４  コンフリクト回避部，  ３１  送受信部，  ３２  エラー検出部
【図１】
2017207934.tif 000003
【図２】
2017207934.tif 000004
【図３】
2017207934.tif 000005
【図４】
2017207934.tif 000006
【図５】
2017207934.tif 000007
【図６】
2017207934.tif 000008
【図７】
2017207934.tif 000009
【図８】
2017207934.tif 000010
【図９】
2017207934.tif 000011
【図１０】
2017207934.tif 000012
【図１１】
2017207934.tif 000013
【図１２】
2017207934.tif 000014
【図１３】
2017207934.tif 000015
【図１４】
2017207934.tif 000016
【図１５】
2017207934.tif 000017
【図１６】
2017207934.tif 000018
【図１７】
2017207934.tif 000019