HOME > ソフテックだより > 第113号(2010年5月12日発行) 技術レポート「IICバス通信ドライバのデバッグ」

「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。

ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ


ソフテックだより 第113号(2010年5月12日発行)
技術レポート

「IICバス通信ドライバのデバッグ」

1. はじめに

ソフテックだより第79号「I/Oポートを使用したIICバス通信の実現方法について」で、IICバス通信の通信例について説明されています。
本号では、私が担当したCPUのIICバスインタフェースを使ったドライバソフト開発を例として、紹介します。

2. IICバス通信とは

IICバス通信は、フィリップス(PHILIPS)社で開発した同期式のシリアル通信の規格で、複数のEEPROMやLCDドライバ(スレーブ)を接続することができます。
一般的に、通信は基板内などの近距離のものに使われます。また、I2Cと書くこともあります。

信号線は、シリアルクロック線(SCL)と、シリアルデータ線(SDA)があります。
この2線だけで、制御側(マスター)と、IC(スレーブ)の通信を行います。
スレーブは、個別のアドレスがあり、それを元にひとつのマスターと複数のスレーブとで通信を行います。

SCLは、同期をとるための信号線でマスター側から出力します。
SDAは、個別のデバイスアドレス、リード/ライトの区別、デバイス内のメモリーアドレス、実際のデータ、といった形式になります。

実用例

IICバス通信は、主に以下の用途で使われます。

  • EEPROM
  • D/Aコンバータ
  • A/Dコンバータ
  • LCD表示
  • LED表示

3. 構成

担当したドライバソフト開発では、図1の構成で、EEPROMとIICバス通信を行いました。
マスターを起動して、EEPROMからデータを読み込んで、そのデータをアプリケーションの設定値として使います。
また、アプリケーションの動作中に設定値の変更がある場合、変更後のデータをEEPROMに書き込みます。

開発時の構成
図1. IICバス通信の構成

4. IICバス通信の実現

CPUのIICバスインタフェースを使って、実現する場合、スタート、リード・ライト指定、ストップなどの手順、動作をレジスタの設定により、簡単に行えます。その他にレジスタの設定で行えるものは、マスター・スレーブの設定、送信・受信設定、通信速度があります。

EEPROMのドライバは、IICバス通信を行っている部分の上位に、EEPROMのデータの読み書きを管理する部分を追加して、2重の構成として、ドライバを使うアプリケーションは、データの読込みと書込みだけを行う構造にしました。
ドライバのデバッグでは、プログラムの確認だけでなく、ロジックアナライザで通信波形の確認も行います。
以降にプログラムと通信波形を並行して、確認を行うメリットについて、紹介します。

デバイスドライバの構造
図2. EEPROM I/Fの構成

5. 通信波形の確認

デバッグ、テストする際は、レジスタ値だけでなく、通信データの確認のため、SDA, SCLの波形確認も行います。
SDAとSCLの状態をロジックアナライザにモニタして、実際にマスタ-スレーブ間で流れているデータの確認をしながら、プログラムとハードの確認をします。
レジスタ値と実測波形を個別で見るだけでなく、比較しながら確認を行いますので、問題があるときには、ハードとソフトで問題を切り分けることができます。
特に、基板が開発中の場合、回路に問題がある場合も十分にありえるため、基板のチェックという意味でも大切な作業です。

通信時のSCL信号とSDA信号の波形
図3. SCL, SDA 計測波形
上:SCL, 下:SDA

データの送受信ができることを確認してから、通信速度の設定値とSCL信号の波形を比較しました。
設定速度156kbpsに対して、実測値78kbpsでしたので、半分の速度でしか通信していませんでした。
レジスタの設定に問題ないことを確認して、SCL信号のアナログ波形とデジタル波形を計測することにしました。

6. 通信速度の計測

6-1. SCLのアナログ波形とデジタル波形の計測

ビット同期した場合のSCL信号SCL信号のアナログ波形とデジタル波形
図4. ビット同期回路SCL 計測波形
上:アナログ波形、下:デジタル波形(1.00V 2.00μs)

上記の実測波形から以下のことが分かります。

アナログ波形

電圧が上がりきるまでに時間がかかっています(立ち上がりが遅い)。
ONの時間がOFFの時間の約3倍になっています。

デジタル波形

アナログ波形が上がりきるまでをLowとして、そこから0Vに落ちるまでHighとしています。

結果としては、本来出力するべきタイミングにSCLが追従(同期)できずに、次のタイミングでクロックのHighを検出して、通信を行っていました。
それでも通信ができる理由をCPUマニュアルで調べたところ、使用したマイコンには、ビット同期機能という機能があり、その機能が働いていました。

動作は、図3の場合、CPUがクロックをHighにしてから、約1uS後に出力状態をチェックし、High判定の値(スレッショルド値:2.50V)に達していなければ、クロックが出ていないと判断して、次のクロック出力タイミングまで出力を継続します。
信号を見ると、CPUがクロックをHighにしてから、約1uS後には1.4Vまでしか到達出来ていないため、次のクロックタイミングに出力状態を再チェックしています。

アナログ信号の立ち上がり時間は、以下の式で計測できます。

[立ち上がり時間(時定数)] = [静電容量] × [プルアップ抵抗の抵抗値]

対策としては、静電容量が一定のため、プルアップ抵抗の抵抗値を22kΩから2kΩに下げて、立ち上がり時間を短くすることにしました。

6-2. ビット同期回路

図4の実測波形で働いているビット同期機能の概要は、以下の通りです。
SCL(クロック)を出力した後で、実際の出力状態をチェックし、出力されていなければ、次のクロック出力タイミングまで、出力状態を保持します。

ビット同期した場合のSCL信号
図5. ビット同期回路

7. 終わりに

広く使われているIICバス通信ですが、今回のようにIICバスインタフェースを使う場合やIICバスインタフェースを使わずI/Oポートを使用する場合など実現方法はいくつかあります。また、ビット同期回路のように、回路を補助する機能があり、それぞれの機能を考えて、正しく使う必要があります。

(T.M.)

[参考文献]
ルネサス32ビットRISCマイクロコンピュータ SH7080グループ ハードウェアマニュアル

関連ページへのリンク

関連するソフテックだより

ページTOPへ