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

g-kihara email@hidden
2011年 5月 12日 (木) 12:53:23 JST


下村 様

>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 メーリングリストの案内