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

下村智範 email@hidden
2011年 5月 11日 (水) 19:09:53 JST


To : 竹之下様

お世話になっております。
下村です。

> 同じ操作をして、エラーの内容が変わったということは、
> やはりハードにも何か問題が発生していたのですね。
そのようです。
環境はmicroSDにカーネルもユーザーランドも配置しておりますので
まったく同じ環境で動作させております。
ハードに問題があったことは間違いないかと思います。


> Bus Arbitration lostが発生するのは、
> マスタがSDAをHighにドライブしてるのに、SDAがLowになっていた
> (つまり、スレーブがSDAをLowにドライブしていた)
> という場合です。
>
> 言い換えると、スレーブが動作してはいけないタイミングで動作
> してしまった場合に、Bus Arbitration lostが発生します。
独自機器を繋いでいない状態でBus Arbitration lostが発生するということは
SDAが常にLowになってしまっているということになりますでしょうか。


> "アルマジロの仕様書のI2Cのサンプルコードと同じシーケンス"
> とは、何のことを指していますか?
以前教えていただいた、「Armadillo実践開発ガイド 第3部」にあるI2Cのサンプルです。


> "(3)では通信が行えるはず"とありますが、
> "独自機器用のドライバもKernelへ追加。"されているので、
> それが何か邪魔をしている可能性があります。
(1)、(2)でも同様のエラーが発生していることから、独自機器の影響だけとは考え難い状況です。
また、独自機器用のドライバは、標準で用意されている「mxc_i2c.c」をそのまま利用しています。
「mxc_i2c.c」を利用するために、アプリは用意していますが、実装している内容は
「Armadillo実践開発ガイド 第3部」にあるI2Cのサンプルとほぼ同等です。


> まずは、Android対応でもない、
> "独自機器用のドライバもKernelへ追加。"もしていない、
> 標準のままのカーネルで動作確認してください。
こちらは現在ビルド環境を準備中です。


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


> 今回の(3)のケースでは、RTCに対する読み出し要求の際に、Bus Arbitration Lost
> が発生している(つまり、動いてはいけないスレーブが動いてしまっている)という
> 状況です。アドレスが重複していないかについても、再度ご確認ください。
ログを見ていただければわかると思いますが、アドレスは重複していません。
また、独自機器を繋いでいない状態でもBus Arbitration Lostが発生しております。((1)、(2)のログです)
これはどう解釈すればよろしいでしょうか。


独自機器をアルマジロへ接続していない状態で、I2Cを動かそうとした場合
Bus Arbitration Lostではなく、「応答なし」や「タイムアウト」のエラーが
発生すると予測しておりました。
I2CのステータスレジスタにBus Arbitration Lostが立っているので
I2Cのスタートシーケンスさえ動いていないと思われます。


以上、よろしくお願いいたします。


2011年5月11日16:34 Takenoshita Koyo <email@hidden>:
> 下村智範 さんは書きました:
>> 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 mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>



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