Armadilloフォーラム

Armadillo-640 CN11(フレキ)に割り当てたI2C3が動作しない

shosa2k

2020年9月16日 16時33分

 お世話になっております。 星野と言います。

 Armadillo-640をkernel 4.14-at23で使用しています。

 at-dtwebを使用して以下の割り当てでdtbを作成しました。
   CN9-3  uart1
   CN9-5  uart1
   CN11-8  UART4
   CN11-11 UART4
   CN11-12 PWM5
   CN11-13 I2C3
   CN11-14 I2C3
   CN11-15 PWM3
   CN11-16 PWM4
   CN11-34~37 ADC1
   CN11-44~47 ECSPI1
   CN11-48 I2C2
   CN11-49 I2C2

 状況として
   ○I2Cデバイスは作成されています
     /dev/i2c-1
     /dev/i2c-2
   ○I2C2は/dev/i2c-1を通して、接続したキャラクタLCDの制御ができました
   ○I2C3はi2ctoolsで i2cdetect -y 2 を実行してもCN11-14(SCL)にクロックが出ません
    検出デバイス無しでコマンドは正常終了します
   ○作成されたdtsiを見直しても問題は無いように思え、i.MX6のIOMUXCの当該レジスタを
    見たところI2C3はCN11に割り振られているようです

問題1
   I2C3の動作を邪魔するドライバが組み込まれているとしたら、探す方法はあるでしょうか。

問題2
   I2C3が動作しない状況ですが、
      SCL Hi
      SDA Lo
   となっています。
   Armadillo-640マルチプレクス表を見るとCN11-13(SDA)は10kΩでPull-Downとなっています。
   I2C3が動作したとして、SDAがアイドルでLoはまずいかと思いますがいかがでしょうか。

 申訳ありません、ご協力お願いいたします。

コメント

at_akihito.irie

2020年9月17日 16時40分

入江です。

>    Armadillo-640マルチプレクス表を見るとCN11-13(SDA)は10kΩでPull-Downとなっています。
>    I2C3が動作したとして、SDAがアイドルでLoはまずいかと思いますがいかがでしょうか。
仰るとおり、CON11-13は10kΩでpull downされています。
そのためI2Cの波形がなまったり、Highまで電圧が上がりきらずにI2C通信が
できないため、デバイスの検出にも失敗している状態だと考えられます。

CON11-13を使用してI2C通信を行いたい場合は、消費電力は増加しますが
CON11-13の信号を外部で2kΩ程度でpull upすることで可能です。

CON11-13を使用しない対処法としましては、
- (スレーブアドレスが重複しないのであれば)I2C2に複数のデバイスをぶら下げる
- i2c-gpioドライバを用いて、pull downされていないピンをI2Cとして動作させる
- 他のI2Cの信号線を使用する
ことが挙げられます。

マルチプレクス表は、対象のピンが機能としてI2Cに切り替えられるというこ
とを示しているだけですので、今回のようにそのままではI2Cとして使用で
きない場合があります。

shosa2k

2020年9月23日 13時31分

 いつもお世話になっています、星野です。

 情報ありがとうございます。
 1.5kでプルアップしたところ、I2C3の制御ができデバイスを認識しました。

 SDAがLoだとドライバはI2Cがビジーと認識して動作しなかったのではないかと思われます。

 下記のどれを採用するか検討いたします。
   ○I2C3を使用し、外部でプルアップする
   ○I2C2に同居する
   ○I2C-GPIOを使用する

at_akihito.irie

2020年9月23日 13時48分

入江です。

大変申し訳ございませんが、CON11の13ピンはBOOT SELECT用のピンとなっており、
pull downにしておくべきピンでした。
pull upしても大きな影響はございませんが、該当のピンはpull downのままご使用
ください。

つきましては、
>    ○I2C2に同居する
>    ○I2C-GPIOを使用する
のどちらかの方法をとっていただければと思います。

マルチプレクス表は今後誤解の無いよう後日修正する予定です。

動作を確認された所申し訳ございませんでした。