[Armadillo:07206] Re: [Armadillo-440] I2C通信で失敗する

Takenoshita Koyo email@hidden
2011年 5月 11日 (水) 16:34:52 JST


下村智範 さんは書きました:
> To : 竹之下様
> 
> お世話になっております。
> 下村です。
> 
> 代替機を用意していただきましたので、代替機で動作確認を行いました。
> 
> 結果、エラーの内容が少し変わりましたが、I2C通信が行えない現象は
> 変わりませんでした。
同じ操作をして、エラーの内容が変わったということは、
やはりハードにも何か問題が発生していたのですね。

> I2C-1のOpen、スレーブアドレス設定までは、成功していますが
> Readしようとすると、エラーが発生します。
> エラーのタイミング的には、今までと同じです。
> (今までのエラー:Could not grab Bus ownership)
> 
> [エラー内容]
> <7>i2c-dev: i2c-1 reading 20 bytes.
> <7>i2c-adapter i2c-1: master_xfer[0] R, addr=0x22, len=20
> <7>Bus Arbitration lost
> <7>Data not transmitted
Bus Arbitration lostが発生するのは、
マスタがSDAをHighにドライブしてるのに、SDAがLowになっていた
(つまり、スレーブがSDAをLowにドライブしていた)
という場合です。

言い換えると、スレーブが動作してはいけないタイミングで動作
してしまった場合に、Bus Arbitration lostが発生します。

> 
> 
> 起動ログを取得しましたので、添付いたします。
> 
> (1)
> ・Test_at14_Normal_debuglog_console.txt
> ・Test_at14_Normal_debuglog_dmesg.txt
>     → DLした「linux-2.6.26-at14-android-20110419b.tar.gz」に
>      I2Cのデバッグログを出力するようにMenuconfigを
>      変更したKernelを使用。独自機器未接続。
> 
> (2)
> ・Test_at14_fts_debuglog_console1.txt
> ・Test_at14_fts_debuglog_dmesg1.txt
>     → DLした「linux-2.6.26-at14-android-20110419b.tar.gz」に
>      I2Cのデバッグログを出力するようにMenuconfigを
>      変更したKernelを使用。
>      独自機器用のドライバもKernelへ追加。
>      独自機器未接続。
> 
> (3)
> ・Test_at14_fts_debuglog_d5_console3.txt
> ・Test_at14_fts_debuglog_d5_dmesg3.txt
>     → DLした「linux-2.6.26-at14-android-20110419b.tar.gz」に
>      I2Cのデバッグログを出力するようにMenuconfigを
>      変更したKernelを使用。
>      独自機器用のドライバもKernelへ追加。
>      独自機器接続。
> 
> 
> アルマジロの仕様書のI2Cのサンプルコードと同じシーケンスで
> I2C通信を試みていますので、(3)では通信が行えるはずですが
> 「Bus Arbitration lost」が発生しております。
"アルマジロの仕様書のI2Cのサンプルコードと同じシーケンス"
とは、何のことを指していますか?

"(3)では通信が行えるはず"とありますが、
"独自機器用のドライバもKernelへ追加。"されているので、
それが何か邪魔をしている可能性があります。

まずは、Android対応でもない、
"独自機器用のドライバもKernelへ追加。"もしていない、
標準のままのカーネルで動作確認してください。

> 独自機器の方も回路図および実動作を点検していただき
> 問題ないと連絡をいただいております。
> アルマジロも代替機のため、正常だと思われます。
> しかし、この状態でBus Arbitration lostが発生しているため
> I2C通信を行うには、まだ何か設定が足りていないのでは
> ないかと考えておりますがいかがでしょうか。
> 
> 一点気になるところとしましては、RTCの初期化処理がやはり
> I2C-1に対して行われております。
> 液晶モデルは、I2C-1にRTCは繋がっていないと認識しておりましたが
> 初期化処理が行われておりますので、I2C-1に対して初期化を行う理由、影響も
> ご教授いただけませんでしょうか。
Armadillo-420とArmadillo-440を含む、Armadillo-400シリーズは汎用CPUボード
として設計されています。Armadillo-400シリーズ共通で使用できるオプション品
として、Armadillo-400シリーズRTCオプションモジュールという製品があります。

これを、Armadillo-420やArmadillo-440のCON14(I2C-1)に接続するだけで
RTCとして使えるようにするために、カーネルの初期化時にI2C-1の特定のアドレス
に対してリードを行います。もし、反応があればRTCオプションモジュールが接続
されているとみなします。

I2Cバスというのは、元々スレーブデバイスを複数接続できるバスですので、
RTC(S-35390A)が使用するアドレスと、"独自機器"が使用するアドレスが一致
しなければ、"独自機器"には何ら影響しないはずです。

今回の(3)のケースでは、RTCに対する読み出し要求の際に、Bus Arbitration Lost
が発生している(つまり、動いてはいけないスレーブが動いてしまっている)という
状況です。アドレスが重複していないかについても、再度ご確認ください。

-- 
Koyo Takenoshita




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