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はまずいかと思いますがいかがでしょうか。
申訳ありません、ご協力お願いいたします。
コメント
shosa2k
at_akihito.irie
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として使用で
きない場合があります。