Armadilloフォーラム

Armadillo-X1 i2c プルアップ

kimizuka

2020年4月23日 18時26分

製品:Armadillo-X1
内容:
お世話になっております。

Armadillo-X1 のCON8に弊社製ボードを拡張してi2c1(pin#20,21), i2c2(pin#22,23)でI/Fしよう考えています。
Armadillo-X1の回路図情報がないため確認したいのですが、弊社製ボード側にi2c信号用プルアップ抵抗を
接続する必要がありますでしょうか?
また、電源投入時のGPIO設定のプルダウン抵抗と干渉は問題ないでしょうか?

以上、ご教授のほどよろしくお願いいたします。
Kimizuka

コメント

at_makoto.sato

2020年4月27日 10時33分

佐藤です。

> Armadillo-X1 のCON8に弊社製ボードを拡張してi2c1(pin#20,21), i2c2(pin#22,23)でI/Fしよう考えています。
> Armadillo-X1の回路図情報がないため確認したいのですが、弊社製ボード側にi2c信号用プルアップ抵抗を
> 接続する必要がありますでしょうか?
接続する必要があります。

> また、電源投入時のGPIO設定のプルダウン抵抗と干渉は問題ないでしょうか?
接続するプルアップ抵抗の抵抗値を10k以下としていただくと問題ありません。

kimizuka

2020年8月6日 14時28分

お世話になっております。
いくつか確認したいことがあります。

> 佐藤です。
>
> > Armadillo-X1 のCON8に弊社製ボードを拡張してi2c1(pin#20,21), i2c2(pin#22,23)でI/Fしよう考えています。
> > Armadillo-X1の回路図情報がないため確認したいのですが、弊社製ボード側にi2c信号用プルアップ抵抗を
> > 接続する必要がありますでしょうか?
> 接続する必要があります。
>
> > また、電源投入時のGPIO設定のプルダウン抵抗と干渉は問題ないでしょうか?
> 接続するプルアップ抵抗の抵抗値を10k以下としていただくと問題ありません。

現在プルアップとして10kΩを接続しておりますが、波形をみるとかなりなまっていて
時折 "No such device or address" というエラーが発生してスレーブアドレスが上手く
認識されていないと考えられます。
そこで、プルアップ抵抗の下限は何Ωまででしょうか? つまりオープンドレインのシンクは何mA
まで引けるのでしょうか?
あと、i2Cを割り当てたピン(20~23)にプルアップ抵抗の設定はデバイスツリー等で可能でしょうか?

i.MX7Dのデータシート等見ても特にオープンドレインバッファの仕様が記載されていないようなので
ご教授のほどよろしくお願いいたします。

kimizuka

at_yo.iwasaki

2020年8月20日 11時22分

岩﨑です。

> 製品:Armadillo-X1
> 内容:
> お世話になっております。
>
> Armadillo-X1 のCON8に弊社製ボードを拡張してi2c1(pin#20,21), i2c2(pin#22,23)でI/Fしよう考えています。
> Armadillo-X1の回路図情報がないため確認したいのですが、弊社製ボード側にi2c信号用プルアップ抵抗を
> 接続する必要がありますでしょうか?
> また、電源投入時のGPIO設定のプルダウン抵抗と干渉は問題ないでしょうか?
>
> 以上、ご教授のほどよろしくお願いいたします。
> Kimizuka
>

>オープンドレインのシンクは何mA まで引けるのでしょうか?
>プルアップ抵抗の下限は何Ωまででしょうか?
接続しているパッドのDrive Strength の設定によって決まります。
データシートのTable 29の” High-level output voltage ”、” Low-level output voltage ”にポートへの入出力電流値が記載されており、
この各値がドライブストレングスの各設定の場合のものと考えられます。
●例(VOHの場合)
・IOH= -1.8mA → Drive Strength=X1の時
・IOH= -3.6mA → Drive Strength=X2の時
・IOH= -7.2mA → Drive Strength=X4の時
・IOH= -10.8mA → Drive Strength=X6の時
この記載に従う場合、最大電流値は-10.8mA( Drive Strength=X6 の場合)となります。
よって、VOHとVOLを
0.8×OVDD <= VOH <= OVDD、 0<=VOL<= 0.2×OVDD
の範囲で使用する場合、プルアップ抵抗の下限は
3.3/0.0108≒300Ω
となります。

I2C1のSDA,SCLパッドの Drive Strength (DSE)の値は以下のレジスタの設定で変更できます。
・SW_PAD_CTL_PAD_I2C1_SCL SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_I2C1_SCL)
 [3033_03B8h]
・SW_PAD_CTL_PAD_I2C1_SDA SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_I2C1_SDA)
[3033_03BCh]
レジスタの詳細は以下のi.MX7Dのリファレンスマニュアルを参照して下さい。(※登録が必要です)
https://www.nxp.com/webapp/Download?colCode=IMX7DRM

レジスタの値はデバイスツリーから変更が可能です。
方法は後述します。

>あと、i2Cを割り当てたピン(20~23)にプルアップ抵抗の設定はデバイスツリー等で可能でしょうか?
Drive Strength と同様に以下のレジスタの値を変更することにより、SDA,SCLの内部プルアップ/プルダウンの設定を変更することができます。
・SW_PAD_CTL_PAD_I2C1_SCL SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_I2C1_SCL)
 [3033_03B8h]
・SW_PAD_CTL_PAD_I2C1_SDA SW PAD Control Register (IOMUXC_SW_PAD_CTL_PAD_I2C1_SDA)
[3033_03BCh]

◆上記のレジスタをデバイスツリーから変更する方法
https://manual.atmark-techno.com/armadillo-x1/armadillo-x1_product_manu…
https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-st…
を参考にしてください。
今回の用途でしたら
arch/arm/boot/dts/armadillo_x1-i2c1_lm75b.dts
を編集してlinuxカーネルをビルドすれば設定を反映したデバイスツリーを作成できます。
●例
SCL, SDA を5kプルアップ、 Drive Strength=X6に設定する場合、
19、20行目を
MX7D_PAD_I2C1_SCL__I2C1_SCL 0x4000007f →  MX7D_PAD_I2C1_SCL__I2C1_SCL 0x4000003f
MX7D_PAD_I2C1_SDA__I2C1_SDA 0x4000007f →  MX7D_PAD_I2C1_SDA__I2C1_SDA 0x4000003f
に変更することによって実装可能です。