Armadilloフォーラム

Armadillo-440でI2C3をCON9で行いたい

arts-tech

2015年11月26日 18時52分

アーツテックラボの宮本です。
お世話になります。

Armadillo-440
linux-2.6-at13
atmark-dist-20101118
を使用しています。

表題の件について、I2Cの信号を配線しやすい場所から取るため、
CON9の22と23をマルチプレクスでI2C3にしようとしています。
CON14のI2C2は、同時にCANを使うために使用できません。

CON14のI2C2を有効にして接続すると正常に通信する環境を整え、
カーネルを変更したものに差し替えてテストしています。

下記のようにカーネルソースを変更しましたが、うまく動作しません。
MX25_PAD_CSI_VSYNC__I2C3_SDAのpad_ctrlの設定をどのように決めたらいいか分からず、
コメントアウトしたGPIOの設定をそのまま持ってきました。
あれこれ変えてみましたが、ポートは両方ともHで変化しませんでした。
また、他に変更しないといけない箇所があるのでしょうか?

何か分かりましたら教えて下さい。

よろしくお願いします。

[iomux-mx25.h]に追加
#define MX25_PAD_CSI_VSYNC__I2C3_SDA(pad_ctrl) IOMUX_PAD(0x33c, 0x144, 0x12, 0x528, 0, pad_ctrl)
#define MX25_PAD_CSI_HSYNC__I2C3_SCL(pad_ctrl) IOMUX_PAD(0x340, 0x148, 0x12, 0x524, 0, pad_ctrl)

[armadillo400_gpio.c]を変更
#if defined(CONFIG_ARMADILLO400_CON9_22_GPIO1_9)
//コメントアウト
// MX25_PAD_CSI_VSYNC__GPIO_1_9(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP),
#endif
#if defined(CONFIG_ARMADILLO400_CON9_23_GPIO1_10)
//コメントアウト
// MX25_PAD_CSI_HSYNC__GPIO_1_10(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP),
#endif

static struct pad_desc __maybe_unused armadillo400_i2c3_pads[] = {
#if defined(CONFIG_ARMADILLO400_CON11_48_I2C3_SCL)
//CON9 23に変更
// MX25_PAD_GPIO_A__I2C3_SCL(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_22K_UP | PAD_CTL_ODE),
MX25_PAD_CSI_HSYNC__I2C3_SCL(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP),
#endif
#if defined(CONFIG_ARMADILLO400_CON11_49_I2C3_SDA)
//CON9 22に変更
// MX25_PAD_GPIO_B__I2C3_SDA(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_22K_UP | PAD_CTL_ODE),
MX25_PAD_CSI_VSYNC__I2C3_SDA(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP),
#endif
};

static struct pad_desc __maybe_unused armadillo400_i2c3_gpio_pads[] = {
#if defined(CONFIG_ARMADILLO400_CON11_48_I2C3_SCL)
//CON9 23に変更
// MX25_PAD_GPIO_A__GPIO_A(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_22K_UP),
MX25_PAD_CSI_HSYNC__I2C3_SCL(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP),
#endif
#if defined(CONFIG_ARMADILLO400_CON11_49_I2C3_SDA)
//CON9 22に変更
// MX25_PAD_GPIO_B__GPIO_B(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_22K_UP),
MX25_PAD_CSI_VSYNC__I2C3_SDA(PAD_CTL_PKE | PAD_CTL_PUE | PAD_CTL_PUS_100K_UP),
#endif
};
//CON9 22-23に変更
//#define I2C3_CLK_GPIO GPIO(1, 0)
//#define I2C3_DAT_GPIO GPIO(1, 1)
#define I2C3_CLK_GPIO GPIO(1, 10)
#define I2C3_DAT_GPIO GPIO(1, 9)

以上

コメント

at_kojiro.yamada

2015年12月1日 13時54分

Armadillo-440の
CON9 22ピン(CSI_VSYNC)とCON9 23ピン(CSI_HSYNC)を
I2C3にマルチプレクスすることはできません。[1]

ですが、当該のピンをGPIOにマルチプレクスすれば、
I2C-GPIOとして利用することができます。

以下のコードが参考になるかと思います。
linux-2.6.26-at25/arch/arm/mach-mx25/armadillo_iotg_std.c::armadillo_iotg_std_gpio_i2c_init()
linux-2.6.26-at25/arch/arm/mach-mx25/armadillo400.c::armadillo460_init_ext_i2c()

[1] Armadillo-400シリーズ ハードウェアマニュアル CON9信号マルチプレクス - 「Armadillo-420/440」:
http://manual.atmark-techno.com/armadillo-4x0/armadillo-400_series_hard…

arts-tech

2015年12月2日 13時41分

アーツテックラボの宮本です。
ご回答ありがとうございます。

CON9の各ピンの割り当てを変える事(GPIOやVSYNCにする)は可能だが、VSYNCやHSYNCのモードを変える事は不可という事ですね。
理解しました。

I2C-GPIOも提案したのですが、内臓のI2Cを使用した製品(Armadillo-420で作成しました)が既に出荷されて実績があるため、
客先としてはそれを変えたくないとの事でした。

どうしても無理な場合はCON11のコネクタを作成する事も検討しているようなので、
今回の回答を伝えてみます。

ありがとうございました。