[Armadillo:05221] Re: 500FXでのI2Cデバイスドライバ

naosan email@hidden
2010年 5月 26日 (水) 18:50:16 JST


直江です。お世話になります。

本件、原因がわかりました。
恥ずかしながら?I2Cのスレーブアドレスがバッティングしてました。

500FXに搭載されているRTC(S-35390A)のスレーブアドレスは0x30
(下位3bitがコマンドになるので、結果x030~0x37)のようですが、
使おうとしていたデバイスもこれに該当するアドレスを有していて、
ちょうど重なる領域のアドレスを使用していました。

結果、I2Cバス1につながっているデバイスに対し、バス1の探索時
は正常に応答しているのですが、I2Cバス2の探索時、そこにつながって
いるRTCが応答してしまい、バス2にも該当デバイスが存在すると誤判断
してしまったようです。
(具体的にはi2c-core.cのi2c_probe_address()内でのデバイス有無チェックにて)

RTCの探索時は、バス1につながっているデバイスは自アドレスとは異なる
ため反応しなかったのでRTC自体は正常に起動できていたようです。

少々苦戦しましたが、おかげで少し知見を深めることができました。

教訓ですが、
・I2Cデバイスを使用する場合、バスのコントローラ(1、2、3)のいずれに
 つながっているかに関わらず、すべてのデバイスでスレーブアドレスが
 バッティングしていないことを確認すべし!
ということでした。



armadillo メーリングリストの案内