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)
以上
コメント
arts-tech
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…