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

下村智範 email@hidden
2011年 5月 16日 (月) 16:39:18 JST


To : g-kihara様

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

スレーブ側のVDDは、3.3vで動作させているとのことでしたので
マスターと一致していました。

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


2011年5月12日12:53 g-kihara <email@hidden>:
> 下村 様
>
>>Armadilloよりも先に独自機器の電源をONし、ステータスを
>>逆に、Armadilloの方から電源をONした場合も見てみました。
>>電源をどちらから先に投入するかで若干結果が異なっています。
>
> スレッドを読み返して思ったのですが、
> この"独自機器"に大きな問題があるのでは?
> GNDについては、他の方に指摘を受けて共通にされたのでということでOK
> ですが、
> ひょっとして、VDDもマスターとスレーブで異なっているのでは?
>
> 以上
>
>
>
>
>
>
>
> (2011/05/11 19:09), 下村智範 wrote:
>> 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 mailing list
>> email@hidden
>> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>>
> _______________________________________________
> armadillo mailing list
> email@hidden
> http://lists.atmark-techno.com/cgi-bin/mailman/listinfo/armadillo
>



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