I2CセンサードライバーのFAQ
Q1.どの様な値を設定すれば良いか?教えて頂けますか?
A1.設定するパラメータの値は、ご自身でData-Sheetをご覧頂き、最適なパラメータを選択して設定して下さい
当社では、設定パラメータの値についてのご質問、I2Cデバイスに関するご質問はお受けできません。
I2Cデバイスを提供するメーカーにお聞き下さい。
Q2. 2bit構成のレジスタで00、01、10の3種類の設定が有ります。11の設定範囲外をプロパティに設定した場合
エラーが返ってきますか?
A2. エラーは戻りません。そのまま書込みますので、I2Cデバイスの動作は不定です。I2Cデバイスは日々進化しており
いつ、同一デバイスの改良版が開発され、現在未定義の設定が新機能の為に割り当てられるか解りません。
改良版のデバイスで未定義部分の利用を開始した場合、エラー処理をするとI2Cセンサードライバーの対応版に
入れ替える必要が発生します。その為エラー処理はせず、設定値変更のみで対応可能とする為です。
Q3. プロパティへ値の代入とメソッドのWriteの組み合わせに成っていますが、プロパティへの代入を全て終えた後
Writeメソッドを一回のみの実行ではダメなのでしょうか?
A3. 基本は、一つのプロパティに代入したら、Writeメソッドを1回実行のペアで利用して下さい。
I2C通信は、決して高速通信で有りません。全てのプロパティを設定後に一回のWriteメソッドで一括設定の方法に
するとWriteメソッドでレジスタの数分のI2C通信が発生します。
つまりレジスタが20個あれば20回の通信を行う事となりますが、逆に一個しかプロパティを変更しない場合でも
Writeメソッドでは20回の通信が発生してしまいます。これは無用の通信で全体のパフォーマンスを大きく低下させます。
この為、基本的には一個のプロパティ変更で一回のWriteで通信1回とし、最小限のパフォーマンス低下に抑えています。
Q4. 動作中にプロパティの値の変更する為、値を変更しWriteメソッドで書き込むと全く異なる動作になります。
変更したいプロパティ以外のレジスタの内容が変更されてしまっている様です。
A4. 一度、該当するレジスタの設定値をReadメソッドで読み出し、変更したいプロパティに新たな値を設定しWriteメソッドで
書き込んで下さい。I2Cセンサードライバーでは過去に設定した値は保持していません。
これは、マルチマスタ方式で接続した場合、どのCPUでもレジスタの内容を変更可能である事から、I2Cデバイスのみが
最新の設定内容を持っています。その為、最新の設定情報をReadし、変更点があれば変更点と一緒に、再度最新の設定内容
を合わせて書込みする必要があるからです。
万が一、過去の設定情報を保持しており書き込んだ場合、最新のレジスタの設定内容が、過去に保持されていた設定情報に上書き
されてしまう為です。
Q5. Readメソッドで読み出したセンサーの値の単位が解りません。変な数値が戻って来ます。
A5. I2Cセンサードライバーでは、スケーリング等の処理を行わずに、レジスタの内容の生データを、そのまま10進数で返します。
ご利用の環境に合わせてスケーリング処理等を行って下さい。ご利用環境で小数点以下の処理で切り捨てや四捨五入、有効桁等
様々ニーズに対応する為です。
Q6. Readメソッドで読み出したデータが安定しません。データのバラツキが大きいです。
A6. I2Cセンサードライバーでは、I2Cデバイスのレジスタの内容をそのまま返しており、平均化等の処理は一切行っていません。
レジスタのデータが安定していない。I2C通信でノイズが混入してBit化けが発生している等が考えられます。
このケースでは、その環境がシステム利用に適していないと言う事です。通常では大きなバラツキ等は発生しません。
配線の長さや周囲のノイズ環境の改善や、シールド線を使う、ツイストペア線を使う、電源を強固な物に変える等の
ハード面の整備を行い、極力安定したデータを得られる環境整備を行った後に、最後の手段として異常なデータの切り捨て
平均化等の処理等を開発するアプリケーションで行って下さい。
環境は自然と劣化して行きますが、自然と改善はしません。
Q7. I2C通信が途中でハングアップします。
A7. ハード的なトラブルです。I2C規格ではI2Cバスの全体容量で400pF以内を規定しています。接続できるケーブルの長さは
数十Cmが限界です。(そもその、プリント基板内での配線を想定しています)配線を短くする。接続するデバイスの数を少なく
する等の対策と、ノイズが少ない環境にする。ノイズに強い環境を作る事が必要です。
10m,20mとデバイスを延長して接続したい場合は、PCA9600D等のI2Cバスドライバー等を利用すると4000pFの負荷
容量に対応可能です。
また、電源容量不足での電圧が不安定になっているケースも考えられます。必要の無いデバイスや周辺機器を最小限で行って
みて下さい。(Raspberry PiのGPIO端子の総電力供給量は16mAです)
ケーブル延長を検討の方への参考資料
I2Cバス仕様書 http://www.nxp.com/documents/user_manual/UM10204_JA.pdf
PCA9600D http://www.nxp.com/documents/data_sheet/PCA9600.pdf
ロングバス構築 http://www.nxp.com/documents/application_note/AN11084.pdf
フォトアイソレーション http://www.nxp.com/documents/application_note/AN10364.pdf
バスエクステンダー http://www.nxp.com/documents/application_note/AN10710.pdf