Renesas Synergy™

FAQ 1006567 : ソフトウェアでI2Cバスのスレーブ機能の検討(78K0S/Kx1+)

ソフトウェアでI2Cバスのスレーブ機能を実現する場合のハードルとなるのは、以下の点が考えられます。
スタート・コンディション/ストップ・コンディションの検出
SCLに対するリード/ライトのタイミング遅延
ビット処理時間
バイトの切れ目(9クロック目の後)での処理
複数スレーブで非選択時のバスの無視

①については、専用のハードウェアがないので、常に監視することはできません。転送を起動するときにスタート・コンディションを検出するのと、処理途中のデータとデータの切れ目のところ(転送の9クロック目が完了したタイミング)で確認する程度になります。転送開始を検出する場合にも、ベクタ割り込み応答になってしまうので、割り込み応答時間+その後の確認までの時間を合わせて最低でも3μS(8MHzで動作するとした場合)程度必要になります。このことは、他の割り込みを処理していて1μS以上割り込みが保留になった場合には間に合わなくなることを示します。転送中のデータの切り目(通常のストップ・コンディションやリスタートのタイミング)についてもほぼ同じような時間が必要と考えると、どんな条件をつけてもファースト・モードの0.6μSの規格には対応は不可能で、標準モードのみへの対応となります。ファースト・モードに対応できる可能性があるのはV850ES以上の製品と考えられます。



②についてはSCLの立ち上がりからデータを取り込む時間の制限が厳しいと考えられます。これについては、同じポートの異なるビットを用いて同時に読み出すことで、SDAとSCLの関係は確保できますが、処理時間でのネックが予想(1回の確認を行なうループがポートのリード+ビット判定での分岐で12クロック必要、2回目で確認できたとすると24クロック:3μS必要となる)されます。これに関しては、通信速度を落とすことでSCLの幅を確保する必要があります。さらに、スタート・コンディションだけを割り込みで検出し、その後のデータのやり取りはシーケンシャルに処理し、全ての処理が完了したら割り込みから復帰するような対応が必要となります。これらの対策により、標準モードには何とか対応可能と考えられます。

③ビットデータの処理については②の条件が満足できれば処理できる可能性があります。ただし、単純に処理したのでは、アドレスに対するACK応答に関してはウェイトを使って処理する可能性があるので、スレーブからのウェイト機能をサポートしていない78K0R/Kx3のシリアル・アレイ・ユニットの簡易I2C機能では単純には接続できない可能性があります。この場合には、ウェイトをかけなくて済む程度の転送速度(標準モードには何とか対応可能)にしたり、必要な処理をいくつかに分割したりしてSCLの変化確認の間に分散して処理する必要があります。

④基本的にはここで以下に示すように、次のデータ/リスタート(スタート・コンディション)/ストップ・コンディションの3つの状態が考えられます。これらの判定を行う必要があるので、一番のボトルネックになると考えられるところです。信号の確認がソフトウェア処理で、確認間隔が広い(10~12クロック)ため、リスタートの場合(と判断した場合)には、その後にストップ・コンディションが来ることも考えられます。



これらを考慮して、その前のウェイト状態(78K0R/Kx3のシリアル・アレイ・ユニットの簡易I2C機能を使っても通信と通信の切れ目なので次の通信を起動しない限りはウェイト状態になるはず)で何処まで前処理を行えるかが鍵になります。従って、スレーブからのウェイト機能をサポートしていない78K0R/Kx3のシリアル・アレイ・ユニットの簡易I2C機能でも単純にデータとデータの間隔がスレーブからウェイトをかけなくて済む程度にする必要があります(通常、マスタ側では、9クロック目のSCLが立ち下がったタイミングで割り込みが発生し、そこからACKを確認したり、受信したデータの処理をしたりするので、ここで1クロック分は間が空くと考えられます)。

⑤これが、全体の処理のボトルネックになる可能性の高い部分です。SCL毎に割り込み処理を行うと、他の処理ができなくなる可能性が十分にあります。そのため、SCLでの割り込みは行わず、スタート・コンディション検出のためにSDAの立ち下がりエッジを検出します。この場合には他のスレーブとの通信中のデータの変化で割り込みが入ることから通信状況をうまく管理できなくなります。そのため、シングル・マスタ、シングル・スレーブでの動作に制限する必要があります。

以上の結果をまとめると、以下のようになります。

 

・標準モード(通信クロックを100kHz以下)

・シングル・マスタ(想定外のタイミングでのストップ・コンディションが出ない)

・シングル・スレーブ(通信中以外に不要な信号変化がない)

・通信途中(8ビット目まで)でスタート・コンディションやストップ・コンディションが発行されない(通信前か9クロック目が完了した後のみで発行可能)

・他の割り込みは使用しない(割り込み応答の余裕が1μSしかないため)


以上の条件をつけることで、実現は可能と考えられます。

この条件を加味した具体的な検討については、「ソフトウェアでI2Cバスのスレーブ機能の実現について」を参照してください。

 

適用製品

78K0S/Kx
他にご質問がございましたら、リクエストを送信してください