[Armadillo:07210] Re: [Armadillo-440] I2C通信で失敗する
Takenoshita Koyo
email@hidden
2011年 5月 12日 (木) 14:51:47 JST
竹之下です。
> 独自機器を繋いでいない状態でBus Arbitration lostが発生するということは
> SDAが常にLowになってしまっているということになりますでしょうか。
常に、かどうかはわかりませんね。
あくまで、マスタがSDAをHighにしたつもりなのに、実際にはSDAがLowになっていた
ということを示しているだけです。
信号線をオシロ等で見てみれば、どういう状況なのか、明らかになると思います。
>> "アルマジロの仕様書のI2Cのサンプルコードと同じシーケンス"
>> とは、何のことを指していますか?
> 以前教えていただいた、「Armadillo実践開発ガイド 第3部」にあるI2Cのサンプルです。
上記のサンプルは、ユーザーランドで動作するアプリケーションプログラム
ですが、これの実行結果はいただいていませんよね?
>> "(3)では通信が行えるはず"とありますが、
>> "独自機器用のドライバもKernelへ追加。"されているので、
>> それが何か邪魔をしている可能性があります。
> (1)、(2)でも同様のエラーが発生していることから、独自機器の影響だけとは考え難い状況です。
(1)、(2)でもエラーが発生しているのですか?
いただいたログを見た限りでは、エラーは発生していないように読めました。
どの行に問題がありましたでしょうか?
> また、独自機器用のドライバは、標準で用意されている「mxc_i2c.c」をそのまま利用しています。
mxc_i2c.cは、I2Cのバスドライバです。Armadillo-400シリーズでI2C機能を使う
場合は、全てこのドライバを使うことになります。
RTCやオーディオコーデックなどは、mxc_i2.cとは別に、それぞれのスレーブデバイス用
のドライバがあります。(スレーブデバイス用ドライバが、mxc_i2c.cの機能を呼び出す)
> 「mxc_i2c.c」を利用するために、アプリは用意していますが、実装している内容は
> 「Armadillo実践開発ガイド 第3部」にあるI2Cのサンプルとほぼ同等です。
「Armadillo実践開発ガイド 第3部」にあるサンプルは、スレーブデバイス用ドライバの
代わりに、ユーザーランドからmxc_i2c.cの機能を呼び出すものです。
(1)、(2)では、独自機器は接続していないとのことなのですが、
何を相手に通信しようとしたのでしょうか?
>> 今回の(3)のケースでは、RTCに対する読み出し要求の際に、Bus Arbitration Lost
>> が発生している(つまり、動いてはいけないスレーブが動いてしまっている)という
>> 状況です。アドレスが重複していないかについても、再度ご確認ください。
> ログを見ていただければわかると思いますが、アドレスは重複していません。
アドレスが重複しているかどうかは、"独自機器"の設定によるものなので、
ログからは分かりません。"独自機器"のアドレスは何に設定されていますか?
> また、独自機器を繋いでいない状態でもBus Arbitration Lostが発生しております。((1)、(2)のログです)
> これはどう解釈すればよろしいでしょうか。
上と重複しますが、(1)、(2)のログのどこでエラーが発生しているか教えていただけますか?
以上、よろしくお願いいたします。
--
Koyo Takenoshita
armadillo メーリングリストの案内